ADOL-C-2.4.1/0000755000076600007660000000000012120272604011067 5ustar coincoinADOL-C-2.4.1/adolc.spec0000644000076600007660000001104212120123050013011 0ustar coincoin# spec file for package adolc (Version 2.4.1) # norootforbuild %define packver 2.4.1 Name: adolc Version: 2.4.1 Release: 0.1 License: GPLv2 or CPL Summary: Algorithmic Differentiation Library for C/C++ Url: http://projects.coin-or.org/ADOL-C Group: Development/Languages/C and C++ Source: %{name}-%{packver}.tar.bz2 Source1: ColPack.tar.gz BuildRequires: gcc-c++ libstdc++-devel BuildRoot: %{_tmppath}/%{name}-%{version}-build AutoReqProv: on %description The package ADOL-C (Automatic Differentiation by OverLoading in C++) facilitates the evaluation of first and higher derivatives of vector functions that are defined by computer programs written in C or C++. The resulting derivative evaluation routines may be called from C/C++, Fortran, or any other language that can be linked with C. The numerical values of derivative vectors are obtained free of truncation errors at a small multiple of the run time and randomly accessed memory of the given function evaluation program. %package -n libadolc1 Summary: Algorithmic Differentiation Library for C/C++ Group: Development/Languages/C and C++ %description -n libadolc1 The package ADOL-C (Automatic Differentiation by OverLoading in C++) facilitates the evaluation of first and higher derivatives of vector functions that are defined by computer programs written in C or C++. The resulting derivative evaluation routines may be called from C/C++, Fortran, or any other language that can be linked with C. The numerical values of derivative vectors are obtained free of truncation errors at a small multiple of the run time and randomly accessed memory of the given function evaluation program. %package devel Summary: Algorithmic Differentiation Library for C/C++ -- development files Group: Development/Languages/C and C++ Requires: libadolc1 = %{version} %description devel The package ADOL-C (Automatic Differentiation by OverLoading in C++) facilitates the evaluation of first and higher derivatives of vector functions that are defined by computer programs written in C or C++. The resulting derivative evaluation routines may be called from C/C++, Fortran, or any other language that can be linked with C. The numerical values of derivative vectors are obtained free of truncation errors at a small multiple of the run time and randomly accessed memory of the given function evaluation program. This package provides the development environment for adolc %package doc Summary: Algorithmic Differentiation Library for C/C++ -- documentation Group: Development/Languages/C and C++ BuildArch: noarch %description doc The package ADOL-C (Automatic Differentiation by OverLoading in C++) facilitates the evaluation of first and higher derivatives of vector functions that are defined by computer programs written in C or C++. The resulting derivative evaluation routines may be called from C/C++, Fortran, or any other language that can be linked with C. The numerical values of derivative vectors are obtained free of truncation errors at a small multiple of the run time and randomly accessed memory of the given function evaluation program. This package provides the userĀ“s manual for adolc %prep %setup -q -n %{name}-%{packver} -b 1 pushd ThirdParty mv %{_builddir}/ColPack/* ColPack/ rm -rf %{_builddir}/ColPack popd %build pushd ThirdParty/ColPack make %{_smp_mflags} popd autoreconf -v --install --force %configure --prefix=/usr make %{_smp_mflags} %install %makeinstall install -d %{buildroot}%{_datadir}/doc/packages/%{name} install -m 644 README AUTHORS BUGS LICENSE INSTALL TODO %{buildroot}%{_datadir}/doc/packages/%{name} install -m 644 ADOL-C/doc/adolc-manual.pdf %{buildroot}%{_datadir}/doc/packages/%{name} install -m 644 ADOL-C/doc/short_ref.pdf %{buildroot}%{_datadir}/doc/packages/%{name} find %{buildroot} -type f -name '*.la' -delete -print %clean rm -rf %{buildroot} rm -rf %{_builddir}/%{name}-%{packver} %post -n libadolc1 -p /sbin/ldconfig %postun -n libadolc1 -p /sbin/ldconfig %files -n libadolc1 %defattr(-,root,root) %{_libdir}/libadolc.so.* %files devel %defattr(-,root,root) %dir %{_includedir}/adolc %dir %{_includedir}/adolc/drivers %dir %{_includedir}/adolc/sparse %dir %{_includedir}/adolc/tapedoc %{_includedir}/adolc/*.h %{_includedir}/adolc/drivers/*.h %{_includedir}/adolc/sparse/*.h %{_includedir}/adolc/tapedoc/*.h %{_libdir}/libadolc.so %{_libdir}/libadolc.a %files doc %defattr(-,root,root) %dir %{_datadir}/doc/packages/%{name} %{_datadir}/doc/packages/%{name}/* %changelog ADOL-C-2.4.1/ChangeLog0000644000076600007660000001635711227415666012673 0ustar coincoinVersion 2.1.0 -------> 20090715 awalther - new directory structure to fit usual COIN project standards Version 2.0.0 Version 1.11.0 20060503 kowarz: - new tape handling merged into trunk 20060428 kowarz: - bug fixed that caused seg-fault when running standalone tapedoc - some additional security checks in tape_handling.cpp 20060424 kowarz: - bux fixed that caused a SEG-fault when reading tape stats for a tape written by a different ADOL-C run 20060405 kowarz: - taping code rewritten to "nullify" all pointers that were object to delete or free 20060301 kowarz: - last bugfix for the taylor tape forced the writing of the corresponding file even if the taylor buffer could be hold the overall taylor tape => fixed - buffer sizes in usrparms.h set to default 20060301 schlenk: - value() function added for compatibility reasons 20060228 kowarz: - bug in taylor tape handling corrected => last taylor buffer from taping is now available for multiple reverse sweeps 20060224 kowarz: - function 'value' in adouble.* changed to 'getValue' + corresponding updates in other files 20060215 schlenk: - code for fixpoint iteration added 20060215 kowarz: - bug in extern diff. function code corrected (cross-over assignment) - ext_diff_fct_index is now part of TapeInfos - it is set by forward and reverse sweeps (from tape) and can be accessed via currentTapeInfos 20060203 kowarz: Summary for the last two months: - taping strategies rewritten => should work with nested tapes now - enumeration for tape stats introduced => docs need to be updated - "theCleaner" code extended => should now be available in static versions, too - extern diff. function capabilities extended to fos_rev. - checkpointing interface based on extern differentiated function context and nested taping added => documentation will follow soon - configure system updated: --enable-debug and --enable-harddebug set appropriate compile flags, now - many minor changes :) 20051219 kowarz: - TBUFSIZE (dvlparms.h) is now treated as number of elements - tape files (operations, locations, values) are now deleted at the end of the program for all tapes which could hold at least one within the main memory - file removal works for static and dynamic library now 20051214 kowarz: - new file names for tapes - bug fixed that caused the writing of all tapes (op+loc+val) even if not all exceeded the buffer size - implemented the usage of different buffer sizes for different tapes (op, loc, val) => see "usrparms.h" 20051123 kowarz: - rpl_malloc/rpl_calloc/rpl_realloc handling corrected 20050928 kowarz: - Windows version updated. (Several problems in the sparse directory fixed) Should compile now! - PDF version of the documentation added Version 1.10.0 20050704 kowarz: - initial makefile set for Windows - Windows section added to INSTALL 20050630 kowarz: - function value(badouble x) removed from badouble - function value() added to badouble => use x.value() instead of value(x) - minor updates in the documentation 20050630 walther: - all includes of changed to <= malloc.h not available in all operation systems (e.g. MAC OS) - changed min, max to MIN_ADOLC, MAC_ADOLC - changed maxinc to MAXDEC kowarz: - some minor style changes, error corrections, comment updates Version 1.9.1 20050627 walther: - revised documentation - new coloring algorithms in graph_hess.* to generate seed matrix 20050617 kowarz: - replacement functions for malloc, calloc, realloc added 20050419 walther: - partial fix of the pow-function bug (pow evaluated at 0): forward mode: all orders reverse mode: up to order 1 - log_op corrected for hos_ov_reverse - hess_mat driver: change to static variables to reduce runtime - new drivers for sparse Hessians: * compute sparsity pattern * compute seed matrix from sparsity pattern using 3/2 coloring * compute Hessians in sparse format - new drivers for sparse Jacobians * compute seed matrix from sparsity pattern using CPR * compute Jacobians in sparse format 20050115 kowarz: - two shell scripts added for cross compiling (32-bit and 64-bit mode) 20050114 kowarz: - documentation for tapeless ADOL-C added - ADOL-C debug mode corrected (configure.ac) hard debug mode added to configure.ac 20050103 kowarz: tapeless tangent corrected 20041110 kowarz: tapeless forward version added (scalar / vector) documentation will follow soon 20041013 kowarz: another memory bug in jac_pat fixed => jac_pat seems to be clean now ( thanks to valgrind ;-) ) 20041007 kowarz: fixed memory bug in jac_pat (sparsedrivers.c), hopefully ( memory allocated for NULL rb and cb is freed at the end of jap_pat now ) thanks to Andreas Potschka 20041007 walther: partial fix of the pow-function bug (reverse mode) 20040913 kowarz: added driver jacobian_partx in drivers/drivers.c and drivers/drivers.h that was written down earlier but was not added to the repository 20040717 kowarz: bug fixed in tayutil.c (taylor_begin) ( old temporary files were never closed => could result in program crash due to too many file handles -> system dependend ) => old files are closed now before new ones are opened thanks to Andrej Ponomarenko 20040607 kowarz: bug fixed in tayutil.c (taylor_begin) (old taylor memory was never freed => chance to run out of memory if used many times on same tag -> dependend on memory size ) => moved "free( ... save_taylor)" ahead of " ... save_taylor = 0" thanks to Teijo T Arponen 20040524 kowarz: changed include of adolc files from standard notation (#include <...>) to user file notation (#include "...") ! started with ADOL-C version 1.9.0 ! ADOL-C-2.4.1/AUTHORS0000644000076600007660000000160011732370423012142 0ustar coincoinauthors currently working on ADOL-C: ==================================== Andrea Walther Kshitij Kulshreshtha Institute of Mathematics University of Paderborn 33098 Paderborn, Germany Andreas Griewank Department of Mathematics Humboldt University Berlin D-10099, Germany Parts of the ADOL-C source were developed by Andreas Kowarz, now Baumer Optronic GmbH, Germany Hristo Mitev, now Treppenmeister GmbH, Germany Sebastian Schlenkrich, now d-fine GmbH, Germany, Jean Utke, now Argonne National Laboratory, USA, and Olaf Vogel, now Kingelnberg GmbH, Germany We are also indebted to George Corliss, Tom Epperly, Bruce Christianson, David Gay, David Juedes, Brad Karp, Koichi Kubota, Bob Olson, Marcela Rosemblun, Dima Shiriaev, Jay Srinivasan, Chuck Tyner, Jean Utke, and Duane Yoder for helping in various ways with the development and documentation of ADOL-C. ADOL-C-2.4.1/autoconf/0000755000076600007660000000000012120272604012705 5ustar coincoinADOL-C-2.4.1/autoconf/config.sub0000755000076600007660000010527412032326473014707 0ustar coincoin#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. timestamp='2012-04-18' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file 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 2 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 . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted GNU ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 \ | ns16k | ns32k \ | open8 \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze) basic_machine=microblaze-xilinx ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i386-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: ADOL-C-2.4.1/autoconf/install-sh0000755000076600007660000003325512032326473014727 0ustar coincoin#!/bin/sh # install - install a program, script, or datafile scriptversion=2011-11-20.07; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: ADOL-C-2.4.1/autoconf/depcomp0000755000076600007660000005055212032326473014277 0ustar coincoin#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2012-03-27.16; # UTC # Copyright (C) 1999-2012 Free Software Foundation, Inc. # 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 2, 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 . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # A tabulation character. tab=' ' # A newline character. nl=' ' if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency informations. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' "$nl" < "$tmpdepfile" | ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependent.h'. # Do two passes, one to just change these to # '$object: dependent.h' and one to simply 'dependent.h:'. sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler anf tcc (Tiny C Compiler) understand '-MD -MF file'. # However on # $CC -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\': # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... # tcc 0.9.26 (FIXME still under development at the moment of writing) # will emit a similar output, but also prepend the continuation lines # with horizontal tabulation characters. "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form 'foo.o: dependent.h', # or 'foo.o: dep1.h dep2.h \', or ' dep3.h dep4.h \'. # Do two passes, one to just change these to # '$object: dependent.h' and one to simply 'dependent.h:'. sed -e "s/^[ $tab][ $tab]*/ /" -e "s,^[^:]*:,$object :," \ < "$tmpdepfile" > "$depfile" sed ' s/[ '"$tab"'][ '"$tab"']*/ /g s/^ *// s/ *\\*$// s/^[^:]*: *// /^$/d /:$/d s/$/ :/ ' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mechanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test "$stat" = 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed 's:^['"$tab"' ]*[^:'"$tab"' ][^:][^:]*\:['"$tab"' ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' "$nl" < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' "$nl" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: ADOL-C-2.4.1/autoconf/ltmain.sh0000644000076600007660000105152212032326473014541 0ustar coincoin # libtool (GNU libtool) 2.4.2 # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, # 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool 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 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, # or obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Usage: $progname [OPTION]... [MODE-ARG]... # # Provide generalized library-building support services. # # --config show all configuration variables # --debug enable verbose shell tracing # -n, --dry-run display commands without modifying any files # --features display basic configuration information and exit # --mode=MODE use operation mode MODE # --preserve-dup-deps don't remove duplicate dependency libraries # --quiet, --silent don't print informational messages # --no-quiet, --no-silent # print informational messages (default) # --no-warn don't display warning messages # --tag=TAG use configuration variables from tag TAG # -v, --verbose print more informational messages than default # --no-verbose don't print the extra informational messages # --version print version information # -h, --help, --help-all print short, long, or detailed help message # # MODE must be one of the following: # # clean remove files from the build directory # compile compile a source file into a libtool object # execute automatically set library path, then run a program # finish complete the installation of libtool libraries # install install libraries or executables # link create a library or an executable # uninstall remove libraries from an installed directory # # MODE-ARGS vary depending on the MODE. When passed as first option, # `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. # Try `$progname --help --mode=MODE' for a more detailed description of MODE. # # When reporting a bug, please describe a test case to reproduce it and # include the following information: # # host-triplet: $host # shell: $SHELL # compiler: $LTCC # compiler flags: $LTCFLAGS # linker: $LD (gnu? $with_gnu_ld) # $progname: (GNU libtool) 2.4.2 # automake: $automake_version # autoconf: $autoconf_version # # Report bugs to . # GNU libtool home page: . # General help using GNU software: . PROGRAM=libtool PACKAGE=libtool VERSION=2.4.2 TIMESTAMP="" package_revision=1.3337 # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # NLS nuisances: We save the old values to restore during execute mode. lt_user_locale= lt_safe_locale= for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${$lt_var+set}\" = set; then save_$lt_var=\$$lt_var $lt_var=C export $lt_var lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" fi" done LC_ALL=C LANGUAGE=C export LANGUAGE LC_ALL $lt_unset CDPATH # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" : ${CP="cp -f"} test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} : ${Xsed="$SED -e 1s/^X//"} # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. exit_status=$EXIT_SUCCESS # Make sure IFS has a sensible default lt_nl=' ' IFS=" $lt_nl" dirname="s,/[^/]*$,," basename="s,^.*/,," # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi } # func_dirname may be replaced by extended shell implementation # func_basename file func_basename () { func_basename_result=`$ECHO "${1}" | $SED "$basename"` } # func_basename may be replaced by extended shell implementation # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` } # func_dirname_and_basename may be replaced by extended shell implementation # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # func_strip_suffix prefix name func_stripname () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname may be replaced by extended shell implementation # These SED scripts presuppose an absolute path with a trailing slash. pathcar='s,^/\([^/]*\).*$,\1,' pathcdr='s,^/[^/]*,,' removedotparts=':dotsl s@/\./@/@g t dotsl s,/\.$,/,' collapseslashes='s@/\{1,\}@/@g' finalslash='s,/*$,/,' # func_normal_abspath PATH # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. # value returned in "$func_normal_abspath_result" func_normal_abspath () { # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` while :; do # Processed it all yet? if test "$func_normal_abspath_tpath" = / ; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result" ; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_relative_path SRCDIR DSTDIR # generates a relative path from SRCDIR to DSTDIR, with a trailing # slash if non-empty, suitable for immediately appending a filename # without needing to append a separator. # value returned in "$func_relative_path_result" func_relative_path () { func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=${func_dirname_result} if test "x$func_relative_path_tlibdir" = x ; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test "x$func_stripname_result" != x ; then func_relative_path_result=${func_relative_path_result}/${func_stripname_result} fi # Normalisation. If bindir is libdir, return empty string, # else relative path ending with a slash; either way, target # file name can be directly appended. if test ! -z "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result/" func_relative_path_result=$func_stripname_result fi } # The name of this program: func_dirname_and_basename "$progpath" progname=$func_basename_result # Make sure we have an absolute path for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=$func_dirname_result progdir=`cd "$progdir" && pwd` progpath="$progdir/$progname" ;; *) save_IFS="$IFS" IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS="$save_IFS" test -x "$progdir/$progname" && break done IFS="$save_IFS" test -n "$progdir" || progdir=`pwd` progpath="$progdir/$progname" ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed="${SED}"' -e 1s/^X//' sed_quote_subst='s/\([`"$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' # Sed substitution that converts a w32 file name or path # which contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-`\' parameter expansions in output of double_quote_subst that were # `\'-ed in input to the same. If an odd number of `\' preceded a '$' # in input to double_quote_subst, that '$' was protected from expansion. # Since each input `\' is now two `\'s, look for any number of runs of # four `\'s followed by two `\'s and then a '$'. `\' that '$'. bs='\\' bs2='\\\\' bs4='\\\\\\\\' dollar='\$' sed_double_backslash="\ s/$bs4/&\\ /g s/^$bs2$dollar/$bs&/ s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g s/\n//g" # Standard options: opt_dry_run=false opt_help=false opt_quiet=false opt_verbose=false opt_warning=: # func_echo arg... # Echo program name prefixed message, along with the current mode # name if it has been set yet. func_echo () { $ECHO "$progname: ${opt_mode+$opt_mode: }$*" } # func_verbose arg... # Echo program name prefixed message in verbose mode only. func_verbose () { $opt_verbose && func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_error arg... # Echo program name prefixed message to standard error. func_error () { $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 } # func_warning arg... # Echo program name prefixed warning message to standard error. func_warning () { $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 # bash bug again: : } # func_fatal_error arg... # Echo program name prefixed message to standard error, and exit. func_fatal_error () { func_error ${1+"$@"} exit $EXIT_FAILURE } # func_fatal_help arg... # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { func_error ${1+"$@"} func_fatal_error "$help" } help="Try \`$progname --help' for more information." ## default # func_grep expression filename # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $GREP "$1" "$2" >/dev/null 2>&1 } # func_mkdir_p directory-path # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { my_directory_path="$1" my_dir_list= if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then # Protect directory names starting with `-' case $my_directory_path in -*) my_directory_path="./$my_directory_path" ;; esac # While some portion of DIR does not yet exist... while test ! -d "$my_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. my_dir_list="$my_directory_path:$my_dir_list" # If the last portion added has no slash in it, the list is done case $my_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` done my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` save_mkdir_p_IFS="$IFS"; IFS=':' for my_dir in $my_dir_list; do IFS="$save_mkdir_p_IFS" # mkdir can fail with a `File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$my_dir" 2>/dev/null || : done IFS="$save_mkdir_p_IFS" # Bail out if we (or some other process) failed to create a directory. test -d "$my_directory_path" || \ func_fatal_error "Failed to create \`$1'" fi } # func_mktempdir [string] # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, STRING is the basename for that directory. func_mktempdir () { my_template="${TMPDIR-/tmp}/${1-$progname}" if test "$opt_dry_run" = ":"; then # Return a directory name, but don't create it in dry-run mode my_tmpdir="${my_template}-$$" else # If mktemp works, use that first and foremost my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` if test ! -d "$my_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race my_tmpdir="${my_template}-${RANDOM-0}$$" save_mktempdir_umask=`umask` umask 0077 $MKDIR "$my_tmpdir" umask $save_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$my_tmpdir" || \ func_fatal_error "cannot create temporary directory \`$my_tmpdir'" fi $ECHO "$my_tmpdir" } # func_quote_for_eval arg # Aesthetically quote ARG to be evaled later. # This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT # is double-quoted, suitable for a subsequent eval, whereas # FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters # which are still active within double quotes backslashified. func_quote_for_eval () { case $1 in *[\\\`\"\$]*) func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; *) func_quote_for_eval_unquoted_result="$1" ;; esac case $func_quote_for_eval_unquoted_result in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and and variable # expansion for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" ;; *) func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" esac } # func_quote_for_expand arg # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { case $1 in *[\\\`\"]*) my_arg=`$ECHO "$1" | $SED \ -e "$double_quote_subst" -e "$sed_double_backslash"` ;; *) my_arg="$1" ;; esac case $my_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") my_arg="\"$my_arg\"" ;; esac func_quote_for_expand_result="$my_arg" } # func_show_eval cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$my_cmd" my_status=$? if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_show_eval_locale cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$lt_user_locale $my_cmd" my_status=$? eval "$lt_safe_locale" if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_tr_sh # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_version # Echo version message to standard output and exit. func_version () { $opt_debug $SED -n '/(C)/!b go :more /\./!{ N s/\n# / / b more } :go /^# '$PROGRAM' (GNU /,/# warranty; / { s/^# // s/^# *$// s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ p }' < "$progpath" exit $? } # func_usage # Echo short help message to standard output and exit. func_usage () { $opt_debug $SED -n '/^# Usage:/,/^# *.*--help/ { s/^# // s/^# *$// s/\$progname/'$progname'/ p }' < "$progpath" echo $ECHO "run \`$progname --help | more' for full usage" exit $? } # func_help [NOEXIT] # Echo long help message to standard output and exit, # unless 'noexit' is passed as argument. func_help () { $opt_debug $SED -n '/^# Usage:/,/# Report bugs to/ { :print s/^# // s/^# *$// s*\$progname*'$progname'* s*\$host*'"$host"'* s*\$SHELL*'"$SHELL"'* s*\$LTCC*'"$LTCC"'* s*\$LTCFLAGS*'"$LTCFLAGS"'* s*\$LD*'"$LD"'* s/\$with_gnu_ld/'"$with_gnu_ld"'/ s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ p d } /^# .* home page:/b print /^# General help using/b print ' < "$progpath" ret=$? if test -z "$1"; then exit $ret fi } # func_missing_arg argname # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $opt_debug func_error "missing argument for $1." exit_cmd=exit } # func_split_short_opt shortopt # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. func_split_short_opt () { my_sed_short_opt='1s/^\(..\).*$/\1/;q' my_sed_short_rest='1s/^..\(.*\)$/\1/;q' func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` } # func_split_short_opt may be replaced by extended shell implementation # func_split_long_opt longopt # Set func_split_long_opt_name and func_split_long_opt_arg shell # variables after splitting LONGOPT at the `=' sign. func_split_long_opt () { my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' my_sed_long_arg='1s/^--[^=]*=//' func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` } # func_split_long_opt may be replaced by extended shell implementation exit_cmd=: magic="%%%MAGIC variable%%%" magic_exe="%%%MAGIC EXE variable%%%" # Global variables. nonopt= preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "${1}=\$${1}\${2}" } # func_append may be replaced by extended shell implementation # func_append_quoted var value # Quote VALUE and append to the end of shell variable VAR, separated # by a space. func_append_quoted () { func_quote_for_eval "${2}" eval "${1}=\$${1}\\ \$func_quote_for_eval_result" } # func_append_quoted may be replaced by extended shell implementation # func_arith arithmetic-term... func_arith () { func_arith_result=`expr "${@}"` } # func_arith may be replaced by extended shell implementation # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` } # func_len may be replaced by extended shell implementation # func_lo2o object func_lo2o () { func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` } # func_lo2o may be replaced by extended shell implementation # func_xform libobj-or-source func_xform () { func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` } # func_xform may be replaced by extended shell implementation # func_fatal_configuration arg... # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func_error ${1+"$@"} func_error "See the $PACKAGE documentation for more information." func_fatal_error "Fatal configuration error." } # func_config # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # Display the features supported by this script. func_features () { echo "host: $host" if test "$build_libtool_libs" = yes; then echo "enable shared libraries" else echo "disable shared libraries" fi if test "$build_old_libs" = yes; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag tagname # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname="$1" re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf="/$re_begincf/,/$re_endcf/p" # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac # Option defaults: opt_debug=: opt_dry_run=false opt_config=false opt_preserve_dup_deps=false opt_features=false opt_finish=false opt_help=false opt_help_all=false opt_silent=: opt_warning=: opt_verbose=: opt_silent=false opt_verbose=false # Parse options once, thoroughly. This comes as soon as possible in the # script to make things like `--version' happen as quickly as we can. { # this just eases exit handling while test $# -gt 0; do opt="$1" shift case $opt in --debug|-x) opt_debug='set -x' func_echo "enabling shell trace mode" $opt_debug ;; --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) opt_config=: func_config ;; --dlopen|-dlopen) optarg="$1" opt_dlopen="${opt_dlopen+$opt_dlopen }$optarg" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) opt_features=: func_features ;; --finish) opt_finish=: set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help_all=: opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_mode="$optarg" case $optarg in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_silent=false func_append preserve_args " $opt" ;; --no-warning|--no-warn) opt_warning=false func_append preserve_args " $opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $opt" ;; --silent|--quiet) opt_silent=: func_append preserve_args " $opt" opt_verbose=false ;; --verbose|-v) opt_verbose=: func_append preserve_args " $opt" opt_silent=false ;; --tag) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_tag="$optarg" func_append preserve_args " $opt $optarg" func_enable_tag "$optarg" shift ;; -\?|-h) func_usage ;; --help) func_help ;; --version) func_version ;; # Separate optargs to long options: --*=*) func_split_long_opt "$opt" set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-n*|-v*) func_split_short_opt "$opt" set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) break ;; -*) func_fatal_help "unrecognized option \`$opt'" ;; *) set dummy "$opt" ${1+"$@"}; shift; break ;; esac done # Validate options: # save first non-option argument if test "$#" -gt 0; then nonopt="$opt" shift fi # preserve --debug test "$opt_debug" = : || func_append preserve_args " --debug" case $host in *cygwin* | *mingw* | *pw32* | *cegcc*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then func_fatal_configuration "not configured to build any kind of library" fi # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test "$opt_mode" != execute; then func_error "unrecognized option \`-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$progname --help --mode=$opt_mode' for more information." } # Bail if the options were screwed $exit_cmd $EXIT_FAILURE } ## ----------- ## ## Main. ## ## ----------- ## # func_lalib_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null \ | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_unsafe_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if `file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case "$lalib_p_line" in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test "$lalib_p" = yes } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { func_lalib_p "$1" } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $opt_debug save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$save_ifs eval cmd=\"$cmd\" func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. func_source () { $opt_debug case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case "$lt_sysroot:$1" in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result="=$func_stripname_result" ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $opt_debug if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with \`--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=${1} if test "$build_libtool_libs" = yes; then write_lobj=\'${2}\' else write_lobj=none fi if test "$build_old_libs" = yes; then write_oldobj=\'${3}\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T </dev/null` if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$lt_sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $opt_debug # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result="" if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result" ; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $opt_debug if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $opt_debug # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $opt_debug if test -z "$2" && test -n "$1" ; then func_error "Could not determine host file name corresponding to" func_error " \`$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result="$1" fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $opt_debug if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " \`$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result="$3" fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $opt_debug case $4 in $1 ) func_to_host_path_result="$3$func_to_host_path_result" ;; esac case $4 in $2 ) func_append func_to_host_path_result "$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via `$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $opt_debug $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $opt_debug case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result="$1" } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result="$func_convert_core_msys_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via `$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $opt_debug if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd="func_convert_path_${func_stripname_result}" fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $opt_debug func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result="$1" } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_msys_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_mode_compile arg... func_mode_compile () { $opt_debug # Get the compilation command and the source file. base_compile= srcfile="$nonopt" # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg="$arg" arg_mode=normal ;; target ) libobj="$arg" arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify \`-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) func_append later " $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" func_append_quoted lastarg "$arg" done IFS="$save_ifs" func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. func_append base_compile " $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg="$srcfile" srcfile="$arg" ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with \`-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj="$func_basename_result" } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from \`$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_for_eval "$libobj" test "X$libobj" != "X$func_quote_for_eval_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name \`$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname="$func_basename_result" xdir="$func_dirname_result" lobj=${xdir}$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test "$build_libtool_libs" = yes; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test "$pic_mode" != no; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir func_append command " -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test "$suppress_opt" = yes; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test "$build_old_libs" = yes; then if test "$pic_mode" != yes; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test "$compiler_c_o" = yes; then func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test "$need_locks" != no; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test "$opt_mode" = compile && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a \`.o' file suitable for static linking -static only build a \`.o' file suitable for static linking -Wc,FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode \`$opt_mode'" ;; esac echo $ECHO "Try \`$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test "$opt_help" = :; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | sed -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | sed '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $opt_debug # The first argument is the command name. cmd="$nonopt" test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "\`$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "\`$file' was not linked with \`-export-dynamic'" continue fi func_dirname "$file" "" "." dir="$func_dirname_result" if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir="$func_dirname_result" ;; *) func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file="$progdir/$program" elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if test "X$opt_dry_run" = Xfalse; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS fi } test "$opt_mode" = execute && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $opt_debug libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then func_append libdirs " $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else func_warning "\`$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument \`$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and \`=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done fi # Exit here if they wanted silent mode. $opt_silent && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the \`-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the \`$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the \`$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test "$opt_mode" = finish && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $opt_debug # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac; then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" func_append install_prog "$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= no_mode=: for arg do arg2= if test -n "$dest"; then func_append files " $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test "x$prev" = x-m && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" func_append install_prog " $func_quote_for_eval_result" if test -n "$arg2"; then func_quote_for_eval "$arg2" fi func_append install_shared_prog " $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the \`$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_for_eval "$install_override_mode" func_append install_shared_prog " -m $func_quote_for_eval_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else func_dirname_and_basename "$dest" "" "." destdir="$func_dirname_result" destname="$func_basename_result" # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "\`$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "\`$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. func_append staticlibs " $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir="$func_dirname_result" func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking \`$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname="$1" shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme="$stripme" case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme="" ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try `ln -sf' first, because the `ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib="$destdir/$realname" func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name="$func_basename_result" instname="$dir/$name"i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest="$destfile" destfile= ;; *) func_fatal_help "cannot copy a libtool object to \`$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script \`$wrapper'" finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then func_warning "\`$lib' has not been installed in \`$libdir'" finalize=no fi done relink_command= func_source "$wrapper" outputname= if test "$fast_install" = no && test -n "$relink_command"; then $opt_dry_run || { if test "$finalize" = yes; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file="$func_basename_result" outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_silent || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink \`$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file="$outputname" else func_warning "cannot relink \`$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name="$func_basename_result" # Set up the ranlib parameters. oldlib="$destdir/$name" func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run \`$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test "$opt_mode" = install && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $opt_debug my_outputname="$1" my_originator="$2" my_pic_p="${3-no}" my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms="${my_outputname}S.c" else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${my_outputname}.nm" func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then func_verbose "generating symbol list for \`$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $opt_dry_run || { $RM $export_symbols eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from \`$dlprefile'" func_basename "$dlprefile" name="$func_basename_result" case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename="" if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname" ; then func_basename "$dlprefile_dlname" dlprefile_dlbasename="$func_basename_result" else # no lafile. user explicitly requested -dlpreopen . $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename" ; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[]; LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = {\ { \"$my_originator\", (void *) 0 }," case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) if test "X$my_pic_p" != Xno; then pic_flag_for_symtable=" $pic_flag" fi ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) func_append symtab_cflags " $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' # Transform the symbol file into the correct name. symfileobj="$output_objdir/${my_outputname}S.$objext" case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for \`$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $opt_debug win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s,.*,import, p q } }'` case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $opt_debug sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $opt_debug match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive which possess that section. Heuristic: eliminate # all those which have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $opt_debug if func_cygming_gnu_implib_p "$1" ; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1" ; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result="" fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $opt_debug f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" if test "$lock_old_archive_extraction" = yes; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test "$lock_old_archive_extraction" = yes; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $opt_debug my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib="$func_basename_result" my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir="$my_gentop/$my_xlib_u" func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`basename "$darwin_archive"` darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" func_extract_an_archive "`pwd`" "${darwin_base_archive}" cd "$darwin_curdir" $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory in which it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=\"$qECHO\" fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ which is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options which match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include #else # include # include # ifdef __CYGWIN__ # include # endif #endif #include #include #include #include #include #include #include #include /* declarations of non-ANSI functions */ #if defined(__MINGW32__) # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined(__CYGWIN__) # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined (other platforms) ... */ #endif /* portability defines, excluding path handling macros */ #if defined(_MSC_VER) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC # ifndef _INTPTR_T_DEFINED # define _INTPTR_T_DEFINED # define intptr_t int # endif #elif defined(__MINGW32__) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined(__CYGWIN__) # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined (other platforms) ... */ #endif #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) #if defined(LT_DEBUGWRAPPER) static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; int tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined (HAVE_DOS_BASED_FILE_SYSTEM) } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = q - p; p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (strcmp (str, pat) == 0) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else int len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { int orig_value_len = strlen (orig_value); int add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ int len = strlen (new_value); while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[len-1] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $opt_debug case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_mode_link arg... func_mode_link () { $opt_debug case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # which system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll which has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=no prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module="${wl}-single_module" func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result func_append libtool_args " $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in bindir) bindir="$arg" prev= continue ;; dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" test -f "$arg" \ || func_fatal_error "symbol file \`$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) func_append deplibs " $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # func_append moreargs " $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file \`$arg' does not exist" fi arg=$save_arg prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) func_append xrpath " $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds="$arg" prev= continue ;; weak) func_append weak_libs " $arg" prev= continue ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) func_append linker_flags " $qarg" func_append compiler_flags " $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "\`-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between \`-L' and \`$1'" else func_fatal_error "need path for \`-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of \`$dir'" dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; *) func_append deplibs " -L$dir" ;; esac func_append lib_search_path " $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) func_append dllsearchpath ":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework func_append deplibs " System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test "X$arg" = "X-lc" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test "X$arg" = "X-lc" && continue ;; esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi func_append deplibs " $arg" continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac continue ;; -multi_module) single_module="${wl}-multi_module" continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "\`-no-install' is ignored for $host" func_warning "assuming \`-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $func_quote_for_eval_result" func_append compiler_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $wl$func_quote_for_eval_result" func_append compiler_flags " $wl$func_quote_for_eval_result" func_append linker_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-flto*|-fwhopr*|-fuse-linker-plugin) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; *.$objext) # A standard object. func_append objs " $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. func_append deplibs " $arg" func_append old_deplibs " $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test "$prev" = dlfiles; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= else func_append deplibs " $func_resolve_sysroot_result" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the \`$prevarg' option requires an argument" if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname="$func_basename_result" libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" func_dirname "$output" "/" "" output_objdir="$func_dirname_result$objdir" func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_preserve_dup_deps ; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append libs " $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; esac func_append pre_post_deps " $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test "$linkmode,$pass" = "lib,link"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs="$tmp_deplibs" fi if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; esac fi if test "$linkmode,$pass" = "lib,dlpreopen"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) func_append deplibs " $deplib" ;; esac done done libs="$dlprefiles" fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then func_warning "\`-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test "$linkmode" = lib; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no func_dirname "$lib" "" "." ladir="$func_dirname_result" lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l *.ltframework) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) func_warning "\`-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=yes fi ;; pass_all) valid_a_lib=yes ;; esac if test "$valid_a_lib" != yes; then echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." else echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi ;; esac continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. func_append newdlprefiles " $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append newdlfiles " $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" fi # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "\`$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir="$func_dirname_result" dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" elif test "$linkmode" != prog && test "$linkmode" != lib; then func_fatal_error "\`$lib' is not a convenience library" fi tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done continue fi # $pass = conv # Get the name of the library we link against. linklib= if test -n "$old_library" && { test "$prefer_static_libs" = yes || test "$prefer_static_libs,$installed" = "built,no"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib="$l" done fi if test -z "$linklib"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then func_fatal_error "cannot -dlopen a convenience library: \`$lib'" fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. func_append dlprefiles " $lib $dependency_libs" else func_append newdlfiles " $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of \`$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir="$ladir" fi ;; esac func_basename "$lib" laname="$func_basename_result" # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library \`$lib' was moved." dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$lt_sysroot$libdir" absdir="$lt_sysroot$libdir" fi test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir="$ladir" absdir="$abs_ladir" # Remove this search path later func_append notinst_path " $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later func_append notinst_path " $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir" && test "$linkmode" = prog; then func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" fi case "$host" in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" func_append newdlprefiles " $dir/$linklib" else func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then func_append newdlprefiles " $dir/$dlname" else func_append newdlprefiles " $dir/$linklib" fi ;; esac fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { { test "$prefer_static_libs" = no || test "$prefer_static_libs,$installed" = "built,yes"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then # Make sure the rpath contains only unique directories. case "$temp_rpath:" in *"$absdir:"*) ;; *) func_append temp_rpath "$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test "$use_static_libs" = built && test "$installed" = yes; then use_static_libs=no fi if test -n "$library_names" && { test "$use_static_libs" = no || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) if test "$installed" = no; then func_append notinst_deplibs " $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule="" for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule="$dlpremoduletest" break fi done if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then echo if test "$linkmode" = prog; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname="$1" shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc*) func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" func_basename "$soroot" soname="$func_basename_result" func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from \`$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for \`$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$opt_mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; *-*-sysv4*uw2*) add_dir="-L$dir" ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we can not # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null ; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library" ; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else add="$dir/$old_library" fi elif test -n "$old_library"; then add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$absdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) func_append compile_shlibpath "$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && test "$hardcode_minus_L" != yes && test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$opt_mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo $ECHO "*** Warning: This system can not link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) func_append xrpath " $temp_xrpath";; esac;; *) func_append temp_deplibs " $libdir";; esac done dependency_libs="$temp_deplibs" fi func_append newlib_search_path " $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; esac fi func_append tmp_libs " $func_resolve_sysroot_result" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path="$deplib" ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result func_dirname "$deplib" "" "." dir=$func_dirname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of \`$dir'" absdir="$dir" fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl" ; then depdepl="$absdir/$objdir/$depdepl" darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" path= fi fi ;; *) path="-L$absdir/$objdir" ;; esac else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "\`$deplib' seems to be moved" path="-L$absdir" fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test "$pass" = link; then if test "$linkmode" = "prog"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) func_append lib_search_path " $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) func_append tmp_libs " $deplib" ;; esac ;; *) func_append tmp_libs " $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" fi if test "$linkmode" = prog || test "$linkmode" = lib; then dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "\`-R' is ignored for archives" test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "\`-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "\`-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" func_append objs "$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test "$module" = no && \ func_fatal_help "libtool library \`$output' must begin with \`lib'" if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" func_append libobjs " $objs" fi fi test "$dlself" != no && \ func_warning "\`-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test "$#" -gt 1 && \ func_warning "ignoring multiple \`-rpath's for a libtool library" install_libdir="$1" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "\`-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 shift IFS="$save_ifs" test -n "$7" && \ func_fatal_help "too many parameters to \`-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$1" number_minor="$2" number_revision="$3" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor darwin|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|qnx|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_minor" lt_irix_increment=no ;; esac ;; no) current="$1" revision="$2" age="$3" ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT \`$current' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION \`$revision' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE \`$age' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE \`$age' is greater than the current interface number \`$current'" func_fatal_error "\`$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current" ;; irix | nonstopux) if test "X$lt_irix_increment" = "Xno"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring:${iface}.0" done # Make executables depend on our current version. func_append verstring ":${current}.0" ;; qnx) major=".$current" versuffix=".$current" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; *) func_fatal_configuration "unknown library version type \`$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then func_warning "undefined symbols not allowed in $host shared libraries" build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi func_generate_dlsyms "$libname" "$libname" "yes" func_append libobjs " $symfileobj" test "X$libobjs" = "X " && libobjs= if test "$opt_mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi func_append removelist " $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do func_replace_sysroot "$libdir" func_append temp_xrpath " -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) func_append dlfiles " $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) func_append dlprefiles " $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework func_append deplibs " System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then func_append deplibs " -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test "X$deplibs_check_method" = "Xnone"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done deplibs="$new_libs" # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then # Remove ${wl} instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$opt_mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname="$1" shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" linknames= for link do func_append linknames " $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols="$output_objdir/$libname.uexp" func_append delfiles " $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile if test "x`$SED 1q $export_symbols`" != xEXPORTS; then # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols="$export_symbols" export_symbols= always_export_symbols=yes fi fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd1 in $cmds; do IFS="$save_ifs" # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test "$try_normal_branch" = yes \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=${output_objdir}/${output_la}.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS="$save_ifs" if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) func_append tmp_deplibs " $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test "$compiler_needs_object" = yes && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $convenience func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then output=${output_objdir}/${output_la}.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then output=${output_objdir}/${output_la}.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test "$compiler_needs_object" = yes; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done func_append delfiles " $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-${k}.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test "X$objlist" = X || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-${k}.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\${concat_cmds}$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" fi func_append delfiles " $output" else output= fi if ${skipped_export-false}; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi fi test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi if ${skipped_export-false}; then if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi fi libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "\`-R' is ignored for objects" test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for objects" test -n "$release" && \ func_warning "\`-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object \`$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec and hope we can get by with # turning comma into space.. wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` else gentop="$output_objdir/${obj}x" func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" # Create the old-style object. reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for programs" test -n "$release" && \ func_warning "\`-release' is ignored for programs" test "$preload" = yes \ && test "$dlopen_support" = unknown \ && test "$dlopen_self" = unknown \ && test "$dlopen_self_static" = unknown && \ func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test "$tagname" = CXX ; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) func_append compile_command " ${wl}-bind_at_load" func_append finalize_command " ${wl}-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done compile_deplibs="$new_libs" func_append compile_command " $compile_deplibs" func_append finalize_command " $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) func_append finalize_perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" "no" # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=yes case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=no ;; *cygwin* | *mingw* ) if test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; *) if test "$need_relink" = no || test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; esac if test "$wrappers_required" = no; then # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.${objext}"; then func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' fi exit $exit_status fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do func_append rpath "$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" func_warning "this platform does not like uninstalled shared libraries" func_warning "\`$output' will be relinked during installation" else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource="$output_path/$objdir/lt-$output_name.c" cwrapper="$output_path/$output_name.exe" $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host" ; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save $symfileobj" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" if test "$preload" = yes && test -f "$symfileobj"; then func_append oldobjs " $symfileobj" fi fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $addlibs func_append oldobjs " $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append oldobjs " $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase="$func_basename_result" case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" func_append oldobjs " $gentop/$newobj" ;; *) func_append oldobjs " $obj" ;; esac done fi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name="$func_basename_result" func_resolve_sysroot "$deplib" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done dlprefiles="$newdlprefiles" fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test "x$bindir" != x ; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that can not go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } { test "$opt_mode" = link || test "$opt_mode" = relink; } && func_mode_link ${1+"$@"} # func_mode_uninstall arg... func_mode_uninstall () { $opt_debug RM="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) func_append RM " $arg"; rmforce=yes ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir="$func_dirname_result" if test "X$dir" = X.; then odir="$objdir" else odir="$dir/$objdir" fi func_basename "$file" name="$func_basename_result" test "$opt_mode" = uninstall && odir="$dir" # Remember odir for removal later, being careful to avoid duplicates if test "$opt_mode" = clean; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do func_append rmfiles " $odir/$n" done test -n "$old_library" && func_append rmfiles " $odir/$old_library" case "$opt_mode" in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test "$pic_object" != none; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test "$non_pic_object" != none; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) if test "$opt_mode" = clean ; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles func_append rmfiles " $odir/$name $odir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name" ; then func_append rmfiles " $odir/lt-${noexename}.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } { test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && func_mode_uninstall ${1+"$@"} test -z "$opt_mode" && { help="$generic_help" func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode \`$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: # vi:sw=2 ADOL-C-2.4.1/autoconf/missing0000755000076600007660000002370312032326473014317 0ustar coincoin#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2012-01-06.18; # UTC # Copyright (C) 1996-2012 Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # 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 2, 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 . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi run=: sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' sed_minuso='s/.* -o \([^ ]*\).*/\1/p' # In the cases where this matters, 'missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case $1 in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle 'PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file 'aclocal.m4' autoconf touch file 'configure' autoheader touch file 'config.h.in' autom4te touch the output file, or create a stub one automake touch all 'Makefile.in' files bison create 'y.tab.[ch]', if possible, from existing .[ch] flex create 'lex.yy.c', if possible, from existing .c help2man touch the output file lex create 'lex.yy.c', if possible, from existing .c makeinfo touch the output file yacc create 'y.tab.[ch]', if possible, from existing .[ch] Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: Unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # normalize program name to check for. program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). This is about non-GNU programs, so use $1 not # $program. case $1 in lex*|yacc*) # Not GNU programs, they don't have --version. ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running '$TOOL --version' or '$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case $program in aclocal*) echo 1>&2 "\ WARNING: '$1' is $msg. You should only need it if you modified 'acinclude.m4' or '${configure_ac}'. You might want to install the Automake and Perl packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf*) echo 1>&2 "\ WARNING: '$1' is $msg. You should only need it if you modified '${configure_ac}'. You might want to install the Autoconf and GNU m4 packages. Grab them from any GNU archive site." touch configure ;; autoheader*) echo 1>&2 "\ WARNING: '$1' is $msg. You should only need it if you modified 'acconfig.h' or '${configure_ac}'. You might want to install the Autoconf and GNU m4 packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case $f in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: '$1' is $msg. You should only need it if you modified 'Makefile.am', 'acinclude.m4' or '${configure_ac}'. You might want to install the Automake and Perl packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te*) echo 1>&2 "\ WARNING: '$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get '$1' as part of Autoconf from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison*|yacc*) echo 1>&2 "\ WARNING: '$1' $msg. You should only need it if you modified a '.y' file. You may need the Bison package in order for those modifications to take effect. You can get Bison from any GNU archive site." rm -f y.tab.c y.tab.h if test $# -ne 1; then eval LASTARG=\${$#} case $LASTARG in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.h fi ;; esac fi if test ! -f y.tab.h; then echo >y.tab.h fi if test ! -f y.tab.c; then echo 'main() { return 0; }' >y.tab.c fi ;; lex*|flex*) echo 1>&2 "\ WARNING: '$1' is $msg. You should only need it if you modified a '.l' file. You may need the Flex package in order for those modifications to take effect. You can get Flex from any GNU archive site." rm -f lex.yy.c if test $# -ne 1; then eval LASTARG=\${$#} case $LASTARG in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if test ! -f lex.yy.c; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man*) echo 1>&2 "\ WARNING: '$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the Help2man package in order for those modifications to take effect. You can get Help2man from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit $? fi ;; makeinfo*) echo 1>&2 "\ WARNING: '$1' is $msg. You should only need it if you modified a '.texi' or '.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy 'make' (AIX, DU, IRIX). You might want to install the Texinfo package or the GNU make package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n ' /^@setfilename/{ s/.* \([^ ]*\) *$/\1/ p q }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; *) echo 1>&2 "\ WARNING: '$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the 'README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing '$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: ADOL-C-2.4.1/autoconf/config.guess0000755000076600007660000013014512032326473015237 0ustar coincoin#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. timestamp='2012-02-10' # This file 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 2 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 . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner. Please send patches (context # diff format) to and include a ChangeLog # entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case "${UNAME_MACHINE}" in i?86) test -z "$VENDOR" && VENDOR=pc ;; *) test -z "$VENDOR" && VENDOR=unknown ;; esac test -f /etc/SuSE-release -o -f /.buildenv && VENDOR=suse # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-${VENDOR}-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-${VENDOR}-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-${VENDOR}-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-${VENDOR}-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-${VENDOR}-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-${VENDOR}-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-${VENDOR}-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-${VENDOR}-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm:riscos:*:*|arm:RISCOS:*:*) echo arm-${VENDOR}-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-${VENDOR}-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-${VENDOR}-osf1mk else echo ${UNAME_MACHINE}-${VENDOR}-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-${VENDOR}-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-${VENDOR}-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-${VENDOR}-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-${VENDOR}-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-${VENDOR}-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-${VENDOR}-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-${VENDOR}-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-${VENDOR}-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-${VENDOR}-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-${VENDOR}-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-${VENDOR}-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-${VENDOR}-linux-gnueabi else echo ${UNAME_MACHINE}-${VENDOR}-linux-gnueabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-gnu exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu exit ;; i*86:Linux:*:*) LIBC=gnu eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-${VENDOR}-linux-gnu"; exit; } ;; or32:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu exit ;; padre:Linux:*:*) echo sparc-${VENDOR}-linux-gnu exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-${VENDOR}-linux-gnu exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-${VENDOR}-linux-gnu ;; PA8*) echo hppa2.0-${VENDOR}-linux-gnu ;; *) echo hppa-${VENDOR}-linux-gnu ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-${VENDOR}-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-${VENDOR}-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-${VENDOR}-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-${VENDOR}-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-${VENODR}-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-${VENDOR}-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-${VENODR}-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-${VENDOR}-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-${VENDOR}-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-${VENDOR}-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-${VENDOR}-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-${VENDOR}-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in i386) eval $set_cc_for_build if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then UNAME_PROCESSOR="x86_64" fi fi ;; unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-?:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-${VENDOR}-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-${VENDOR}-tops10 exit ;; *:TENEX:*:*) echo pdp10-${VENDOR}-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-${VENDOR}-tops20 exit ;; *:ITS:*:*) echo pdp10-${VENDOR}-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-${VENDOR}-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-${VENDOR}-esx exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: ADOL-C-2.4.1/INSTALL0000644000076600007660000003241611154001222012116 0ustar coincoinCopyright 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. This file is free documentation; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. THE FOLLOWING INFORMATION ARE INTENDED FOR *NIX SYSTEMS. IF YOU WISH TO INSTALL ADOL-C ON A WINDOWS PLATFORM PLEASE SKIP THE NEXT PARAGRAPHS AND CONTINUE NEAR THE END OF THIS FILE. *********************************************************************** * INSTALLING ADOL-C ON *NIX PLATFORMS * *********************************************************************** Basic Installation ================== These are generic installation instructions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. (Caching is disabled by default to prevent problems with accidental use of stale cache files.) If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You only need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. Type `./configure' to configure the package for your system. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. Running `configure' takes awhile. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you must use a version of `make' that supports the `VPATH' variable, such as GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. If you have to use a `make' that does not support the `VPATH' variable, you have to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' will install the package's files in `${HOME}/adolc_base/include', `${HOME}/adolc_base/lib'. You can specify an installation prefix other than `${HOME}/adolc_base/' by giving `configure' the option `--prefix=PATH'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you give `configure' the option `--exec-prefix=PATH', the package will use PATH as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=PATH' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the `--target=TYPE' option to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc will cause the specified gcc to be used as the C compiler (unless it is overridden in the site shell script). `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of the options to `configure', and exit. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. *********************************************************************** * INSTALLING ADOL-C ON WINDOWS PLATFORMS * *********************************************************************** Preperations ============ The provided makefile set is optimized for the GNU-make system. Although other make systems may work too we strongly recommened using the GNU version. The later can be obtained from the download section of the MinGW project page located at http://www.mingw.org/download.shtml or from the files section of the SourceForge project page http://sourceforge.net/projects/mingw/ Of the "mingw32-make*" package one only needs the executable from the "bin" sub-directory ( sub-folder ;-) ). To install it two ways are possible basically distinguished by the necessary privileges. 1) Install with administrator privileges Simply copy the ecexutable into a directory covered by the PATH variable (e.g. C:\WINDOWS) and rename it to make.exe . 2) Install without administrator privileges Copy the executable into the main directory of the unzipped ADOL-C package and rename it to make.exe . Adjust the PATH variable by executing "SET PATH=;%PATH%" where has to be replaced by the full path to the ADOL-C main directory including device letter. Remember that the later is a temporary change. The Windows version of ADOL-C was tested in the following environment: - Windows XP - Microsoft Visual C++ Toolkit 2003 - GNUmake All variables within the ADOL-C package are adjusted to fit exactly our test environment. If an other compiler should be used one should adjust the files "winflags_dll" and "winflags_exa" accordingly. COMPILING ========= ADOL-C features a Windows compilation script named "comp_win.bat" that should be used. It is a simple wrapper that calls the make program with appropriate arguments. The script itself accepts a small number of switches what results in the following ways of calling it: 1) "comp_win" or "comp_win library" Compiles the library only. 2) "comp_win --with-exa" Compiles the library and all examples. 3) "comp_win clean" Removes all created files including the library. There is (currently) no automatic way of installing the relevant headers and the library in the Windows file hirarchy after completing the compile step. We recommend to use the build directory directly when compiling and linking against ADOL-C in the following way: *) Use the "-I" switch or an equivalent with the ADOL-C base directory as argument for specifying the include path. Have a look at the documen- tation and the included examples to figure out the necessary include files. *) Link your programs against the ADOL-C import library "adolc.lib" that can be found in the sub-directory "adolc". *) IMPORTANT: The new program needs to find the ADOL-C export library "adolc.dll" that is also located in the sub-directory "adolc". Copy the library in a directory where the runtime system can find it. Possible locations are (maybe not complete): - Windows system directories, e.g. C:\WINDOWS or C:\WINDOWS\SYSTEM - directories covered by the PATH variable - the current directory (where the applications is started from) - the directoy of the executable (if different from the current directory) Hints: ====== * It is possible to create a "static" library, too. Changes to "winflags_dll" are required to achieve this behaviour. The fourth line creates a variable named "AR" with the default value of "Change_Me". It should be set to the command name for building the static library. The value of "ARFLAGS" should be set accordingly. * It should be possible to use ADOL-C from within graphical programming environments but we will not provide support for this constellation (due to missing test systems :-) ) We would appreciate very much if you could give us feedback in case of problems and suggestions. ADOL-C-2.4.1/ADOL-C/0000755000076600007660000000000012120272604011766 5ustar coincoinADOL-C-2.4.1/ADOL-C/doc/0000755000076600007660000000000012120272603012532 5ustar coincoinADOL-C-2.4.1/ADOL-C/doc/version.tex.in0000644000076600007660000000022111422133156015344 0ustar coincoin\newcommand{\packagename}{@PACKAGE_NAME@} \newcommand{\packageversion}{@PACKAGE_VERSION@} \newcommand{\packagetar}{\packagename-\packageversion} ADOL-C-2.4.1/ADOL-C/doc/short_ref.pdf0000644000076600007660000065031711417030411015231 0ustar coincoin%PDF-1.4 %ŠŌÅŲ 3 0 obj << /Length 2410 /Filter /FlateDecode >> stream xŚå[moŪFžī_Į~“p»3ūŽ"ĄåårHQ øžQhūAÉw ;'»iūļū,)R$µ¢H™V|ķ' örv÷™™ē™ŹĻ//¾|eUF$‚1œ]^eĘ Ļ.sNįW”].³gĻ^¾ł61σt4{6’łņ<ÅĶ§Č‘Šš2Y>šĖŻĶ‡ÅÜŗŁŻśķvy{“ «jõˤE)”ōՒõÕÕj³ŗ¾[o­Ž\Ļsåüģßæ§ĢÖÄÕĆoŲ'YųÓj“2Ä$x·čŪ”/¤ÆWÜĢ™g‹åśś?åńÖ×)«V GõÕ^¤¬ŅՊ'Oā’‹æ_^üļ"n%3ŖŻdƒPJgo?\üų³Ģ–ųŪ7™Ęŗģ×bå‡L{>ąćūģ_’¼x¾u9kį¼£ā–ŅĮˆÉ[a“/7½üļ*ŽĮĢž/nįÄāćėåj‘8JD!s@ŌØīITš»“8Všś(- ˆX‡”ļ³!3DŖsr‚Éčx[^ kMy™ļēAĻVoļn6åE®~¹~[Q=Łę󤬰ŖæéĀĘ"/8ŌüņE颮)뀱­–}U.aŁ\ĀRxUgĀ«äbŹģ¬äŒČz=‡×fßķL6‚–…GH:AŚ–ĻlÆĄÜ2Ė‚­ĻņĘŗ/RŪ#BpÕöq_›Ž—”š’›ū~H^Ēƒpiī›D&ˆ]ś’–¼€ŹÖ©ē¾HĀŪ:üļi Kµ/Ÿ¦¬ą#9Żļ$%ŲŌK~’F¦ Y!ƒķ\Ŗm'ćBĆ %ņM!ų؜-{9M c’¶Č88¢Įä½°)‡Ģ rĖɄ@“+]‡ņ›ˆe;[mebJŽjgŸęÅoßßTLŠ?DD‘eiDHĒ,r™%ģśn£}ކ‘&¤™±b…»'‘1št„YB@¶$ōśz®hv·Ś\/Ž—4“Y}ܬnWų=Ļ„l†ßĶՁõśģ o( П$S¹H«N¬«:FļēFĪV©-•ĮėžhÖ¢§Ē}ߒцuaL¤Ā9Ø24£¦é gˆ°µ;j¼Žq ’Ā©Mov¬«˜,õC i·,,¤Ż€»L’eX)¶MD3lx¶p€aź•‘•é{0š-¢Ո‘Vhe«ƒ¢Žl~!½Ų,ĖxžpƒŸ4[®—Ŗlh!Į]Y(ՁśE’;j»·œƒŠAHßƦTzp+×¹K 9“ȵāøį§)T{šØcąå,Œē֎{ø ÉŻŖ»”±;(h„ ļRē#@ ö„K„mē\{Ó\!—bŻ¢Cqįa'į¤żó8:ß·QkļˆŚ‚&õ½Oų¾[óxU„²Ļów޵MoR°Ę%õ)hSłK&įp±'Ź›+‡ļ2\UךO(y2õµXuŖ:„ŠČ)x."ÜB‡œjׄÜ)w]t%Æ]öfŌ·®ī…_®7«¢õ©jåj³ž4·jÅśŁ|u»ĻŽŒ(ANŠ“=]‹6,īq’®)IB•Śhét@Č2)tķc6YįTĢ/Ļ’čB\pTŻ2ŗŻ³»bō4§ģ_™§~¾St‡HäʌŲÄEżÕ“T=ÕCĘlĖõŖœćܖŚæX¾»Y—SœŪC3;Č<¹ŠŽ½Ś'š0£ĘENƒ”Ąj!N„ⵓ!Bč4×µ„”ļPķI*¦t,”‘]®Z7ķ9ōdw·j‹x{W¢¦ū_„ Å×>©Ž½mH ÖÜÉŖÖ±ŃD;vl8E©ę±waŠŽ07č›|“h‹· #š¢‰ń2ŌŲĪǾP T½·“(ņƲGƒ+čюŪ/ķk»XŖÄžDr϶ į~÷Ųcī1ĒÜC…Ģ0’˜éücłĒNęŸ~< ½McUQpFŃ&„$“Ć7œŪ©dPfRC©‡dčš^HV¼[ģĪ‹Šö1j[ģ…®°ęō½m¼¦®ōe˜s“XƒhéģĪå”Ī„qRśą ļa+'_Ä‚ØÄcD*«{¦ņceŚĻ”Éjx&ļĮY|ē‘ܧ:v=żYįœ2u¦&ŁŲ&\ˆ±Ų)w/’­mIŌē¼Um{ˆdi˶%é8ō ŅżY2ļĮYvRĘęųfęæÅćźÆ©“É¢7#TѱµĆt8f7I°I†/pŠĘģy¢óņ A Čzįö{«fģRlŪM__T3¾7N˜‚ؘ:Øćõ°Goė£Ä}¤Dl:w‰: w0«)¾ĄF2MƒLel2|¼:2œ@ĘYį O„Leģä˜įū!£†#ćZūŖÄ›,“°8 2µ±“‘Q§#ÓjĪž%¶C¦{~ŠŃĘCC+žiF Ø.„t¾h²­§Ų»£tüRģT„$ōc8Źao ӓ”=NR“@SJŠ’©ŠŒg){œ„¦€¦6v24|hĘŠ”4QœØĻ}|CsVŪ9ļÅBQÕJ­'NéDĘO”Ҳń=ÅQq+cJOMmģdhč¼)Ķg]ŻÖņ—B+įŁ ĪCč­­flN0„~Œó‘’ć1“7HŅqō?ø¹ņpC˜ˆāœFąśó*Nh­ŌY[«óÜgz zd6ļ&žĶŸ‘RÓk壸1¶xøsNē‘OHcĄh>j2†”; ļčNō½nųCw«EužXį”±BŸ/XÜVĪ ę³¶˜ŪĆēóÉ0†üMc’æøżm“ųķq£Įĝ(’m`¬š endstream endobj 2 0 obj << /Type /Page /Contents 3 0 R /Resources 1 0 R /MediaBox [0 0 595.276 841.89] /Parent 16 0 R >> endobj 1 0 obj << /Font << /F63 4 0 R /F62 5 0 R /F16 6 0 R /F20 7 0 R /F22 8 0 R /F43 9 0 R /F24 10 0 R /F15 11 0 R /F47 12 0 R /F45 13 0 R /F44 14 0 R /F51 15 0 R >> /ProcSet [ /PDF /Text ] >> endobj 19 0 obj << /Length 1427 /Filter /FlateDecode >> stream xڵX[oŪ6~÷Æŗ9‰’"Eii ō6`E†bkŽŅ``$9*Kž,» †ž÷^DĖ64Żö$Š:<ē;ß¹Ń~s99ż%‰BPĘ9 .g(„""†-\ĮUųśŻĒ‹čķ4ʰ įėéõå8Eǧˆ ˆ1`s`Õ·s9MDŲW¹ß6’!AćAśW#F1N‘j6+»²é+«µm¦Q,ŅšęĮ§žĄaFčpųćż;Ąė²ó)¢ŃŠ…OOŠpź$Ś)„”,ŖęÖĄ«ŸÖ#Aœko}ZĀ‰ćc%2y9łk¢Lး0%ŠcäóÉÕ5 ųö!Ąˆ'"ųŖ%ēK J3XÖĮ§Éļ“76ä”!‘ ¢½¤ą°‡yjc¾XŌU.5Õ΁(įL‰ˆeqŠ̽·IXv²o;ÅF`c=Õ»uėØįaŽ6y¹čnJĒŗ)8—mŅć3ęāĘ(Žś·­¶]”Fż\½Ņ°Ø>cĀr9%įą‰—Ē$“@żq–ŽxLQ’0GäHŠGHńc:@¢‘¤ćXlū.Š$ĪP:„\†’Œe C,qüŚäõji*Ó°™§\,ŗvŃU²/ĶĘPĢj}¼”²(»„/‘5Ń2({˜?Ź~J“šaaā=ĘS×fµė)a[ÆÕŗ,Ģ—õ”ƒ@¾©Ė„Łź[{:ļ+#kŽ ŁK+aģM#żŃ¤ Œ”TD&„²hW ßėwœ2D}åų³ÜžMv_œĒ»X—eŽ»š ŻXĄśå3‰Y/­Å »‰9öłC!eužōĢĖżüf8†n@!Gp){,99Š ßé[NQ*R­ sKĢŠvhlÄa;õį‡ĀĖ’§Š (&žō)G:Č6śŁĢāĪE²ß€vņ„ÅBšCņÉF9· Ŗß+ÜŖ)J++],½M¬ŹÖÖŹ!O J¤X@'wĆņåĖó§9P>H¼zuXxšXNad’±z&Äź:”łŖF"½\~Q4-"ū7-1o狪™“āEÕlśĘ×ŖæŪmÕ$„®IĀź¦“Żƒ7ˆ0ŽSį® uu# $=óŽA%eō†ÕŽĢT„L>cfź²dL]¾2œéˇ, # U®‘ææ—óE]ž¼]IĀe#ĪöśloL2”č.?n|×"<Œ¹±ųS„&§ŗ8pŹĆ0źŻA÷%„sžžšU3ŒWõ¦’I=‡©õŻf”‚żˆ@ēe6EB¾ķaéć³¶5 ]ØzµõżŽ}%ÓīnÜA[¶s+£gŒśĀŖ\5łpļŁµż·ĒD?_œiYøŠ2H¬­šŃH›GŻŽ*¤÷ Š™ĻBWö«Īņ#| Žœ’có ›³ŃŲ¤Ģ·gPY5½Ń8—U³įŃmĖī6?1ĖüNvGnw}um(“„-p}ŗķä܆½³Ļž®ģÜ÷¼,V]łÉf­’„ƒłū+z ( ¶H垌‘V\ÆA\ŸŪdlQęµģlæ'­Ī«c톄žż¾>‡’>³xE®Ļ©zõČźžgŪ(Ö‰É ųžŒ*hŁĖ®×mnÄp5rń:Q@`2©Ē™ó˜-¢¶˜ ćąŁk˜©[˜‘z<ößį±|8×ʎ–•öD›QŽ»"ŻŚӔŒ8w§ßʵ¬Wr·‡P>ĄŌQćōųzįƒłØ²a˜ĶLo@Ū“Aų¾šēā-¤¢7/ xŠ Č×yqBOīOnX[Ł*G?8¶Ų®]A•6@T±<†&£>¶)f#Ś÷ĢK›.Ś߃뫹z{Ž«PłzĀ·ƒ?Taä3Nžū{nĘć52܌T_^µA:üw4gq endstream endobj 18 0 obj << /Type /Page /Contents 19 0 R /Resources 17 0 R /MediaBox [0 0 595.276 841.89] /Parent 16 0 R >> endobj 17 0 obj << /Font << /F63 4 0 R /F62 5 0 R /F22 8 0 R /F16 6 0 R /F64 20 0 R /F44 14 0 R /F65 21 0 R /F15 11 0 R >> /ProcSet [ /PDF /Text ] >> endobj 24 0 obj << /Length 1858 /Filter /FlateDecode >> stream xŚåZ[SŪF~ēWØO±‹µģż’”fÓd2”mx£“c°ul™Č6:żļ=+­d Æll9—™¾Ų²|ö\æsYi_ŸģģI‚Œ48¹ „BšŖ@)·Hp2N;ÆŽæŗ”ĮŠt^uĻNŽĮ*Z]EAœ“ē fÓńØß•Ŗ3/y]ˆAв‚ś—#F ė‚$¾¼ŒŅ(™ĘŽė8é†LéĪłg{‹9”Åāćž— ßF©%ˆĪ‰Žūųh„uI1īRŚéāä*W/N|\%FŠ”¦ųø‚/(vw-ÉĪįÉΧ+ ¤ “4ˆ1\ŒvNĻp0€’Ž ©‚»ŒrpM6p9 >īü¶óŚ…œr¤“"™+(FZ na”]LŅų¶ĖH'J'Öѹ§łÅńĶ4Åż"¢ÓOVĮ 1AŒ8V9£ćd'Qß­>ü4ĖV:®`övwį‚äŽ Š„(·PŠ4T!Ā’ ļњµQ©ƒ°B÷ƒOĶ(2­’•d Š5©•d­§źŠ)hC/ų÷U…žG[_2‹'$óś¾_1gˆØ­ō,‰p½yŲæJū>D$ÉhŁņ甫Q `ąJÕå6$Ą4b;bĄŹŌ„6vŗl€»^™CĮßķjz­Žōӆ7ż“ÖéČ0öæ^0œ>¹wŖ/:½mŚ;ד'Ūlń&ķZ§}į(x«ęŁ‚EéŒ6<œ%XfÕ|+ÅŌaģ Ć®%ĖL?uحɜŒ‡·č¹ż˜ÜōÓIō²7¢—«¶qz¤”TÕ{jņ~ļĻ–ęī·ÉĆ„)»é¾÷ń4”LUž8_R֎ōܽF Čb Š%ŠÄ°ÉN(˜#ģ9āŽ÷G7Ćčł¢ź%ÄE.t=Īä\$G2«ŗ Ó 7«‹ż8ĪÜQĘ:c7dqU](`· J’;ÖykČČÅ)¬Ī†śč#hÕ¹>™Xņ;Óń¼Kuēs~ż!ŗ›Ž“gö4ćQ4½­ī Ü”QåŽa y@ÄmĒBŁé ’ĆmīŽł ƳóaŌ ¬ä—)\¾šŃĒÉ4§ˆk‹„Bā$žĘżaüYŸŻ[‹ķ{uF€ĻŽ^ĪoM§Łūcv“OƝjŽƒÓÓ'£Atõ=ėe^ń ęõR§ƒę—*\ŒG7³©“˜F“x0›Ü/ļ»ėøpeŸŒÓ‘żNóˆŚŪ?ē_‡æ~|ūžųC~_119ŅQœō ”ń„sĘØ?>ŅcŃŪ’äŠCž*jŗ3 ģįuFJÖhäóż£geLž“W!±—?ęC9äPxźµ'„ ›ć}üĀ©žSR\¹c>”įKg7ƒŅĢū9sQg~Ÿå4į~ÄŲ!1ō-Xߚ³WĘ7ōŁūļ“yOP@ę‚¬{V«Ž|  ĶōEŻé> endobj 22 0 obj << /Font << /F63 4 0 R /F62 5 0 R /F16 6 0 R /F20 7 0 R /F22 8 0 R /F64 20 0 R /F15 11 0 R /F44 14 0 R /F47 12 0 R /F65 21 0 R >> /ProcSet [ /PDF /Text ] >> endobj 27 0 obj << /Length 2100 /Filter /FlateDecode >> stream xŚķZŪnŪH}÷Wpß$ÄźéŖ¾'Č3ÉŲĮ,;ė‡?x-966¶¼²sń|żžęE„&EšL0öE×bUׄ«Īiņ§“£ŽX•‰` g'—™q³˜Sų‰²“yv:łńõÆæĢ^MgA:šü8=;łWńöUäHhM™,.ųų°¼9ŸZ7yø¾(ÅėF‚p¬*é×IR(é+‘ėĖĖÅjqūp]j]ŽNgŹłÉæSź kāźā_ō“\/ųÓb•RÄ$x#ōKJŅÆ%–SęÉłüśö}±¼ėŪ”V+…£µkÆRZҕijgQäčo'G’=ЦdFė4Ł ”ŅŁÅĶŃé™ĢęųļēL c]ö9—¼É“'į>~ČžuōĻ£ŸŹ”³Ī;ŠĘ ļ” ?IćK_—SE“Ļńeq?„ÉĆģĆāSžķCtĶL^_’.IŤÄ_‘˜*)fņŪņćĆõ-.Ėc,× &£‹B±B²Éf†8[{SH’­I"²ŹT1x>1ś÷)K7łm£y+WŃ Źœ ]Ŗ-ƒĻ\SĖ‚­Ļf[rI™GźCp•łhצķ’^ÖģŽl’¾Ń7#mDМĶ4"Ļŗņ<čÉr•Ēł|5/ā÷%Ži2__—F¾śįÕ³gų@•` Łs¼[ *ųu%‰)æ.…-ˆ5ŪĢX‹õ¶ź™vĀZŖU“®Ų”ƒNųėŹrścyæærņJČ%­ ēZ—.™®[õ>ßņ5«—ˆ,¢ųpžžųęųöų?‹ÅŻń—ÓŪ³ćĒӛ³†ˆbƒjkž޽¬D’ze%w.Ö¬A*ś™G3Ō™ŃŲŹ¤ ē°ż\QhZׅ!».Ü?«ål¹š£æĶ”R“ū‹óēłg‡gŹ>Ž‹āߋåĶŻĒ‡jējWÓė“`½nŚ)Ū^øµå—I%$ ­7õ›äś*‘˜»”¢ø–uƒ’’ŅƒÜmŚG•čŻČΘmž?|ĄŹlŸŠŹ”BT”߲ʺģ¦9 ±$SŖ•¬Ā¾®½5Åu—Rō"i1ķŪ«kŖŪ{Y4\*Žī0V‹»ój£Ŗ”%cփė2µė+@… B‡Ö]Aewv}͜Bö<¦HŌÅŠ•[]-0Ķļ)µBė]+ķś¹²[.|ŚwAKģCmFqAK#s«É…d³7R oĢ fÆ1C0Ú}ˆ¹„.@g©%ėØ?Ģ{“K;¬Õ#éz×dC£—±Ó”¼ßKŌ0zžń#ģüżc³—¢ØĀš“{ē׌÷@}ڤōźža¬ęƄ ~·łĄžąd.‚¼ią*VŁZƒ¬/Ņ!kF©AsĀw™jwNl/»— ̦x{ٱ€Ž“KĻ?ö‹)C[ę¼0*‹l.“ś™Ķ¶ÄzMޱ"š2e©ŸĮō¬Wqƒ8…Yļ@š¾÷QĻ#ŽśbI:±pB±z®Ö„8¹.%•:C”…*ž³@jr×28#¼ćvȀ¹mr-ŃłÉƒ ڊą)×ÅŌ2øį!ņI=ŠŁSĄŁ]=˜BlbŻS c™"~rŠ®ŚR¤fšu£¤(ź²Ö…]µ¤h Ŗ5yu ˆōuØSńX‡‡‚:¬Ē!•ZŻRKQÜ4Q҆a NŃŖ]›{Ø®äīońrz9<0 Ż; :|oużc³Ÿ"Ø0<ØS@ń±YuŸ"Š[Lg4¹xX–æõwńÄĘ|æĢ¾{×[ē}·¾9¼źr°ŃšŽ6ö0O4*;Øē°R9.ŌsP‚Ž=€‰ę–AC2vņBRcH j:Ņ ‹®S³šč:ó­cüõ ė̋ĢõĢ“žž!ŚĻT(«õ0<Ä}ZĻÕõū«ÅŖź<ģ̚NĘĻõŽĆĮ“wĻ‚łG ŻŲ$Ę&ŸÖ›¾6›Ō’’Ļ&’lņ€Įc”½wIlmńęŖ·ņæĻWhłØ^-RkCåü€æ†Ō“C ¶ęšä²‡<ÕŻB«źž&ćj­­ œ½-Ę"°Ł9_>M.]ē\āIIr­IzQä#„’Kéä&*”óy‘ųē[ß\ńŸ]Ūó[öx50ģ9W’øy:üń¤wKź¬@tē·óŌņ8‚÷0&–Šž›¤”t\/ Öµtŗ-½Wé¤TĘg ‚ėV:ܳt„ĆAhģT:¶^:É{`A )1C Ą~÷ĄZźuž®yĒõ( ꆛe¬ÄFrk]õ49<ķtlskm÷F5ŽWs0äŚÉ,2M;El–A'06>’«"¾Ł™ Āć€Ę’ČŁ6ź“—aé}1yM!’×ĘCŲu­ŃȧhUM’£äŖ¬ ßģ­Ģį¬sŲąA’Šģ挀ņYĖ"ĘÕ¢-·Ä+¶^Œė(h-b³ĮŌm&ÉlżmĢŽę³½#“—'h8pē¼›µŲ»A=ĢjĻå1Zq„æ× ­1¶Š“Ķćbp‡kL‘šÅ¼nÄ^6ąŽ ūoDi]'ØēQZšewń^Ż$FaĶ$Ŗ=NKH­ŌŗNĢĖ&µ»ÜkŪ^¤ń‡ŗ—CšVC”Ffķ†ÓBĀ”±±ČÕ)ėgl®äœU˜žŚ¶ovd¶ękŌģazŅĢluzŅ/U®µ4J*‘RŸPõ¶¦ó=qéÉŪ³§©;ńŲ‰’SŪ‘+§™ŲŗĪ•óÄ®Ł)ĖļŅg"~Ó©rTĻŹy—>1Ī<©t”ŚPßäć“[–ZÅēż¹¼]§+ƒ’ńƒ3 endstream endobj 26 0 obj << /Type /Page /Contents 27 0 R /Resources 25 0 R /MediaBox [0 0 595.276 841.89] /Parent 16 0 R >> endobj 25 0 obj << /Font << /F63 4 0 R /F62 5 0 R /F20 7 0 R /F16 6 0 R /F22 8 0 R /F64 20 0 R /F44 14 0 R /F47 12 0 R /F65 21 0 R /F45 13 0 R /F51 15 0 R /F24 10 0 R /F48 28 0 R /F15 11 0 R >> /ProcSet [ /PDF /Text ] >> endobj 31 0 obj << /Length 2013 /Filter /FlateDecode >> stream xŚåZ[sŚF~÷ÆŠ#İŽū%™tĘq’™xŅÉ“u^L<Å›ÖH–Ææ¾gµ’`Š›¶Optn{ö|ßYōędļą½d!ČAƒ“Q ŅTJ1ųŠ'Ć`Š9|ūéc’ØŪ7X‘Īa÷ģ䞢էˆ"ˆs`÷ĄmšLĀ®Tt|ž‹×¤(+¤ßz5bİ.DĘ£Q4ātœkMānŸ)ŻłöčSOąaNhńš§%ś .¾‹¦>E” :śčÓ£Ö„DŅ„“Ēń…soū“JŒ)C;ņi…ü^Hģļ[‘½w'{ß÷¬)r™¤AŒńą|²78ĆĮ~;0R÷™ä$ąš mąö*ųcļ·½7Œ+D‰ąY* C Ó@Q˜0ĪčļŃ]—‘N4½‰l,¢ókWŅęæ`Žö÷į†,÷C~˜ž÷]ś'0EšéŅĮŠx–Ź@B¾ˆR«tą€+$%©ÅČk1*Ą<Ź ƙ‹q”Ü,zN±@$¤³œ®t1"ę2[³J”Źd“fuŻŁ¬Ś¦įEoŅ‹{·ƒÉYļiŸ-I&d€K±E&DĀÖ3j£Éā¢Ōīƒ q *Åf“qˆOøø¾`¢\-s^YU3HńéMŚO¦CŲs}ĘXēę<¼ ³{n“Ó„:+»Wī×ódr}›F7¹jUS­ !“ÜčO¹Œ‰3²Ą6³¼°O|>$™ś±×^{‰lÅ]—ó˜“P;Āg®¦GfµX5÷މAĒéŅØī9öyĪ‘$uU¶°|F9øV¦źĮ§ œgb¶P®ē×¾O9Ų„vѧ4ĖĘ‹ŽŅbŃaĶÆlŸtĶOŌÜĄYO+ÕæI”œ!nI(ųlV•3CœÉ¹MZ3GĮG*2U°(yc˜Ž‡Ó”7ßٻܹž×Ų€²š÷%V²÷”·0»-żĻ#™śā  Z‚ō„/]…aŚJĢĀ"“¦qfѲ°īĒé„7Ž47…Ō_QtķÓE2¬”zŻķSĄīå &/…Ł Ōķ® Ę)"Ņ>@—Ć%ØŻ-zRH²’źw5ÅK(Æ[õ€Ś÷ŽēĮ÷3‹l§öŸuIg5¾mž”ŵ‚µ…o alG|sˆÖķ“ĪyšäßĶćĻqr”I.; rŖ,ŌÓ%ŽP”gµ¼Å>ƒ9l¼‹N¤nA¬1±6 ˆi(GżS@7®Ŗ ²Ŗ$„õ¬Ԋ’9m@+ ŌF 5äŸC!nēXæ]Pˆ3šuūQHfpČĶfįå+E4ę$)Hī†B&cö5«ŗįźšg0Ü'k&¬Ķ²ø. ‚Łq ;Łl„@—ć‹ĖhZצ°øĮsĄ#¤ž X™lz¹›pųg2Ž­lź#joĢV³—Øõ!óŠÉ%Қ®{^Ż–"CŁ:l“’„ MŌ}·c*iU®“ØTÓL*+ś¬Ÿų“¦‘ŅśG$ķŠ„FVŗQ¬DĻg²Ļ¤=‚ H97-#¬j5’]«±„ó±y5b?ƂėÖd­µjōF‰åfö¼k£’µĀy棜f5OÖ|Fpt©jé~ć{hö‘Ļ3a§|ż° ę(ĒĄ›.Ųe\Ī7{QŪ_X1o5ؕ՚ŹåSi`{ł³ÖHåK—§—•OŹż&½‚Zk; RJ9M~҇“~7“:ó)šĀ¬ĶŸkH­R˜Ā@NtCŠU%©ŁūÉ=ōlčß+Ł=Õ°±i'm„*Ž.„•ģ^oŹī×¶$ÆGŠGfÓŠ>ģWJż{‚@-›Rņ—%%W”JĖ DhµÓ T1*w4ŌN dž5ć9ķ‚įĶ€7VšĒ pœZX­õŽ Ē]ƒ.éŲ‰£?¹/V›§hq„@”Ŗ„ŃĆõŠī0z]œ}¹s/ū9?T1~(\?ģļŁųao֎61nUšPˆĆxØģdĘTĖGfŗŁ‘™n…ńõqĪØ…Śb&Č#öQ\™˜-hĄēE£åm› nv"ś/$٤a=ż Ä.«¢†™>7A֍ rӆ“Ž 3›õ©“»ńcņ©‡!3PaZ$Č$[€Ÿ Ć.§[9Å·Ŗ¤ŠĻM[‰ 'ČŪ…š? Č 5 #bšå5,7©įäŚ¾Ē^¹2Ž“ų)š&®e]u Ó4ū'p ÷±·6hķߥųÉkRT’i™”P=Œ Uƒ/ļp“0#g·įU!9ČŹģf9Y~÷N®Æ¢—‹•«Ą )(ŗ-Óņż5ąJF­ŖZ«GZzž,B(óׇÉķ·+Ė.©č<ļ¹ŪGKŁŻķ‹Ź»ćWUysśšzņķ&9’@m*'6tŪ.ŒāĪĮ{6Ż;Šös2r×ńоĄ˜>ŗO“0Ž|~Fœ^\ZĮJ¬µrž'ßĘa¼ĪŹ’$ćq:ÆĘOŁtóP˜f„ĪLßDiš½āh?Ü^»«#īÖ±éÅķ"ĶŻĄ¶(’eżš÷k{TŒV¤÷Š{ĢŖ’79”ž”ŌSą^wĄąkeŒ+MzzĒ>c¹pžÖdÕÓ~ųvE Ž±Ø$dÓ77”żUßO5Z+@“įü/0QüPōX endstream endobj 30 0 obj << /Type /Page /Contents 31 0 R /Resources 29 0 R /MediaBox [0 0 595.276 841.89] /Parent 16 0 R >> endobj 29 0 obj << /Font << /F63 4 0 R /F62 5 0 R /F64 20 0 R /F22 8 0 R /F44 14 0 R /F47 12 0 R /F48 28 0 R /F51 15 0 R /F65 21 0 R /F45 13 0 R /F15 11 0 R >> /ProcSet [ /PDF /Text ] >> endobj 34 0 obj << /Length 1447 /Filter /FlateDecode >> stream xŚÕZKs9¾ó+ęePŌzėąCbÆ«6•­ŌfŖĶ¼fˆ©5loüė·Å<˜ńįĶeO¼D÷×_Ż- Ž]Ž\(ž+%K.ē‰ŌÄ0hĶń-H.gÉtųöüć‡ÉŁhb©†įŪŃÕå{ü«~ 4! ”ٶėåõHéįvq“/Æ;±D3^¬>÷Z¤„SS,YĢēé&]m¹Õõj4įŚ ’žé3ųe¬ųņĒö–€ӍĻĀö‹>ųģBM¹b=blx=[¬¾eš+ŸUE‰†2“3ŸUäD±āäÄ-ür9ø8W42MŹĪEr³LÆh2ĆĻŽ'”H„“§ŻŹe" cńé]ņĒą÷Į»<åLm4ģB@o†'ߢŅä±®G†O“»ōŃ=Iļ\@rx¾ųJ»TŒ8Ć<\©ĆOė‡ķb•žŲG¬ )œM‰b6™AĄč<\Œ¬®7OĪüõf–łm0œ„ŁĖÆTŅ3 ÷Éď¶éf~}“žĄą - &|I ·fO‹D(VņŅ“Į5.0!Ō Äb*_šRfE” TaĘÄŁČCaŠ(”DŲ„ÄńšJD5‡ŠC]HŠX‘«dŽłĆܹ4mÆæ—ćÕx6ž'M插œ®®¦³ø™Ž`øĢ^ų“V²Õ¦ Ü%a …5‹ŗ®į¼]ē²Y]Ė”‹2ēŹ­™3;Ń"Ü3e=?gf^(·Hwké–VcS8¦lX’GӍM‰3įO÷)ųŽéžņŠlG ōd» ó”ķö$x³ ÜFõ:©%” ¢z]Œ’Žy(JĘziuR ")nu§4ÓžæØżńĻéņ˜ā;Ck ¾†-,±¶^›”r;脟HaˆŃ‡ĒG+>»ćņZ&“µ[/£Ź²øšF°^āj6ĀFIGŒ,aq­śX•ņ ĄruķĘÕ÷Le8°p—²tÆĆ‚‹Ąé\čćaĮµwėaUܐ؜µdQ‚‹±QŅc#{¢;Żö1%ĘY`C\—Üt¶\@eŻĮ5UVCwTYk·MZ¹ū˜ÅÕ1ߎ°DѼ!»2-j > endobj 32 0 obj << /Font << /F63 4 0 R /F62 5 0 R /F64 20 0 R /F15 11 0 R /F16 6 0 R /F20 7 0 R >> /ProcSet [ /PDF /Text ] >> endobj 37 0 obj << /Length 2359 /Filter /FlateDecode >> stream xŚåZ[OI~ēWō¾™`uæ$Š“@2£h³›°+¤ BĘn|a|I æ~æźŖnwAƐ•FŚ—t·9}īē;ēTēųlļš- ʈSŠg£Bb¹)Œų‰gĆāKēčŻĒ½“żž£†uŽö/Ī~Å[¼ż3ŒHÉ ^XÆęÓž¾6ÕxÉS!Ž.jźwYŽ”jk’ńhT.ŹŁj¹Īgū=alēź.ĒžįeÉxżņĒ-ümžV.rŒ8#|Cō!ĒĒjŠł>ēžp<ūŌĻr\5%†5¦äøĀ?LÖždļżŁŽ{^-X&ķˆ²L÷¾\ŠbˆæżZP¢“)¾W”ÓBZF¬Ćķ¤ų¼÷ƽćr.‰±†UĀĄCŠĀą'ŖlŒÉbüm_°N¹XzSTg4_„› Ų×_܅§wćß(>6žń™x] #‰r¬č„¤&°|’Ēŗļ#žF=9<98Ą ŪøÉĪ”ōjõōq²čIEXŠß½“L·i%G4›€æ$œ¶I„"Öøšä6’Üóŗ…«č𓄉VŖčµČ¼)9‘ś›Zā*ϋچ¢rD#oŽęøq¤šjŠę.ǶŖ[ü¶Ŗ„’Gjż’UK¶)÷'©u›åĆ2ö)|žéõM ¦¬˜"T7iõ^ ”åuSŒØ xŻčĒ!g©T÷ V²ĒĮš·22 škb­ŗĀŁ åÄ Ū`A‹‚Č5X9\åA iˆÖ,™:MāŽä-1.Ö-ąc>,Ž/«ž×ī¬»źÆ»ĆłdŲvĻæĢ.¾ ŲÅ>ėŌ‘øg" Sjõ'ō{ą&e,®ś9nŖlōHA‰£Ž…ī! `ŖF×Ag&DQŹ„˜”•5ł¶(ėÅčŹm§Dz(ėóŻ?öC’ƒé ö{¬3ŸŽ¬į‘U?“;O8Ež&įč Ēīe Åg( ĻŃ%z€Ńx©\”@åM@Fü•¤Ń$(Ņ©7ß^‹ÕĖŖ³™+Z2Q@ ķūµæčp1õåMų1§¼€8°ČiŸųŁĒ]µåóiN3t%·)ėی…æ“ŠI+H”‡ ō¬ ÕĻ·š~|Ģ–ų¤'Š\!³bHW>Ēī²”²ÕȰ#TāqĘmØŪą|“©j0Bŗ¶ĻŽę2Ģé ę.RePAZA¤ƒƒś }0IØKŗrˆL+:Ųš’ŽhŒ^AęAʰÅ6¹3Īg5ŽłFó¤W'lÜ`³MÜx“U«U%ˆŌ“@-‡Ę  Œ= ’ś77“ń āŒ¢ó}¼ŗĪY†Q’oęźaÖ,mlHd[§(ņžē+É ń^‹śmh˜4č1,'(«1TČĪj±žAÓrĪö­čō«¼žT*~[–‹q¹Œ>JÅa©ńÓ²E]ÄŠü3a“rōįŹƒ^bj;ehѳ„+ń>`T41ä\?›µˆµ’{>«„ Xc’Ń&ā„O=§\Ź*ńš=ö^‹¬æ ¾»ź/ĖąčˆĪ .«¬q~ŖŪ‰¢*±lūų¢(Z;¦†—Œ/R3„Læl|Į&ĖŅĀR³äzžķ”āo“ńūćģQÅŃÕ½ ,™0NųLJ„.Jl„Ėr32ĶŗĆĆæ§~^š]tŖ+FLOŻŁšóćŌó]ō R¬œ2?i‚’B-Õó&Øb®üØ“jįז9 ūƒ’ĶŠq”©Ÿ€ mTž=?iųć…LK`ųYUSWŁß÷{Ź5Ż ŻŁ »‚MdDKnCŽ>DZʣ±ačä;ś½—q‰n +īŖ–ŻRÆ.dØ§]„£&…»Ä-¾§!?ˆÕŃąīPŌM¶ą“M“›Ž‹Ø&›Uļ ³W¶ !•ŚōĀŃŖŒdПLüQN8›P‰ ČwŃL:q¹É1—xü꫱³}]”eĪ&`™Żœ ³½^8E$÷ē+¼jUĻ(žł/“ž$Ø1›Ļ~”‹y ł ęĻr&ćŚ(³YYX˜Ėlčžēż§Ļ‡˜l†ĄNd¹ĪŸHć6Ÿ‰ž<*œ®Š‰–?Žö§7“r‹S©F”ŲcN•hwUoMšaVWU•DBH„Eˆ}ķĘV9__Į =ÅUēÖÆŪįöÕ«Óęī¼¹{u“¹=~Óę&cŠNßNļP’óĮ)Æ&@ŸVEø¦“sxŽ®ā䟿äÆć”’ö½ŗ OÓžj1¾Ķ 9ƅ]ÕH”Fķ”łV÷ē9öG5{ŲĻŗ2 šÆoż+ĆóNé«r¶œūc>’pi}nV¼sźäć6ž}C’ØNNĪkvńF‡e¹ZUéżĆś&*p£Ż_|]OįšūKśįõĻ­ļ\£pjĆķŅ®ģ֚hŪR$œ\ŌYvÉŗ`Ū½½”9Öč —­3”Q}($ü‘P÷Øūųe Pi^ĘŃ%­d]ŠœŒÖŽŅR_€ūq›æäķ¤õó»ŸŻ£ˆć(ā8”æe·7źÆŲs’3CśÉ”c5¶ˆ‰½;~{4µĄ’¹Õ > endstream endobj 36 0 obj << /Type /Page /Contents 37 0 R /Resources 35 0 R /MediaBox [0 0 595.276 841.89] /Parent 40 0 R >> endobj 35 0 obj << /Font << /F63 4 0 R /F62 5 0 R /F16 6 0 R /F20 7 0 R /F22 8 0 R /F15 11 0 R /F64 20 0 R /F44 14 0 R /F47 12 0 R /F48 28 0 R /F49 38 0 R /F45 13 0 R /F24 10 0 R /F46 39 0 R /F65 21 0 R >> /ProcSet [ /PDF /Text ] >> endobj 43 0 obj << /Length 1384 /Filter /FlateDecode >> stream xڽXMs›H½ėWpD•bÄ|CN›ÄImRI%›uUŁ0ŒķŁ£ŠķŻ?æ=Ģ £ÉANķIfz^wæ×Żšü|±z%h€1J9'ĮłeĄ%Jˆ ¤¤p ēEš9|vöžmōb„±Äį³å—ó7°‹Œwa‰c8ˆŻ†MgŖl)dŲéÜ/ß=$E’Šaõ٤ÅŃ8–čĖKÕØŗÓŽŖ©—•Ixq7eĆf†É°łżū8Žž®š)C#ræčķ”ÅÉv…Yf…®Æ<]OY1’xėŚ‹)«̆OžŲ%‹—ē‹o {TąmšDŠ(eA^->‰ƒž½ bą nś•UĄŒ’.ĖąĻÅ‹ēCŹ%"˜³ŽKB[la±›r*yønĢ’āš».T{ ¤ąÄHhšŒ$H¶…2²Q$"ą1^3CJ80Œ½!dģ(†č 8ŒļĶ_1–.Ģąßh-fˆ‰ūüBśDx•껽P%ø“°Š°ZśŁ»@AO?xԘM§kˆ üĆp }2ŁN|)„†lÓyiš›¬)¦šŲ·¼]Mƒh§|XŃ( n«šŚŗа[µ¬ˆ&ɘ`8®—Y{u&ŚØF»Ą5ūŃ!Öķ{1ŒlĘp)°4ńõęßÉĆ9āT‡w×p(IDؚrćBšKw׬;]é²į‰°$¾(UÕŗY]ø µ©KĄ˜5ī¾ś¶é÷“SP#!"ØM³°ŚhĒ uՌ8d!÷æ Ō¬¹Ū'-xˇYéx¦¾Ł›%ÜéģÕĻįMēćpØgåf.Æõ•=ūP ł.”%€ŻŃy"øūŖ[Óx܋d—‰4†‚ĢÅ>aw‘B©bxŪ9Ŗ¬č&+„ ź 6‡ßg{ī“»ÓÕŗŌ¹īÜæžR62.Ė^ ƒ6.7uīˆu< ˜¢Ÿ ™ ‘ž¤ņWKčcP±ģ¶jõ.z_Ix‘åöĮ×ńcK„5Č ÜÆ UējˆOV޵ś'€±|, ~hQL ’’śĖ^›³&8ĮsŚÜTĒS„Y0˜²8ó¬üØrP;4ŚĪµŻäG‰K³®ģCÓį YCMc!([,×]·~ŗZŻÜ܌”¬€zĆ Ó®ž°ģ§t[•‡‰87īū³ ż“œ˜{Ļ[.ńÜOK˜ļ|@K9JąŒų¦’ ^’×Źē® endstream endobj 42 0 obj << /Type /Page /Contents 43 0 R /Resources 41 0 R /MediaBox [0 0 595.276 841.89] /Parent 40 0 R >> endobj 41 0 obj << /Font << /F63 4 0 R /F62 5 0 R /F22 8 0 R /F16 6 0 R /F64 20 0 R /F15 11 0 R >> /ProcSet [ /PDF /Text ] >> endobj 44 0 obj [611.1] endobj 45 0 obj [642.5 589 600.7 607.7 725.7 445.6 511.6 660.9 401.6 1093.7 769.7 612.5] endobj 46 0 obj [559.7 795.8 801.4 757.3 871.7 778.7 672.4 827.9 872.8 460.7 580.4 896 722.6 1020.4 843.3 806.2 673.6 835.7 800.2 646.2 618.6 718.8 618.8 1002.4 873.9 615.8 720 413.2 413.2 413.2 1062.5 1062.5 434 564.4 454.5 460.2 546.7 492.9 510.4 505.6 612.3 361.7 429.7 553.2 317.1 939.8 644.7 513.5 534.8 474.4 479.5 491.3 383.7 615.2 517.4 762.5 598.1 525.2] endobj 47 0 obj [525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525] endobj 48 0 obj [514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6] endobj 49 0 obj [288.2] endobj 50 0 obj [555.6 555.6 833.3 833.3 277.8 305.6 500 500 500 500 500 750 444.4 500 722.2 777.8 500 902.8 1013.9 777.8 277.8 277.8 500 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8 500 277.8 277.8 500 555.6 444.4 555.6 444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8 444.4] endobj 51 0 obj [413.2 413.2 531.3 826.4 295.1 354.2 295.1 531.3 531.3 531.3 531.3 531.3 531.3] endobj 52 0 obj [277.8 277.8 777.8 500 777.8 500 530.9 750 758.5 714.7 827.9 738.2 643.1 786.2 831.3 439.6 554.5 849.3 680.6 970.1 803.5 762.8 642 790.6 759.3 613.2 584.4 682.8 583.3 944.4 828.5 580.6 682.6 388.9 388.9 388.9 1000 1000 416.7 528.6 429.2 432.8 520.5 465.6 489.6 477 576.2 344.5 411.8 520.6 298.4 878 600.2 484.7 503.1 446.4 451.2 468.7 361.1 572.5 484.7 715.9 571.5 490.3 465] endobj 53 0 obj [761.6 272 326.4 272 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 272 272 272 761.6] endobj 54 0 obj [458.3 458.3 416.7 416.7 472.2 472.2 472.2 472.2 583.3 583.3 472.2 472.2 333.3 555.6 577.8 577.8 597.2 597.2 736.1 736.1 527.8 527.8 583.3 583.3 583.3 583.3 750 750 750 750 1044.4 1044.4 791.7 791.7 583.3 583.3 638.9 638.9 638.9 638.9 805.6 805.6 805.6 805.6 1277.8 1277.8 811.1 811.1 875 875 666.7 666.7 666.7 666.7 666.7 666.7 888.9 888.9 888.9 888.9 888.9 888.9 888.9 666.7 875 875 875 875 611.1 611.1 833.3 1111.1 472.2 555.6 1111.1 1511.1 1111.1 1511.1 1111.1 1511.1 1055.6 944.4 472.2 833.3 833.3 833.3 833.3 833.3 1444.5] endobj 55 0 obj [500 450 450 500 450 300 450 500 300 300 450 250 800 550 500 500 450 412.5 400 325] endobj 56 0 obj [777.8 277.8 777.8 500 777.8 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 1000 777.8 777.8 1000 1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8 275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8 611.1 798.5 656.8 526.5 771.4 527.8 718.7 594.9 844.5 544.5 677.8 762 689.7 1200.9 820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 713.3 668.3 724.7 666.7 666.7 666.7 666.7 666.7 611.1 611.1 444.4 444.4 444.4 444.4 500 500 388.9 388.9 277.8 500 500 611.1 500 277.8 833.3 750 833.3] endobj 57 0 obj [272 272 761.6 489.6 761.6 489.6 516.9 734 743.9 700.5 813 724.8 633.9 772.4 811.3 431.9 541.2 833 666.2 947.3 784.1 748.3 631.1 775.5 745.3 602.2 573.9 665 570.8 924.4 812.6 568.1 670.2 380.8 380.8 380.8 979.2 979.2 410.9 514 416.3 421.4 508.8 453.8 482.6 468.9 563.7 334 405.1 509.3 291.7 856.5 584.5 470.7 491.4 434.1 441.3 461.2 353.6 557.3 473.4 699.9 556.4 477.4] endobj 58 0 obj [525.4 499.3 499.3 748.9 748.9 249.6 275.8 458.6 458.6 458.6 458.6 458.6 693.3 406.4 458.6 667.6 719.8 458.6 837.2 941.7 719.8 249.6 249.6 458.6 772.1 458.6 772.1 719.8 249.6 354.1 354.1 458.6 719.8 249.6 301.9 249.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 249.6 249.6 249.6 719.8 432.5 432.5 719.8 693.3 654.3 667.6 706.6 628.2 602.1 726.3 693.3 327.6 471.5 719.4 576 850 693.3 719.8 628.2 719.8 680.5 510.9 667.6 693.3 693.3 954.5 693.3 693.3 563.1 249.6 458.6 249.6 458.6 249.6 249.6 458.6 510.9 406.4 510.9 406.4 275.8 458.6 510.9 249.6 275.8 484.7 249.6 772.1 510.9 458.6 510.9 484.7 354.1 359.4 354.1 510.9 484.7 667.6 484.7 484.7 406.4] endobj 59 0 obj [844.4 319.4 377.8 319.4 552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 319.4 319.4 844.4 844.4 844.4 523.6 844.4 813.9 770.8 786.1 829.2 741.7 712.5 851.4 813.9 405.5 566.7 843 683.3 988.9 813.9 844.4 741.7 844.4 800 611.1 786.1 813.9 813.9 1105.5 813.9 813.9 669.4 319.4 552.8 319.4 552.8 319.4 319.4 613.3 580 591.1 624.4 557.8 535.6 641.1 613.3 302.2 424.4 635.6 513.3 746.7 613.3 635.6 557.8 635.6 602.2 457.8 591.1 613.3 613.3 835.6 613.3 613.3] endobj 60 0 obj [656.2 625 625 937.5 937.5 312.5 343.7 562.5 562.5 562.5 562.5 562.5 849.5 500 574.1 812.5 875 562.5 1018.5 1143.5 875 312.5 342.6 581 937.5 562.5 937.5 875 312.5 437.5 437.5 562.5 875 312.5 375 312.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 312.5 312.5 342.6 875 531.2 531.2 875 849.5 799.8 812.5 862.3 738.4 707.2 884.3 879.6 419 581 880.8 675.9 1067.1 879.6 844.9 768.5 844.9 839.1 625 782.4 864.6 849.5 1162 849.5 849.5 687.5 312.5 581 312.5 562.5 312.5 312.5 546.9 625 500 625 513.3 343.7 562.5 625 312.5 343.7 593.7 312.5 937.5 625 562.5 625 593.7 459.5 443.7 437.5 625 593.7 812.5 593.7 593.7 500 562.5] endobj 61 0 obj << /Length1 2079 /Length2 13636 /Length3 0 /Length 14880 /Filter /FlateDecode >> stream xŚ÷PœŻŅ #Įą:ø»»CĮŻœĮŻ=HpKp· A‚»» ž ®įņŹ9ÉłžæźŽ¢ žÕ½vwÆŽŻĻ 4Ŗ,Nf–²NŽn,¬ģ‚) ¤.'€‹•™†Fģfoł;2¶%Äģä(ųC b r{±IƒÜ^ˆ@'G€‚»=€ƒ ĄĮ+ČĮ'ČĪądgųŃ "y€-@V€‚“£„+2”“³7lmćö’ē?zs‡€óßĒ–°9ȹŁX:¼d4Ł4œĢĮ–nŽ’‚^ŲĘĶĶYĶÓӓ乏ź±e`x‚Żlź–®–K Ą_’Ź Ė„±"Ó4mĄ®’84œ¬Üy7ŠĖ†H8ZŪ’·`WY°—„…*ŲĶÜęŸ!śĻ-¼·;ZŖ:¹‚’zįX8ŲŁ’ļeēĢķ^^*®/wõ·Ėņe„ž7„Œ£¹“Å_»ĒÉĆ A odö—ćäįųr¼,©…„×ß³ `cutr{9xē°r‚ ’u£¼<6‰æL’ ^›äoÄ`“śųlŅæ‘€M濈Ą&ūqŲä~#.›üoō’Aé7zÉü^2(’F/Tž‹ų9lźæ7€Mó7z‰©ż_$šō½D1’/ś«ĆlĄ—J-CĪ—R_: rµłƒņ’Ųź7|9`õüĖ žƒüĄśųRęļPÜ/­¶ńv¶yyŃžf¼Ųž<’¢ÄöųŅū?ą‹‡?JyŃņGØæJsś¾”ęü;÷ ׳åĄŃŽŅŹķ·•ć_ė?Kś_ó‹ g{w×?‚½X\ž€/ŗ ĄæÉÜ/żwµ’Ÿr¼Črū¾0Ü’€/*=ž€/*=’čšKŽĄY>Ć’Yswȋ ·æ_T/7ųü÷ē‘„„—„9ņŹ¢“¹P˜m}ŲēŪĞ,{“"s4{: ,¾+÷{t„T†ŚœMȵDźH/ꦎ ż•ų*ł“ļak#Bd[²Zūƒß£É;õ™½väåi¼Į©¢C‰†R$Mń}æ'?ķ`;ŲVč.š<w~tՂ׷žżr^ _Ę#÷ŌökyQ+fYā“Ž—ĪÓ䛽_  „wc!EdÄ>óĀ˜æŗžĆĪz&WxĒ„ģĒUģ«’•3žnĮg½J“Óµ›šPŸ€ö {|†ÖWņ[šž’oYI‚BDl‰©ńā'Ń  wE׊pÅŲŌÖĮw“`© Œ™ˆsµmɑļö¹Ųy |„³O&…Č®jOx>±Õó9P±A;·cUĪČ̾${²°+z1ųĪo‘ßŅ–x— f铞Åß-sšå»ōų‚¼ŠŽ;aųnśOMÉ9"~0øŌŌ;՜†"”rŲPä Į›Š¬Į~¶…&.›Q“ÆŪTčņAīSžph*¶j,¼'Ž óuÉEsĻ=lŁ¢ĀĄr&>ĖVP”Ēń՘āC §FĮGƒ”Ɓ÷’fŲbćU@č§°z¾Ś2Ø(-ŗ€ŽØ%Ņś²ōF•Tp²q¦|6 å»E­¤E’ߌ|ÅōIųcĻ( FMå”%•“ō)ĒūJ.äĀīhÖńé‹.V<Ž„šyRį MBąČe“h„€ž°J9d÷Cźv(U¶č'}Ūžk›‚‘&¦ ­_žµĻ?w©wū¦· ·t”Y„Šéµg O•÷÷Iņ:z[ø°Šįę%ÄĪķM0]{ʁŖŸn*P:ć½­4¼Ė¶»Ģ¾bMō™ ø“:Ē^«n'~Tv‡,2(‰øŪ”Ē/„ĢKO®ä·õØĪĒ—ś|j!‡ėīžGŽe)›ōŃbœųBĘUup½ó¦Ų?ŌgOMfa”}qk‚5e×Ü«­ÆŠƒ ½‚ˆ>+[X_8†w9‹GńĖ|Vō“Ļ#–\G>;4Cw DÆ*9Fp©gļO­<ŸO^{!ų nq/Oē¹5[Ż­)G N_?›ŌĮĻß),².1x$DŽŠ!B*"Ą13åĒŽ1źu!»!į“•j6äÕņā«ŌĻĮ*żĻˆ«ėĒńŁÕŻаBŠaō£t«ūäĮé=Vu”hlÅę:é”ŅCO„eüŠ”£÷źƒō†eam“Æ ^õÆĢve=R;Ÿ½N¦˜¦$]»hx«įÓ?÷/ĻYK4b:ō± 'ŠF0ČE"‚whbédÜÜ鞏]‚C½’¢-­ĻR›ÖS“9ƳŖ˜ęÜT‹zRŠŅœ é~S|¶ØrŲĄū®Šā.˜$”MĖĒ]z÷öūŚl׳HÓX…¶,¾ł>××Ē1Ā!~»›#øcxūvÜ GÄÄMPÖ^Sȧkåī!“ł.Į³üRƒLź‰\ Įi°9īb¦ķ“Ԑs×tœR£”p!XH°ŪP4|’µŗs"ąė/ó<ģ% )RŁ×č×V&¢Ŗ?jże‹ŹÆ«Eį–÷3^§6g ģ!r'&å÷±„ŃBdR 8†»#“Ć"De~Pc\9 ­%Z€…½ĄšJ?M.—Ē$Œij>>óös¢Cx’nņ=¤.µüčr@Tæņd|Cl*~‚[UŚį["<•ƒ„“źåLVYoń»”;™n]śAļÄåŪ z¢Ņ| žEį‚ ]ī øvž× gØŗRŁšeČ®ć+;?a.Ļéęć“„‘5Öd?®Ų3¶Ģ ź‘4±ˆ’8š]§¶(µ=4-ė’ h²æŗ»ŖŠĮn·Čä(šd ¾XS0ć !w¬łĒ士M2!piū:SÕāģåjšš·Ńų („Ča ½]˜¶ö+¢Ķ*4¦JĀĮ#ķ{ÜŲ²A¦VsBõIU1ø?Z-2©8ėšD¹xŅ Ōõ©…mņ¤6<3:Č>p«J¼Nń“1ė |sĒ–ń i2Ą(v8ņ¹IUǽ„&{„5Éćö}Žļģ£Ī¦s÷©=ø d"·ß”ģ`“\aiuN÷¹%襥%ūS)"ėūE)vw­‚Ņ£ڊ½/Ģ3Hž,”LÜ ŌÅ¢³­E"T5–āŠŒ:0Ÿe¢kŻ^™Œ°(t¤ ”˜‘NF^č[$œ•ŪD¦%ÖĒ&ō‹z)—l8ļ$øĀ–¼o•S ZQ)¶½ČsŠ»œ;Ģ+{OŌ µŖ t¦Ąd耶jÄĘJ ģŹ?Ō]²®)¾0ņø+©|ž1 œ8y4YW@z’ ‘ęłY ‡¢‰źćZŚxģļ®dš\Ŗč¤äū Ų9‡{rsŠ~¾±Īļ­ˆõ=?O,ņĖó0e ėe•Ž !įŹ_ŁOU¤N%Ä)ü†”łĄĢXŸ•6»īŚ÷^æżėœśstrqÆ&ZsŠøyB%ēŃ»PšąGoiC`#–†Ą›å3µøĻ ļ!V—r„ʏ†<<‘©T;+øįzS øxŠ»ÅĘ$Ž­™Õ@"Żf~ŚB>Ś õÆōõTc76ģąeļ©®Ą®~‚Rċ*ī5E_†‘ ØpéĻ¢ķND–?Võ³WR‰Ąa,–āŖIJĻf ~U×TĪp”¼]ŠqčJäŖŗc›>fč%¹śę³7žĻĮĒ 4ųJˊV*œė5ĮŪ_ōŹóZ‰µ,–ϐĄÜ·ēīØź•­Žo5ķģńDŪč¾Öæ9žCŻ˜ aIaøėzpÆCīvg±o“øŚånśŽāSn®ä™Œw«©o Wå1Iō¾’VL'Zł6ˆĖŲ†öQ|z¢dua%;ĻV*†R5žā„99nš Č[CŪ–üįftåb؁Ÿ Wµ‘¢Ī– į.:üvˆ¼/KĆ[€Ź^’õ >µä”‹7:lŌļV s†Ž_Zj.ŌŠ «&‚ĀF0&•’éX`‰§Ģq±*b×nøäü‹5” č²V󻩆EafóéņX²[^m­ÉŽvzU4k„]2ĘԈŪļ{B}‚;47:?]rÖh¾«Qvݜ8Ē중 ]µy{ž…šd‰yėB4w?’čĀé»bś*å›÷Sµčóy€–JĪIIĢ2­ >:…:śęÓvŅ”ģ™ójsUłõÄ­Vū<µyhŪYŪÜ2ÕFdŽ“v3Ī‘š:  “ƒā§°ÖĮ!+fŹ56®€ĀžZ”‡ė4¾6¾žj‘1'–uš ˜żÆŽi$ ’Ķ$āŽūŠĻ¼ģß{mŗqŌe>ęj.¢ś&ŅŠfœQo†' Ž]ŚtŻ<_%Ÿm»ŹrQ—‰heašµĆžW£ä¶‡=>…Ą‹™j~=T°tVoĮø ÜČ®„z›7¶.¬wcą8œŽ\}9“ˆˆ3÷µsk1”’õ}„%ā“ö‚) éO« «°ü“„·¹c(5Ųå!ØŖžÄ2M„WSŌŹķa«ĀOeĻQ”¶ŗpķŗ®°O@Ńņ™ŚĘ£÷ J”ß(Ž­˜²) µ$¢ßMĀ 2‹qawļxń„żä„"īzQ\ĈDķP æ~xBIq/ʏ5+haKŽ”ėjX£¼Q½1,745ŪŚY ¾†ˆt2Lˆ%²•ŻÄ g;½–ŌĀüqøĀWÚĒS¾C ټ£.Čl(QhS¼Ž”%õĀā°Ž/=¬rɰKI‹8zĖŠēųWūyżĮiMÖ®,¶MĆC|¶ü½Łó`֛źÉ"ė¦wģ4“Ęut3 ŪÖņ.śvΈ>žtYpļÄŁV$6ózmĶ7¬ī½*;\B¼‚*^½h€Ą6m_ń†G϶ń3%b(\'CG¤.ϱˆ ¬ņlHs¹¾œ&Žn{ŃžcĶŚCģ ˆ›·/ųĶõ;¼CŠ_MŹ—O=¶Ū*ܤe8+fėĻ{E­qŠnł²ēŽēū {W?iO}/<Õ ˜ōc’ \Z™Z·ÄQNw™7mŽ2VņØ(eźr¤µZÆŖõŠkł{³n•ĆńĖ Ÿß+bĘõIRT ą+‹)ąĘœŠ-I°^Ūuū «÷¦‹ķQ³™ģŠ˜«7Gl9~¦xÅŗsž•/€ƒĆC¾¦Œįn¢łžGG3*9ķ #œe‘²1m©»¼ßÕ]Óó"{y%Š t¢¾ĀYue/o–ē• „ĢŅC éōŁł”ˆlBŸš yƌeø;ÖĪJ敾ÆoH\ßå9kź1’Ų]³>RcĻ„ ˆĘŚ- =0Ńl盢Ī|å”VžOÄ9ōuAģØņūˆ‚kfyĄ“å éĘ^“łń zĖ|§0¢މĶ^2o&Ö'ü†e?„S.G÷µŽy;$aśõ÷šhü·b½ŚĢAІŌB%Un$šźŻ48@žé£Ą–i„\W=ßhéF*n”ŪPi_P¹”­Š'jĒbL‹Ń\ŗ‰ EŌ4:ēä=TŠŁõš‰>4Ē¢:śćč#HF}›²«DŲąĒH•?_Ķr[ęA§|³]4]u©'¬™šød*öµßŽö;”š.ūnYßå fÜėœżbä×tĢ¢”ö‡$…ś..āMń¢ p¤b?ž0£ó®śk~«7ą*÷½mßŪ÷½4i ‰ynū÷Ÿ ŗéÆ2ÖdŖvĀsh)XŁŻ¾3T'bZ]-Ģ_š„ĀĒŪĻ8f=÷t…sPüFŠŗnó[Ī6< 8©ŚGżĘ¦?ónä/qæ¹ūX©„]&“żŒNu*¹] ķ~7£é “ĪF ¤Eö mĘ`÷Mø/>—f»ųC2>VBōfŽKź•c>ę6Ó\ĢZ#BiéŅŚLDń&.«t\ܝיä¬3^%øM„F÷‘«=~€•óf'+Ÿž¼­:L4ž)WDX­MƉ$y吟†%Sɇ-tO›p®ā[ueü”źrŽĆĆ÷-u°ŪM¾åŚŪ«•æę}‚;•…'É 7$qĶg>źĆžZßV¦ĮŪPƒ7öœ$Xķóͦ•©~+X`'ĄˆžNü3‹D²¬ī“¼_q*rnĄĀjv­•b9ŲĪ«pāÓćŠŌ@™ćŗ_ip8¶CV/d)ü“iSw蚶½śØ_ŗWUĮśŹčW~0E3® Ć8 Ļ/ŪŹą n…żZחąQƒĶHŸAō6|éiØŽSi{ó7‹™HƋ.^§øŒćŚłåīo­D2½üPr ˜³ÆŃ­K½Åƒųt ņP1c”¾[`ėŠń¶+H”=Č])°¢PH‘ĘS4nūē”ķ½*6 H|ҼĪ#ģģA{÷ĪÉg¼FV-C0Vć-^ņ'U ¼ÉżUÖ§,­Bp4%Įźi#ƑńMŹ™üxßēŖäPwŒpĘ,uįžĶóķfŹSAVŲƀÉĢ[DŚź‡ˆ•&M¤(%be¹&Šd(Ÿķ~)¢¾ł¹ vtī"PaÓ25¼Oŗ]čŲ1Kƒ¢ ¼6ꕱķī R¦ś©fŽĻ?ķxGf`RŅ[ŻöĖ3"ZĖ hqp|ØÖ™łkĆŖ1aŗÉSp}j Öč°M(›ńﻫĒmc`ļ¬÷ƒœEė•I)/E= ™ā†ó×wĢY;ŽĪ=xdJ:ŅL~®£:r¼5õŽf•8ŗÜpŠrÅõTż'|3\ ,Ā0īF ņKį"|iDÆĒP~ßb1¹¦wfõĆ„> dͲ"ėøāW£”`{ę§Æ‹jiQĶĪņóK‰wtÄT@D# 9żl z#-x“™ąa5¹ńµĀTJ\ō ‡R£{K’(ļ't=!Ė~yi•zs÷3§’”9ģ¶ “¹‹0õ½ļÓ‰;ļ÷Õ3%ņ„7ø#ŃļP"XĪļƒOłH±Dm­C”ØU*kķśvy œšĢ9F‰Źå&ÕĒSśĶ÷Ä{Żn›t€iÖš¤…Ävč]…Ō\äŖ‰1ZBMĮ12‘‡ęzŒø‹ėśqjØ.Ž~4y<ż Eėź~f&„½›ƒK{Å]€kßąøļ"Šv óŲżQ³P,ƈ"]A“r‹}Y})lXÖĮ£Ó<Łż]Hé÷0;Ԝøv“†šÜžzõĪiŁ„Īā­!(²Øv ‹‹xµI}¢6 ^‚•¹“’åÅźlމ-•9›Ž¢ŠĒ˜‘£Ņ½ņÓ²jKט‹(!V’«ÓYxĻ…<…VHIt•÷z[9Ŗ³ Õ.£źśd=zvĶ śóG=[†^ī}~ą»Ū°|ÜRkÉ5čģąx™¦ć·ćŽZ|˜ö¾dų×ē0 M5÷Aāź4<ČÆĶ8źæCEó|’¬ˆšĘ’k…¼mX>ś%<|plČ`FNžN5ēˆBųū,¹³U°śłPXĘčGė^ؤ )—Ąōƒ§0¢śWŅßŲŗ)S ÷6y„Iń5‚Yʽó÷":Ķäi{¤nßm" He§µā‘U #üʁ^ ­exbśXżŲ±oąø­mõ>”^³śucĘéFæS½vēd”ŠšĖ4ĀY÷Óó}Ō£iW¼Ń³:§Ųfƒ\+Ø)Å«®?oX-gž­łŗć§X/LŸ”‹9°šń 7}’6ł Œa‰čšEÓH͈Y2Ąd^mĖ +ō3ąqÅī®(5MR<#*Ąœų¤õjš¶Ē'›w³ˆč_œõ L^y AøIfŗƒkõńęå=Püm‘lxaź@‘ņCoŲqÆĒļƒ¬āA=‚qüæ~Š³ŗ]h^®æĖ“hsQ’·ZZ"QŹ$ÕP€Dg~viŠŗxŌ«»5;„}ØŃœĢČ!3lźkmŽøc}iDäk=Õ„ę£ō>™|ńIč–kĀū&­…‘~`üR+õfHńńų±]ėaÅæ‹mf3…9aĮʔéi@Y_5öēnR|Ļ4uʆ¤Ė˳ՒÉqū‚w l-Ėż YƒƒsõŃ<”Ŗ'™Ķ‚_9¶]Źˆ'ĪÆ®ŲKŖÉZšT7q®¤šC¾¼Ö2ѶÉē”7tÕ&•sØČø½õü•3z1¾“ś£w–ĀŅĮøެo óˆ$Ē¢œģ©×~p]0×Cāąõü™īCz†NĢ6š¾%:ĖP»ĄĘg4ašt,?ŲŖ‘ʹ̀Tå·}‚»GĆ}F¹£U8ĮźŸzt3Ūāżb§šø=ߣ¦¬– Ö$X8 jÄ=­ž¢öĒał”Śh²C@s€<åõ]åH«“@"`Ųs u. ił½=ĆI !n¶  ž…‘¼^€gÖø©åж„’!ŪiW²”Ģ šM{{9Æ9éū%»" o,Ģjy&™¹ąLćÉp¦ā·Ą³ēÄÄ[,CīēŠ&4‘HĶĻü™±p&0Ŗ8JmVNaÓWŖŻĖPA—, xŲ³'©-Š_~ž&»@䱟 ń Ć{%B€Ę“ļŪ)pž’­O¶bõ™™Fg“čö ³ųĒSنµß(`k6ś ŗżØWtnJax<žMnérš'źB4 7a[§[ūe±C“Ŗ ”DENĀ5AgäÜÆĪ©°–‰Į|K„rVˆ†±BĀ b†a…}z°y딲ē?#ĻŲdHwˆzt_IxČr9hČÓ>õmIŖT±iŲę=ŪćēY Å7XŲ‡(C1qŽT'E}Ćų’āt?T`“Ŗ!‰¾U¦ž#ĶÖ.æ’»ėS2HM^³’¹0“~‡Ę‹uŒ-LBÕĢ{£^÷±G:$»ÄXF’ĀVJ i_1ßżYŒ œ‘L ĀTj’ŖYc S-E}§pŅ«ĄR Ā¹‚‚aLtHüU k‘qŗĖ\åŁž{ō€^\Ē欹ŃKRŲ@Āl76×ć-äXR“÷ējĖęź5īķß×(v…‹jwį×kSßbw¶Nh³ŽzTžz7FļóOŹŗ+4å<÷–QÄåöKZhWšų…åÜqr Ęń‹ dØG÷e=xŌģõ÷ă««Ģ½j-‹=¤¹ÅöÕ˜Ī” ¤Œ„J…µ×ELżg¹+AK½šjyŠpAz­InIōYīćśb<%2j³l`!?ģ*(,Č&a¢§Ė„/«{rŃ8Ё†ÅóP$fm£ß^>nŅÄpąĶŽUĖ\r Wa·Ž^äi“źÓÄ/>¾h3¬‰É©TƒŁYŽR“GŹĖīÉÄP„„, Ī×;F˜oŖf Ē]æļ<8é9bø¹|J ų¢” r®72ā.īE‘T›ĻrŽz&˜„dx³…µzńš[ė­‚}glkPįgO,õ_¤”GµÕē(æ“J“…»/‹¹B–GæJÓ³q3t–Ož“2[AĒ®‰LšŠŲv×XņEžžÉų‹\3ólc·6¾§ß§‘„×bCG?DćÖōWEZ‘¹‡²?š”ĖN©ĪkĻ 2ńļö"•)wėP©9"ōł2T?S ŲŽKŠ’5WĻö Õ7ā¤ųC¼wYŠż½sČZ}īlŗ·³(0–b°=_Öä`ĆEˆWXWPXƒH%-Ń÷ą“P}yBä¹Ā¬ijóåVėoć…UFn_‡mļĶevKbyż˜M›JG6HcżhgÓ˜d‘ž˜a|§Ļσ8R$Ļ£Ķ7Čä =€V’§“”ĒĀ5T«J-2ĢÅ{–÷ E"s]©­”‚LåØōZE€½ŚĢ·—¦˜Ž8+f²VČSFó…k-Yxć6ĻmŹŌĻSūlAŗĒu~zT†-–gD5t—Æ,lqMõ‘ÆŅķgŁŠ,)‡B#GŸr€ÆĖ°{’\<]śDœŽöąŠŸ {’²ŠOß;iģūœ5P³ŠyŽōdūĢųŽ™9j`YŒ…¹÷xSßēŪęež¶žL”äc9͜Cć9Üąš… Š³ę(Z_uśeŃ^é”W(z^ätĆ{.Xårש9¹«‘»„xŪtCµ“t3UT’ć‘)i1č–NžwŽ¾ƒĶ1Elµõšr„ōz”™[]»Uńpīń )ĆRgĘ:×,}+³¢bT֓©€hŹoŪ€øųČÜf“ĻčÄOVÓÄȃÄē(:4¼m )’Ź– 8˜YéVh&yö jż“‰:Öķ*! ¾˜ģŚŪ°3ŌyŹÄŃ0!Ėl‰×2ó±¬Ģm*ĮAK·ƒ9ŪīyyŽ0R£[°2öƇWĆ”¾TĶ¢Æι¶ÜoMł½ 'ĢJ/µ—IéV )Wc%Yąō>‘āuŽ÷ī Æ›S›ŻĒŽõRVR”ŅöŪ ŖjøćȆMŲML‡‚¶W¦{³Ŗy²vZnw@ó‚;-ļmėĻÅU šÉŌh%īŠaVCjĶ ś%yįK›1 E5T)Ʋ•Ż–ę|ēJīuެ«ÜBYĒ?„gēÄńs³±.}5Tńi“Č{_‘[ß6,[Ė:Nb¾…d`ü£q½xķ°¤©ć¬µm»Ž€śPkĀÅMµüTåIoøŒÖLTtŻW >·dYßčŖ¾¾ sĘdV¦Ö ),ÄČĻHѦBp;™KĆ2ŹÓĻ„æ,Ž#tśƒ>™ŗĒjč+6hīpLSiJh «o¬×ęYÜ0ŖŃ\KŃ­ł$8 TļŽČ źö–C¤h÷?¦Iōs½Ī%- ēbü ­čÓ¦ńƒ‚ö¹ŪƗҁ`ō^©L’ŗ.¶ā˜2mlGN“²üm1-/Tå÷é;š #2]Ij]ńOżā_Āö‹Ž‘rMŲ?Әś(ó{ ~t“æ(u4q“%|ÓfXÉŹB\æą+īÜī ]i7šACu8»³ėčQ]¦ź˜ąčņÜaݵ6ņ3? {~…rłqyøćF©ØæÄv"ŻtŠŹ”m¦¬ic™^©ö7+ĮlŻ 4¤ƒ‘˜ĶŠģü*g U5‹x ƚ…Ńūu{bżQf lłdq»­JņąqOÜ7ŌEōLĶŽ,¦ų5V%\ŗ„ŲöWĮ¦bi{Ē™wŚ–EF„1ų~ æP"˜6E›W½ęF¦N!—™Pg13ŻėžQ… 5ąBKó×"QĆõż2ēdé7ōöĶŪqal+ļŚ[S6ޘfŸŠ)ÅķLĮLTšM”¾ŗŅŌ͜ČBŃ^ŗŁ“,V„$±¬hnAĮ™iˆĪ«łz„ł™ŪU äöØkJ¼ ų “,ꄆd])TĒĶIF“å|;€N˜> ߔ ę7m9ōŻĮp&>"‡oÄŽq$'즜5µÕ_ųJd^J@Ī©€Ļåµ*Óū³M£6hż“Gü˜ķ,HÓńŌév]øE¬cŻz…ń헁…٠7?™ī‘mµiČźG–|v/D;†.1Ģ1Ł‘čįm"ā-ĪzKDŗž =o”/jcXĖńŖe±pwĒg ‘šHńį:÷¶ļĘJėą2rC±āĄĀõ/ÉŲ}ˆŠ5"”±ØD^–EJ‰jN¬øŚŪŲöϚ‚µć“‚™–/]‡ŒN>՛pJź *½3Y!Ś'½³DaĒj”q±7×eÄPGkÓd6Ś‘§ĪDÅF$č¢ļÉćłURLO:70Ź/ {%0ĆU ļ‰f1‹ėÉ¢²™˜ŻM\PņŒ›8“W•ŅW¬œcžA:_ÕØå²s‚³¼•ŲĶg~µ®$$F‹–żptR©F7őB|¦ZeöeŠ[8!ΜV0ŪĀģĖgĆö· ¾s˜„DŽD&Žķ›?„ļÅē©’TcōfVoŸŽUėÜ(ŌÜ"»ęÅČkVaK0%ŅMÓß“Ś_ŁzeCfėQ_õD+Ź,^”@õ’PąUZĶNs=5eŽ5ēēśŒułŪuBżą˜ƒüźļö&)æI&ņQ"^É8-÷4U.÷k«ÉDEdd×q[‰“+ć;Ej4U¬ŻęŹsė¦C>-ę TXՒlpBS4<«Š W#š•ڱ>ńėāö8©$é2“~ö ųJћJļčł-לåKžī)kīÆö5“¢ļ]łėÖ“ś—Öķńŗ#"Ėśóšńģ>įÆŚźß$ Ÿ^·ī~r«%J*yćēÄ9.‹#ąŌ¦õ`¼™jŁ.¹KßBw^æą\:/<āŁ[’hŌn‚ę9ČjÓY5Öm«·\S¹ŻĄT6…VŌź²*¹jöiµł²Õ@zšĖģ.“[¼nq.ÜD¬eE>&ټ,}ü}|×dø¾Oa;Ć5³>Œtóŗ®ÖŽui˜hˆC,ęœūĢ vUŁ©“KĪśńÅ?}]«12Jņ—Śibł„A4£JóŒ)ōu“÷:Ry‚ĪŌ3o•†ķ-Ł\7RėŠOż>ŽõÓó%„KŸo¤ė0O÷õĀA¬ ł«ĮļGS\ßaE-ą÷•xew–ޱŚbŀmƒäĪ3±_Fc^ÆŗuĒŪ_© –šĀųŒxZK<®=‡›½Ć*6Ż/_>*Mó{ņwׯŒuG·@O#§Wŗä÷w|įT‚łÅߏźVéū©N7™8ß<绿cWĻćŠĀ)D遜§4­ńLüóēVųīs†6Ī;:ĆpŌĄŌҾµ8šåīv_r åUb’ą#””^/O\ł·¦Ć*Ķ8²;āčK+¶Q'¢€œĖ;ń ćķ( æÖy…ԐÓ^xŌą3ē(É,a>©©CÅč`’œ°Ż uüÓl×󮊞nœÅµa(•²šX0÷^äĻz/’ĄMnĪO…w4P×-ĘEŲ>¦ńwó»bŻźīśč“¶+ˈ±®µ”³µcņķ ülׅ±E’•UŁ»ʆØV[Ī.ɛ”¼)lv6Ōļf…Ę’:i"Įē6Ģš&īk„!#"8*ŗ®ń.ILZ#ŸUH`'ĶPßā9]eŖĻ’†¢‚Iü˜ø©óDp[¢ų—‘¤Ė!°±3iÆ<&뫪(”¦_ŲłtČOfQĖļ…ź'PDRŗ;TšypŸ®#ø.ĢŽc‘pÉuŚŗ|æU ?¹ä_aė&$¼ūu¢™r2[Czu‚2m”¾‚”õ]ӋÆŌ ŒA¤¬K{x^­Ž]<©æżY[ؘŃĪˆĻ‰`fóŖ›bźŽ™(a”i“āȑf:4_šKŽ<łLŠM²¤ī֍é¾Ļ•«’>©čVdąģ§‚ĶI”F9Ņ Ō2 ®ļūāgW‡įGP0Ét¬ˆwCyͲM˜jĆrū\˜$ė é¾{¼¼JEæä8‚“fh%™ÄӉåuY­€×Ķ@CĖ ;JAcĄĮcš:Ŗ+@ŚÉŃ#uĻ€Pc·nHķµˆCĢuœAüž ßw¾¾(ØŠ·hˆJEā+ĻüM—‡Ķµʉ hĶ~ »r4īžlō!Ćļ) 3Ć åīżhĘĒNźģY CYjq3ٳIóU¾ŽjAką^:Er›¼T“”e°¢# ŪŽż®Ü×ę2‘׌æ`j¦Ó”Ņ>0&>1Ł}Ē®ĶĄ‚M ĞÖ®yŌÆ\u:bOēG2ų$\½E– ·ÅÕ^¬™<ļ՝ŒtóŎ؊ēÕ2.©•Ē·ńŁWTJ, ?§x9ē©ņ-üDY‡˜ĻĖMĀ{kų¹.7x죷£ļN®Šģ\ÉÓ°ŚłšŻæAqi!WĘ󁍹qŃvy=‰ÆzlćH²¦K4„å $-ģ|SYŖ)*V2¢‚ružé=ź”4Ńnפ -'ü[d|ļ ü…ćFˆÉÆ>Xõ½÷vńßEdĮ:?Ģ\Zp]/„±åéVą„gOe¼ēd]ź¢Us1€N®ä€<&“Żœ ¼nūYEæ‚ź]VŹt#ąĆA4ąŃĄĘŁą6DvZĘ"Ö @ ąTgi1Ņ$–M@0–H —ążx¬J¢ˆƒŲBB©®vų#ąÉD‡ń§¶fņ¢;˜öįł9†°ÓÓSU†ÅՁŠ!’}¤£)üž€ É(n‘ļÖ¾xj-—Ņ#oŖ’ü„ÄOøEeĪͽ„Ūńæ‰ĖĒ—$ō_S¢½\ō÷_]LtÉU3?$Ē"ī…ĶyĶŌ!‹Ś~pGž!¬…‘Aęˆ0l’"^ ‡,Żžb"õ©ļ;…ōi·gµ±ä°‚£)£š™ī“+AĻ/Fh\7¾Ć;B»{’üdr‚šēńDc”m”/Qŗ”³£&[ѵ•į„÷;¬¾ā:½ 3ͅچADw8’ļVżS endstream endobj 62 0 obj << /Type /FontDescriptor /FontName /MRZHQM+CMBX12 /Flags 4 /FontBBox [-53 -251 1139 750] /Ascent 694 /CapHeight 686 /Descent -194 /ItalicAngle 0 /StemV 109 /XHeight 444 /CharSet (/A/B/C/D/E/F/G/I/L/M/N/O/R/T/V/a/c/d/e/endash/f/ff/fi/g/h/hyphen/i/j/l/m/n/o/p/parenleft/parenright/plus/q/r/s/slash/t/u/v/w/y/z) /FontFile 61 0 R >> endobj 63 0 obj << /Length1 1657 /Length2 9050 /Length3 0 /Length 10110 /Filter /FlateDecode >> stream xŚ“T”}6. Ņ((°t³tK·t§°° ,±‹°,t7’ HŅJ—twJH#% Ņ >õ>ļū’Ÿó}gϹ÷¾f®™ß\ó›¹i5u8„ĮpKˆ†ąäįāČŖÉźČņpø¹łøø¹yqu”Č?F}ˆ³ żEÖBÜŪä@ˆ{¦PquššxEy„D¹¹¼ÜÜ"įĪ¢9 ØqTą0ˆ £,ÜÉĆjc‹ø?čļW‹+€GDDˆćp€“#Äj‚Ō@[ˆćż‰V €Ü AxüW q[ĀItssć9ŗpĮm$X9nP„-@āqFBĄ€ß¢ź GČߌøpŗ¶P—?=:pk„Čø78@­ 0—ūWā ø? £¬ Šp‚Ąž$«žIąüÕĻ?龊ž ū#dewtĮ< 0€5ŌŠPPåBø#8 ų7äąæ!APå=įŚAi-č^ā_]¬œ”N.ØĆo‘Ąßiīū,ĖĀ!0„ Īļśä Ī«ūĘ{’¾_{Ü ęõ“†ĀĄÖ慀]€z0č+Wˆ²Ü_¤{Īl6@€[XˆŸ›y€ø[Ł”ėįłĆÉóŪ|ÆĀĒĖ ī°¾ńZCī’p¼\@Hįģ ńńś·ćæ µB,!6Pβߛ!Öāūp†ŗLøļ'Ążū÷Ļ›Łżį0’Š’øe ”¼ę =5öæ5’救»¼xųœ¼Ün!!€Šż‹Ļēł§«’ĆŖ ‚žUŻæ*Ƭį€ß'üVqß¾æ• ’–æV‡šßGØĆļg`łĻ ˜r p[Ż?xžŸį’æł’å’¾’[’‚«ƒĆ–æ’Čźąńå~Ø]÷ ¢æ_Ų’R ®µ uuü_Æ2tæ(Ņ0‡z uQ€ŗCĄšP„•ķŸ“ō÷Uܧw€Ā špč‡›ū|÷«ge’qq¹æ°?] —ū=Düq·æ1ä~Óž»y˜ü{%y ggĪż<Ü#ūńøß]0Äż¹`pÄ}ą^®ĄīŒóū–E„@ŠoӟH“ü­žAæ«‚’y@Čæ /hż/ČŚü €ŠĮūĢŽ’÷c„ż Žg†’łļ399øŗüĖĻ:’ €ˆĮ{E®’‚÷’’¼÷¹=ž€’ÕF+Wgēū>’1ü÷=ž’ń™ƒ@Ü!V8³_įVbAvAM矤Ÿŗq®‹£ļ§žņrē½ÄBtɏ›Æ$čd¼›{Q¤0ŪÉ£šŅ®E]ęÕyęāō‘×÷Jš*žSN…-ĖøÆw§(“‰^gĻč¾Ō=Č6H–”-pīz II؊- ¶éŅa$šf®č˜Itc"żØ ¤ܤŽÜśéć;Uņg"ś»«ŚˆzĖ^Żuć'ĢY«Ž±kQ¦į)źét/ě/pÜŹ —{ś{ē‰:©Ś"żUėæBDņb½Ļäų1Ėõēs]g w҉½,I¤vĄ]E$ėŽ›ž’~i§$k°|Ś^Ž1d)µæźaR~³Sh^©Up;%7½S•7'|Ó·!֓½1TWa%ĪB–„ļ9/Š$Ł™&ī„£ Ž:§ŸŽ6a•ŒŚWœFe¶Æ“^Y‘–ļ’ģ«”LŠG¹DVõuŠÓƒƒ¼4¦€§˜ŽČH±°tjŖ-‘¼yģ#±l‰'ۃr&FėÜō@Źh.9gTRū(Ām‡3‡OU±(¢‰½ ±4‡Tē Z¶yŅU¼Ń†Ūz|éāY ˜Dh•°8ƶާ™ePö*¤zVhĖæ–ü°®Ķ1H`.™Äēu^+Žoūķ­ł Q×±{ßS•ŌgÓŻ?Ū·i—×––•R‡“ÜĀ ×­Ķ?ĶIšF8ĪuAō‘䶅±|óĖ~ėåül·Uųū ,ÖüågĀ陞óNjov2Ž»ŗ~Jö "±52ķżnķ{‘ōdĶąd]ĖF‡NŃNq滘å×<ᯟ޶N7Ŗ6‚ƒ>V óš°Ō•,Ņ˜/ĘF!¤Ź/N/bl·^I%|q©(|ą{ūVń ®±½_Ānƒ§¾¦”Uhe„ˆz;Ļ“õœsfÉĮmwĀßZ0¹?—4¶1²(ėŃĒŹ8c˜k ^Į‹é¦õMūÖCVC>ČR iieNsGä”īćч`‰½k!mĀ)&č'”‰ĢKī•ݬ‡zŅéV™9! ĶŁ×;ģææHšOiŁbĻ wÉś–°`Š“<² \®vGf`XÆ]æUŠ”É&¦‡ šŲ6°ą·\¾ü¾ōdģŚüv²…T³ńhQŻė½»ErL}V†L¹~pĒ_‡į×{¦OMm›-¬ĶģżµrŹ OõHÜvąż*÷ۘØn@Ś3 ÷dIāl'75Ši‘ŖoåSa? !ņ#2=)®ü¤“4¢›±čI© ?ƒĢS°/õšCvŌĻ(IWŸ«dąi–įrņŲņnR,øĢl\{Ę’ĄdŽ?ĖńUć/ŸŒGŹ ivoźŖźØœh7n„!i³?„Ę|Ą¹~!]¤Į^j‘GÅ)rŻ»OŒK­e±ÓF/ać9‰üœ¦ !E9”‰ÉŠTö(Ļ…Śö#‰;Ő"żpšĖĄ[½ŲłŁ…ås×ų˜fÕ’½uۚŒ™ž"€ŠQĒÖF!ēEŽėćŚÕgTCY 8%±:_žŚęŽI”‘0ķ²bŠ0ā+ńŽ_Ŗ›m9)~m8śTėčC½Oß~6Ś}<ć†ČfˆĒ«~tē9“ü<ĶĶūxU¬e…vų#ˆt“Snõß,¾¾ēÕbÓŚ³­¹°PU~,ā™/¾Ō‹ēÆ7RņXŽŖ†M±ˆęŁÓ)=ÖĢu+0@āQTŅ*O R N?.vŽ;ŪŲ=€āŲßé‰>jČožłT^v7ō®5^L’‰wOŽøØĮNf*łk#ų…IĖskü¼ĢF®‹c§‚Ŗ˜8D¹š¢ĢEŸģ¢Øµ’˜Ż”Kڐx.OŲ%ćd7^|@»ÆDp9«cØ®Õ³Ź ¦ öFčéĮ AŹ®ˆ”no­‡žµKŃW’fD“JLö„Nƒ‡,Rź“ź6>æ,ń±ś«@'éÓ%š”ņ#‰ŹOcŃΌżĖŗ7·;Ē$“}‘ Ö[‘ו…¼Æb‚]ÆzŻŗ;ĻĖ›Ø*]џ¶iG`²MĢCˆā-ČN"Ųš.Āzԃ`ÉT{X—"¹Ž\Ł®ĶŅ]å’{$¹ ‡č²˜ <͜ņ5ūž€čģ?y’aft"ĄJÅ·­ŗšw"¶Pa§ó9I:«fūšņŒŖ`C)†Ÿ÷ Oßre9“aĮķ¢)9sōk öć)œŁŖšdēĒz¶ÅzāĒOVŚMWēC3{6•¹„ ß;F° —¶ ˜[_¢łŌH×ĒpŲhTˊ­S;æ”łĄ¦*tؒ¢äćõ~¾Ä3Ÿƒ“Ž…ŠÆ=Y}ŲŽc>õšńĆwŌ“£±oG „O0R¬zŠRBNŽe,„ū“‹¼¢ °I$<–?½Œ’ęx¤²e堅—]² T”dÕą"ū”øT¾ ]•*­„{ ŁģĪ`žõL–ó‰bŚ+”µj2™«=ōĢ.īk¬"ŽŖ%ńRÉ®D5s€ēMÜŹpä͜ŠōpfŽŹ›×įęYÜĻ™„ /7†aÓąĢ Åak‘GŸÕŌSÅ·nŸr™‡¶hBŹub[¦ŌųNźuץ?‰,ĻńšŹj°Sˆ}ŁÜl-Žß–ž›±NJ3—"· ņŃķµÄ"żŹ\p3rŖ*±Ė”u¼õéĒͼl°‡Ļa„P‡ÕŒTbŒ$›ŗØøZ²qܞŲæ&F1[åśĘd˜{ŖYü…`ĘP%«—Ńy€½żśÕ{Ķ«’—% ć"^©łŁ›×3“n°³‚×!t/oŁ…>;>sWäՂ'.ąˆŅF”ėXŸØX—!›ÖŅ>€XĀč‚ó,LŪ÷kC*•9"ų‚¦ufަõbóŚ;¼uׇ±Z^ēōŪoé“ķŲYś“f*Jß~ēµD{]•š–Ź»ĄC«öȆœ/²G—$ĢцŖxļ[+EöĮ¬,`K’ˆżm3ŁßĮ&ģ!÷%\ē¦]krU©B"EIIyˆŪ„³ $h6× ¢z§Ź³‘pBHØ! a`gķč2o2Čņ$KlŌæęö$õYõФź©óiēÄéøKń§£hŃ7õŗx}9[žF‘ōé”c&Zµ<ń䢁ē–nŃR(pėĮ«rŻč €ó?ŚōŁxÕPa«bžI"ņ؎ŪčWEŁC'äØ5"ĀIb āŽóų†7>+RB’Ć闔»oŹ1*„tČ5«ĪÄacY)Ś”ž0Ršć8/ŽDF˽—­`‘õ®!&G¢…®Čxhąˆķ*jü-=–ėgL¬ŻmņŖZ§Ōa׊&u{®²VįŪź°ēź}r…£9Ć"6oį˜zIÓ„6ĮŽ .xFŁS*RÜ[YeĢŚf¹ 1¤ŗ³¶ÄžfÜ!“] Q[ĄµŃ\©ˆųB Ā\!Č {Ҧś õŠn]A}~Ņ4uϦ(c-łr”źā,“}-ē ōMX*Ü]³¬ «œ—ģ¾ +ŠĆ0‡ķ|‰åĄ‘źÓĶ\SKŠvū’Lōģ‘K3zÄvŗīS½D+ņÅŪoJß¹Ņr²W¾æT>gTśl£3‚0åÓõs1x¦×½ō‘QbäŚCt2öҤ|§Ē蚬+£Ć<ŅŻ³ļńy4/e•Ų7JÜÕų‚æ½Ę›õšĆĶ Bvx“F4߱Ⱦß<'F”ĆÜŌųė:ꜘ®*Suüd‘ĖژɷĆī{jŗY°žöĘ'ļŗ¦j‹uŗēčr‰RƇ!f©[Z‰§~¾/0›zĢŽ_č•(”꿥óȊņDįą ]¦Ō{³-5ˆJ§†ńõ˜ęčŽŗ+°KĆF—ķ2¬/qÜS‡ <{…ćOų¶8’a‡L®Š¾X¼£óĘčTŻĆ  Ä}ö>ysYˆøŲ˜µu#¼¦C[7!v[O.6VŒńLņUäć§'ė8Ūčdą7ėU+Ė’gV›µß_)“ĘlČØČū9$=ODÕĀøū.CˆśpuUb‰Śŗ:?*pųų•¬ėJæķœø‘>œB/_¬ŌśŽ*®(he&C2s—ę™ß!S“i)ņ‰Fą Éł¬Ś“"[xÕ Z4¤yõ«āBꆱf\§xHļÖ6Ć;nū%Ėų2X%(ŠöJź:Üp”>i"ØkåE[›žāŠWāß±™‰X°j—`qÕf€d'†}Moö»:)å ¤ŠóÆ”Dś¼»bž:4Ų“Œå9—Eü ’B$ł¾3x°wƒĪ^µ¤ĆepÕä2”jŠZ9—€“ę›TH¹d'üŗ*O,”¾“ū)‹l€x ĄU1ŃNŲęS¢LČģ T~tŒ ³y»n&Ļ„ZTŚĖĮ)^Ģ]/~ßžł¹ßƄī™){'‰s³™—+Ę&“éćĀ–qÜćA“Ł)a!@I¤z0ę›SŽē¦«ÅCdց ~B¦;‹A»€~Źņ§†7a®„“¶9~ŽQ!/ޑ֫€Ė‚J•²ź¹‘"©*a†·ĮŸ„½{ŵ͒™Šų>¶ĢŒÓ5¬*„™@šźzI§k‹Lnuē£uģp°Y=(¬WĮĖwF4¢_&3ģĻČ8‡7±5ŠÜrS6 ?ķxŁģ!³“óo¢e:÷‹siĶgćĪ­%)–(¶Ž:ČāśĮ“ÅĶÉĢ„ū±ą·n[ĖŲóxó–ēŠ5‰HÖlģx¼EQŻ3Æ`…óĻ8_Ż1>S’”*ńųÖM öŖĪĒ/£Ū©-a»&Šoåģyµ5§ėv2QmÕņtźIshg…\ܐ’`Ö5“ņ7&E¾ĆŽĢ‹t tŻU‚HĀ«nÆpxv ӃŅkŠÕ.4Ęt$×É +-mŗšfl:¢Ć[¶:®ƒ%ßō£hÅ•ćš¼aĪ?Nș•Ć$œ—ńPe¾Ȩ,EĀ=ē SĒ+ēˆ>•l\†7FCõ<]BPČI/¶—^LĢ4üĒóÕ:Āx¬QŌjƒ: e¾_Sƒ8©O±*ī!׳\²łKnäŁĖõę=Vn¢™Ä e²%‡Õ¹Ļ|(+QY2t«¤ ī[S-ÄOkĀ-ū(µ†??Y0Š2­æJ{Ņ_¬®p•]ܒž¬Ł»ćåŚÜčeOą†—ĮÕG ·±¾tzė·.źž8›‘“Ä`w:”O”RÆ`Ä(£Łn ¦ą°X|^õķÕAīMEox įE7•ÄŁS‡„÷™¦ŃM [ŗ* įcC[|“Ķóa¤ģJՀWI|Ó9~Óp¦&čŹx+¢ˆÕ[®–„ę.`Iu¼i9?¦uZi§ž§ų¾Ļō· ¹iża­V·ĶÓD³ōc³Ż'㧊‚łÕk—\ϳN6ć×"ĒŹö—Ęߣ LæSvź€]33ˆ-’`Y:Ņ|lkĘh’2¾ū#“Š`ŌW”*?¹»f:Läė€öZ.ŽŲ•C¾|Ö5™zęÓ5ęęVo^ Mb³ :ļĪycÅzPhŹÖӖ¦˜v{Ķ} eŽJ;ękWŁĪ3"fĻżU̚Ģö> ū­sF r”&d•ÜuĘ×įĶÆśkyÓ\Ē™ž1–[OŠAFʉżĖ` -«€r>łė礄‚<«ģ¢6sRĢŁ÷Ērō’ĮüŗX–rūܦų)ēJ~NœtÕńEĆ1¤mؖ¼Ž3” ©‰Ė_~'>żL$pÉBf}fŹ ŹäŻc„u…5č o}HŹĶm$sČÕÆų@Zä“=ū¤é…·p‰Ś†µu,³<ĪwĻņs|qó¦ĢW…©7RWŹś_?8# Äśr<>,PŲC÷b]On¾·ąüéīdnJ“²LŻ@§¶Ø=»ŗ™ŁxBā1q,rIōĢ7źd¦^"=.qē>š2¾»Q4ßŃ@źķŻh**KÜŌ>²~¦ē«o-ż l!{ŪKF·/vł"'­Īrc?ŠÉ©ū“G}œ >?7œŁ×›“0č’l‚ĖĮEƒ'Ā”&Œ*cč{FyolŠA•Ģ¢gPY‘6NšąU–S‹åŲžŻĻh“Ń2˜żQ)<’nĪĢj&dKZ}9žÄb÷ fĒhÖuiRv·ĘU7[ņbZl˜%Åhē¬Ć„$:#9ź›™³Pļyqą³×E: Ó ńqTŸˆ^ōL²(5¢­”Ķ'Fż¶¢īĒO-6ŒI:ׯ=…5ЕŨń|” ų©Kbųzž¬ N ®¢u™TRś6’IŻŖå{"pŪ9¢ŹŅ›µųUļ*bėTĄ#öü}FŅµOß”æ’GÅPr=¤Krƒ/ė1å-×ņ°(grl÷͇ 9ė¬>‡cĶ÷TyZ–\ZÖ+Äo¾RĮVó«ŁWšš©Š%å£9ÄÖ-”õJnV¦,M.zIā, G2ü7²7MJ< ›Īu@ź…Ųgļä[cźw˜'u¾Āšńša2ÜxGL[buŗ3†w‰«žk™¶učü6iK$±k]±™¹”Ÿ†‹Ę;…Ä.‹#‘\;=­ŖĪ|}Cw³-ŃĆ"QčU”j|E!¶īłØ”ĆFŠ#tś­nŸOö”y%‹©9é7äҽøęŻŁĖ>¾–KR’ 6nGJŸ)cĄjd:æ½vżaee} ?ć“ąĒ…˜bÕü•©…‰„<:Pl•aā°šÜ p„ؔēAhjPŪ–µ›–XŽ@°ŗ$"įåUķŒm¾CHBåå“Tłäü¢v·õJ5LK—!~-ī”…ęD@‡ם–ĒčI]_œØ¼ĮŸ""ōVĶ®B^’V„Łóī T÷ļöżt'ˆj™&;Š2}Ӗ;éq—?XuSP”[PįłĀ_[i}v—a!”°Jō;~S•7¤™£Y³d‘Ōj‹NīØš.Ś >ĖåŅxĀ’hy? ›«ŃYEęėż¤óqākˆ¾@†dĄOƹ±Pkrł/ōKrčIŠłś‰¢ŁĢĻߨ«2æŪRGDŠ 5Ü:…ŲVJ ā˜Ō÷īńŗšV3^,(öXĢÓlĮɔ·Ōfų/_¤‰’J'„!T1“§ĖƵĻĢ8)©j‡tĖ»Wš‹ZĢsL#egR§a”*Ėß®®*Ūp vń7F¼üél8ˆØ\"ꐗeœ^ßĶ}"×]¢éwłŻšń¦v½'Ŗóx{Ć9š>ńyhDÜU‰Ó=%Ą±pB7±čYźŖæ9PJź]š5Õ½kB[£ĖŠK·± ¬Ó¢<ĪäČ ˜6 če/övŲŃX•-FšĘP0ņ*:Ģü(ÉāYɘEyėĮÜYŗ4”Ō?‰ŲĒŖägcm’ ;o [-ræ˜ę+W㚻R™›sQŖ<1ž¹‚#“ŌŻńmŌa—ļl‚W Ę]HüØļJTPeeĘ8)KöŠB‘9®’āķēRԘZŁ$šÕ!³ŒŪ­~SWö˜’4N_öLgg,¬āuįBzN;Fŗ™Ó“å1yŲéņ×åŌ'å–Ńħ6…7÷ 3`*ŃKæ®ó.Ó1ŅūPyéŁņŁsŠ…Ta¬aC@Ō+q<{mŻŗóŠl™2ģ~X½Īč‘k³“ ‡gtÓ„®m|-®ŒŽ¦œ'ßņC–¼ķ ųÉ{ēöõ›tŲ"ągåŖóW$«¼=+ń˜Ö£ [ śsĮ-±Mó‚o‰TÓłnį›YŗØäēŒ56Q„NKxØ·¬ń|_}­’Ń* eĻŅüƅbÖ“ZDÜĀś|Ó>Ææķ®jp<Ņ|)źä”p{§°œ«2Ō~{µ+šČp©öėä°o6³f[å4żMou}š£÷·JÅ£ĻK=†Ę…’„Vš¶žśÖł¾mß²éŗŃ[n įµ°ķć–öIŗÆB'³0Źkv)| ڶ‹"{£ÖGyėh<–OĮėćʘ®_F&;xÅś„@1΃ų˜V]•Øo‹éĀI,æe\;ć®ü¬AĄr*¹¦^Rāo°ś˜›XŠ&Ķ™7%1ö=:Ö-Kc“®érÉ~;I*ŻfvŹč!U=õ"U§@ńšŌ·Aęu9’÷S OŹ# qaśŽUéüióQ=®Čz%ķu’K”yöøłYj­\€pcŗÉÆ£śo‡…ōŪĆĄ—š0Śmjz¢–ŽĮ5Ī÷³¹hSĻ{«?\–wF²ˆćN³ĮÆgŚFˆQqwJŲØLh4åŖ‡|#+” ż±ņN ­5UŖW}v!ÓUlč¹ŲŅĆMŹģ¶Hq­ēQItŠgŽ•ü“­©G?' CĢŹÅc¶sāŠa|xCNEłxåKZ²NÉmWµ˜‹½LB•HŽHmļy‡ōk9pŁõÄ£ģāWŠøhĆŖ„a¦dńō‡?ļŠ5åĶ¢GßżŠ•)KrśiӖmęM­ÆR¾Y–eŗHEŲB>æCńóż"HeXdȁ`·ūj–YšÖńZ*šäö‹ąØµ@Ī’v4w¢ČŖ„ė)cõ>“Ӈ)“hģĶåźz b2Żi8Iɲ JcAü—ÅĀNW…>_¾³ j%ŸGö@™·SÉj>:·?äĘUŠĘ£ÄėEšÅ<ƒ5ģŒ…?@_φnWgLvͤ2¶DµV6J×.ĶOł4;Tn ż|<\"oŻó™­8o‘… „8ĶžŁYxŖÉņąH†ߔYż)=ĄR&ŲܳßżL‘ųD*Ģ-Ϛ¤QŒm¾ą¾Ćy;7äߛ¼š#;ąŒ“4Eęå ūµC,¬„Ŗ1ŗæŗM%I¶Ø®×ņן£5’4`†Ż&~Ģ掼B_†>Ę0™g9˜•sP3¶‚"Ó󫟁zlž‡X„1G—dL‚ÉŠCLō8¬©ų-QżÖ"Gj’„»|eńyył47cX¶lūCA‚z{¾[oWēÕńŽĒčemݟQk>R¼éĆąæĀuSPå;„µW†Š Q¬łųåwļēw½ł2}~t½iWk™¤/ORN$1ąmļMš¹MéĶ+ǧ±'ŅeJLÜóņŽ6&F²ēÕ§ÆSńFæ’8‹ÄMÄPՙo·}ƃ<üŗ(&Īægx:üŸēėŪn÷o̳ (k·g،2ؓO‰ų!g=F͘ŚńhšµD”ęėģ»hÉw-|Ąe÷F“6%k\ÅkņÕŹ„(؊²Ēūµ!ļ7z~iÄĻQ4kØéĄ*cxLŻ^i¤ÄqÆ6b¬¾Hj›N*ą~v<1“;QILnŃfŃOĶ’xŪ×z?źż$ŗPSˆŌꇫEģ5Åų~SŪ'Aōü)M¬®‚Ź •i0\,?ːM}ː9 „"][r}Ļ”źq*Źą<ē×fvU¹÷nVYžõ8Ūeīhك\°eVFĘ£`I1#øĀ!fސ‹Næā„lŖƒŃ¹ŪóVśĄŌ”Æ:Zt9Łś*#ŒŚ(Y,F©¾A§jü,ŗ“½8¢Bx’!½EB7Yœ³a~‘ ysŲĻ t‰'Ä{Օ'šœ${P½X}}Æh{»m qźńN’ÕN6_QŁĀ^uÅɞoē$…Ž|«œs8ÉŻYMyʆ³|¦zĀ6©‡ōĘNžŁ›Ė%fJ;:aéu¾Ś/¹ć-H¹²z{¶–BŁ»ō4I€Š|ż"\Ų-‰±źšŁG# "(›¶ūuéY”œŠd#=­C\G°Meˆ<3‘ ćĀ7ļ${«ui&źõĘ"\Ń5;©øŗŁ ‰[ŗĻ‡a¬hČń%^·a ļį}t& Ņü lŃ¢™åļś öaˆŖ“fYÉćnVœš&WÄÆA[[®ŚAū[ēqU*ėäv9:¤Kźī­Ÿ„ž”ŻZ¤‹£]ø(ĝĮ6LoÓ®äfōź‘Ęo’O÷ ”pž§ļQšP“ŗŲėR$5A…LWWŁŃ¶xśŃl*u›ĪŃō SCnm+ErßnfYOµt†łcl%|›”­¼Ņ či Éž`Ļ“ endstream endobj 64 0 obj << /Type /FontDescriptor /FontName /XEPKUM+CMCSC10 /Flags 4 /FontBBox [14 -250 1077 750] /Ascent 514 /CapHeight 683 /Descent 0 /ItalicAngle 0 /StemV 72 /XHeight 431 /CharSet (/a/b/c/d/e/f/g/i/m/n/o/plus/r/t/u/v/y) /FontFile 63 0 R >> endobj 65 0 obj << /Length1 1510 /Length2 6626 /Length3 0 /Length 7638 /Filter /FlateDecode >> stream xŚµT”k6L7H‡HēŠ!ŻŅŻĀ 1ƐCwƒH)%%H·" ‚€“tI R"õ”ĒsŽ÷¼’æÖ÷­g­yž{_׎ū¾ī½÷=,Œ:śsž»öų=’|YŽu˜ źāūśļó©Ė«h©rż‘ü(/ó y„<ā"ü °@TTšļ@’Įßņ[u@?ŪūƐjP{@ü/wĒ÷·Æ?­Įžgn8’Ī »kh0€ż?żoĮ/Ģo{÷üž‚ß.’Ķ’+Ź’µ’’wGŹž..æqöæ’ä qńżĆøkhOÄŻphĀīFśæTcš_­ ¶ƒxŗž/Ŗ†Ż ‰ŌĮ埃„x(C|Ąv:„­ć_}ōwīĀ»@ `˜äםąņó’v7v¶Īw÷ŠĒ]µ~C໩śwJ%Ø-Ģī×ų ‹@p8Čļ®ųw+ax7§v`Ÿßķ ąć…Āw.€;y{ļWMD|6p-Ųl°88ü‚#ü>·»kśųĒüc’]Ś’ÄÄ|ž®®æoP;ˆ‡› Č÷? ’°ā7ņ/)¶žš»°ˆßķv§óļõļk öŪāĶNĮl%ƝźĀ[ŌČ=šęŁ‘śĢ²aœÉĮƒœ…·yž$ĀNćØĪ]‚ŸÉ„ tĻÆ)±ŸŹĪ1\#w›°£Ž=Óm¹ōæ²zŖ7¶Ń‚73JŁ÷©hW®¾——–Ē@vÓ’ŚŻß(Ľµż1ĖKwO1"²Ž=*>õ½e_>FNmčnV‹Øć_•ó$Ę[„”L°äŪäLR3a!xčp8I}īMœž}&ĶūtĖšų)^Ą^‚`1ŅlY ńbŅo”Ā@Ą£ƒę!5ś)éĒ1V¤üVścŖidińbįc¢½Ū­ŠŒł™AĀŁ3›M˜R›@ü>lĪ[%? Ÿ¶'ćO&ühĆ9T‘ )üī·ūą“BAÓN›=’ÕĀŌÉģUAč:hÅR}§ø”OĄ*hŽ[ńB4^°7‡R‚ÕS+ßR~÷1˜æhäĘ벋t5Mō1Š‘²6¦³‡Ś+ēg~åĻ9E‹M<½¼_ōʗĢFžp`Š«0¼: ēR¬4–+ī]^šØ§ß§[ļŸŌÉń‘,d±„ēČ-£bß&ę‘ä«`§U-ļoŚ’|,¾+6sōJUÖ<)ųōcõ SV`ÅWĢ”ļ^«żQ7ĄĘŻ›ž]5×Ē&Ī÷q1É'·{…й ыŌ}ęCĘ07—µ'ģūß$)ƽCW_k›Ģć–Rŗ›¾„c}”ōĪļŸ^‘}†n›ńšMbl?õg;iļ›Ś^ŽEkOµB¹“1lŲ ö)4}#‰™åŠšCC§ŗJ€2ś­M‰ÕµeԈ{āē9mX›“ł…jŻD½Q„fŠ“Xń°vŠL āŌL~ćū-ČJ±}6OkH£¹®JGgš) +¼o Ė~zcļ7Łœä¤‰,”±¦N†ŌüĪU#^×ų>Ģ(xĒ$hx0ĖĖWėć4,&˜EŒ}śå`E:ĢOśžfŪ=ńs­±l/ž¹ļ^…ĖW…Šœt-jyMī“5«„_l|¦„ĻĻč<‰Ś’«X·%Fv„\,'é÷žĮ$޼iˆŚ)RzW łR²ož$÷$żÓõatæyß½ %½aÉGzŪ ’©DL}"콯ėÕČ(0KK:8r¼Ÿ$P5Ƈź¾fXčx*Kµy™ĆNĘšh5:!ė?W$GĄ¤NßP¹ėėZ;śtwWŪ«%ę55"Ēŗ¦­ī å3°Ś%O“~=]ī,A8tżėGd±-C“½ÆW‚Õe×®„—v”ĢŃBœ駘A-fµƒ*6T ńyļĖī*t·¤ćĢwÖ;mŹ= öu!-LT?ūā‚ļÕńr­ƒOĶež] Žd}ÕśĀŃ˃8å(zR®¤Ęžd>EÓüŽ`¼ķķ®}©łūŻöC~ Ūȗóųpb…)ŖvÓcŪU…Ž¢~ĢāŽ śJ“ ūkŖ Æ!h„Įƒ¼ĆģūwįŚäEĘųÄļÕ¾ÖC<·fž„œ]h5G$O§ż ­xÅpī^ œŃēš*ąJjå’ōhå¼Ä²é£WnՔ+¶ŁłAńĖ‚¬j†K©6c#GÓ{¬z7ČJF /ó­[l»ZpŗŚ$›„—ĪEVaŌsÆĒÖp¶kn(óØ:^ß^Łeė¦öQ¬6"‰5Õ’ƒ­Ī.­f{T@ ķrč6؃±Ćüf„ņČõ¢|B»©6,ĒgéUėŅ—Q½Ļ81#ź¢ń+™ÓIÉ8c3TĒj¶ö*¹Ģ…’å9QhÓŚq܅%E_Ößżū£Gˠ韷°N ¦•Ž-™klģ_”Ÿ>aCĘ_ép}lĢ—ēĪņ›YŅ\&L*ƒ%„d?‹.BV‹ąłÓäNŅĻs+‘„¼lüŹ5ŲĀR}lE$O8ņN”?ņ2‡B]äyź•{W·īõ!™Ė‚Uī«k÷ż ßo¼c+ķĀ÷¢Ū䫚źŒķĀ5ģ;Ōö•ųqZT½Ķv„Jz†U±Š)u ZqāŒ’bų²sKĻ%‚?U°īš$±+†ńóæ9,=“wV Ć&7É«JŸ÷”‰_`“ņ‰ģ4RżžˆēATKJq]įu‘PXÆ]Ōl“Sɚx©±Lżł'KJ rŅw!M…ęŠIÆjh>Óż-ēž9!tŹ#œ»bÉ£øĮ›ž=3ŪĮj•®Šū0w-GĶRq&³Æ¼Œ­ )üéČ·3E•(}¬݇ćĮnØŹ&ĆŪ±EŻ~żQˆ}ȤøŻī0™ $_¦„M`šq‰W…¬Hϛ擅¢Ż7ÉęŖś4ŗSSy6ń>ę}§„=U¹ ‰fēüQ~(;iI +Š'¾gėĶ”«ĢZÕöéŗ9S6×(:ć¦ĆZ": 1µ$‹óÖH3!shü Æ=&ÜŠ·,_4_waČ„ˆLEj!ƒ">°¼K³L V¼¬³–Ü”VŪm­ß,ģŪphbĢĪWЇlĶtgĀģGūØb]Ø=%`‚/}Óé  ¦-@y˜”’˜{lĻ–cģĖeW²ž{ͬVÄŽ˜]W;įkÉ×Y†“ņś¾…œ v_ā #£ć?µŒyfHĆ·-ßśgT³8oįdK4Y±TP÷ĖżOäXy®ėÓSĄż_^„Ē$©­GŒ¾^ž¦ˆß°Ä¢›£®éäFW>>—ØQ͟I™r1%TNWÕ: €Š~xz?¶ƒF"M…Ütķä:üŻw•zTæ}”¤±Š>Š|½§ ׄ©”$Ü`n¢ń§„]ūŪZFp³fnčō~õ`µ—†ž+Ņ“v ’õąd_>”ķłć#÷)˜±Ÿ™ķj pćÖsŹwĶõZø8J)e‰“ųFnĻ“wG\OxÖqW†^¦E%sł’houĀ}įJ"™įb÷µ_&;p4SD!@9“ iNĒČ“æŁBąY˜cĒżŌCg®ŌžĆį@6*ME[Żļ4 /x}³£WæąÉaźéx 7ƒŽ¤}ņ^ӍR—EVÕm>µ†Éėµaʐ¤ÄĘ7sŻ#½Ļā3“Ī(vļ#/¼;Ņ-æB¼É¦hVEi:m×µĢv™ZvsC2¢”…5ņžW;éß&B½[å<=?H# z-E߯īŚ­ģ!Ÿ]TāŒÓ¬#(¾‡iŗ‘E¾„Ģ…°“åŸsYpSŗ™Yнiļ.h®ō¶u±Rŗæ7sÕńv$XłĮÅōÄēŚĪ®&ŅŹR–¦¢¤œŁ‰Sš0Ż£±īüēpxļiŁ™ź²¦8}Ēgč}Ī:@Ć{ŚD“ģåX›%Įšņmłw>÷ĄÄg²@=Gm'Ģ”8ē™Ćņ¾¶ŽD™~”9D}ƒNbpcćēĻŖÓ2ɽۤ øi†i8änŪ•Biļm­æ¢ą­pźW{Vµl+äšhj»…jż‹üĪ» ³]‹v4y śņaĒŠxSä=„Ā—įvOČz½ĖŗbŃf!o\’Ų§ŌL2½;x–ÖVµ”ÆĶŌŲb:ōØŪ#'Ž™Ł!“aā,ā/I؎³ģĀõE‚&hLd"ć¹Ör5LKzā+ ¼Ü"bģ²;" ėī_‚ėh\Ė÷¹•łģÖ3éb'č˜TEļĖt9d„ž„ ąmŗąi7øŲ°+›Š «ü\ŖŻŖįķ%ėį ŌY–>Ŗ­K!·‘E~(’c@åՏ&°—އuœiöå‹dš-|mOķī%ÓV­Ė­EaōŸŒ0K8lą5ˆāwˆ4Ž£5]ļ}¢ēEoŲ–Įl Ņś1e4®66ėl|åó$GGn{dņv)°bóG®z¦'"E’ö©µYŲ²Šž5½Ašƒąžj§ŠJĪ4ŪX]Šŗl>Ä9‡ėMł"ĶŹ"1‰“’J³č$ūčÜżmnJępPW£™Ų ×æŹGDŗÓ‰wbe203²Žņ~īÉ&·äę &ćŗomŠ-ķ 0žn¢Ņ*b÷-śü½q aūe9˜0{ƒ,ź'4õōčg¶A󏂁żoVQ]NOāx6ĒŲĢ”EP_ m³B ķõ› ĆÄŌ² ’ä÷‚~’ŹpŠJ1FI@2ŸaĻņØb¬Ž‘V{]—-n°VcäL6“ąõ /£”Ļč÷Ą{`=')C©‘bE÷ĶZõWK)¬¹žāŪ—ĆīY#Š$–Õq$+6m¼‚­G·Aį¶ė7˜,s>–åÓ1’U•=č‡Tm ż¦L=ßČ<Ā/fs“ Ż.Oߟ= ¹€Nū1ńĮÆ ć_”M¾:āčuŌ~“¢‰­i×3Lܼ™t3E° :mą3¹ŒyćŖ”ęg:Ą+ß­hģ?߯4„ø$¢ĖkŻ‹} ĻĖ[Ø1ż÷sŒė•ٱuœĶMgüĪ`‹GnŠń5>B;žøķĖOŪ"ŅÓł÷{ļ…1ó2Ņ-š~¦³æód¤Lŗ~õduv]£¤ (,8ėäåwā;N;¹-¾ż&µ*v3ćč™Ł©‚éźFB}póGķĪå2 nĘ7)׆ä 9ēĶUBŗXP…¶“#OŽ3sł>Ka•ÖÓć!‘`0Ń`i7Ķ„(HPŒ±+Æä6_ÄŗŖØŖŠR.0ŲyYķ0db:ZŪŽ&QDļJ³@„W޶:²x‰Ÿ²!(± éåɋŠu{ÓXĆ~*ßŗõN™ą3ŽŪŲĶh:ŪUnž¤œ’ł¬ƒG·HÉøuTQ©ĪoLŲ#—™×KH¬Ē¾[Q+qłp!€+ ι]iœ”›u†¼XehӞma©Tźåķß-£į «+JŌ®*šøō+'ÄÄś¤ ³‹ÅųW.(ģĀŗŠycćņęÜ?“ fŹ®aQĒyŽčļTš?·¤{üuJ(ß įŌŪżT!5óCTjHÜ0^Oåż šVĢ€#„ł;9ī’,#ˆB“!Ņę»R-’QegŚ8¶”Lµ`ÅĘ“čsŪnŌ¹ZX‘ė`Ę)/iæµĶw®²ŠgīfNkµÆ¶ƚŌm5źe’}bÕ}Æä² <öXŻÆ,`ī„ļœ0u,*A琔‡ŠÓćSj6ņn©x%fĪn-¦‡$3R¼ČbÆ©«Œl3ėžŚĖę8)Æ žļlۊŹÄ6R.4.µi7q½ż$“©ļæ2y‚7H“ʚdŖzĮ×OK_Īx{Óē©üiÆl­ õų^]9Ćp/¾ZĀ'ł$49V›D¤¼Gļ6ęü¢qTwR5gŃW øuņ ¤ņSē<ļŌ…[ņū¦[Ō³O|Ļzŗ2č V<@…#…νne„8Æž€‘Ę>PŠÓųƒ7"F¤#;gø”[ ¢ʈņ›’Qד³YCÅŲÅē!ÆĘ!å'Y1b Ė5ėĄ7Īs¢Z|“[¹Q”” -t‚W2WĮ_|rSÕBCĮė«ŚV¢säAÆĻū½X˜%õC"-hžĀ”«?›ŪW ÷86” ō¶Æ‹'¶$¹ó÷…u[f1QØØe¾J|»Ģ²c y$0ŅČKuJ4°ÜąņĖcźęēQ qyŃMйĖ>Љķ-ρL§-3)ъŽČóÖ 1k†ŪOB`]–Üo/ņ×­gF[ś{dxõu÷Ž›¢ČPJ7Sk”m_·²„XņŠ<‡Y—\ß)\LBåŁ(k#üQĻĄß63µ(*ŌŖq£ł-c™Č)Ķ¢ØŅ(¬Jl2ĪŚēńö)µ÷Ī£ł)]Cė’vÖ=Ų+˜uägßaŚ–ŲĒI-ŻøŻŌžc(gD‹¼WG'éŃ_ĀĀoYĮkōÕJE}‚ iœĻotv²¼R9‹-q„ĻP/E6d*|6—‘_XތV+—6BŒn;^Ž:õ}.­n.IÕ) £×ņ1q†’mō5ō$ˆDgzHĒlŒ=źUœ%'¶Ų.’oē÷ģmŽĘžBåĄFXē*Ē››7§-‰Ł”«<"žfTYb¶ćżPčZĀ“LŽč\D«½‘&Pģ÷ŹŲ‰oķÖā`ą W™½I]"“ŁöŪń˜-j+J7•-Oh @ēEŠ_Ɉ<̘(yÄ›øß“¶Ü/•*¹F­h›3¢-·¾`²Ty©¢Żq4œ`„QņNŠÅŁKz4Nŗ|*$EÉģ_źxx±˜&ō]ĖJŖz|ć#.]ŚLŗž,Żć‹øŁr9b²mBķµSV+©W9–Ķ$­Uāż§å=6‡ķwCĢėw= 7>Ā:¤š¾9 £óģ„Īr_FŽaŃØRȧw$(³(“¦hcŗ>ˉC}½^ßłį±WxsēZvC`J‹¾eYWŪ÷iõĢ“ų©ĮFvƟŸM†»,ęĢg'fÓŪ嘯R¬V÷7$‘Īė³šĀŽP¾ĆŸźĶŻQ°’„MķÉÓ éNėÅ0Ļw;i@õČŗ£¢ŠØtārć ŗ8Õ@÷IHŸKŪs°m;UńäI[#65Yüu„¶wæøžåćč|œ#ÖTSœÉ†&;-åRU†DxČ]—ž˜ īł”ŌNƒUE}o¦v„ÅN·7šÕÓßsĪ{ųJל›XUé¼„ĪŚųōp2‘Ē|ō•Ovdŗ0šBFI³OU õ>EšćŠ sTœ¾%K1É’€.Ÿč­ōDŅ‹Åł ¹[#ūųś8 ØVļyD!J`SŚĄ[9“DåY)±ÆŗBÜUd)*ėn”DzĘņ+/x*É`±nÉ[åØ?Ū_nšņŖč§ĀóÕĀHŚ1īQYsćĖo¤·æŖ46Ø- „–3ÜÖóī“2 µn¦KˆnńQ2c1_ p¦ĒB̲GĒ”ŗ9°¤ŠD[ō”łš•čµ3„XuD—·®D¼#øžR“ÆŹÓÖÉ%ė|Ē0@gėxĀū£žUæőńõjc…v,νŠZ|§ŪCĆšØ` “@é,Ļ®†ÆŠĢłĀT`žćūÓ-ƒscs?ć|G¦:Ž`ĪŁĮź,I?Xš‹$“— "Õāˆ<\fq49ü œ+;šū4a3ĢEZ-#ā%ĻŗRnżu±żLŒö••Q|s¹4Ś‘P1öõŠ«ļfĮ’ ­‡uϽĢ^æ&¤¾v7g®RžÉާ#yōÖRs[±„¦.ßß>Ā\ā~8(³żE-d˜å$”b“‚ū˜MÆXŁbL¬=%i»^š@Š™¾’ėd]*Ģ|yu7IÜź²G¾T- SæŖmL‹iI–%÷aCWZ#ųr†Ņ =’AdG˜57–l)RF=¢‹ØsøaŲå 2ĢŹgjé÷‚|ˆæ›Ęķų‚µN…}vł įi3ż„Ļcgč Hd+·.ƛÅm/Ųį ć!ōŪMœ‚ģ÷՘YŞO˜Å·ĢßhSņ’y² ˜MZęƋł¶GŸÆ­Ž£¬av­0 LŠć] }HĻöNŒ“Ic;Sļb‡]huD¬ąY’’„fŠ endstream endobj 66 0 obj << /Type /FontDescriptor /FontName /KAWGNH+CMEX10 /Flags 4 /FontBBox [-24 -2960 1454 772] /Ascent 40 /CapHeight 0 /Descent -600 /ItalicAngle 0 /StemV 47 /XHeight 431 /CharSet (/braceleftbigg/parenleftbig/parenrightbig/summationdisplay/summationtext) /FontFile 65 0 R >> endobj 67 0 obj << /Length1 1685 /Length2 9736 /Length3 0 /Length 10837 /Filter /FlateDecode >> stream xŚ·T”ķ6LHƒR"H”ōĢŠŻŻ]J ĢC 1tH7ŅŅJJƒ¤¤¢ tKHH7¾yĪł’µ¾oĶZ3ϵūŗ÷Ž÷z†ń™†6‡$a“C8 9Ąœ !€“ŖŖ"ø9A .\FF8Ņö·—QęģG8ż‡…“3 ‚¼—É@÷†Ŗ€’«Ģ ó ł…@ $ų·!ĀY qƒCŖœ%„Ģ—Qįčé ·²FŽēłūĄlĮ ņ³’ᐓ‡9Ć- UŅfŸŃbŠFXĄaHĻ’ Į,bD: īīīœ{N„³• ;ĄŽ“hĮ\`Īn0(ą7e€Äö5N\F€Ž5ÜåO…6Āéq†īvp ˜ƒĖ½‹«ę øĻŠVTØ;Āž4VłÓ€š×įĄœąĀżåż;Üįgˆ…ĀŽāą w°XĀķ`u9N¤’q€ž6„Ų¹ īż!nøÄüŽąŅ!9IMäžį_ü\,œįŽHNøŻoŽĄßaīYÖ*°·‡9 ]p×'w†Yܟ»'šÆęŚ: ܼ’F–pØåoPWG ®Üɦ(ó—ͽ÷_™ ą šs š`N˜‡…5šwOGŲJšoń=_oG„#ĄņžĢn »’ĮõvøĮHgW˜Æ÷*žį‚Į(Ü 0‡YĮp’~/†Yž‰ļūļ ÷¼ŻśżłēÉų~Ā ;ĻĶ’h1PUZQÉPŸķ/Ź’(„¤on./ńųļ|’;Ī?'š7ū?¤ų_ÕżGDEKąwŠß,īļo&nó_{Ćųļjˆū†˜’’— ^Åżų’y žpł’žßQžÆó’æÉ¹ŚŁż”gžÓą’£‡ŲĆķ<’²øhWäżrØ"īWÄįMõan“* wµ’_­"ræ$’V÷ƒĪęįńü)‡»ČĮ=`P 8ŅĀśĻaś»÷9ģą0 „ ü÷Åsļżī~÷,lļ/—ūžż©‚øÜ/"ņöžĘ°ūUūļ:d,Šß;ÉÅĖ€8;C$‚±ŸvnĄÅ1Th‚ģ•5]NŠĪΚQ~'÷½,gbÓ”&åtž³0uä½VK[ēÉsŹA+·iEk7ywŠ:žč}FE7łØ å~ŠP‰s/Šua'Ž8ŌŖW›ń‘ĻóšīéDw&ŅR9~„VµöĪźŅ,2*A½Ÿ+ZČfóuŽcņē¹+ö±A«Ń/#RÕ2č”EŚ/pÜ«—ś?ĢõPwE(¹®0„"‰d…Ødx°Ŗōęņ^ē–øķd{›Ė“Hģ@{ĖYRĪkŌ­×wŒŸ1'uņ[›%YFƒz]P9Ī‘J„9ēlDBgsĀhŃūÅĻ\ōŗÓį *VØm•ĀB”=gĘ»G–®]•S_ ÷3³«&ˆŽ–Æżō­gl‹q³ Eky^B“&ĖF–Ųķk”ßĒ`—=wŹ2®ĻõB ĶŗUG¬xN0øÅ߀ˆ››Ą žV©ūX’£«ČšŌŪ‹ē6’ؽ]ŠiĘ©*Ź!†8Śk©vĪ'£šĶå>ų©Ī"ż}““—»żņ©O•Dz±Jæ=¢Č·Ā«ÕžwwiŠču4B@›óv»#28†œ³%‚®bvµ'ü„¦-ŠRŖ–Wvy@öµŃŠĀėV}¹ću³ƒ–PĆu¬óĀx§ńXXo“ÊÆ?æMģ;ūŻ/±–Tu%{IŠ—-ī†ÉfVŅļv¶|²–5bA¢åøėś°jҚŗÄ#k_’Yęׁ¤šA[ ±Ń­’KĒ͹Q,cļ)Ēwń[KE°9ߞȌ9ę¶¢|z”%śöE»)ķłĀōń•^įāe_ą VĆ”>ķ.ŚZCvęĒ%ČįĀHĪE=ž%8©qŹuŲģ­ö”bLAģDĘ÷ä{6;¾×0łaėnŻ{°QeUéC̰y{s–Ņ;ˆY»uL‰ł+–.wĆ }‹L ›¤ƒ~Ļs+\’4k ķʐ|&ŒW¾ÄŽ·£Ū–“&ČÕ¤)n/„—ŽÖѦƒÖŃRµi L¢Ŗ–ĶĖ'%>YĪŁ(ų…åuz¦TØöėEīįŲXŪ.š'¢e“šŖ‹œĢój·é”op^rcĘ ?؅Žß’Š ¼dyéŪI¼1’ÄR*š@[kĢ Łó ±H–K—M²ŗIėrP !c'~¬nvKȒ·Ųx 0Æ¼ź­“=bq4ÄXīūĘqö ō‡·5X$q$–‰»LńLóś°}‡Ž˜,ItŌ‹c;āù…©j¤z›%©aWW4żĒ'ųč#tŹ[¦øøĒbן®u#¢…¬T$MŸ/= żæÓ;’`2¤ėQAŠżkü³y5¹Œø…ȳ)D åG¼ĮēwzŠÕč|̦ΪtēČØæŠü;µP.c 8dł”ēčNtŸś«sś7ĻŁ*kÖ.åļļ}^OFø“Ō?UŻ)ąfg­ļ‰tćõå|W$Xü¤:—ŽŅZGōfø•į‡Ī÷–ĖW9“gŖWM6ō!kö °„ÆÓo0th+•Žwk·'Ʞ`°-²¢`SŻ÷ĄĆøÄ×MŽƒ!“.Ӝōs½—­Œ¦–9Rø¶’į–MaSO¶-ޚÅ)OÅ&ĻEśńbķܝ$k¦™Õh˜ę»÷58ĢÅ?„Ŗ5 tiƒ„Ķ7æJŸwK£¶˜ä^0Gįę_‡\Ä]‹‘Ē8£D¶˜W†`ZŖcė/|C[-Ķ-u½ĶŸÅĒŲ*™ŖxOš?–^ŌOLć¼ēXT1Ō3zgž“Ē ēŐė21ŁqŪ’šg½*qķ ēośćuS«O3WŖav—: T£·ž™=0ݾ¾»k—ÉsY‘ˆnŚ!cZ@•qśŚ„WsĄ¼Z%SņÓ$ł ]°D}('PMøDu{XĪ+‰”øŻ_w،†n7eÉēį“”Gć‰[ćīū>PAXĖŹx9kžl›XumųŽįń­Į¦r/Õ£ F»- ż„g=‹Ćń–½Ķ@„ š L6ŚJ[HHŽ 2ƹ/–iļż‰S§,Yē_XRˆ¢©“q±0¶žz[I˜čō®²A£ć%‡Ń³h šœ„n\*gĶÓøzjMŽÓ‚W:äę*¾@±!^[āŸäg¢šīłź·üd¼×įō”BÉSģłŗ¦d*āńõżŸŸØIWnh«žNĄ÷'fĒõ Ÿ…ÆćÆ’āf²”×ļĪ–Ł،b8ó9ĢyÖ(¹ųłKdÓķÓ­•DaÓWøPĶ%E††–”nĆęir2{-§M’³„ä ~–“„č‚ģ)e|µ+OLĮ—c~ī¼;o©“Ł1ÄĮ±āAŲxG“’㽋žv́«*ØĶĆČy“čūŗqÄ{?7q:)Źģ%FYÉ®ātHćfe›ŃŠōÕ­8fR&»¢U+l9n?„(`ŅŠaæō*¼łH£ –µŃĆšĪGæé¼OÖS¹åõŌWöńņ=ZM=š™i@bŚHA·BōD+½¾sĻtźL*łµn¼ØiÆæą6»qĖ»utpŅÅWÕÓ—yŹłƒÄ¹™ž¶U]QĆå•=ń+>ø% WD› ®·ė™7ū`ž±‰’Ū‚¢øC6BmŹ’m”~4n #”}؍$(ŅµążłUzY"*ŃĖKŲļ”"óµC2-²įÕMÆZ1õ7-l€JŌn–eŸĒ— sJą‡¼š™É¬Yų\̻ᑷŃ.Żß[c‚V.9°«ŃiŽd_¼å@/æiüyņp3Ø4Ą«-e=Ö¹ćŃöŅ(C‘Ō;<4`dÜ”&)²ĄäĀ“æn¢–/~蟨ö-·śuĻ¢0@k°Srńl¼ßĢl­ŻFˆ‡öÅØ6Ö’īV·˜‘õ’ņåōQƒŌĘrāL¼ČēķuhGt› ’ξ-÷nd¼t^YØōn<§ńzЦ[Ō;xą²iŲ’mā›ūņ#RAzk’óM:Wfyšį3Ž7Ö³ŠŸŽ^.ņ¦Š²}{ųĘē#§wŖEu˜Ż9čuA8s ŁĢ+iģ4¶½ÆTMTߍšnLæ!%źdß%Č)ÄŲ£°,>Y(äĘ(G.j­Ć3ķ@Œ¶Ļn¤Ó…ü·~˜q|šµõS‘ų±[ž‘`P^“ǤĢzz›Å¶*³Ž#`>.įbņäÜCžŽ3>ūѹśYh†QŌžMÕŖ©Ī\ė7vČ~ŠS­ŁźKˤŗ‚Āé—öž¶`Ä{¶WŲa_6ųwÉn‡™ļG±KW:u3…ސģ(dö§=pn{9Ūš1šÓŻŹ• aꖰÜā }ā(žsx¼²*ĖrBzč1ęū·“Ķś§Ž”ćG¶˜łAC’y“„ĢߍU×(¦ˆį’žĪřTŒLØ'淛žę)Ju\jāÅ+@įÅp8h±»“ՎtŒm“<@³.qvĮ i 7ĆPśšxkÕŚüE^ÖzœiSüqP €d©’Ņ,9{UB0źYā„„J"D'ÕX ‰÷ó‘WGÕó§¬]gŗĀ”²#O×CtĢWę;x×Ŗ;®Ūø’ŚÅŹ~*{8qw-}2E–PWdnÅ}óџb |ݐ—ØjIāÜē2Yr®-Źe¦V+‡mĪh|™Æ®:›īŸzģkƟµÅń«^uYrČĖÅĢÅÜ7.'śūM·K“©i¢K+-5gU.¼#ų‘z‚ģDzT»½Øė—ņf樧ĀŒFę…Ć]n’*§Œŗń“żÕ#i ŗ²;·ŽØ¦›["”ń“Ü˹AIź±Ę ^ĪR”vć~Ja®Ź¶q»Žŗ Rāµ[¢³ćg0ģ‚Łm$ųõ4š)°?Ž\$49qīĘö øī½ˆ¹5’„ČŹ# ŽżŚ‡¾ś³H@ž‘(ĀqØõÓN_£ź/”±äK‡› Śž;”¼ĻŽ%ä“€’#Wf$Bž„4ų­ÉąŒŃ ćæzsXwwäņ€:×d»ZŌJś ?¾.`^übsgŹ K8ĘŌ8±ÕŁļžÆBbUy×}“É'ż–_ŽźusŚÅ'J”GR¢‚ 'XæśwČ2YłāO.¬< Ā”…• o>ōÕļå,…śÉ߂dӖ‡pP $Ąk E1šźH½wNųń_šŖŹ’*'XŖ”ŗ{/N¾Ģšsįr²ß»Ļįœ.Rnø<ö>9Ńię $ ķĢż[¢–æ?Nø„Łn»³Ō]ņčR“–ķ* /2N0vč$tś“ģ)^ķfrĶSTŅ…=HæŻī}SŠ;‘`įz棬«`»„w’FR’9‚²ģk@Gh°O«Ęxž^[/ó–×Āȶ½·[Ūėn5$kī—_„(2éļæ&2ÓšÓ¾£Užæ—½ŲP¦ĢĢdŖe;Š(p~ÉĄ…Ćšb*č1éČŻŽ²³bØū¦Ü)£žĶ,ĻšöLÆ"QW ÆæĒźč‚OuA [tjg[b.į ÉvōEX+>Ś!'!‚Ės8“Š,ų{ƒ/͇Må­ie= ś2§ĖŃ9Ɏ²BķsFČd-ˆńs»Ė»EO¶"J”śĶ>%°hyģ/$lÅ”÷xąšŽpĪX—Ņc·Č(Plē~  YŌūu5“)ᯆ6ķ 9= ė°öTžÆ»•1¼Ėżrķ×ķsXÖøˆ3NDr¬tīø)¦­Ś—ģ1ßnķ/Ø»Z³+g“ó:e@ü\~$ŹhH«ń(æl˜?Ü—„’„å0z–L·½lK?Ÿ{œ ”w飄Ērw¬šņ%&©/{ŅØ›®øŒ‹’`ʾqaęMį^ņ‡ƒ„ņ•…-łożD]‰(: ›ŠŖ§ĖžQ(d<@UjŸźĘś\Q3¾§}hńH’!ŪĻ4šüMLó‹ä¬ÜfTÜÕ\ņp6aQ‚Ģņ³Æ^y ņk;;2…Ö0DŲž¬}•XÅ®/N‹‚Øś‡LyBJ’¹ęs•vl^µB“އT yJżī3<¶Ż®NòčōmP.‰“¢ž‹V źQSŌŅ‹5C0]lŗŃ+z—HxƖZ5Ŗ.ø*éū…üĶK¼eO“G좦Ń]eŗb;ßš©c‡ŁHͬ ˆ‡ˆ’X—ĮųƒOõāõ±§LŅ÷,{żbSśó(Č]Š; ‘¢ŁŅ£Šn8āésićąTŹÖq¤ć”`Śš”hŪ%[ bb† u¦ €§±Č‘§xxÉG'l_ČXłö†MĻ5EŽÉĮn.źžĶA:ص³¶¼©P—Ė…×¶śŽüėNžZ£"ż4Ėx¢ĒYnį®å‡I}« ›÷¼,ŅĒ«†9Xąhæģõ&™ĖU2RVõ­¢Ž¢Ž:‰ß?ź`ĖéųŹ’jå~³X¢ĶHŤŚäS`(]˜„c~±ŚTƆ#éžX¹÷¬ @UŸ…S Ė·Fm§ļ&‚És{®śŁō©±Nxŗßó4·*ź+qMO\›„o9…ĖIÆŗšŅ|8Ŗ-T×é< ŹŻóņ "BĖŗ£T¹|Ź?^T!ĻfŌ9˜+ż~1²c[“ ›•éK€™€ß«°8ś“Ń„¾»ä“hkzۚ¬•®‹»ņØņ™mbīĢ×YÉD}Ń”죉 ā^]ć~uŻW½w”ņ~šhŅŁZVŚX9Š ĆTŽŅīŁŚ ¢W^Ž ¢¹²Zh9:”ģ«Ä«ĻLݤÓ˜}%…ēÆTš9ÅAuó«3ŚfŅų(üN0ŒB²ó"TIdŅ7ŒģiM¬Z½+¬WŠEG„”)ceH\qO¼ÜÓVxS@öÜźĮVń"¶®ųĖŚø–9ćČÕ "ŗŃ?mS,’`µ§ß% G=·ģmæ;ļW Żą²mz)3Œ‚H¾ TÖ.×“”HÓŅ•CR=AŠ[;Žčl1ö®£rhå1‹±]āŒ–žąā ·nŻÜońQääuķ2ÓŌ(8› d1ūõ6US³æa‹łėŒ'‘—<¹Ö¤$h!8Tu± NĶ+Ļj&žUKNµ”`©Ū’vā‹ÕźėmĒNĖ™E4ō[”vŽ>š#hyasü®rĻń \Ļ&'œ:©Ī†n‰ēįŸł¶žéļ,įÅ]Ź>nčSlŽē;gæRŌéb‹¹ņĢü¶—ˆŖāoŽøÓ³°Ī1&·cš]|#×=/Ōü‘P½p‹~ ū™ŒP)JJ# )„|5SÕ#ńf ŸĪT%õRœź#”˜õR(l“ĻeĢļĮü³…ĒÆRC ••Šó/uŽĖ ¹ČÉėZcĶPŠ>ėyƒņnņ[£„Œ“cńn,vóVš¢’āу”7}žvŸ ÷ūF^śQh±=fpėF¤Č„ĻX….bßz\lēmBØØł]jśXČ,öŪ‚²rvŻü¢h{›yCOÖ/AfQ R†§“éV«Ś\’–ņaĪļüTµŅØŲ4¦ĀSńŌŁ×Ź4G[pKj¾q$ÓÕZKDõj_'‡»£¾ééµōVŠˆ(¾LU‡ļ/‰6ń2łńސ»bś±ŗįćÆāƒ ˜Œ•qbEz­¶fҵN.4ź1ę †Ķr€ŁIj³h§Ķ†‹-hoCåÄq¾sOÕ^ūm”FŖkUD=¼šźŪ}ĪÖz¹Üš®¾N'BŸBVS#ZzÜoēnõØMyŅŌdW˚1Żg ©A“­ņ²ŖT{ŃLeügvŪr÷z" 2ü,wĪģq…77“³É‹†… ē 2/yŃp^T¹,Į%ʀBƒķvųyōĄŒŽćۈaļQ¤'XūĆš ±x·1Z?«Iź‹ˆ#Ɵ±LEWC±Ļīß¹­C>2IĪ,ÅIk¾u#‘ŪĢ6P·% ·™źW—ܾõ”S«M x:?+Ygˆ§XītĄĄ³pŒ¹¶q&—xg√džE÷„ƱŹ(āŠō3Į:†įxžõŌĒ*r…ąå˜Órh؆ÖR‡}le”»ĶJˆ×FņA4q‘"XFāwĆ£Ą"šRĮTŹ]Žē[“O„bJW äJ#“Ū…3ż+>¦qö{=½å:b?füQY#Ńū××!é ĀŽC騉ø‡XŻ+xģ$šó”Æ7V Ā”#&9ŻYn„4ĀŪŠQößŌ¤Łįį)ŗ8¦ž8]„±ÅŸėö©¼Zµ8Wml¶æA:L€Š¬ ߥ‹ZQS’Ē“˜ .LJ ¼ŁóC»Ó?®Š"%±ōŚŅCēN?]ģ—‘M«ä&7ƒVیĪÜšāČŪŁõ÷uœv­„0¤ąm¢G £7šV5šéÅĢfX" «“įŸnI?ēt“qė FĢÜ©kYxwJTG,ÜgFŖ »³<ĶŻ‘¬Źś·£$u|/ ¬Š·–Żöt;)ĢģJŁ1—×~K·µ~&Ó#*0ŽÜ@eź×ŠÄJÆŲZˆ¼jrl =r²÷øžø'² w-;éčVיaæĮ;ÄÜŚÉ\lŃZŠL¢SĄ²KęˆRqĢÓ[+=WgJat5Ō•#©ÄI ”pÕÆYFi”­Ö° 1ÅU{’šgTŻņŖcʼ&C®j¢Lc£Ń}åéÄ)cĢūśBÉGU~<›BLE•¹uȱ‹gÕß„éÉU…łņ”ØāŌąr…ĀqT‘Fš&pK=±$uŅVŖĮt½˜Įš1«N„7l­Ų|ūZŠķ©Ü§rY/t™Ńd÷L&īł§f‹ž˜é蓪»łI޳_å°Ź‡į{Y/No·*VĒ,u=ń¼—‡ m5‚M·ŽĪq OhėZå/rįŽŻ¤ī‹‚ &j@' «cXÆmś¼…А'ģ+ź8K³¹ó­dÉ«›§wé?d=é®NŒO"ņwģī^«n޼°Óažjć'ŅրBz5õ„^ū#Y¶źŃ†ĄŅ0Öę¹»čs  ÜĖā« OQõ±•ē^?teĢęÅ —–¼&vJ½° &µlś4e}ĆļKįÅ+%Yv">nłN“ £+†6Čį+ļ ]įX”“W°ŻĒčōļĪŽ¹-q­ō6BŪš}$eX;Ā'ŪĻ·qšj»®v½ž>®’J,›hŽ`ēhh$œéÕž¤„Ėų™"ī`’fL„&ćŲŹĢ=;Ļō)‰$p“™tküN‰/vp˜O,ĶŻ›ˆšR¦ž„Šå“§4›ņqdģē$AJ"k{æk·ē¼Ųa’ļģs1F€Ńć¶µ˜ģ8ƒ]' Ćw %Ó/#sö.ėZTŖn`\— šķńńµ]½Š„W…ˆ eĪ~ÓūH}ńķ¬Æ ŠŃóWšĮVęKžņā>Ė׳NTV<+?.^ŹKf4LӘšĪ\°ń>éV:JjöVįaūÉÅĻg•·.Q7_­óKcŌč.ŁtdZ{ db™ÕÄø»ōISwõI”łč-!žĶ­UÓŌt%Úh¼Q‰NÉį©|žŽs¢ŚóÜo&8Ź•šovÓ °ö½,':}“~]šć3ø< ®ēŌåčŲ¦uqw/ ©ĄÓ_™Ķ’LSWĄDéT]M.žĖ7.gķßĒŚƒ ļ½1yĢF‘l¢m›xV$7vą&„*jš’œĶ\½”SŅ*¢•Ćn8I|fǹm-…„+0-ė䌕÷“:¹ F!ć4*¬FjIO*!ŽŠ]U4”B픽öƒū숟dZ2\¾4æņ~KpµŸŹ™2m1‘®Ū“Č­æn’ZčcōŽåQ‡˜ęGŌŽZɾŪÄ1՛ Żö)z F^ÕøAC8„ÆŽ;½®H5.*ķ*ƗGŌ×yegq8ß°>ČN²½źĮø«=Ā›ÕČ7²šF¢BvŁr įĄ‹Ms s£š|ó<Ņ‹ŲPXFšķ0ݱ0£{kM;‡ńfåt€ķ=USÜŁ YODŻĆböĮ‰‹”«[Šo¤yƒGŖ™Źx"0Ņ>ė±ćG½=n#ՅRSGóģaGAq¤µæV›ś”ŽąüŐ»³Uˌ¬É5"ænžI3¬T’šā»~‹±õ×,‘<ńC?Žž+Ā“vg_­øøļYZĻŕ-7”įvÉaF+b~¶ęǶec īæĢLĪŪėjŌ’¤ņ@ wOlŁFd’ĖTWOĪZž¢—łT'óIŅS ;Øœ”¼Č“†d‰y*Št"ī9}E¤ŲŠķ&ėĶĆƧėœį§ĻqK›”pÜ†Åą„@Ÿ¼ėݳuüņ7°0ĢnŠ‚ŠˆšńėŅ¢bųšŒ„=Ąć…ČWāę=ž jĒĪV„]“QŅ“p«pÄ44õ››1y_S£wjü陀Į1õ‹%Õ]ÜĶך#1¹Ž®Co.³ę¬%³ó/y# pæf²Ģ¬ޚ:XU˜0N@‰SU?6ŲɬE5¬DDh†FL’Ø ¤%•ĒŸ ŽŖ}ŒŅźoköµzCu:|Õįe„ź>Ōģ$9kÄźš »˜r3ģŌeYSĮ“V<@+čģ;u¾q eąĀo ³~žÖŚ|“¤ ‰Ō{š =īF}¦l¹ ßŪO1wzöDuµóäū°ˆé&÷÷ź;öCi ö~@µGXX˜S,ł0žĶÉ$Ō­p›B/;»ļI·ee¹'Ģ,_¬ŠŚ×ŲĮ~tqł³a½ßbΧsH:—\˜m?}­¾Œć*WgJÜnĶUĪāµĒęD¼å/ —#I2Xo¦«`SG·!š-3ǹīÓ~”z%„g՟19³2_š¾vŽ0äĮuе” ŖÕ®$m|ūą—ĀÅtäĖŪ 1h–€“Mæä$W0 ¬ā­Ū µ*žŠbfGä5£(ÆpIIŖõ)F¬ĻÆćŹpZ|µOZŸ”ĘŖ_•! E’ ·Śś)ūü»3źA¶i»ŁĪł£DžŁ>¹āŃTRcߚĻ&Ō’©EėÆX‚šį“zi’ĄSs‡«w‹m\1Õŗ")N0ÉʼnI Wjb å!ŗSįCŒ]2šUė;a¦F(9Ŗ”׀Õ£$žŃĘoĶvϟQ »÷ľGWį9žbŽŚTcÖeß‘ĪŚŽ‡ ÷œ®źÖķ=’’šā1Jģ—Ō ÖŸÆŻŚƒ7„ĀO =&ā¹ZQ–ü•ɦ½7«X&„h&!ą‰©§ųŹ 3žcMRtš'‰ķń'Żź([ū©¼IRœ²pƞ&ł(j5”  €©ö¤ÉdöĮ·X,O€lW6гZ]4æĶC)Åv‰ėmjZčėł)±ZĢ›S™Ÿ? ?0ŻŚŖµLŽŅPž\~$ĖcD‡p$ł$»Óœ2ų®£Ä~- ūĶUŽš†£””jÉAŌśJ -ÅfØ,ŸĻŸ³Éʍv,²š~LéŠZ|fŃt3—„Ó ]ˆłx;ćųųŅ“NźćŚ¢ø•Fuķƌ1F E© Z}łƒar¬sCŹbR»ū1Ś-&&拁8¹sžöģOŒUʛC j“˜qƧénŁŃ|“šx&'ÜĄ·­Aim¦Ó$Ÿż£P©z_l{d•V¼ųóŖ$ŚöõĻAå1ąłY”„½9Ū<ÆzT¼“ž…?E¹…?§łłG-BróF«ŗ„ńŸÄćøGƒK_3”Ūµ‰w¹ƒ÷­;ēFG’t%J2›ų^¶±cH^]l.LjČęršÓHB·ø6thąrT ×āŖśBßH™‰Ÿ@ÉøžżHąĮŽJ^Ō6F~‹ß}oIš"āŃ*Ń8ä* mē\ŗm'/és9BFĢO•Heć5Zæ"ÓõKāWŪ¾.>dĮśÅ&önc­Ģö[5LŽŽÅõw5^?5V»¢…Š­¹‡ŽH 0bM„HĶ=ÓŪśöśxńų]̶ńś"½Üęųv­œøźŸĘÖ@7FN Ņ±‘Ćģyłƒ¼¼˜N- P&.90Į:9ōų˜&ļ2ż@Ć pĪeZ„[h8źe2"¦ŗW@‡lśä³˜WŃåŗŽ£īķ{ƒėqØ-öNĒzÓ[ śƒ@ĄU“āC XYēŅ+}µbõFėURa1¤px2ęŌ¼ČS•­ŻN‡ŗÓ‹1‚ģĶi=Yƒ«€üŗt‡ėĆ[å!¾ žĻ'§ ~9Ó!;„ŃåuQOØ'ŹĀNꄏš?d| ˆ({ kė~2ä{=ŚåN®§ž„^ۃ7„¦²#&T|D·ü…l¼qü7¼ĒÆŲü%ģ.ܚߨh3|4³GE¼Œ1īhāc6„p©Ŗd²ŸęĶxxåk¶z§ż„Őõj­Ł9QC›¬MŲµ}[ˆ3åŌįõĪ«“TüŖ§14’; !ų endstream endobj 68 0 obj << /Type /FontDescriptor /FontName /MCIJYW+CMMI10 /Flags 4 /FontBBox [-32 -250 1048 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 72 /XHeight 431 /CharSet (/A/B/F/U/X/Y/Z/comma/d/greater/j/partialdiff/period/t/u/x/y/z) /FontFile 67 0 R >> endobj 69 0 obj << /Length1 1740 /Length2 11362 /Length3 0 /Length 12482 /Filter /FlateDecode >> stream xŚ“PœŁ- Į]ƒK£ĮŻCpw ĮµĘ”w·‚»w‡ A‚Kp‡ÜŻõ‘™¹3sļ’W½WT5ߌzÖŁk ufQ3{ ”½„™…M ®Ø(ĖĪ`cćdacć@¦”ŃAl€’±#Ó¼:Aöv’ŠwC^lʐ—@E{;€œ³ €ĄĪ#ĄĪ+ĄĘą`cć’O ½“@ĀŲdPdČŁŪĮČ4āöīN KČKŸ’|čLéģüü¼L¤DmN Sc;€¢1ÄhūŅŃŌŲ no BÜ’« %ā ĄŹźźźŹbl f±w²¢gø‚ –5 čä4ü¦ P2¶žE™ a ’éP·7‡ø;/)Šü’ālgt¼tØĖ*”€v+üĄųėrģ,ģ—ū+ūw!ŻÉʦ¦ö¶Ęvī ; €9ČP–R`øA˜ĘvfæmĄö/łĘ.Ę c“—€?Žn Uæ0ü‹ŲŌ ä³€A6æ9²ž.órĶ’vfāö¶¶@;ł÷ł$@N@ӗ{wgżkøÖvö®vž’Aę ;3óß4̜X5ķ@ŽĪ@Y‰æb^LČ’Ų,€7/'čŗ™Z²žn įīüĆÉžŪüĀĮŪÓĮŽ`žBč 2¾üCö»'g ·ē撍ŁŁf SĄh²Cž§ś‹hž'~™æČ  Ėö"?vŪļæææō_ffogćžOų#f•T—Ń’`ü‹ņßN11{7€'3';€™ƒ› ĄĪĘĮą}łšžļ:ߥŲ’aU1żu:¶*ŹŚ™ŪæŌł“ÅĖõż‡‰Ė_Ņ ūkoč’ŻBÉžEŠ@Ż?ś×cćf3}ła’Ž‚?Rž’Ä’»Ź’U’’{")g›?ütüüʶ ÷æ"^ķ yYEū—±ūßP-ąŸ­49ŪžÆWbü²$¢v/BgfēbaćśÓKÜ€f* ˆ©åŸbśĻ4^zŲ€ģ€*ö`Šļ‡ē%‹ķ|/»gjżņø€_fö§Ėü²ˆ?Ęū_VķæĻ!igjoö{'9øyĘNNĘīČ/’xAÜOö—å5ŗż”y+‹=ä%šĀŁ`nļ„ü{Š<ÜVŃߦ?/€UźÄ `•żńX•’F|\VŠKĶæ?€ÕäoÄż’÷ņtŲ’młĶ›Õģ_Ąjž/ųR ō/Č`µś|)gū|-«ŻßēåTĘN±ČüŸšÜ/'rxŃ żæŗ²æŌ…ü ņX’_2\ž_ŗŗž9^ŗŗż ²XŻ’€’5Sg'§—įż±T/ƒūžćńŻ€¦Čó3ö¦oƒ¬j‚ZoŖD‰]™7GįŽ“o>p0ę Bz$' ÅŖg¤/ȗHĶg—2°ś¦$ęx“¹2{ī¹QK^ēĪuÅL.µcAnņyęł z*Īóš„rć+TŽV¢™@”S” i$f’°™E: †×›šī¹8WZÜ")^¹ąV„öŽŖ¢t<ž÷kj&“~Mī ‚7Yk¶ŃėõĀ“”R)åŪo‘c]+1Wūū—°¾“vFśĖ¹lžP‡@°$ßö“Hp!T¾_ś‚žU貟Šķi"#ާ®˜C”F€Ü/ž%¾é˜@ļ įƒUzøeņ>FŪ—Ōķ|K{æ¤[Nī®@¾¤¬)ŹP‹O3Įe)5æö¦ŁŠĮ üėyøÕĮ ”ޱŗt*/˲¢3_Ÿ!QõH«ä Sf­lą NĪwlWS6”ė&iö$A·Ģž¼³äö`MŠÄ|Ü[źŽĘŖnā äÖ¶ŚcÕ9ć#)½ŚZ5Ągclė¾$d ĶMǁŃRŽ0ō)ĆźUj_V «‰ŒQ”¹©1efūP—©+"æd=p-‰”¹?†8ļUłŖMż ©@^’µć'īī1¶lŅŪ.3•¹DĮ\ż§K/žŠMÉ[öŽł\Ye˜½lA›(Ļbøš¦oĄÓ"ßD ‰ĆÜź¦×WćļH"Ė ŚcāŲ…‘¹ bSMęš1ßi>/No }‘„·ļņˆ,  Ź¢³s2Dv"gTsny„d`jG·ŅÅGdÄŗśO»|„Ķ{A1ČŲČV©Éę¼µJŒ€Ų*“óVtĪīŅųOm²|źcL‘‹[Ł:ąv¬d|ImÅ»–9eØč”=—š•ķ ā„ĄYlŅü¤±hĶåy¾+lrĘŚĆ(šA6VĖĮM’®ū%+µ!\ŹHĢ {½š2&Ż{„iµä9™ ޳½\ ŅŹē«\śHŲiÜūž «&¢L¾Ķ®ŻŽ{ć\:ļÜŪd@įčd;×ųNāŁ(4ƒÉ'X³Q ˆ4AVēżłfϊ…E?ā-Ēō8G8zVc¼‰­ā( _:M%K{ ®ßŹøp•Ē4™H5V—ąńŲ½„Ą3‰jbž“’V»“qāį–ģ<õX]dWeFvQżŃSŃBXJ•l ‚†NńyģśĪ:qÖ}ūCB+킽YƒĖt©Hé;Ā9%īCŖ“·?pĆę–Ģę£SnÖŗ²ŠłįåmżG\„× 4¦›‹RIO$¤į‰‰Ź—¤3ϐŲVĪĻ‘—]_9-˜’ó–TzW'Čz±įøŹÄ7Hģ¼”)ĆQl¼ßL«‘@]}“ʼÜE$C;ͽL+Xāoū濐o}Ś¢}‚]Īƒ_+䎜Ng¾¼“Tćŏض4c į]l2 ļ°§”/בžĄO[Øū¾o…2J„ä}W &J³Ż[ōg¼Ÿ¦[·‚“Ätʝjc9ŖÉć‘Q&ķ3q„ćē-~XX³Z#*µsĖØčn°h9$CHŹü6ÕĘ]ŸyL¾w‘ōTśŽ dŽč–1Š4čæ³+lū!OQUšĶ¬(²+Yż§Öhķƒć³hHĶ(gh¾Ä!āØpĀņAā żDÅ’”Ū*DąķŹ@xū˜®ā›g|Hę½ā“j”/ÉÆłŻōŽĒ¶¶ś“'O÷béÆõx҆ųøŸ‡K“ĪŻÜØ¼ü&±{¬Śē„€Īģȹ_Óö£¹LæjęU„[*ö2Ų÷],fØ„w(éŠäplKł®PzńīĮ”µé÷Xž}pāTż¬ $ö\D#v/Įc‘±ōĮŗ%u×2Ÿ”Y¤f57½“ż=C ų¶f­?ŁŹp“&¤$n…žsŚīÖµ>vkĆ­Ģ— 响9)®½Rš¦³ų›Ÿ°pv"J „×z EźŻ–}ķ¦Ę‹›2„{ė¼§½†![ .Ųģ2µgq–ivŁĻõ_F›Ii–ƒ¬•@LĮ֘ģęŅT›Ļš]Œģ†å‹Ųƒ«å$&½¦ ÖaČī‰T/EĻąz"<,>įā<_‘ļxķ”ėt‚-!•’¢DŲcŚ}dQų 0ėlļi¦ŸrķĘ5”źFrĶ]̓\m¶‹÷'~ńe‘{S<ŽfR`Æ×ńŲ‚€U±J¬›NF4 ɏŲ[±µĘŖŪoHā`µhļŸ:»”צų…9įXÄ+š­É§÷3"xŲ)ÅšR6æX/lQqŠøėæŃtĽ¼XŻ·’N|VWعu¹XŌöŽ®õ+—ŗ—$™Ń֞F:’žžÉ 4ś“1Ч±ĄžķGd¬iźRF 3ģxģøĖrhD^%Õ­™|æŒŁ Oū!PWĒ1ßk]A  /¶©<ćėĻ‚ ČxYł: e·X“0 žwiĪHLšŪ¹wó~¶Ŗjl"½k"&ņÄU6)Ķ[ĮC3Å Äī—öµŠ'å’Ē–l3U«’ö‡Lū¼¹†Ķōló6 .”šŸPöxWŸL1Y.|Īé™Ķŗœī¶?#wZNœ½š1 eoŲĢ“ĄqĒWøŸdċ°;Ėg€åĪŅū‰É9¢»Ä™ ŹŲĪĖbŠ”i/9Õ)“ŠG?>1刈ŪD$Ōyūu~”|ļ„x­ ';nīžQ©n c®Ö3²ĪŲ ^§6)øŖC>!ó‚VŃķTX :ic]gEÓ%ģ«ęŽ. źĪ¬ąR’2č–ŌžĆ™O€x 6>Mkę‘éGłM}¤Ā⨯Wwģfڱn‹ī.ļ2ŲŲæ”Ą1yĻćĪZ”žHĪ4-bKŪ!ŗ“Ģ~՞ ü†FŁ”c’±āaūéū<")֐¹Ä r\„?FžšUAŃ«Ŗ"j6Ī&Šņ°Øc¼˜ļš<'^9æŽ@[PE¼ÕĒž&n3‚L9ć]žĖ+?½— H ”KѝöM „^ŃL Q–#¼D›!Ct>xtƒly`ƒ­Æż»r“ė„H•1NŹ!i’Bf«K+±1½ ęjŁ ‚rÄÓ¶rhbu!üx\ān~³Ś-×īĒÜĪ‘ƒ^}ū8Ų.¾ū›%;E¬ qvŽŹ.wKLłg†ĶøÜS½¾C8·Iöō%½.tż­ąŗ|¾ŌŹŲ ż&ź ±‰&&ævw_±0ƒŅ Č»±Ä›“8ü„;?āWnLE{K IU`ÄgEŪµrJ¦ó%2PXM{3ķ™'ch‡ŖźÓéÕ.Ó)«Pžō,šž5wuXó[£‰UwL=ģKžŲ’Ż®³ćźįf¬Q‘éóO±ŌN;ĒwÕkĆÉÉ%Kgǚ}§ć ÕŠ{:§ŽØ£,Å‡Øł­¼Æ…ŌėÅÕ~>Ī—”Įś²“)ƒrŒĻśž2M,Oé}“Å œµm棋FÄū+bÄ9aŸ„i|p¦‘eg/{Łé…‘‹$=7vēVąĶĻélČÜ#9.ä$’Īl[&ŲŽ,Ųśmøv:EĮύQ *JHĶ+jcp¢ÕdH–DĀtżōõėÜŽ3† £uĮR†D . œJó’©Ž¬>¹vLkqLbč¼C®z¦™¦Æ})ōxøVSŖĻŶ4Ā €ö"Ž]į@¹~„šWr”ąŖLLąŚń58ķĘAk"+ČØ'$*ˆĻ ĶŚĮˆY©äĀFča$2Ÿų3Ü6Ž|āgĖ…9¶|„QåōźžahCØĄąļOńˆR_|V®­ęb6 N0•šĻ6„dęw®ė–3ńpŌ\*¦GU÷²nkéšx–Qr vČp{¢źś –Am+œ†U„«é…={qŸø]o±Ä=fŹ|·ČŸ¤ʵwØÉ?>.Y<[5ēŪÉWÉ'čkÕūš/³ ż©H(†ź“)ć6ül|-y+¶BŠļ޹ Ž(ņ”—Å5'šŹ įŗ(c‰ē ά®&›¼ iæV¬~p3ųøĪ×Óåzˆ’$“źŒJę\ōøõ½Ł “8ŪłŖ`ŗQŌäÆåšÓ»Óą›hó줒ŻIfjm”šP2Ņ!²OÖfŚ1‰ĻPżÕÜ}ŖX,?/ØQtw“ļ3§Ø.e¢…Uü7K?Āy‹ļ Iyėc—n_ŒCłģŠ}±ņ—ƒyxKmü+bOąoé˜A¬æ ±ĢœłöõÆ3oņŲ²Hźžōņ‰ĄQrk¶¬ēnŃx iElÅāJŸü„]‹ņśµ„ÅÓxy„›š#„Š4®r”¤—»Ēgł1±ĢūDXÕCź¤Oźs«žg=ü!“X%«į…B<²_³ÆéŸwU¬ī3÷įÕĀŚčÄØęHĘ:ŃķgĀŽ<ž$Ķ85fG;Ę(Ž HO.ĆT}s„¾!‡*4Ė6$£[˜Tŗ™“Üb @X‰®xކhj@…ēŲj2ĻŠĮŒŪ<‹Lį…d†gv*Öj÷ęNō% ‘ĀL÷ʶl]žeF©W’ķĒėśŅń­[Ó&7K0]Ć߂LŅżAĪ !D£,ūdĒŻ%źāhšŅo˜QaO˜1h${|¦ VƒģéÕ}I†pÓā|z‰UšéĀ¤Źś.Æ*Ž A)LjI §@'»éŌ&|“–~ ŖAłÉ®¬_į6tŃĮpõŽł®ā-±1·ÅvĀÜUĪsH „lÉÕՅ›isž}N¾¶a„Ÿóx­­­cģ9·¶XØK.Ōm^‹y6tŸŠ¦ŖL~· œ°²©ōĘåXC­_ĢÓ³ŖPÅį⬢H°u7Śfū©ą‰Ė—«c÷»#ČĒO™3Å,“ĢdŒÉ‹4SŅ< śģĆEŖą/P”ĘöZe”«T qZ!ˆdēŸdĻX+{/] ŽS[h‚xŅīzń½Ć"łUĮĂózŅ’C?ģjöhæ:k`æ!ˆč\&QŖ.)߯š½HTAP[ŁjŽd"求(2Ź™ü$nŪē[µ˜–² Vß0·qN’€+©;aIAŸn‡Jó k‰0õ†Ę…r½8‡ŁźØ‘>+˧™nc&{Ė„ŗ§9†Ź‹ŌŗŽĶ¬¢wżō³{¬¼=ūfZāķÆÉ³TPHµsɶÓ4Ō#ó5U`…yŪ9Ō+n –7µ“ūUŽ{30š%–üŲ~…×PŗL•=qŸz¶` ŖĶkŒo“Į§ßĆ^ø’A{ćĶi>v5Óø%Ķ&«)šųŚ~hŠX‡$V;ĢśŅ$oŃ­łŗSNnęĻ„Ÿxõ‚Ū»róK˜“źŚ7“āįt¢„Ö[°,mØyķ±¼ ŗ?åmØTF.|Šc{“mēŚKé-"Čģ7OņeŚ+٬€u ©M<įģ3£]’ĪķČ1=˜ló>ŚŅś¦Č¼ųMn7Õ³R_t8/Ä5ėĖø _iҚ¤) Ö|ÕĆ$;–žėnĪŲDƒē­öLģÕg­ƒŻŁ Ŗ0Ńü]1øīššĖĢ2QśÕĪ·£Š|w>bLĮcŲ={;“łŌ.޲4Ƥ'bģt'Æī2j5ĀP{oŅ€wĮĪägpLƼš°¾pPj1*^ Č¢™Q{»²ecQN‰ł“-#@#am–šˆ_‹ —E¤ØxĢƍm"«é±źŽT8ūĄ±ÖóO%óDoŃf³VķŖP`0"÷æ½»+XUiŁ+c3­ŚRƒĪ(( ŒŽŚjS`hNĘ£“k”ĄŽ…V ³‚HŒ—}ĀĢ»kTźƒ"ńĶČ7y‹$°‰}^O‘g%œ{ÕNœųÉ_å oFż÷‚Čč$łaqŽ™2X²øæFœ"żM³ˆšö–%öąī(ž;6ź÷I“ĻŽšĆÕŪIŸŅÕh¤Ō½`É}·»{mTgÉžn9ģģ»ę.`ÕĄjL™ÆĪ$“=VQ‰ō®%9䫽–|Mmˆü†|“AģÄMT[żõ …@Ę““#ĻŖĆ-¾‚ Km$›åm<*oQ_üCøķäō–^ŲēA‚Ó ąŖåŗ!õ¦l±”łFĀĖ›,ülŌj¤Ä8ŗd’3ŁKK’Ŗ‡ģM¾Š¹į&ņ*ÄsŖm1M^a9ŻhüŃ'VŌķ^HqV¢zš¶\Pś ÜćcŠBØ|¶ēHKĪgŲKģ„:Ij–ųzgš&ˆ½:¼vš1ų^4]v8Ś 9+‹!Ųø£³X’žĻ~Ø- M`Üūéa¬÷ˆ£åČØ~­Ź:¶¶ ™NSxŽMÖŚņ¾‰ėAsw§™Wd čŻń3ķ\dTųw‚ŃūŽ>Ią~^Ƈŗ=Į ˜ā Z‘ŲZbŽplŻ.ßŗā˜ļļ¹ź\'[x96qs˜{ö™`3ŚĒیP kmęĢé`g™|¦Æ’ĻÖßgpūeØÜž“Ź«JŌ‹ą k£ß1&‚NJ_«÷Ey‘ŠīW-ečø“8ōdµ¤śZŗM… Ŗ¹›¾9a/š¶Õåk“YćÕ5"etW놆OŒ`ÄøT~ŽÖ}·_SJŚAwŌ9JĆyÉZE²sŠ:[·Q…ī­ŹxŁkK‡Ģ9XXö…NdņUįĀ8‹8oł-—*4ģ“%¦s Œ“uMło5ǹģYdŻx§Æ/1:žĆ­JK„•ö'ėŚźė‘tėR*¼ö$•ūżĀŚüŗ>ī+ēšWŖI—J<Ó2Ł}TfĘęäŚø/“ą+Š.'M™ŌqsÖa.ßgf-Ŗ1Ģ47;Ėķ'±fń¢·…t,ÆTŸI®’ó˜lÜŹŠ>Vū5P!‡Ś2ō^åtßL«†ŃŹÉ?9_±8Įf`FÖZDøz®hSŁ(²ĒÉū²ŽŽHk¢D~é=±N3x?öģŽ8Įéä?ØĆbk6’‘@¦fŹś¾ ³U4ŗšm²­§u"­ŌŒW³£:—cĮ›2< +¹€™7.ēż·KēÖ‹M¾->'K{Ń&|ŽÕv‰{ ”‚ƒĻ°†É0g“š+„²C}ŗÉÅ>'0åS’AåM„Cņs/¦ĆŖcq±­Ż)” Ob—§B²į “ōxo¹Nįœ=+ŗŌhbańL$@‘{×°óŹ3TV†©x:ė|īu•ä@ƒņ}Teˆćō»bŖŅ:Õa]‚oź›õ`1½S×°xŽ<”»'JqīM&Ńf»Ö7 ŹĀ‰A'<³ė~ķŲŚ#‹ų„‰Ć‘‰įšÄ0/$ėß)4“Čš ™āmDė;„jļ4užÖ?äe0®ļT ‘@tŚŚ(UĻę}å3³r†LŠŖ„!2Zą“]蔐č¼ŅÕrpm¬™xŖÜöńņŒ·¦$ŌTPLX1"œR’Ē6M·#d“ÉŖśĀ»tĀõåiĘŽsßr“W½§I¾żĒ½=hզǛń×J†‘#óųś` Vé§į]&ǐ]z„Ac³ üńÉŖ¬Kē#2’¶4µRŒ˜<Ÿ­¹ųQŌå“ēŽL*\Õ)ó8˜ (ŽŹxÖ?³ī įć …S2ĪͤēųœŽsÕB8­<ē9:ŪąE5“G½NźZĆ'›²Q\ņ1Wį4£œHŪŠ,)ąÉŪ… dŠŹŅšÄŐ>-É÷Ēf‹Y£ķ„Ōż‰ģōĒÆG9µ~>‡’ž™™¢³hvaØlš9“ÖÓ§·7£Į'¤5A½¾d‹uåüõQ4īfuU³=±÷ø’åÄde‹ł{VæĪFl9˜ rø’õł/N!k×ķxóō& *‚z=€Ļ/< e]ŒYäeŌŠ;’¬jśĄ#£™"Z{;80I>r3®•O[]v48ø¤I~Ǽ¦ ć@3¢ˆŅī&³œ+%ĀŪ+Z¬Øæŗ_“ŸoĆ­cjŠų( »e_FT“„ßM­żķż—e,q‰qMŪŅqŽŅ»jŸäÕ<źBĒz\ķŒŅ„>–Ō¢;é)ŪFś(•·„čZ|<ÆĢ¾IŒ]‘źŃ_ēī’xQ—޳ųļ&1[w¬~IčŅPCéµją#8(ĄßœāÄńdGćĒŅŽ«ĆšY[¹zŽ„·.ČćÅÕ¼So ĄVļČb‹›dźŃ޾I^D°Ųä±z6ywł”€Ąœ{L.AõfX³'ŗAZ?:œ¤Éx²ČŁHšp!€Ši#źĢé£y՘Mū’²0óÕ÷Ÿ(N‰åʇղ}×7I³žÅĶ[•·lōöBڬ2‹¾›+rø2Lžł."ȁh}]k)a)˜(‰—¤:{öYRßy5tŐEœ$mĻ”ī×¹T¶*’©q±ˆ·4ZV?ÆÅƒK °eV @ NycvSĘ6„Į1‘CóŒK¼ųɽ‡ŃĖ&v9c5".z#„Ézn…÷¬žķnµÉo…ż@ļ&~4NIOgmz=¼ˆ”øßlmO#]Ę .Mųvlēqpqņa2fŪJķ¶pFÄÅ3„~ņˆ5£pś™$Sć> u2ˆęō,Męp ¹Ž©Õ©ßdWSžé,Ęę©Ń¹A£ƒ:’E!ˈ[|åk97®4·“†[“YļÕN Eed0q#£ [Ž=ƒpÕ’šD]å–8•ANŁT”šįÕŲĻG.yhĮ:(b/!˜śĖ9Ł9¤<}Jļ™K„§©3‘%„ Ņü8õ¤xC/žrЉ“`CM :̾dńKIśä˜r„ÜōN­%žo{0÷VÓkČÆd‰MņĄ)?’Øłw‚.Ś*[r“š-¶ ^ŅŹ5 pg, ”­8 ³P{ō‡·)RļŁņæ†u?čĒŌD馕”ЧĻP7:"K”WŒrdU`dŹēˆńīf½o}œs=ä}ß“„…*E„y!jćfb(]·)|īå¦%5` ˜Örź(Ÿ/{o'ol&¦9µ7\ŌÜp-Š„ƄšH›Åßo؉#—§Ńl‹WÅIó¹åš™»y 0ļ3Ī&­snJūį”ī ĖU_«Ąó¬r©üŅ–¢ü¦ņ@‚*Õgµ9=`’ŌÕ8- <†Juo5‰m-Q¹ ÷3 y=ł7'üfZīlh+JīZž½$ ]{ōΌ`ĄHš1_™W‹%Łp­‘G˜”ķYT{ƒ‹ ­6›£Ā¶Źį)Æź5w¹ŠĀ­,wĀÕČź¹vˆ;āa9É"euØX›¬ž¼ģšŅćņŖłĄaū:|`7vdĶ·ÄE&†ƒ„8¬¢AÆęŁĒ9a²ūłę·HˆÖѹr(ēdr ^CĒōĶĀį³ŚĘĪŠpŽœŪ¬0ŪüCöƒļµ{ā•:™~ī/ ]V,ƒlĀj IČB·ŗJŸÓ#b« ™ū“pōtĮīĖēVÓ7“X€Z.ĶĪŃ=ü'—² ŗ1ßĘā{äY~6"héX„&957ģ½ŠŽ£ž>/“WeŻõkÓĻۚjŗ>ČŃGuÉd™=ąĶ-õS›Z*ļśŹÉ®>ą“o’~lõÓo˜…ŸŃB¶}›éQ²l>ÖJE Š‘mQw}T†ļį īźyĶõÜå"õ¦–Ęןē•ż±įÄFŠŚo(p!Ž 5ÕE赣–ÜÄu0ĶŁHõ1,’Wq$²)nšĢÉx hÄņuŌ’LW#qó…kĶ))g×04Ęļį~)aÕĢZC”œĢ„aæÜŅ1ų×/¹Ź©_IŗÅŸŅ œ¦-7t€ŃeļXIÉūIÜ>ūRMęŲSØ×,‰`ūĢ&9nējk=ćŻ|„»ā±Ą’ iMŃUyųz›E€H5±ƒ&5ž;:‚tödļVgęiɌßw}AørŠ“ū0•Ņ“ÓąŹżĖלÄ`ČyE/cł{ <ģvāv»jö ź h£xĄ™Ä'mŻĖć”;­ŅÜ8ąø Ų]$?˜Ņæåā ø =7„†q¢‘#Zœ˜vŪŚęŸyÜ) Fč)÷„* …UĮ”䏵Žv{¹ę%K'ą‘'£éĖ|$ū®x ˆ®ēpœLŻI׳,Źčīq”ösö¼Ń\=D2žø–J„"Ü\Œ3r¶ z‡“C5[<›7\R…_ŚÖ«CŸŌ uõ–Ę|CŚX’Jū˜“ų É{ŹL6óĢ:SģłģäŁĒ()nH’ŌŲC’Ó»ZX[ūŌ^osé!äšÅSź0*75©1ØWXķ”AD£R>ŲžŠ¤{„Ėdcp;°w į³ŠĘœ¦ē"ky–lł[Ėęš2šīy_ß$cÕ”ī.ÕõL6V6§‘<󳠊ä&5|ĘluCą· Ņ„Øŗ•×Ēśż®'­QoQU+Ō¬®Q!¼Hø>![i*1\˜OBs[æÄ­łGšd„s”ōżŽj·ĄČO ^ķŹv®sń:ņ0Sė”ķĮuFØŁ ³BŠ–ä -!”÷rnÕ=¾e»”}ņœÜSXłm&c7W4śĻ‡¶Zˆ2pw·¤_’‡›č5M³åĖõ ŒEŠ2M©Q>Œė 8Aī>ųŚŻ¦µ=U’,+ņ›Ū¦Ńó±lN7D( W1ą_·./˜ŗ‰L%Ųp¢lB‡wdXKe¹Yõ”3}Ī/Ģ찊X‘»”(yAŌ%B•ģHśŌXī9×h]gŠM6ń@ŚMŸ é(œ0Ź,(²lMčMĄ£¶øŽÕ‡ß¼ā)ģ¼"¹Xžq=x\¦)‡5^Š“ßo>­—ž„nb ć9ņŗē{ČAt¹ĮĄ€EZ†Fā…Š+¢D fiŃ2]'Óć<)æmń+”÷j¦æĢX‚:7²ž6”…ųÖ_ Č”š]µĻO ņ‹ž¾Ø,½ĪxWŻčø­W;Żsų0h¼Üā\Ÿl×3æ‹ŃÆeńĮ«¦~W®\… †ī§Ņė¦QEĒ~żAt`¦½§īšč.æÕƒ±kéĒfАVórV  VĶ@5_,øT¤*X€lŹĆZz»Ūé@BK°›¬®~7µi¦.uóū[}µÉJ|B“ˆKóDG AÉÜUO‚w9¶Æqö§]ŪooŁQ§č30+‘5 «›żjŠ-SÄ”TĢÖWxÓÕÕ=ē?;”WŒŽ;2Ź@• ÖĢĀ5’š¶"©IŠßĮ¤0c+zó#Š@;”ķ žXS ©ź=Ķ~%’uÄ×.½ÅRǐ>:āü ļ¦‹IB·ĘĶóŲļ?yõ8ŻGāųĖ<}½y“ų QāóöP0ƒžŲ Ÿ·"8ģ1Æ3nˆ"jĆEéĄ>ų“ŗč,ÉĆ l饄T#Uŗ"*_PØ@”…öȗ¬óKĒuœ)q“™Ļ—ĖÅĄÓF.2æŠøŗŃ‡ŖĀY`šż9~ŹüåĄ~賕hµ`maŁ\ Ėƒ[sŅž×ģ§ģ1A.kāN”[•`—2Xń<µZhšēa!fĘöjŹ %½0é·@ŅKĢÕŃȦ¹ÆŅø›!Q9d³Œ\ |6ŗÖ±p1C<ąē†Ü¼’µ”Ļü„Ä~;Øā؜éF‘ųźBĘOŠ÷‡žĖżŲhä[Ź—,s§0n£+9Sd˜)ŻÓ}uæźØÖßĻøŅę>ī[`†Čįėb{¬ūXĪf“×,M dŚgįĶņEŻØ)”i3%ĖX$ęʅžŅ!Wa£¬ÉøübŪļO‹āwP¢ČėKl5Łl|œf8SYĢp0v[ŹMŻ‚3bŪtą' jCĻG ¦ÕŌąp@˜„en\Ž?QkapóE ©>ݱ/ÆS^Ÿ\‘5ĀX>ÉüRbwµP“/ Rä BlÜcß¶¹ĆéŽDS~י(Ó¤xe<žōkó endstream endobj 70 0 obj << /Type /FontDescriptor /FontName /ELCHWD+CMMI12 /Flags 4 /FontBBox [-31 -250 1026 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 65 /XHeight 431 /CharSet (/A/F/I/O/T/U/b/comma/d/f/i/j/m/n/partialdiff/period/t/u/v/w/x/y) /FontFile 69 0 R >> endobj 71 0 obj << /Length1 1452 /Length2 6598 /Length3 0 /Length 7572 /Filter /FlateDecode >> stream xŚu4lū·ÕR£Z{‹¢(BģU5ckÕ,ŠH‚ »“VQ{ÆŚ«¢ØY[mU{„FkÕj՞’“}ž÷ł?ļ÷ó}'ē$÷µÆß}ż®;Üōa(k8…Ä‚€Ā2e €°°(PXX„”›Ūq„’„&å6‚£](¤Ģ’rPFĆ!œN‚Įłé M7GH’IŹ D„…„’vD”e*w  h¢pWRne”³ak‡Į•łūą…ņ@ŅŅ’æĆŠNp4 At ;ø®"āŠGApŒ×æRšŹŁa0Ī2BB@ˆ“+…¶•ēx 0v€‡pW8Śü Š…8Į’ ’r ģ®ōś(Œ ąŽ(銋pCĀąh®8@_Cpߎü欿ĒAš×Ż@@ŠŅżż+ł;…¢œœ!H/Ņ`ƒp„OŒ‚„żr„8ŗ¢pńwĀbsųŻ9VŌ@p’‚ē E#œ1®@W„ć/ˆBæŅąnY SF99Į‘WŅ_ż© Šp(īŚ½„žLÖ‰ņ@śü%Ų 0›_ `nĪB†H„‹\Cå/œŠō-–’•ą.ø'ŌNčWz/gųoćo5Æ3Ź`ƒ÷EŲĄq?¤>®w8ƒvƒūśüoĆæ%RC@1kø-IśOvœnóGĘ š˜ ćø’śüēōG/ éčõūļł iéė‚ł’ žMI å šĮÕ€DÄ@IÜĮ÷ßYžƒ’oģæµ ˆæzž'”Ņ ’Į€»¼æqø’E ŽæV†šļŗ(—įŽØo.,. Å}žæąwČ’÷æ²üæØ’ß Ż›yŪ’3Ä įčõ—ŽŹnÜZč pˁüoWcųŸUցĆnN’mÕĄ@p딈“ÅQ\$ū£Gø‚žpŲj÷‡HĻWƁ„?@¹"~½8ø(aį’²į¶ź€{U\qūc‚øāVó{øæd8nÉžŻ‡*Š‚żŚFq †x‘⁓ÄqüĄ­- īł›ļ! …Į…p˜}6(4éÆ1’źAöK÷—(²’_¢@ČńG8!Ōoń_M@ŻŠh\—湃ėšoł÷ū‡{Ā”¤Ó“(Øl}ePÓŃEfĮåA¹+;)G&"‚ƒł$˜.ÕQĖÅ8żŒ—3ZXšt'laßŖ«är”łłćOŸÆUģÕ^b‚ģą5[vė˜ÉĖüńxŸC–[“”ux9ĘIJl2Eč.¼¬į7Ž]»³ķŅē¦|ĀSŁ1ļq›ęXR3øI·åŻ›W/µéX¤6—bź­{ –Å÷x²–œ¢æD˜‡%ė¦ŻŅ’k9&ó(汊Ó×;{³“µ-Ü_Ó=`ł;×sĢMUŁ^1ār£ŁÜėgYEīiT>ÖjŌŹtś:9H{•sźwĢĻ8‰Mģ_†ŁÅ“n0P6禭Ų”ž%‹Š·J%gß ±}į“›?|ÖR’1¤o”žpśŹBßWG²wƍ¼/9ŸŲ½~µūŌ~ø}JŌThœ Ÿ¤Ī餺ć&;¬W%Ėyfvå煉ĖŚń˜_faŁėi"XYgPÖä1f¼›€]ĻćXāfB’Ō ŃdŒQÓ{ģӖIHĮ9ćõ ·Ż:66BzŁŅĀ]˟¢IäWOh]†²Č̆×<̨ڟΣ7šUų‹£śī¬ėķ5~"™åRżĮ°]0Wš*ņŁŪAįĆVńRRlś§¤&9Ōśsz»EÉ(I·“ęææžłŠd>~[ˆTQż}©’ Éćū l±‚Q|nßō „‘`*k¶R©<ž¹ĆM¼ŒķżłŲ<żĄĻÖn£œFŹw|’“@æh.‹^bńś)˜<,ŚR®“ a.¼” ¢št©‘KšgØ=ā­ėp}ÜįƂŃę›ä’Xžx7śY‡Ę<»y7O&čAĘlĮ÷Ž—2Ł;”–æ!0šDc°šœ3튱ž‚ČūDf5|¦üŃ]kĒ]vͱž·ēB·!ĶeŽ„ó7›"#[ķ³“NƒćÜł"ø[MßhÕłŅ?%Puūō֊2"—+&DŠ!=Qk] ČÖč{Ūąę“sĮ0v™5˜¹oqÄ`o¹XŶt²ŗ ' ūDų½Øāk‘•ń‘!żLeš,mbĻöu·Gw\UīĪ$ŕźĆx,ļ&į­‹2• ¦ŪyĻĒ%H-āė%+Mß¹éÜyåJdŗ¤GxNŸ7˰Łu~U;öĆ ü»Ź~­Ö,Z²ąÉy¾”hõĻĀōqĒDYĄĮ "«ĮÅŹŽéCW Ż„šiuLt¦Ÿ†6åL:ņ›ˆ—œĖ‡źåą»ÕH‹Żn”«Nē|8×ģø^B¬^Ż-)™ĀĖ#÷Vš4Y’~Žœ›„™˜ķĆ„7“o…×Iķ.C=xhēxÆEyēø9°ĻęåxõŹØ½9}’kõĆEķņƒ˜]hŚFw#įĪD Į<į{ĆØˆ“” ī ŗšPylѕQöTm’s¦­zf·§ÕP‘7Ŗ)Ƌ Ę­Ż į¹Ŗ"ĻŠ¤~ ¶ĘłTļA,y®0ÄćyĄø& æ6‘f(Ėņxo‹©`2ÕøbWĒŌßī”»RM!7AŪOHMäżĖ§°[ńL¦}]7¤S¦p5#…ÕYņ†.čn½åŒ/C²ŗ¤æWžĘ^‚)ź¹Dz=.ń‚‰`ĮŒ*?زtąe^ŠÓ€Ł+ć€ķgs›…£”·aŁc);·OØM2I$[!=k«™b½Ż58s˜Ū;rŽÆ-ĪĶ|b§dO/Ö½ĄŁČhx'ļœö¾qÆĻ–9ķ *8³2w›ŻŽÓh”Į<]ŌiŽĢEw„0ĒeĘ‘y?v³‚‚fSé­z› ĪÉ®Ņos&”µĮśūĮ ˇ.½ś…”mœ1ečĀė¶D7}8_²Łd[×­|b/ņ3‰PŃHä~-cÅź“ŠŽÖšŅX°ģ!¼ŽzÕŻžŠWģu¢½ė4¢1\C#d²®Žæ*Ņ<Ö“pūœ£ü{ #_ē¹¼HŠĻh“Ŗa½ˆėŽĒE.T'­Ń–²ķ‰>cōżµ=;½'ŒL§±D+r$Żh¶WŻ"ČĖāTŗ\6=#ä˜õwO œ¾/?Ų•8ŅŲĖćß›źœŒ¦+Ź £R_Šo¾ĶšsDŃč?ĀYJ†œHh…ŽČ«aõ‡jJČŅ—Śµå ŸļtV¦ŲĶ4{õ Ä4=üIżµęėbK‘-l,Ž&ŠÉą“ģD£b»Ļc,0Ucošk±qÕ­/åÖ]26ō%&7uŚŗi÷TåĻā§u-ż„…’Ćŗ9hńŹi’ļ/”ņŻJÕŁ¾ö Y£™œ4ņS–9WJZĄt1“āÅė™&JZ ÅĀ蕘ü FZK‡r³vĘASĒö$6iOh¦CrtZĪ%ĘVA}[ø^){&…ĘĀ,Ūcaü±†Ģܹ‡†ĪOWŠ•ÓÉ­ĻÕ¼äV„HųĄ0ž±¼k+“qōVšŻhµ’ĻZe4#; lõڃo īāaCŖÖd]ĒVÄÕ3ny°DŪ&ē Ó+cŁū#™/xR5 LŽĆł„‡Š­ō>_Åb8w¾8›MPp“ės›źäį Ó>Õ¼ņķSqfd@­e†¶Tä$}ē1¾®p“j̵εVŁż÷ø×£~Ż+c»Ņ(ÓŪ`2­üėģPzÜd®_š¹ Ó8ŃfM›x%±˜¬Ą’¾ „{Ħ·4{xŒQUĶĪjs•¤ØČŹŒPū\ėÕĪ ™*!Ø{&ys“ aŚŖ×o’żĘ’ Ų” Jx„ŚŸę”ÕŠM` Ę¤źnŸŽė#[ 1²£QYĮ–£ųéĻ>÷KMU×öųŹp¶E°Z&Ę$`p„_j,7‹ņłó lāūJ±÷ōÄeÆØć_1É f3³A?؃ZwozŸ‰D›õ2¦ŽżÖŒĶ£ŁōŌ/^[bQ–1ĀL˜}aŪ ’āĮ߂š=Żź}AT…aK¬™JŒŗ^/·qˆO,?y}ņ諸=“™ėØ5xƒČ„ ¤ŽK•1 ÓOᚧ>?„ՙ–®Ł±Ōęd%ż,~9ZeU`?’¶ŗŁ[É×ÖĀXō)żĘ šWĮ”„,v”—ńJhé‰-ųŌ}G=t'€O<°$p\ż ĶC2ŅĆߣ:°BGįZ£C'—Dķ­łY™ ;5ĪH’Ō拾ąPą,ļN¹qučSÓe¾SĮ^|½“©EžpY°C-ćwæ"ш2؁„‚G‡äL?©WJÓ~X Ÿˆ“©Z%„}™ĒćĀ?j2®_ÕįvŠ^%ŃøĖ‚Ģüųs LŸ?óž»"ņ7‚etל Ą'.%ćQ_›Śš$ž½}v+n½öL‹tp3żœ2ÉĘ0] O^ˆĪ<‚Įļj/i/н#³žHįø’ Q—Łš.įŖē3® ĻÄķS»‰ U†Õ–YlRõ5IŠNöᦔ–L/‚hZņķ»“”Ž‚ĢUē‘C¬sżX³ƒ_HājÅ£;ƒWKɚ¾Oź@•†ŠF—ūlC™½Ws9ć<ļķ¾łn)_*PóR¤<o{²NŹŽ1& Ƈ)Ļ#¦źĻ²Ōc š»‚vĪbW}?LZ*×£C+"S?’ uµ ŅĶŻ@b”T÷ōkŪ8d“Į¼>ƒt‡ŪÓ¶¾9gf¾ĖóuŸĒŽ‘¾t¬:ĆĖ䯉3!^ŌG<±ĒåųßnDVē¤ēPtÆĖ]ßĒ…i…‹O ”¤d*&~IæÜéķ¦…ßu (õÖä '²n ń$ŖE)ģĶj³SŚ/Ŗß^ķœŽ]ƒÓ{‘ęŖäM/ŠĄKõ¾Ī}#ŚÄŪį‘gMyZ!Ķ\sē ”\¬¼sHåuŪgķć[ć›Ņi?™¼6²uRūńä¤.¹”{\Ÿ(NĆ ¾0˜·$Ėģ×z³9d %Ś˜ōćo,wÉAńžøČ?¦•ĖHŌćü± ģG7F¾w€£¬6—Äœ7ä›7čļņ±XD5éĶ)†å½zRœżc&}ü¤®ĒL &°mnŁŲVÜū‰‘¾Ź¾HB s»\l¶Ö…±*²Ž³Š/‘Ī&yR¬ōéŚóŪnNtÕ<ü‚£GŻāWboīŚó°Ų2ä.ėŲÕõĆČC搖čM<Ģį|˜{¦‘!pt6éįÉŹĖ’½ß%m—ųö#Ž&ŖrÉÖŃK¶6ŗc!Bć^oN˜k$fŻ£ā—-ĒKŌšvĪ›ā›Md šž yÅߌ®„ߌü#+ ø›æž€Šē°¼éŃćųŲf*½}Ć×=a1¶³µm{mGųéIW¬¾ĶQ»šM™§)2R€†'¬AوlKż īžZŠŁEo|ŠlmŲÜ(ź:# ͊‘ö¾Š–‘¹7ēĆļ4°š:’4..†„LZž'dł˜ķNõ½>ŚœĘ3Ļaź—‘×1%uŸkO‰ĪO¬ž P«}mś@nˆĻ_)m†€r?Ā,aŗbf֋’U³ļ™i†{čzå9gĻæ@=mŗEš°XÜj•ŃžāīĄēŪĆFžM{uŲ#·ƒJįčā&8!4ńQ&]ńŃóV~ęĀlmøż~ĖLz0@{`†”¬jeTĆĮr’ŽAM;õh®R°‘ZzWÆķĻ)L’£ >W«HA²ŠuESm•+­©7ÅĢ$Ź ¶¼IhŅŗī>}š¤QŹŽĻĶ*ż“œ!±l©ä½ø’”gD^ķę÷}ĻņśY’»P{µóqåb)7U/qĆLėŲż(Jƒ$3°ł5w†Ø8 qn÷ŽōÅŒü;ŠŒ˜³¼ńĖX>ż"”–ØTا1Ŗ½ńf‰ä‡—ėå“/#+Ze¦Ź÷ HŖ=n^:*:­½Q“™ō…/®ØµSŽX“ üś„½üb~UVNM“żŁśTµ¾0÷ø rć3dž͆tĄū•'[k=ó§µ7Śkƒńsó}ˆśzz!²M¦Ē0bŖCO"?)Ž'‚±…܄ƒgܳȄĖHŹ“s‹±×#=¬¢ģ‹G…ĆŽŌ^Ļ >Ģ\·`×8ņ]Œ–łR]‘ešy 3%Ėõéėˆõ›÷o®WøTN2ꄆ,£V_„^Ɂ¾¦ĖØsķ/Vk,Ž Éšöē†ŹeŌ1»64N*ķ[¼œL¬Thv2¼`øó°ÜĢ=~®’ś„Ēb:(­yLć+š; ­i;ˆ°ÕLø¹„µVyƜĆ> ‚ļĢķz®`sĪ÷¶_ēš #·žųÅČls„)SĢTÓČūõ "Aß š0ürļ‘4rņnźŃӕ¤X%”|B¾¢[Y!…zlF$²R‚f•żŚ]»“bƒ½o¹oLæLt‰Ę«Z;ŪN­ ÜWåōąéPoźI…8‚ŽØŖrKõ—Ö)Š)QęŃ|žKęĢ­Ėøśó xؐĆ+!–ņŌĻ‘Å<œmmØ}Œ÷%[6M³“äõV+yæWķ¼S&ÆŌ-»wƒ9 ©jŌ™%—Ÿ‹°öĻ:I+a£9@ѤąöQódՅcšöG:Z¦·ü9µ²£ßßUU¤ü©tß+о߽IŪŅo*vĻ›]ü`ćŃ)gÜl‚šBCŠD[h„žÖ“š‚' ÷˜ß:š”Ą³nūZrF~Q [W²ÉĻĖ\WTĪÖÕkņ5Č’Ų©ÉõÕ V+ŗPåx7NŲśEÆA—ņŁų fbG“.b嬦94ņ:Ņ?ōoŽ@öџ’~ųX¬bĄ.S|Č@ÕF%`ś%᧬XrF@aēÅĶEޘŽq†Ų^’ļÄXķqņ<ڊóū¶žNļ"Ė{ ųÉŌ=MÄ·\tšēź“õ'ä¢Bxe%S%sc…˜QŅüRtB_b1ƒķēGņuŁńŸ™}ŗwKz–[Ņ“Qš·3mõŪõĶīĻ}’dŽ4/›Žvø„é|Jµ“”„g™K„Ģ`¢ū’w(ž^ƒĆ·ÜüH×ysχŖ‡ƒNÓF³Z"œåķēµšÖžS čV÷/TµįØ ¾äĆ&0”rŻV¹ēT‡~4Ļøķ(šIhŸąZ8TH.­k­$Cqk‚mWēĆŗĘ0”7"|ńų:·īW堁V“ö|;Üb ždsēū‹¹ŠL mō–ėw•ÓOG¦ QFĘNźČB;@wŽj)ś D™¼č ½…EŲjŻ dKīŒR{;r­†/!K rtl"Gä m™ļżžõ~C aŻļ9¢$LŽ–Ģ õ”ĀTcÜ'{¾Ń£‰Š[aw\ĘķüŖš#ĶÆ} ՔĪ[$_ęG¹†ØéHī.{3Rnę¼{šÕ\­[?v¶—Š’ąń#„u`AŃJ¹Ć,)–+h7|Ē ś³½Üåƒ7?5²AjĢMŃłÅŌ-Žm±zAÄ«dŻ÷[‹'ޜe/˹5b|Ņg€uŌ¹Ļśķ<ŠWŸž¼uÄw—LØuÕ^‚ŠŠöÅ“y‰yųpO ,~3īŻ–c€‰½ś]!Éū‘£*œćo ¤s¶—(URG<śÓY.Tū„r³xOģČŹ,‘©‹•¾9u=2§’ÆŸ}āŁ»6v%’ū³Ģ‡QüĢR…Ė9DU±VA÷£ˆ“uŃ.ķ ļ»’™E®5ˆ2læ Š/ŗóķDUĀ T-½"Ę!!Õ?ž&‹ƒrMFÖąv{ļŒžü±¾WK͚r5’ŚęIG~uqCMRŪ)÷iæōx_Ž>yMOHM²Õ÷Š'=”“¬1’xv” ŠlšoŚ„’¼Ź×vļ;ošÅnL\$~ŖŽ‰ģak#ø›µ(„ÖīY)Č=ŅĒCøĒĮæf–‘Аdyć¾”tų2LQzfoʰŒ&|š”łrĆŪŲ”wøzŹųĘ"Ā)N×|›£ĘÜšĖ– Ź>©£Z”+'åü•DŒ7‹‘°óz³yå1™Euł+ßĖMę{Rš,F"NĶ!Xӂµ1ćiB'“D¦5ÄčŽD̾ϩvŒū|ė p8Õd•šé=q߅bØ&9ŠŹ];’Ŗõtéī¼ŪņųÅĪ„›Ÿ5’)uIs±H1[ę?j`œ %)HmŠåN"¤gńq^ē6åp¾YŖ€šķUø. :.*Ķ oĘd[)…„µÆÅĀAw{‡ %óæĒ² Gó/°×¬µ‚XhlX¤2/ł“or˜V3ČĶnĖŃ^RÄłµPĄ?ά|øŖõ\¹˜» "3$š‘‘„®MŃč~˜īÖ\·1ޓޔ„µ’ÓłĄV endstream endobj 72 0 obj << /Type /FontDescriptor /FontName /JVNWNF+CMMI6 /Flags 4 /FontBBox [11 -250 1241 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 85 /XHeight 431 /CharSet (/d/j/l/o) /FontFile 71 0 R >> endobj 73 0 obj << /Length1 1536 /Length2 7666 /Length3 0 /Length 8695 /Filter /FlateDecode >> stream xŚ“T”Ż6Œ Ņ C÷ŠŻ!Ż)5ĄŠĢCKwwH§t(-€¤tˆ€€€€ Ņ ßčūžóžsž­ļ[³Ö3ūŗkļkß×½h5u8¤­a–ĪāäČŖ©) ø¹y9¹¹y0tķįNæĶ˜ ś7w{Tä?dŻ `8Ā&†#āŌ`P€²‡Ä ˆ€Eø¹<ÜÜĀ’ „¹‰äĄžöÖ5N€2 qĒd…¹ųøŁŪŚĮŪük `¶b€„…Ł’¤¤!nöV`(@ ·ƒ8#v“;t`VöøĻ•`³ƒĆ]Døø¼¼¼8ĮĪīœ07[ v€—=Ü  q‡øyB¬æ ŌĮΐæ˜qb2tķģŻ’²ėĄlą^`7ap²·‚@ŻPkˆ±9@GI įž¬śW;ąļ»€8A’.÷wöļBöŠ?É`++˜³ źcµŲŲ;A Ŗœpo8; µžvr‡!ņĮž`{'°%"ąĻÉĮi-AšozīVnö.pwNw{§ß¹~—Aܲ<ŌZęģ ĀŻ1ŸOĪŽ b…øv®æ:ė…yAżž6öPk›ß$¬=\øō ö®%¹æC&Ģl¶8€Ÿ[HWˆq@¼­ģø~—×õqüq‚~› üż\`. ˆæ½ ń‡éēö„ąnæ’tü7ÖöVp€%ÄÖŠłOu„bóF4ßĶŽš‚”=€ū÷ļß+S„¼¬aP'ŸĀ’ō—KVÅPNW•ķ/Ę’öÉČĄ¼~<|~nā"ž’]ęßš/ņ¬š`ūæĒżOE%Ø €Øņ‡āöžEÄóo]0’=3,€’ŽB†3ĄüöMøł¹­Š’óüIł’žļ*’7ķ’ļ<œœžø™’ų’?n°³½“Ļß-{Ąs”CLōC ͲÄŚŽĆł½Jp0b>¤”¶s€ų8¹łž²Ū»+Ų{C¬5ķįVv)é_½@ģįd…hĀÜķ?9ˆ,nī’ń!ĘĪŹń¬ø#:ö— ģŽ˜AųŸęžĘĔż÷9ä”V0ėßćČĆ/»¹}0‚@ ~€1·Öļ?‚pqBapD ĮŁ`sĆüŻf!>—īoÓōūD\Ö’ł\ö’\’…\N’@ÄpĮž …]Ąnp{°“µ½Ķ?a<ˆ-¼’"²|žĄ’āeåįę† žGŽŅ’ĀŽÄb…łif%ęš6¬ó²AšĀ‹cū£źaÖ„!ĒĒR3tų üŒłFŠN^ī²J•§‚™CŗŒėežŚā‰ßV#M“ß9Ā®-eŅĀĆł£¹Tæ JŗÜ6¤"ƒ j‘r·A$MŖX¼^ IkŪAܗLoß/„z1U(*‡wŖw÷6TäŖS ė’ŲŌ†·[ėnóŸ’2l:'†~3‰ĪTϦSė¾ĀLńŖĒ[’0:¼‚?@Õ¬ģ²ż‹>Ž//:L)LJVÆæRŒs[Pīł=›ĄĻR‘P–XG­ˆV›sX¶8­żŌäˆfčm—Šł·«8ū[™,(óŠ—æ?T(³`Ž.Ņ6ĘĻZlUA;Ø»}1rt†äāźśč–ÓÓŽ©ę\ąK»šŠćĄ€1iX‡¬:+cNƒBČaŃ«—÷ӋvEP¦˜wž`éqVwøˆžąBH\ėF@5óŲǂڋ²āI".…‡’㾓gA_¼G¼NÜʄ}D‘€f%ŗ¾],峯‘§UŌŃ _ÉD噤™Ė#…–+üźÕc’±ęŠĪj©‰„iÜqğē[S¹śYnJŃ|%0 *@ŗAÖSåŃ/ičY}”ó5ļ;–Ü8š Ą×ź‹įy»ŃīQLĮŒØ†B'THų¤§·Ÿ‘Žžó¾+ŹŹlćźé±x#‹ŸÄ+xŖļD7“¼—t~e‰Z5O¢Ѥ’Ré@Ó·Ź×’³®ś~sV\čāūµ0[õ0G!/Št~+«³Ół…ŃķyŃīÕ|“éū“ ĄÉyŒł±¾Å¢č§ņłÖŻÄ§Ŗ×¬b.~ž’X&”Š=™¦—{{¹r 2ųÄS½×ĄūC” ’PöŗåHWń®"€e$ūĄÜޜo‘ ȬJŪ•‹U²Dæ?{bžT€=A\t%Ę>„~¦¤–ėd~ė©CŚfĘ·+*Ö²hĻį7[ŖŖqJåĪV„ Ą;Ē·v˜B“‰*NiæŃÉiŗ±”ŹGv"1]’|=Y±™lŠ­„ƒlńÓ²Ū“f+‹äžāõ¢Ē[£ŗ.ĆqLßŁŁ’†Ćš²4č4ŗłÕ|ĆvŽ]ż/}Æ·ÜŹÆīóLŠĶ—ä;7(ZlŽĆ†p5ń1ö€£Zp׎V +n6śQ«‘Ÿó|Ąq^m6»€G>xłßŌŻmņń؄U¶„6;oļÆųrRŪnÓ:ÄK?&/z9;é™ œ Įģz>¶:ä£šĀµ’īP&²“C8ꎳv9Rjīe"‹ĆĢ«×ī(Nå Ó/SnųɼčmFakūÜ%H“XærÄąŁ5«©a„ä ¶ä:’Šq[Th’ƒ”–S(d­¾iŲѼŪ&¶BŒ³tõī{ŗćžßłˆ;‡1rA‘³«køŪ€óźœ+œK\”NūÄÖŹųxN!ҦŽJī„Sžj’ŃUŸŒĆ…mķuxCN¹æEżÆÆ¹ vō$Ł;ōىŗĻ9˜ÄŽŪš+śŠ8o]Œ_Üō_䑉“`Š›TȟoĶV[~@CÅEūž©jƋlµ)Įē¤čŽaź­ŸMU@0³¹žæŚP˜Ą-:” Ķ+näåāŸß׋acj 2ÜņH^H$5ŽĻĢIø$[ŽĒZń?ń>V¾F™žPšŅ½ HeÄ7¹NfĘP{ā»āØĆõčŖ-F¹dd¦ē°e¹ ą ”b«‘l;Į®ęe|Ųāų%ßexĢõ¢ó®Ä³/Ē·UJåØ;ĪøßqˆvŗĀꮐ$:īĻ]”¢UPoBڳRlŒ—KA;.°ĖĒpōłĖåŗŽĆbķ4žś-Ļ>¹^LpŠpˆRҜ̷ *~cą×›š5 ń?#SÄłr½?~xŸmĶ‹oßp‚7;6Ÿ£°ų’Ō™ ]ųłsŽĀ‡µxH Ö§325Lł’Å"hŠIqĆpéjdėķłqS§—¹iiŅ‚i] Ét9>1½–§ü̬~åśQŌŲĻ~äož”l ĀW³wzųÜĒdC_ÖŌ¬0Žot„uĢīź±ń笫)H_2…¦^…V‹ŻžįĖći”ŠIsŠ?~›Ä4²ׇ§aB\qÕ-£$ūx+$°į„WœŠF£^ĪloįI©¶Ō)N™’ŠĒeqÅ”Į!<£%ŗaƒ÷!d­GŲ¦;)śź¤·•ęĘy“A'7KOć—W„*zŃĘd ČčȦ˜‡ä’Ų®zȆ~0H1“{>S£Źłs“A׏-€Ņ}ų…l¶’ö8ikLÓ(ӂį’õG:¦ ³c‰Xääódķõ^żEoąq®„sģ»…Ęõ'gŽļžʦ”&åRŸ¢ūF8^µt?Ģ9z?Ÿä5ż¾=ßlĘ]d’¤3ɰš±\-žéšÄ›ßŠĄH.·x6ź¬MŒ9ų ²`÷^ >ŗ¤Ł®µ°eQ¦åF ķYdįĘžˆö3fŚ=R"ֆ•zź„»¬¶4ųūQ³ohK8G?éDi¹Y)F1Ÿ Įo0»Hœź…”p“^¦,Ó`¾«ęWŽ K¤:œ'X9:vĪE3š­ü0%( _HpH²“Š —?iÖOūš„r–õu¼—öį˜ķåŲr:YF,Wu»Į(ŁXmģ® ‚]–ß”Ō6ŽÕ1ō­ >łė¢«(Ž(·“V“¶{Ņ)Äķ§Šßg2Ü/ĶOīų¦‚< Ɔ²(4³± ?[‹b¾E*Šā„q4®xŠ‘µ–³_Ä÷¶`ŹŽ\˜x’šŃ§$Ź}ŌIzn4“—5jYŹŪ‘] ł„wļÖ WaŲ§éŁŃŒE1éš~2|ĆSżyżøĒ"įN¦ż|NŚŽ×øŽĮ®Ił„&{wxNl‹”×’ iF½Č`ƒ‰ƒēĪ”yūEoMœņ0%¬*Yoä ņeŌ/1ln )zāš †ENįōé }§ėț¢v‚w¹ļģ>C„[md‡ēِs‹“ų׌}ąG+„ķ½WļĪš"˜0‹uĢķ!ü¢ˆ}#¦£|īUä)šsģŚŪwMP$zšÓøĆĪxŧGUąDČwv€Mæłxņżœe½@*é õĮ"2v~·eøŹūg¹[ŽÕ×§”§ĄČšfĢ›Gš«ńƝu‹Ę„» źkB÷„–rĪčź~4č;«š±‡Šbč‰<¼1_"ķ֟—©÷ukķ€ŚĒĪ×Ē%ȶsēVyYZ»M{/87’D8éČjĀ:˼1)c»O߬/10 š+ø(—kŠW”“;UćF®ÆgZ"³NĘgūņ¢1¼ü®*TDōipLRć/’ўʋūsŅ!,­)āķ'÷f­ŠŖ“HeEÖ¤}¾”bi¼4ż KV‚”æŗæ1ą`Źź¼ˆ>śT %“ūŽq{Ć#øÄČSCē«+üŅįźXĖ7bÓkķå7“¤EŠŖko8c…¦œS™ßEJ·śsų®c'.[ŠŠz#Fž•Kę‡cQ@ĄB–ŲĢ䆞Ķ7oĪ„nį×l«ŗĮÕ?^/ūI!ń‘]ųƳX„ƒĖ#T "ļPŲ#­%+`‹YØJŠ!:#W诜—©ĖĖV ¹©…ōĖ5­yœĪȇ!RĪ„ŒėÜs©Üōd­_÷؜ h„ēåę‹Ę*Õma`Ē;”÷ÓV.oé4ŽE@ÕQʶBāv63€ /zN&%ļ|”qKš q‘1¹‘„é°JńĪ}¦-āŸ?"¬ŠXuĶy¾Ą÷–! /ž‡•Ņł$C>q³'óO”c_pŽ\éē]'ęFŠÅ›ą¼VįŪQ:&z¤o’¢W‚PmCņp$DŪwĪ?PŚ{Q[+,ėĮŠ ō~ø…Yk—Ī—öŚfć|³¬ß=P®W©›l&ģ*K?āĀÆś4:k\ģ>/‹iżģ Ų~å=[@¾¦6õµ;•3T“5•-Ć ϧŽw[cą#īĒĻžoøæ‚l®Œē9¦Ģ5×UŹ¢GTUR!ōzżOŪ•iWóÕPz/āw°JqŹIÖĖĻ<˜Ž}t®ŗy“m‹lŌDɹē1R¢FīIe÷śG™Ķ8£śĶŹh˜bㄲŌފ¤ÜĶ‘~@I¬Žµō ƒÄ}tķÕ¬VĘõö””g÷‡XzڹZ!ŲõL:C$ų‹Ć,ĒĀr€ˆ]Ś«ģ+Ša+ŸŹX £Ü7 ĻsT›héČd:1Fėxėøv~‹łį“ =ĒŽÉ¦”žÉ¬bi=YW©Į8Ę½Æ²œ7LPƒŅPņc} ’n0‰";Ŗ'†ģĄßŌū6ÄSŪ¦•^‚Wā®śq·ōfUÖ=/ŽÜ@*8°Ū\$hÆ‘ŃŻ3jXži= Īč‡di?SÜŃaÕļs}Ü2^øNkJ–ųösāq‰×­ł€®Zj}kšŠt·P™Æ0rĘMGžĶR{3wʄpĶė 9ƒ{…·t‘²Rö+;/ę21¤P~§‘Ÿ{Ć=“ņ«8cmō鱟šyų9ļ!5ZD$Ä\Ówƒ?o³OŻiŻÜkæ-¬\ny<„…[Čc¦Ó¶śÉ½Ń”X\¼Ć¹<»#śYüā mæAčÜŻē{O Ӊ±)ž“w㨗ń¾…bs¾†ŅP„`ĢköqžmŲĪy嗞7żb3ŽRÆܕL,,¤•Ńß(p¤?’Žü•ŅŅ¢fć;4hśZˆ› »ģˆį³V{¼™KĪ䩀Gˆ»iZ£_W#ɧDY“½Ę>¶Ų'qD:ĘA®æ\,¦ėČJ~Ē8ÉÕ­§Ķ¼āęćŠöZ”ēN¹#XŚļ6sœōżÕĆNŖØ:”ŠŽī…v;S”­b¶ >•šPey”βޓø«•Kå{śU/0O0dēėŽX뤓b_?Č-É9aļūēD®øÅŌēP%±—%±¹lėnzńQˆŹB4‡ąÉ\-±>’xŪj¢ćŪš¼ŌD]4åĖsC5Öt”q³O¾ß­ Æā ŽN‡Ė³Ti§cõŠf <ōj9* ß<¢”șćĶĄļbb sévŽ „R²ē¶b°ņ¾µłE’ĢĆl ś‰wŗ£ÅHņ ˆŸķ„×r‚āi$UųœģaĪ29šf>JńÅÅ!żt¶‰*’hqŃĒėå›y¤(L›2d®~\|ósŸ“äéčPŻÆćĀY/ćoL5P?X¤9Ōī}jį±EEf< e²~­žżõÓ{ęør§/ƒ Ŗ:™‘e9R3Ӎ’N_ōc¶>U¾PfD1Ö+=WĢ8źŖ3"ÅģTRźĪģ•T}i¦¢³ņ[×Yüt,Ļķ˾P–āF¾ƒ†#œYœ©ŲN²§—ó”öƒ=Nų”\±;iذ ó„F]d3Ōiźpؗ’ūÓ(cõ6łgS²Nė/ž=×F…4ūöĻ’āķ¼to”r šŗ¤Ē:øć ŸŠ~.IĀ (r ]ģcSĒė'ɼ^…Hh—ø‘~>Qfš!ż~%õ©ŹQŻPV7°©Ć÷ęS˜_ėĒ…ų2£_/HIŽkŲ…•ÉW~±+Ų3Į'c%ńŽF–]˜z¬g˜Šõ‘O&cŸ„¾24)^šYלŲĀæ÷£ŹüĪ…Q›æ?ZGyĮ żqk®Õķ4ݰgĒc‘,¦8a ;7åk^1K>ĮP؆]¦\šW1ģĘ¼Ü\yĄöGĒīc&ćįĆåĒFdqR—vЬtÖ£ņ¦)-ÉģōŠfMyR¹ “śŲėŹ}ĄźRįVAYCX½l#éõIų‰š–VjĮŒ·Śdę+9Ļ%Ó½øŽĀÅóėŗ™×ÕŹU¬ķŗ›ÅĄŗ“»Ļį‹Göęü„£ÆŅÉIĮ*ŗUä'ō‹ĄH¤ČvNŌż@šP毧F(`TēoAļő“&mŽ 6Ą‰{š!F_§p„uC)2xNšą—¶õ–“@ņąÖėƃ.d& ·~.CjŖl¼f}ęŸ(ī°*”pŰ~ķ2¤š£^ōySS’ęua){~–«@Dä)1æÓśĶż“ęAW’8cŗ`ō׳ŗ\²·Łē?0åS½YrŠ.+č—¶ūW_÷nÄĻæ.ü™rXqJć&Ķ5‘xözöÜ®øšV7É·®uDū #éŠö|3cI„MK®UĔķy™ī ? Q¬Ķ³dżD“QŪŚ3īįĆŗŹM@šŅĢ[ø?ęū&˜Ü{GÜc÷ ¶¹b깄;”•kž/žéNq?CtŲ„‹M8ūĪ ×V‡÷Eö&E ¢²[&ž®ł1|3E­%Åw÷Ü epsЇ4=²Ÿņ ¬“[_Ó VnoÖ ”ė6£÷› nXÕæ=©ųH[^šIļFŲŖÉQēĖRš1R<ķ%cżŻ3Ų„‹_D÷Ąb“g³ŲŲŻ¦»ļę<†?Ųµ³U”’FK²…ŹšgŻüōy“üæ0_@•#pNńe“yŠBćd ‘^ŽĒ³Ŗłx²¦³Ü°“{36¾D^r’cv² DÕY 3óQoüįø6~żI]ßč‘2ī#fŌėŅ5ĪŌø"ĻדŪN5VŌę¾KćōBż»F^ņl%yANšś³X±W* ‰ą¬żFcVå,]Ė<ƒ)dCļ%o©9吲°¹’¹Ėh)Ė(Œ,ąC5F,gą¼ćN'Õńąšé— –ĻOgt4՘_LT¦Šr¼_š‘’×¹öļzŲ=eĘHiĆBa›+č7/@¦pė8"ÜYlŽ”üR‰yž ą@וɯ52¬mfĄ—É^m(ŪÆéƒ^Ųar*ŌV]QĢe3ŗ®4Ėč- ęYõ|ź9öŽ;?ƒą:‡ė¹Ł5«‰ėµ„ļ½orž@ķ:3ēĘĘʇü čēÕųGZłZ¶+DoŪŖĢ}ާf@ĢX#‹kčĮóE(4a]2ńžš;ģæh Cę¶¹ÆY,Ž1jVÉO×6–ī<#.B c~Di?j2ÓZ£ņQ™Õ°CŅ&ėįւŠ.Č – Ųj_Ū•¼iœ[TÜšs?¤\ͱ×yϘaFĪŗRK%{ŪÆą>ś§&™ńh7[Āč~Ł=rśyy{.ņř³ޒh7żžÅŗĄ¤„°4žĢ“2‘ĶCāRŅΆCZŪLž„f„į~r5§”¢7[ZĀTŅ—1 Y’łF'‘Y Pķ]ŌÖNå÷~`€W½?Ķö'žEBlĀHŅl#˜8J‡]ŒgAœ¬4ČZ!u'ĮWØóÅā<ÄoźömO/6É5æ” p~#Ž6ØéU“7e4Jä“yքLb“ Ö[uŅÓNF7R×0M¶2ū}ĒFs4yy’ŖņcŅĻwļ"łÕ§{]ÖvDn¹ąŽ•E^ |ßåØ5f:ĻåU Ŗœ`}‰‘M1’GŚ]-2Œw„ŏ4RG÷ųHsśø>N1ŒOŅ9»Ķ¶æ†Ä*"z]ūPœøŚ>Õ2ŽĀŃÖL@nlnWŖČxŁ}VŪƒMŲ&):'CŹóü˜ØöĖŃ<,7}‚'±č…–Øx8/ŲJոЃ}īózYč†Ī\—fIkńĒģ[¶ūgāQ”ÉaŒ_ˆĖ<€¤g”©ÖÕXSE‘8k»i~Å«dŲż@~ŲZ94zgŠ•¹üƒĖ’y®+¾yē0{*»…ņÕ"ŚEtš=g…!‹é„žĪSaóī¢g3Š‘ėm®Æł‘Jq{Ó)t”:RRg:—Ēńq§źŒdB čEg/–ÄńŅ=y$G‰äŌ3ė]1įÕ×·Hā»cwSŖjŅ÷7ś 2²Ļč9y ų*;Ńž³X čįŲ=Õ+»\tޟkL#Å dķ”Ų˜ŠĶVtV=ą4ÓqÜ ·įäėkĐh`ĖŚēä‰SÅ\‚"ŲåõšŻ,ÅĪŖļŽ„ÉÜ3c§2fr)‡_Æe^{+¼šh©¼éŻ.„e)mžµ¬ēn”ÉŗØB®ņXŠ™ŪU}5Ėb4g¼OJgóĢ¦7/ ļ:,‰Ę×O4=ečų|ˆæøoRĄ0¦™l/ČoŠwŲ9ČŖ6ŚRą›(«IKŌI›„’ujh5#8é‡AäKĻ4.¢õöę”ådIXšņŲgI%/Ś@»2* bĄāŒŸ_ž$Ōc([£Óą“„Ęc öSbä)³ ¶lRŻb·ņ|*õĶŹ(²“¾|tāć÷Oē”ļ°{_\W¢‰‡äʇ³ ×ZźųķŚœN‘<c„˜F‡Üȓ<×x¼6qĪ"}—óŒsÉėĄ?~]H’GEŁÖń½ŌbĖŻ&*˜¦T“ ÷ž…•Sō¤Å ¶]…Øŗś¤žÓĪ äÆXB—[ō±y„Ż>Nƒ­śé[ķAĮsD›’3ÕļIg¬TźVFR«m±hĶ“Žū”vQ½±Ŗ—–3j)&bÖŹyór¢\7@šƒŁ`2ĪŌ&⮌Zp8Į»t­žĶNw™IłTEnÉ)/iܵ“ŗuDP²ø]ZĻ<ŗ|1åĶķżw•^šLźÅ‡żwī^źV ²NcÓ2»¢R7­_»oŸö±7p¶Ibö66Ē’Jųäų3¤eՇmKŸ{޻￁MĻĆ|qM]£]0ō«IÜzž5ĖKĆsūįu*wĻ9kČH\B%L+ņøŌQ ]1)sÉ(愼#š±č’x•Ē+~—A9(ē„ČĪ邊Ž˜NKPĒō†B|­^P7ŠŅų—č$²æikŗžŅō~Žüe†8õLńė…@ų¤ŽQŽC›÷P’ z›„‰ōmŃ.Séiƒ­Ī¤Ś‰Žd~«fr3źźY,ŖÆ¾PŌå§]²šK³4±UŅ×Ü ‡®Ÿū^…ŖŽq!™¹ćį6^ț*¢Įž©‘ßu4Óģ‰ž@ĝūó­„Ŗ8VE.sō Zm솕Ėė„“žŽ±o“Mļwzó,°~…„‡ĮD‰&cųt‹XĶŅ”< ‚f!7ų<ĘÕäw6:3ehŖŻ·`'I+)i Ū ^ū½MÕĄąźYģłčż '!2ŁgÅ7•Y&|“w×Ķ (+XėŻõoµ ¤2Ļ’hŅ’ endstream endobj 74 0 obj << /Type /FontDescriptor /FontName /CKXDTL+CMMI8 /Flags 4 /FontBBox [-24 -250 1110 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 78 /XHeight 431 /CharSet (/T/d/i/j/l/o/partialdiff/x/y) /FontFile 73 0 R >> endobj 75 0 obj << /Length1 2145 /Length2 15826 /Length3 0 /Length 17126 /Filter /FlateDecode >> stream xڌ÷T%zū ēÉM®I;Ū¶m×dģÜζ=¦š&Ū5ÓdŪ¶mŪx;xžsž’÷­õ¾«µj_·Ææ½"'VR„6µ3J؁œé™˜x¢ņ*ĢL&&V&&xrr5Kgąßbxr  £“„ˆē_¢Ž@#ēw™˜‘󻝼 ćb`f0sš0sņ01X˜˜ø’chēČ3rµ4Č3dģ@@'xrQ;{GKs ē÷4’ł 2”0sssŅżé¶:ZšņFĪ@Ū÷Œ&F6U;K ³Ē’„ ā³pv¶ēadtssc0²ub°s4 ¦øY:[T€N@GW )ąĀ#[ą_ĢąÉj–NÉUķ̜݌€w„ äōīį2:Ž“T„åŠö@Š_ĘrŠžī €™łæįžöž#%čOg#;[{#‡%Č`fi(JČ18»;ÓŒ@¦Ł8ٽū¹YŚæüY¹@BX`ōNšozN&Ž–öĪN N–6Pdü#Ģ{—ÅA¦¢v¶¶@³üõ‰Y:MŽŪīĮų×d­Avn Ææ™%ČŌģ¦.öŒź K “Ųß&ļ"ųdę@g;'7+čŗ›X0ž^ĶĆų§’łń;/{;{€Ł;  „šż¼—“‘+ąģčōńś·ā<33ĄŌŅÄ` 4·Į’ż] 4ū æßŃŅ Ćō¾{̦?~žūIļ}½Lķ@6’˜’9_F%5 qaŚæ’W'"bēš¢gcг°3˜’X2Ī÷>’ęæ ųł?„JF–÷ÆˆŅ 3;÷_Ž›÷®ÆÕß'C ųß vļ» Pż³śŗLģL&￘’?ĄŸ.’’öž(’o«’ ’p±±łSMõ§ž’Gmdkićń·Įū*»8柅¼Żūq€žÆ©&šÆS–šZŗŲž_­“³ŃūyƒĢmžŪFK' Kw ©’„³‰Å_;ōŸ)¼‡·±•ģœ,’xlōļū?ŗ÷ƒ3±~PœŽgõ§ ų~O’›RdbgśĒį±°sŒ<ąßG’ŽŲ^Ģļj t’sµŒ ;ēwĄ;=€™#üåą0Šž!ś qÅ’‹8¹Œ ’E\¬FÕ€Qķæˆū=ŠŃ?čŻĻųÄüŽL¬ļÆ®™ó?rÖ’Ź’Ś‘’*Ž‹0ł/bfbgóŽŸ’HŲŲžŲŚž“šĘ1šž ¾§žCźäąņ¾Z’‘°¾§~ļ‰‘ķæ|XŒf’Ą?åæ“ļę’‚ļ%XüSū;ņ°·‚žeń.ū·?€Ńź_š”Ķæą;ć•ņ~ӌ’ õžˆ0Śż“ģŻöż;ę_ź÷Rķ’QæūŚææó ’é5óßŅ’ķ4Ū{Uöļ7h÷OļŲŽ‰ŚŪø8żÓ«÷|.vļń?®ĢĢļ-pü|ēūū»“ŠÖņĒžīāōžÖżćōž’Ÿļ+Īčģf÷/õūV¹ü ¾7Ķõ_š=‡ŪæöīżÆŠ,ļŒ=žߛäłÉ÷Hž@ĒæRżĻ9™ø8¾wÉłĻļżÖžƒ’üR݁&š ³v&¼ĮVUĮĶ÷?…ńÜčwFł§Čw4æSÓ{-8¶ø<"H¤®L \s¼Nčüø¼%Nu#“HōāuŌPż!¬1A¹éÉūŁ Neb§ ~~«w,ļHųw>½šŠ®÷‹ƒ·F€5dx› y–ƒ ²Rś½[·¤ūļž’„įŠŁåŻJY„ē’IśõhŻ€ĀiņlćōgzX“sw”é›Ū)“̱7"™8ZxŸćÖ|ÆĻė,_f›“d×Ī\Å@¤n ‡Õw.Ć©F¹zS,{®2ńöqżČ~M@æHPH7÷­éžęmi©ˆ>ꁝĘĆy¹[øČĄ— 5ĪąģˆV’Ģv'ÅIį(ˆ‚»­™.8cŅ5WbŪŗÆ(šjü[#ķĻnt%Ņb䔳 ņ=²|aŽ zóbł]ø?ż…°"nźüYŖZļ©ĄÓ>®|!OŪ]‚$5hØÓøxż$‚§ŖvŸCź¹Ö579²E<4±EęeS®[ČÖ]ąeN“‰£ žŪņ’qµĘOłjYæŖī&\½ˆ’+uŗøvÜ? %Bś”…• C`ōX WL™¶*—O‹ń6›aµé™.ōHōµžæĀI·jć†/¤”_·]œlML0\żn|÷™#1sŅ]2[ŌWŠ÷#wŪ²’|ö[ńܼ ö/ŒØ×[ł~ŌÄŃf!Z°&ūØQ°`[|3”żU_“.TŠ•Xų‰ƒéy~”R¢®æŽ #Ė T2@/tW‰ŹŒ‚É8—€QtyqĀÄrü‚' Šļo?š™•šĮKøŠb,D–˜3w#‘`’öÕķB5œĢ»ņ-ĄN™oto4aĀŠ·–/™©Ų6åÆéĄö¬ŗīa>muĄā|5+x­üĄ¶¦ęēĻTĮ\CĮ+Τ#,ƒį,hÄÖ+.w%>6ę‚+~ē±{)°E$^Ž”†zGYęÖ§ź¢`Š–?°Ŗ„œĖ«&¦|n=pg_}MÉu×ĪüuwŁŁ\‰uR ī¤s~žż®|ĘģŻ5‰śÄ“FPz)/ó Ÿ©ĶT6üÕՋc ēŪ¬ī}Ā1Óaą +.’ä·tµImY†eYœĆź:lÉAY/£pŃĻ"’-š„KTȑ²””],ŠLSÉŅJdd6Oeõō Ųė:ķ8GÓĄ‘Øū¾O°ø²Ćs,äęߌ+=Ćīd†qSč\ģ|åĖXŗq{Ō±PĖŖżK–øtŁg«…g*hXõXł-M1}%-Jé ū-rPžī÷P8:£ZįØŲ}W׏Y•HjJo7®AYšĄAŗxū×ÅOAŽ~ õ .X±Įц“6^Ÿ`ļ€Źw³±BfŲ¬Ÿ¤Ö”Œ\'…Œ„V”Č ˜±nI×ĢÅU:KtÜbžÉÆĖæ.D"±ž(+qƖmüō=®U#ą‹ •yEGś¢ńdyĢ qż~ÉLŅ̐īĘ˃›23öĻa_@)÷¦ƒF~}įp> ŽIßś$ĒÉōK*Ł3®öCyī^Ļ,¾\†'®ŽŌóG„Čüœ’ W±Ö(yINn2i9ĖWŠįys¼  ‡x˜ ÜW ŚK>Yø#„‘<Å/ĀĀ8ƒ®” ~«“69{5÷Ś;sՔ £`š‹ć;Aķ9L²€W\ĢŒ–p– “.pĘŸ:Eį¹śŗ=…„ņg2YĮį=.u²Ü6Wœ™…]ŹKŅķ…ĒtŲrUēYŒŻ¾Ńšœ‹óN€Ÿp,šÅ†«VzHRˆ }·Kyi9ķuóÜÜqŃ“7%įõWŲÅ+F–÷0Ńš3 –’$kī6Īü©…mźŠ'N™ —¹\®\hO·HÆxĻéü<Ŗ'Čįķš*ײÜ!ū™¾;¢Īöć¢i2KøNļ'ÆĢ_mćbjÜ5ÆŃ4Gņõd'nõ £—@:µpóÕH~E7 Ń8ȱXoč&ĒTN•Č·Sj鮜@ ņ#+‰m!™`em¾Sāžć>žćÄNiøUNˆtģøØłĄ£š-’øßiź¦ļ[‘ŒYbš>ęJ ›Z±'Ā.Ł4‹ęz•ŪJHļ±"·ń[ī‰bA&śąˆfšŽ c”GI“ņ/øšoŗŹ‰x4%Ė–jX1ūś €[Sƒ\yĆ ¼PUrµß ²œ_+aiURfuóSŸūµozŠO“€>Ķæęńó£īęµĆ”ÆįG%ĄÕÅsŽÆ^£Ļ§dƒŚgP¤¢)«jĄ?+ ¢H/¬;“ēnæ%„µėQsvS“>gYŒ‚ŅįhSN/uÖŖu]Pj9śMÆ„0‚ @‰2rŁX°TIBšU{YCć?ąĖk¼d%j֖Īõ­SW;A‡¾X'†r•¹z°KFyźŁą =^Ļįh®›grkĖ»9l ×ĢßÉüŠm…ßN1:{Æ.AŸ× iRšų‹ļnĪķR1Œ…¼āןī2aƒ֍ķCĢ”¾›’ŃOčŽVŽN§RČńŁ·A”Õ£Ų #z7ų¦Vsķ?2 t'ÕҚöyz¹mT‰xV †e†^³ŗN7ĆĀ@^5ßĢ…uiåsįĪäŁĀ'-…į˜»-€‡½ēܑ€ÓņPÕó½ɄH)°±™=(K€#JJw%fzŲÆ‹”ųˆø²öxZ,¾f¤hvÆäĪę/’…é}ųAó¹šwI’pć£6: «Č5ūĀÕóīż†”.ÉT©Ģ=sŅhʉ »Ā=w‰½ §L“ČĖU#äid­9Õu±;¦2²³€NÅ&×H‚¤SO}‘ ·Eų£­Gµe n¤ėĄUē­fQ”\·Šˆ>Šˆ‘MŪ‘ūoƒ¬9ķtž*vłĀJصŻÓ%Œ³Čč_šŹQjšüŠž­ņBÖ{²‰}V 杉Qhāū÷—lĻ*k5ĮH­ī” ;Kē•7ĆłõĻ0,hć_̓0K“>\ƒ–:a‘ZŸ·œ… éå@IQɂŠ«Xś!Kęń5¾X½_yc ŽŸɊ„­žs»k;–‰*ćźį¾ķŪ“)ŪĒ…~*Ķń›¢n­MØÉædŒįż ŠK‰Øßpóķ %óĖJčýōw8“ä ļh#ę’²ėā¾oÖj” ēy3ųbš@óŪ.Ī6r¢Ģ ZŻö‘OÉšqsŻ“ł‚ŪQćžĢ¢Ŗ“ķų¹JĢ]¾„ĄU–ÖR™$łÅĮąDŖ‹©2XĀFą€ņ£­½»,'øę 0Ņ›ŗki~Õ(R*©|żsĆT%›KŒŗO[O÷^×u †:`‚x(I;ńųģx\vZ{§h*W–|ß$_¼²ž˜š)•_daXZĻ_†ł@z5Ոj<¬£*gQ¢Mæ諟ųźaĐWŅ–,žē%䆊Į׃*žĄÖÊ b÷_Y› śŸ'€ŽT7 &e–óqĖ Ó3Š}9 ~—”S`q|¶²2{Ģ:¹bѦ›—"©’”oońĒĻK`,µŁÄ¶„gŖa]_`Ī–“ ˜ŖEßtsü)Šʅ.ˆÆ»„ń«„µēŹØ\˜ŲĆ£y‹ēbŠ#Ƅ8׿:)ŠxLžu6bƒŃ̇u-)õhØ o‹D²8 µ|ŅLŽiāĆ4‘–¦ś‹ĻómM]½vwMŒ>‚’ō¹ÕH±TėY”¢ŌģĄČ"ƒ‡Ś(Žż°ŖŃKæøM™z×läŖ½eRx²…%(K”¢‚ģ)|ĮŖ8/M'C?;.„ŹqŅį~•UūÓc¤ū™D†ŲŲi‚WĖS]~…q«+$]2œi{Y-²zŪ@øT6RJŪd½ų­’"Ž©~ξ™Rź<öś–#^łżŒŌŽh_!`ŽāHŃŅ0½ī4uĖžž±œĖÅc™Ģń2iå*ŃŽĢĒÄ”‹–½ĆƗųeEo&żļ¾żY®¼Õ9‹zגGź2«U1¤{‰ŖĀØp@ ”Ńśź0ƒ%P沿ŽM/ɾqŃķ”’*õY—ü«ś‰ė|;!Ņøē–>ĪśHŒ¹æ‚Śf}-+?N…ÖŃŗ`³-†Lü=żkšå֜”Šrl€ŁXŠ‹u½ ĆQźĶ‹+„Ÿ-åˆźV§XÓš‚Ē3gV¢öͬčļņۃżŚJIvÉŌ÷5 ĢO(ΌŃÓÆė1ƛēšėlæ˜ĖAįOb>ö0“»f%ęÜdE=ązBgņ†óś“ ’²·¼ģ„0yn}GMPŪŅŽgĀE¬fkŚØ–.ež+Ū]—-gĒ“hŚŽÄnny¾Ę,š~Pɇ\$;£"їÄŅaPo6•ä 4ZlŽqėLŗ¼ĮŖīįpĖĘć£v«Éi‘m»™$Ō*élBøGį9ōåz@IS%½5[}d—+,‘n7©ńń¶ l'‹óŪDWėŒukŅŽ”my)ūĢ3z¶×=–דĘÜvYcć·lĒė7t¹‚ųä UvL„9»¾_ż£W‘ļ”1ĆcāÉŠč<­ )R§r4ņ£įdė°xFn§Ū§čc#B<ÄlĻ]ĖK9£`l4«ĮŸ{BO¹‘;>=~ī(»gšµŠRv@aN_¾3h½+m?{^E%¢E ŌļqŁÓĖMPōē>AžÉ «‹Č; “rNWŚœJ]‡šzõuŸ#hā1g_”7ŠŒĶBh—š[Wƒ3ģHąb Õįš='®ĢĶGŒ¶æÄŗTKdM¤šu”k=z¬Ō—”C<Ņ4Cō›ß¾± j±čuƲIżÉI»ü”ß1ī “«Jū®~rå‹x—?Ī)pLŻ›w•"ŠĶ€h,*ę$9š Uįcdq~‘ļé»~pŚ)š²ę–ÖŗŽ7Ė-N›€Ü|{y¢E_(Š?.LśŲĻpøAÜ>ŽEB#³¤Ź‰Ü¾ØMX ‹æ}fµ„D@1¹ ¼/ƒH[ŗŽÖŠ‹¶ˆĘ“¤½CĘįZ„śIM5‚t §B.łm“štO0lŒņöų®ėĮOŪTCRn–ŽvĖ ³Lņ5o]Ÿ±¾Ų”ŗ jąÜ"ŗ„ģįį3a™g°X±³"ėķGję¾ü¼€5Ÿ¦…į¶|søĄŪ\ĪĄ›ļpżDCLfĘ;¹±Q Åg¢PŌ1²»W­_øĮ ēā{nü7%^čH’©fŁŪ)ŅŃ8µ¬:d‰»GݽO/wśÓ Ÿ xSąŚ½UbŗŻHR.ÓoŹ=/ćß)ӕYūyŻIėæ±^©ó”X£ž,‘×;ĖÄ}`ĢV|;M#pŌX čÄu×ūŁÓ,@½y–ŁQ£ēo“žÉnלQg/{\‚÷#E%ŗeq¤ī/åéK©é‘ėq¢vA5ž”y‰3ģ=…7„ŖZ+LæųŹØ›,Ö5gaZŲĢ$Äź,¾.1Ģ’Vƒ ÖW…ž ' ¹ł¼Š!„VØĒ殼CŠFˆQÖxvNߞ³6OźĀ×Ī;Ÿ¼¾jo°~Ŗš5Huļˆ ‚TĻšŽ¢ŌŠÆé –BQŸżČ! K”¼·|+šĢ3 aš1 0SĄM#Ķäƒ5U£Kā5 {ĘŖ¾čŁ{1ą²-‘f9¼r£“V4H-Ī…ų¬žŸöčF]qnŽ9„é0ͳnjEšßP¹ŒnńĮ”!?­ŁÉ‰¾A(^R’óėI¹·ņxÄnÉćąó„§“wH On·ÜLµ*zd>æYɌmsa§0ėŁ×ŁsU–n~ÜøYß¦uó Ļ2iŗĖæ±Ėń/±LŽqüŸP¼a†œ[­˜'zS…÷_#1+Ś'*^q‡e\;éd‰¼Įį.«CĘ5VccÓąæ?§*Wė,Æņ©whńąC.. šŠŽ’Æ’‚;QhZQeē½źų S’AŅ5ŪöŪ|_ķ ye[ßøX³f‰ŖŠ† ķSvæO°¢”@ģXŽ„ķ™Ļ—Jķ˜Ģ+l*-ŠgČąOoēšŌ²¹D~‰L“eūD3 K;·¢™Æŗ£5R!\"IŌÕ½üˆż{|rXüŒe~\J‰³»’šD{[s€¾JbM\>nNļGæHÄf&˜Ž 9ŸrĆī¦ļ.¤…žįÖĮšńOæÜ>ŅÅ>/Ó{·‰`0ĖGĖC";XnĒ„u/ē‡ŖŽæ’ĮÖ V@D YYĶ^9_AE§0ņNŃ.ļES‘£„Į“w£ü“ńŽ\ņ¾°ž§ ģ=Y„ŠeŃ:^rēåįŁ&Fč]UŚzĶ$zōlŅ¢õؔ©ń<‘Æä‚8ļ—Āž(…äI‰fĢöėmS»ū‹±ypŃ:)VeŠęü°’6Ż0²…–(\mO&˜e¦÷ėėš Ś‰Ÿ]ņ“hw™o­)sX’v“6/cĮ$“¾ž“I]æ­Å·ˆ€3^uHWä^üĻ’å-Y{£eŠķ&ĻVū°€Į gmžId Ź„nęaĀk}GįéĒ«oŠRŽy< ąJx Iõ+h[F”ƒEé&/”:½%ģ%9āRgĮ¼"µ)=¤v®?¹*]n .«hNj4©Ģ•a½ĄĮ~q%~œœø^f¬†Źä QJ€ņŹW\Ū{~IpŸTģ’ö=qÖq*Šžøš„[ęÕt‹įõ]——­:»łr„; ’‚ozWµś·r‹SńĆō6p3#ČčĖŽ3¤"Ūó#õÄ1'ŒžÜ$¦’…h’œx­O m¦ĀœūóšqM†ėu®pY-ÕUļkLE)œ K\o>¼2­æ Xc%emėŠˆ0JB¾7÷fü$YĮt½ķ”\hś³‹hūꍇ‰ē<×Ńģ¹dmŲzå>ØŠ§3X8­b“R÷šæ©åŅģŠ……R…D»l¼RŽqDÖ„WŪß­~Āō¦Æ¢§Ž( W'įĀ‚ų]  + ”łŽ+™qPę-.SpÜ7ˆøü`)Żv&K6 ,›~ŪĶWkłGĘRš€W8yŽŅżd„’\öz)JųQTP%kRō”ņĢĆÉć{9O^ʱŠuW¢åY’J“„¶³źb½©zƒąV¼˜ÕŠq]§dŗwjÉĪĢ,źNR… Ļ TćYŻ x|!b-Ņ1²œö%pś†|3’Ż¢köI2¼P ߆˜‡FłLw{l$½3–z•ū*aÆ4^»ļD ®o¶/Ix ®8PAt‡ŚjŹį„½’ļ±dj—ڇ 5÷†#Āčī†ßačŅLüI8ž#sHł¤njŚ`ę –;Y"½mUЁt”äåĻ£!¬z2 ¤ś5„āķ3kÅ𮪨v§Kt°+tš§ėÄ5Y'v~ŸŲŠ"l„¤xāN Ųƒ^†yóĢ—™‹ZüŅ}ˆō[Z łĖS˜¤GSšėx#]:ÉFŁö›††ĆXEYćm­Ø;Ś@FżP"ÆnZĒ—'`†½\§?lņłķą½%tŅÜMŽĖøĢ[uų>rlódŹd2‚! Ū)§ÉN,ų¹ŹL¾æ“d©?’×5霓2²(”ÆäšzK—H1åŪ='½gsĻüčVļ £Ą ‘“i6s·\7o²(rtž|ÉŃ‹R÷…æSi[”.ŖgĮµ ™Y !ĒpŽ4ó9ļ’ĄŸZ—¬É\&ĖŪPŒ–yŪeˆņ4–ßėļqR䐹›ŌbæėwKņ ‰ˆ0ŪTÆdF•Ūīj/ŸYĶdBįe£_‚ŹŁŹß£—ń•u:¤MÄģs²WR8• vžÄWuT©×ĄU1ˆZ‰a5$"Kk GŒf0Ø{S'Š·\żQKż#n÷Å‡ŠŁWš7Į 哎3B@F"Ļ[ŪgAVĢn<OÄ©±#ų8nĮŠśWĶĄ|=ŗø2īģ'ĪŁ¶ÖŹT­ņ§Ūļ-i«ˆˆ¦yś‚¢'%·oŠ©q†h£ƒmŅLČ7šĮ¬fmė#N~Ö°¤$ī–gÕ'ďé<‡6֗­iZ¢.Ž[æZĘÖĀģ„\lŠõUč$¢Å©xidóK)Ė^R§ŁšYź½šŅJø?ҲAŃ^„“W Ś1ęć+īMx<żD—4aŸ›…ސֵWu9K 3ŽĢŽ%K™S™,Su qLś—žN£xœč@Ŗ\ūrßt`© ó–?ŃH¶ĪŚć9l ÷‹…¤t6ą;I˜óEÓ|eKŠ€(Œ…ĀŖg¢•;u+Byķw°: ąŗķū°F$+šw‡<ĆÓÆy¬{ėŗ4²½@_8€ź-e¹°‹„»ŻÆŁŽLĖTō…‰lt˜åÓIlØĀ Ó šä³Ÿó¶ mkæ#|µ‹¾-”qÉQH²Ī¶ÓDy¬˜œĆ…„†ĖõŅnT”°%’/óģio~:hĻš‡Ų&1ē"ĢvSK£ öÄ{– MBTä„ō}/ʘd Æ&2ÉārŸ655ʲōŗVUńÉø©ćŸNÕrlūJW\Ńé©ü2H"ęAū…=5r„bK„ČwÖiÉō˜Dø'Ø/ā“Ų‘÷:ZŁŲKӔåµG‰EŪgYBw~4xĪż3ó[KĢžfMķŪ $Źęøń=Ż’٧W‹džPh~µd!ŌĄš‘¼ļ%g˜¼WŹŗķxĮ$T*ØĮoK¦£K\:Y}?Ŗe›ĆὬ%ŸŹėqš»P/ŚD!u «¾#Wž1 “ółŚŒWŒéBń Ó81Ž3żŁßīĶ옰ŽAäńų~“VPhŁ~•“’@ޱ2½ćEóüéēį#fĪ\ ūu×It0 f[/Dė¶Ļ&:ŲzØDTœžzµÄšā1M1Ė gG`° ”g¼ē‰”*Ó:†ī3£»:äĮ:OVžéŅ©żVæ6ЧµNhŸ‚Ž’x0j­Źž7üP©Bī7į¦ŅOÓģü ą¦ā”ŪŠdʤŃ$ß™tuØe0EŻxēz$ē1ĶBjĮī¦<ߏZ6ŗŻż,c阂£lžįÅ_ŌᢙPćU¼Agžvqē0 # “41¹/OFP:åI”(ˆT«{+ĀŽÉ,n ²Č5,ÄjL„ņ^Z-ø6*?ł0Ž”ģj“wÅ fµt°ÖAVXčų94¼£ģČŻäĮ`l;k()ś/Ė…5µ‹ŻbK3ŪŌ(.žK£™bJ”)a 5«bŃ»öµć².ŖÉķzœˆƒLDŁą6ó·B¬M?į*QMHŹ{óM:„ÆŲR¾=ŪķFł•Y'>“aõ[ˆaV#ĒøŽÖrūÓŻT]ĖśµŹA©ļ:%äm\DTŁŽl36˜É'Ē(¤luœ“¶I”2Ž¢Æ«I4dü…9Y„ģŌŗ7 LĀ~b ‹‘ކ­žĒ żv ŽåØ"»Øee”ĪP€%€‰™’g\§÷½©Z'n½Ø0Ū åG®‚Q„¦×'³ß`ó§’s€eĄyµi8'ß4T„U„„rļy#Gp3Ź"”øTYāĪęØ óęTP§Łüŗw~leYrl®ķ‡PŒ/ ŌH<ć•"žBŃæ\aśŠ?He1ī4|qŽ:‘łndmPĻŗ’ģ܅-ˆ»ąY ^õ÷Šõ2ŃŚ`ęmŪĪqż©oČ0Po„#Ä&v/±™`yé3ģ±T’ķńQ”ĮņĒI2 ®¶[Īmš’ŽGeĮƒIŽåeĀmšŽzfo ¢ÉčoZØD™i9·ūńŌdŒ]E}N×÷zŖ›¢x`įD(ėe†­{ܬńYmŽMÆÆJ&Ųr“»Ļpēü,›ę$7h6X³?:“™e¢'›ŻpWćōdO”Īwķ72%äżÄÉxī©€ "āXGŠ„To ss·ÉŃM摙Šą£E¬“š»äØæöźżä"³AÉ vW7EIzŚ™Źbƒ›‘–čCÅą²|¼/"ˆŃ±«ŸŁ#$* ĆĮaĪŽšÅ}Śi5 ś³,Xy˜.–ŃZć~óp¤ŅHO¢ 2@ ™‹J¢ųb§ŽpČkīč{IsØ`>ų¶ŲNÆF“Ķ·ė°2eæ¼ŅĖĖDUmśX JöŪN®ĘŖÜŹØ6:š6&/m9[°ķ?…×®HHŖĘöĖ£ĖéŖė•ėŸ6,Ō¹jūÄ“5Čb^¹Š\ Ļ‘bGžčø Ÿ €ķ €‚*@””™ł v“Źs£łvŁSixˆ•6$|“ŸN‚Š’Ļ: ©Vś9R‰ŸUķߗŠÉc*żcđX6|’ś³”ܬ˜wĮēsć+[ ‹•œŪźļ>Õ#hO…‰ f”ŠĢo!Øł­čŻqå=‡yyQɱcŠõĻ6>1’S\gO…8\«„ĮĶkĖ­£ ōė~¾X†óx²/½¦ä`RÉqŅ„P†ßūbąźj:šīzPĖÓ.Sģ—¼¢VŽ™<ƀū¦ŅįŚję")†ÅÆx†Ź=”‡éaō‘,D×=‡µŻ+¦»ŪQ\ˆ`ąŽhź§¾NډīaLš7g„=č²Ł¦śr§xē|¹œ*‰„ϰ.&’æ…@KźhdPJ·Š½ ~:Ąr†h BUńJ÷“©GÓQŖ¾„*Ķw4)N¢w>NŚņ¹+¹ź£Ūy·žąŸµG°‹@“?Z¼h€ewü¶Až©Į}*󛛩Sbž¹ösQ8ć„끆8 e°å¢O¬a¢Ę÷Ūż`™Fo¼KĮ·V&ScōżrķeD ’2ƒÖ i*÷>Čr¤ŻftožQBVÕv(æV0ӈÕŸšģpŌ6źO‚ļµ ł‘–{iY–+KÅ͇†¤”®§…±æ[ģ nڬC‹łœ8m_S(??3ÜÄ_æVc%8ŗ4ö°ƒÉ“ä^C×]AcõP³§ģē`ÆĆ’įŃA}3©øSU»ÄUe–&ŽƒÉŹęÜ`šUMć:¢‰Wń„yY¹*źØ ]ķBnU Qa!`P$Ä*R€I•C§ [ć·éóLČ[«ę@ŁŲ¼,otģW9ņ²éɲ+rhŪ¶ČH:­I§ŅśK ±Ź›R½Š¢«lgśQ×°zFqyŌ±|k.›IA1>v_\®¶FTŖFĄŲbÜю Õt ļlŠ”,~øhFūśÜPŠ5ė”K‹ŸoGė”Ļ(M"=L—b"Źsąę@Ź9Sµ»-   «ī”|éŅł„°‘2>½’a5ā&l¦qņ`VqĘї#ĘśČ:6YČ„-®J!1Øs-:kF$H‘>~ü>5éĘ%ņŖżžMó‘Ńfbb˜Vķ;“E(į‚§p’/.)‹» 6T‰Ź{Ųˆ] QIJ”Æ·°Š_¤`·ŪÜ aPb³×J0}Č-Ēā<4NŒĄU¹śózxæ.‹™!Õ}Ę'³KøT6 ¾'Ó_¢œ`ĮĮ—nJ‡ņM¢göbŒß [¼DY23ā^7=ŖŒ6[s Äß¶ØćrŽąbģ:·+ĢiīX²¦0½p±Nśż0ÓȈaw½ģé…Š+Ÿ³ a/°†)lĆx¢oł±aś×Bčå†Ņü¬q5É Ž°öņ Q£8ƶ6R £ä•µ‘°¾ž/ĻBŅö›v"r@=—hź<Ų)¦‘·¼©)s‘ä‡&D–VuĖ$4Š‹%ŽžŲ°±ķR˧1Ćq¬šĄsi®uĪĖPRFŠöqķ°!cČ7BŚŽ‡-Żdj‹Ōl'˜ZeŌūf:źI?)Pš¶?‚2aĮMéxtXūfüLółÓxł$¢Ć÷žLäZĶu¦: •ōJɵą§ÕrōŚŽŠAēČā”÷Ż„B‹wõ ģep°s·>s'™„t_JōźŪxF֒J–BQ¾³5B‹Æj¶$~1HøČmŗō‘†¬XV sėĖŹ³ø/Ģ™žĖ7§ś,˜ėń¤˜“ © ZéłĶ¾GŸ™Ėłż“ŹĀųXa!žKæ5ä'ŚõVcłt‚åeŌĘMāe! ¾ģóī#ø&Ŗ¼Ž¶‰”‰–ūž„ųm&rĢhÓČÄTę-i_bǶu gM¬Ó┺_€dĪģą3Hē±2éGn¶ŠŸkРʌĖu¦Ö¹”Ó}żŲR£&5˜»poŃ­R~žtŪ׉jõ&[&Qš 1uāˆ2Τ™^Hµ%Ѱ$¹½ź†~Ņ Ø~Ī.)ŲFŗGŸ5¢SžŁ†Æ¾\#,ōéżńe«ż»čؚ³ öKÄÓ}GüęÖ“,HS–o 搉:V5 ÆÕÓāĻ~Ł:UĪ(į8²³I[kƒŲįeó˜ A%‹Ģ‚xż ŠXŸpƶ3Њ\E_kĀ(ƒėńĮ(ļÅĆł’Ż<šlČĖ'ž»ś±n7¬l¹uw„XJĄxõ„'6%‡ E¤Ŗ&ųķó;vžĶ®ŃFęµį1¼;eĶ ’š÷ŠRĄxē~#cŒž„ÓĀv鄾Ć ĖüWʀĮdæm÷Ē–0²č=>Ėę>žéœ¤ Ń=6„h'žn„—Cś×„]ršśAc2Rč'ąp^u¤ųģ ևhG䝓ņ“żC]’“ϰqDRv¹Å>®+éŅ’%ķÉŹŠ¬ÕPŲYąŽDŚŖY2ŖŖø1Q‚&>×n¹AĒd*īĮŗ7JųĖ/LUåQķV¶;ļĻčęÓbO2·æ[ļį‘?üę·ą±`Ó<ĮäĆõeדŌĀķ8£’2Ąü¢ U2ś€Š1h+züaÖ>½‰f¼‚ӁĻü>ų«%ŖhPÓ;¹ėwÖȞNŁ¤Æś·Ń]O}Zˆ’ė)Č6I”éé$ĮxY‹ /©x蠏rxv ѼDīį‹ ł–įö²ó$#Ō[®‚s…Ś·YHĮĶg–ÉÜ.Ķ =łnĘαŸm¶·(Ē%p3œ¾2‡čĆ:Q4hPól˜/32µ?ļ­„÷#š³cŅצNé š Å=NķaFēüŒļW!å÷›pŠ=N M¶ļ­œ%šDŃDfŽBiÜCūMĮu|«%¼®U(ź‘GŪ%če?š¦ŻņAuŻė£ßŗæśė„iŹS]ŽĶ+AKŁLüV‘žƒĒÓEi‚yy²ŠXūm،QĄÅǦ9pPa-Œ»„zkĖPŪwł\Ą Ļģ~ŪõR ¢‡ē‹˜×æE>qų¢±§Įå\IVŠ‘§¼†Å”3Q*æć9Õ÷ō¼ÖĀBčYÜo°„NžC É5 si:āźU68Ć{Rd_oį*BgkX¬‚ر±³ēŲKVk6źX]D»ń×.żg*7ćÄ⅁Ćü,Z7©¾£sæõĄŗŒ½ŸFÄÆ–Ø8­yįČc/ ŚŲSaL9ҶÕā~įƒĪ5bo’5MubQvĮԁO$ć3WćæN±ŌBŒ¹žJHÄŅ#{ęūhÉøÕ“ŌjP·ó#jl«-ån‹0ÄĪZ39’AāŲ™Āy˜y$Ė,™”Y÷Ū»xi莁1Ń&\U'›}ød«© Q¼ŗŌM9IT‡QHŻ(j~Ŗ/-˜7ŅóuŽÄČż 9`¾šŗ4Wn罩q¬Ü¶¾d_±~¬”Ö Ö©˜ ńī*įU«¶FŪ2R}OxÕģž•:.Øų]n9źŹiŁĒ5L@Gˆ×@ŸOp£µ!½—yÓā7$Õó%ÉhæIz„Įū­9ńŁ‚#Awć vSm¹tɍa\@@Še-L™K Šs ų«!”×øńSzøæķ „Ā“©…k~örIŻ R×›ŠĄiōäb¶3š€ĖÄėDڳŽĻ”`ĆīxįJ”A.SĶ}ÕƒC~bz⤿H™Ē݇«Ī„Ø˜Ł«• āķ@“<‰\õļ™ /żĖ"=óŠŅmZ[¶3A݈éc\W8n.óX“Ȭ{zÄjXŸ%ó:ąä©…ÆŻz’2¹| ģ “ø¶7›¾4-čH˽t~Ä%ÅPs¾…nØėT_‘aqs÷ć¢Ńéćc±0ŪézõŒVĖÜ'M[ 0ŲŌ¹06ÉeiQ“mE¶h ÆY3‘‘-ĪšČöM.VɇŻnly\öłVÖ:‚c‚>_`2³ł}ćż”z¶ 4ᇧci¹DÆuO‰Ž\ ŻaT©lA§åH'¾&øū$Hąas(Ķ”žkf®ˆl“2myžŹĮž²$Ķ n8¤×z?o3T:¹÷IžØŠŻu 179!ŒĆĒ7«;$­¼¹¹Ą×7³ć#V–/nEE½Åןšp\öøyz'āĻ|ÓÆ¹¼ænŌ~ZEFČP“Ķ9ä\ß L”Æ0ŽĶU‹MśĪN–whäF.,RdØž•]ö¾ō՗žā\ضxŚĖH»Y&@$Ų÷¼óŃb™öQÄ q«LÉž #O"ń·RQG+ma©‚8¢8°-Į†x×+žšSP&ÓPa•r.숱Ü7/y&\ļ'±v‚$ś£šņ|z­łĒŹšeƒŚ\Čl8*”B”+óČÆ”޼ÅŲ[®”«bĘ%×ō\*TŽĆĪKƒ(‚b5vbńYīŒ„R÷b÷\YE™Uķ?cĘ<ĘĶeūC Ćė_£ÉōŹYŁPt§ö*3^ĢC—ńm¢„o¾`kxJ16ąį#|wūévtE§ˆFŲ‘~BK“<\@¬ £LæĒ96`ō—=>é±Ģ„^³7:©U|D쯱ōž!ķņłÅ½š\äÆ%†œKėyéī½²*-"$Ł.^»UݱWŲ6Wr7éq7‘”ŚĀ/`mō9]Ų߁ßo’™„6Ķ“±R0 cė#ngČČĪ›”’Ā~Zi^Ģ × –NNĮw|ūąxa*©ī€‘~Jķ„3¶D;™l);’<ÜFĪ‡§öŠŗ$BG} ń£¬Že#įĶęēźļx³*łłÖіĮ‘al¾ś®R—>·l1šųī_~4GāFLVŃ@¼ęäŒĶ9–¹nž“@ųöm!–5FĪ‚č§@ȔåćźX˜[rlpq«zŗ¬‹šr)|'ķn’CƳy é,„ˆŲP3Éh€1¤µæõvm¹¬Öśź%»±ÆĻcū/‹ˆŃe…•Õnp9šgķ#4,z Z4rʦ½š£’f†4wŠD̟;U<^ӚfĮńv [ńź „mkŹRó” P(”HĘM1ŖåsĶv~dŽjqkSx<½HšX©”@„Ćˆˆ}ŗ[äuē"æČn“Ē,_—ܙއ£©sJz›3Üźn%ö¶HGµĪ’T*5v1n9—łHg,`‡nw`öāļ1{š»gŽ@ė—hČü+·ćčI Ōč^³Ŗfź˜8ÉE&œ+ńˆŒb”XćĒÜŁA…*4Š”m1ž;ĄŌ˜ŖĒ]0SlńŌé ^žØÖ¢+,|NfNv“åpõäTŅ^(żxSĄ€Ć:Ś%S–«›|„8¤īK7ļŻj(üźWŽ”²„-& uńꊇõ‹|ØIPżĒß;—[;Ū™½īnčƒ4TŲy! Łd„ŚĻ‡¾0‚)”Ņšżŗ(„󮔹9D c@3›Ö¾/G h0¢ß¹^«lŠ,ō†ŒĶ$ö"‘¦„ÜæĄcŲ!ÅN:dŗ ¾Ø%äź ī ] Söņ*oŸFĶ/ufĆ.‚OŁGЃ©öĮGŹ Œ“Ē`Šw*:ŅlĆCD}ˆ­÷gÖ!ė5čĪcqŖAā5/B|ŪjE3‘żę+L… ōb3ir¢©.‰(dy=n= ˆ°Łw]Ø*”bā‹+³‰8}ĶC_<æü­Kę%A`_gś-ō3”·³&NN„qšõ‡.||åan>ķ²Ŗ@Ż *:åŃÅAś€·ډ¬ęNž©Ķf莏µXyq'.;yCĮKN- £Ŗ2ĆČMo>ƞ”?š³¶ź³1ō$Q¹³"d­Ūnģp­iœRŗĶø›ŠRiœ·ņ‹f^×[„˜™8u]”¹°Łš õ†»ż2öOµčcšˆ™Wjk›l-)'x[Q=ŻÄńf'(ŃÖĖ,9;ę>µ€; qj+Žy€V‘š&u“o;q°Ą¶ŪtøæßŽRHBĀ^’AF i7LķoZ°¤¢īńr>Čb,kŗCĶØs~¹Ÿŗxp‡®8#ś9J<‡¹»ōÅÆ{’ÓšŹBLB"–rҬĮ„V‰E3ķP>P撢%}·4{+6eƟņ‰ņ¬œO?a¦īې0Uō©-s>w~ė” „śÅ×¢ß-å‡ģćæ ‘0ßøńīœ'ĒM/ö9¶Hi-vż`£Bh,—$ĖPēcķŁh¼Vzųca¼Ą~ qĒoŖ{žź4=łŁ£w|bEoā8øŗ„GĻČ*u'ż5ż¶źŅ€ć~ļåńĪńk‹`PæZOÓ}ÉT1]ŌŁ 6Béń |1{ęŚ{bAģ‹§{QrgŸJĻdųZĶM%‘E’Ąæ×IōÉĶdøį¬D4MčĖÕtH¹¬įF(²…¦Öķ‰"±,L֓\óYśčà·•¶ .>t" Ož×³ĶĖI#zM1a 1²=‡² › #›§ÆŚ%ŸOį²Y³½ -ūāEˆ“ŹŹNZv„MO5åCŅ[łƒbXŗ•GÅ[wŽĶ-\ņ{ŽoO#äFRßŗēŪŁUIˆ‹ś.¤2C¦läY€āē~;®rz§āvŹż£Ē ŗĄßC˜ŲYh)óšZ(Ēß~u»ĒCĢBI @™F&īŒ“_“6C;ø7ɬ”õk}f˜PńmŸń 5Ūņ° 12Å”rÓ\Łu†2ć?:·5P:InfŠ¢bN 5ŲÓåŠĄ1cxN–pĮ6Æå]…ø֔:Ą(¶YhĖu°K—|JšŃ¾ õb•*p£ö#֘ q&ivZBņʱœd>i…ū 2¬Mānw4”V.9/X;ĀóR MĪėdnBé4l˾“äöŹNż?\£žŽĆmv1„fÉ=Džź87½šÉ½÷Æ>ž¼(qūū­rĀŌ„¢O”PåČ1{$īųŁ3ÕėČäƓ¹…`Ēpöi?M¤Vū™Ś PĮ³/gBm)˜#) /‚å· =†˜Ńū@åēŌō.óe“ĢŽlļ¶¶ß2€³^\źĀ¤1„KÆ*dŚŠ6Ŗ–āXĔ½»ä|:Ā9«Ü”2>‰°÷v=!|\šĶ9ŃŌ+¹ś³fAŲ³Ć\‚¶|-“VÆ5˳H(JÓß]ŅįžęVŲÖä*i7µĘy’@üĮņŗW‹Œ#ĖĮŃ’sōśa^(Ņ­a•xŚÜ³V݊BA$ėņēØäĆēpń“Xē‘羨Żų‹1\NÜO­7:¾EYQv=łc©ŽĻ5f½©rÄW*Ŗµx,N*ŽŪ™‰ć˜¾Ų›+0›«‡W¬6æ*DžśĖ­…\ endstream endobj 76 0 obj << /Type /FontDescriptor /FontName /PTJFEA+CMR10 /Flags 4 /FontBBox [-40 -250 1009 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 69 /XHeight 431 /CharSet (/C/E/N/S/T/a/b/bracketleft/bracketright/c/colon/comma/d/e/equal/exclam/f/fi/g/h/hyphen/i/j/l/m/n/o/one/p/parenleft/parenright/period/plus/quoteright/r/s/semicolon/six/t/two/u/v/w/x/y/z/zero) /FontFile 75 0 R >> endobj 77 0 obj << /Length1 1576 /Length2 7740 /Length3 0 /Length 8788 /Filter /FlateDecode >> stream xŚtTnū6„t#0DŗFw7Ņ% 5Ų€cŒŃ Ņ(" Ņ] Ņ"!)‚€tJü§žā’¾ßwĪ÷³ķ¹īz®ū¾ī‡•YϐWģf Quƒ!yų€’%mA(Ä ā³²A‘.æ`|VĀź“ü_J‰Ā”AH”Ÿ¶  ééˆJ ˆIA PāoG7„$@䓳šn0ˆ>«’ÜupD¢ŹüżĄaĒ ćłPp…  v @„t„ø¢*ځ\†nvPŅ÷?RpH;"‘pI~~ooo>«ŸĀA–“ą E: „ ųE r…üaĘ‡Ļ 0r„züĮ Żģ‘Ž €\ v˜*† ØāC -€.ūć¬õǁšWo|’¤ū+śW"(ģw0ČĪĪĶ‚łBa{Ø  «ŖÅ‡ōAņ@0š/G‹‡*䂺€lQæoØ*č@(‚Ńó°C@įH>ØĖ/ŠüæŅ ŗ¬+¹¹ŗB`Hü_÷S†" vضūņ’™¬3ĢĶę’×Į Ū’"ö„óĆ īž åæ\Pžæ˜ bˆ;ācēČ’+½‘/ņŪ(š F1ō‡»Įö(@Ø=õƒļļņ‚OH ’’6üē _@†Ś!¶( ’ßģ(b’ēŒ>źx DiOüõłēŸ%J^`7˜‹ļæīæēĖÆ®„h`ØĪż‡ń?6EE7€?Ɛ0€WPD !.’3Ė?ü’ęžÕA’ŗšß„0{7€Ä ØŽżMĆė/Upüµ1œ€’¬ ć†’2ĄńÆņ-€"@;Ō—Ą’·ž‡üßd’+Ė’Kł’}!UO—ßfŽßö’Ć r…ŗųžå€R²'µŚnØŻ€ż·ė#ȟMֆ€”ž®’mÕ@‚PŪ”spł§PUجEŚ9ž‘ŠßS@„wĀ znŠ_o €Wü/jßģœQļ‰jVæMŌ:żgI˜ų׎ Šˆ@Čˆ’— ˆĄ_µ `ˆĻoeųł`nHTE/`ļ†Ą’5Qaa?jy]Aæąß* ’’#¢(ÄŻ5›|„üöPŌü¢7OÄ?€°€õž{FEĄ]<=žš{@¼P/Ī?ź*ØMųēŒ*‹tD@žW ńvū7©8€ß‚ųüG[ģ<Ōsń[øØžż}žż6A >;ü™I7;©p§šš¶ó*zoŽõO2ć¬ėžsņśĻ Ś=/‰pÓ8+³C§ iH¾®ŖpœČĻ2]ūo7×įFµ¤ź·ž ø²N6]oşžLÕ;ņr[”¶‡ļƑüFĄµ{€Iˆ3f3ś{MÖ|wOq"½Bņsļn5ŸŚžŅ¹”ČÉużJчW„c¼ńĘq!%¬¶9_hīć yīp‘ķūOœœŽ“åÜ2i&sćīÄ ū›/ &\|ń›k$čŃAū€Öœ†ó„lh”Ķ_q3]“zŹ’uń"b(ć Uūš²ė3—MæuƒsÄÖ”ėˆ$- ?&…ĘÓøÅõ×ęįœżÆš‹>‡bͶ<ŗ)Š[]±Z‰õĪ˼ZæM\ŹS®(GŹ“Z&X—Hz^-QtŃŗCßU<õ‚EŸŻüą“)°č`°)ó‚ūūxŽRq+bģ®\_ŠC Č·aOįUĶØÕZc© Nā‰U¦ß4;,ī&¶O%”dgŃĘב=³@ƒo#}ėO*?o!·\Œ/)ż˜K-Ł£r?åøģ™Ļ’¾œŽrŖ«uö¾—Ēn%$…9g=ńŪ„ģĪĘö鞬v-¬jęĘÕ*äqę~z^õø§õ-E&ƒqL—Ģ5¶ļ^<Č %üŁ~“AžńYÓ!9[°­å5yR({:ļR֛qņ“Q¤Ę­‚×PуeęÆL˜4źĮ†h÷ʤ :MŠv—‚wä˜]^Åkϼt ׯœć£ˆ0źK„¹lšI ā”kĘ,Vŗ³˜ŸnbK!fµāœ•ūęDSź­Ż]|Žg\GwgāÕīu¼z¹4•2ŃÅmüņÖnøb±p“hąµĖDŠrŖč˜c¦(öc<Į™ÅśĻyIŒLęK^ĘĒ™+.mz¬œ&}MD®ū-Se9 dd2lm üoo©Ž5ŗ<ž‡[3 Õ¤¼ĄöMš” š7-Œķ®ĖĢPĢHsŅ8£Ć ”Ž ī.˜Aw] ¢ˆ¹*a%¼}./&L ‹Fł]˜#å^Ÿ śĄ0“Mī˜#;üķŲ*·Oš×°i`dÜÓ!RµI!ReɌP«†Äś‚ń¼$.¶fįų4bÅ'žjY‚ɘŸhåHœå,`h=”°Ī¤äbe…38ŪĄė.!ß2ŗ¹]Ą“Æn½y…›ßė­‹Hµ£XŌ£äXĖ•voÅ­”J+ėSēO-jĪ0˜U§iyW>Œ3¹n\O9Å£z/`˜ėkX\8&łŪXÓ:<†ˆ&Lǐšócf¶rlņ¤{ė=‚¾œ¹²bȵ8W-ߣBxFT™ÉkĆb=?=²a•£#Ög8öVr`¾‘j#ć4}utƦk¼&L5^>:ńģ]y®4ł”•®ĒĢ脯ą8®Īi -ĻmR€A»Øu“ȍ¶Ÿ*©{SĻ?ds&ömėŪCĶ~°ēDļ£#•^WŁ»?āI»uqĆåzēę;upr1ĻG0:"é?É I #gf|ŁčU_0{KŸŗ3ķķVµŖņiłÓ¼Y–ŹTĀ.mS*ä¼ŗÉĶt>qkfō®V’÷ˆ²å?ŲÉś™$MąKöN|6R… £ ;vŖā3ZK#@;‰¢Łd+#_ŸČó«īÉQs‹–čšøoE]~l@ņ’Ü'*ĄœŁŖ‡ų· hʾzģĒ@#Ōõ6;^X˜žß¶Bēv‡īÅ)ęùBėķ¤‡[Õ!eŗŽ#š }/2kŪd­JČ$¼ņʓ|¹čqŁ5\‘Mć’`–½ŒŠ¢gZćō Ÿü.ęˆ+0s»ś³¬ čĢz®ƒ|œ÷kłŌ†=Ź`rēé.ŗŪU—&}‘„VČtį@GHņ‚ŗN4¢[½\£˜G·W”}©˜vy„Ō„°–)2 ?ü6RG÷;Ķ,‹ oP×(÷ŽÉ:o+G#³f}£ł;_ÓE¼ö×Ģ–•~S_å§ų‚ß\PŠģĘ š&¦*kՉX#fŌ×·ŹŻBK*łßJBI6†+õXSŸśŽ‚ææOļšÉŸPø¶Ūīy>Ų2RPxežēē’Ģ=w‹ŪD*h_źŁ†ĒEņĀ^&GmU"±R,Yź‹cz]ŲĘ!Æ3ʉ7ÓmEĄä£\ŗ*x"Iw«/iē]¼ŽK“Ņ[s¢_LŠ=€+eeön3pq4i'ą}i›Õūiņ4E^0Ų‡“S²ił’æĢJč® ®yk¦ĄŃþ•- ™IĄIHWIžl\f&§OHX¹“ĘZT^|gēüh-<Ćš.š”YA%w=xRÖŹnĮä©h/PżÉÓMANĖłzŠ č2Ֆē‰ĄH_ŃCÅEnø6zĆ3|–`ķņL*?1”õne[ņ!(4Nęv¬š`3 ³RYŹó‚Bg–„ o¹Nx×rŻķpj×õ2²>‡Ša®ƒŁZŠ6Ž FŌų_ SVyRĒä-¹§’Ūc•ęˆżšO`¤žX[@ƒćŠ÷āīń°} ™Ż¢gŖ² ė-Ośŗö¹P@K±Ŗl„ŒEs­½~æćč¦ė ‰NM ¤P }2Š$#M~(f®„|T”vlæ”!šśžÜ„²‹}@\’Ÿ#N#W­ om°^4¶‹6źł]é0ī‚š7ˆSĄy¶Oī“SČG™čŗ ŹV‰÷ė~]^õ6 H!j:ļMuą 1éĀ8Ę–¶RÉčŒń¼Z’ßāĪų)ßĪV ĮÉAÓéwˆ%W? ų\ō=;ģ_³IĘ1éH;`SQĮČ ‘k°#”!š<§ TšĖč{!&VĆkÓ7ó«²\Ūk÷;ĆwŖ€Ś6īøO„¢¦ĢŻ,0šHŌćToҵšG8x&!ĆmĀé¬Ä:bē™› ŃŖō|k)Ftõ½¾»ÄŒQ>ŚIļ­šŪĖ?+}7Ÿ$¹ ėrźn\ M…čņ}S‘š¶5ÄhńčQÄõKZžĢģÆc®ĻtŲĒx9yE!śšdinŲ×ńœ©łp.łQĀżE˜iįŠ@=z«p,9ä!C§®/•ŽĀ›e j™ŻGV>ĆCŲ>!uŻ·³¹*AŒU³Hqj’@¼ćIåĮšg)ĻcŽ—e3½gI¢ĄXĄ¾oˆŽ Jń¾§#yFň\°ßÕ*÷źBDģŪīaf“_IéŪÄn5Ģf{DéoB?‰V3g}{·”h©»¤ž?ćÅ#;ü»ė©Ó"y¾Éāµōü„-“8&-«•%Ē3%Ķ]‡!”9$\VŖtL,r„zō MĮ¼8W{OŅé\»ž8ķ?ĖN¹£źuϤĄópšׂݬš“7įŲ<46<ž!&z2`ƒL‚ 7»½‡hĮ!F¼Ü¬ßöÖČ Š‰Ń'[ßå‹Ń~ęqjh°®'¤„śJv]­{„ Ųķ²ŅIļc%Ó£o!ĻØ f+<ÅźÜļī“ž;¹ŗąGĘf å1ݧ•@¤„oÓÅCń¶Hl<»Å™kDŠÕŚa½¾06~q„;(õ$pī5qé9X6<¶ŸīĪ ŃPśÅ]&‡–wøŲč.ĘWn^Å×±yܤµ÷õYżdŗ¼6FC÷”n¤Ō5PĖ8¬ū:ååŗ°VKĶzrŃ՚W;FałVFO)0üꫵą×¾ ēė r¶ķ^ ‚-)HµšŲT v±Fśy\;Pß¾“æ%ł/ö'ķā^V.„Łp%@0!Uõ³TüdŒ2XHņDĶ))źŒó‰sZꩌ6»ĀӒ9Y„{-‹ŚV—–‘`-EĻ&ļēż=l€/jš\Ä{ļ 恛J>½nļ‹”:qĮåuäŸĒmS]`ćēƞ•ķC³Gɝ™‚’‘Zś‡4r*EB's¦shŃEC!Ž#§KfĻB\5“2„E}ōR@óSé®ų©Ŗ÷o“æhģŽ÷ą²s8‘Ÿ~āźlļõZI|~°<<ņī] #ø¹|¢iŲP/fIx>T ŽX&ؐŖÆUV+VóŽq·‘ ,’ÓĄ²óÖQnö±k\Žeǧ(ȃå½!ēęW{˜ÕųõŽĘЧޢ:1ūzķ~uÉ£RŹ8fSŃ H¦iėP Ē¹ļpNę.Ē\ „@Ģn;°cĶcęyt7Ī™'vĢĘ1õ·*¾"µ»¾Ń/©•5Ńņ9CŲ;\µcXé±Vó‡ŽćfZ`)¼ļü`¾ųFļ4re$!@³§—Z‚Øl˜9¶4 čõ¾š[z¤kųM¦*)óF>O6ęœu‘uÓ2ϳßżåœI”hR5gڹŽßÖādu³ĘKcžlc£‘³@Ÿlģ(]¹zāūŃOēsōBGنL›ˆämE‘5~'’‡µöĆĄÜ l|“»¦čĒyŸ­Ż'žöļRfŗžZ+ScžÆ¦ŃH*6?‰V‹< ź1±^V42šµ÷yµŸK•|“ģŚĖ@æÉŗ§|õ’!H°ŖĀbæ”qYų°–ho‘ĄĶņż·…¶Ā„‘3̓ĀÉģ”Ó¬.<žvŪ’Ad§JQą×•ģćā!¼¤ NšĀ.™ „ų˜žœ:ąTį.v™ĢŽÉ¶o×÷Rhgz»?“;(`Ž,}ŠŲNFd%ū¹ W¶‡O2„·ŃĮł(ŃϬeLJJć/C)㕰ΐ`"ŠE`“åKRĶšū×vµ?^%“1Ґ$.ĶĻco˜h†Ģ§ !)‰ą¼™Ć»®ä²ŒR‚qD$õ‡lŚę«“­nöķ’X·ŁĀ4š/ķE”5³e“Ō[É×ļ¹ź…5qĖī{š³öZfVé7€Ž6j#V3ń'»MWæq†zõ_“>Ś2±^øRRß+ä1²ō%qĄ]<“Œ0ć?¹cįCB7O¢łdsō~ž ĖbY+Dˆ?ڦzd×GLßĮ¾x–~/̶.8Ļžåȱ6ā4Ź‹šą_ė¾Ż i÷…ĘęyE«iJ؈…ézHŲ¶kŚzßEēĶ­hõ”æĪu4®AHTāń—“F›“C\3“ ėnöļŪ“)^^’\‹Ā˜sĮvÖōŹ„©lSޱbQ…³ėQš+Fl⿜+÷züCq¬ÓęŲ“AmĖ5*ĘĒ*ÖŽŚPŲa‰ż)%¦VüNåž| µéĶx½`'n@<ć›4k×VÅīåuĢ' -‹ļ¶_ķļbT$×ótē·Ä¢}›éęÆ&Ś¢ Wēc>i/Uyę– „Ó|€,1Ķo‰—™²©ž›–¼jPĒ®Ü !ćüž ۩żŻÖéś*hEŽ|>¢•Ļų¶Ī̚ėѨܾqīč+§dÆ2 ‹ńąA^ƒxŠ7.»w)»o’¢Æ^·¾ūĢ3@Ē2„¬v‘DØżh*čOŻS>āR«»»t”ąY.6X޾b- Ü,罟_æó"¬)÷6Ÿ„Č1Q(ķf0wRągŽ–&xX]…„iü™–ō1uAį†Ā&©Ż$æ|e¼FAŲøWščGɄƃ]r=÷®{Ö¼I/ZMŖ³1•lĘ»“c Ō_~¶}ü˜%W ̚zP5O:$É0#īZ>±…Łśįh‡šLˆY`М(’.#<ēQotM“eaļ`“Ć`Žmž“‚Ö&ŲA:źu½fŅVg?e¤’ ƗbĪ÷ø)“& ƒ³ŖJŹ]޳©Ä<'ŅośņGJØ’”ĢŃĮŪ2фę'ĄÆ÷k`ß ŅxBWZR)F¬R ¦š2µe"%™FßUQ²ra>‚5/JĒ|E`:Ė|Š! ŅtoµÜĒ”ˆW<Ā śĀ®Ź­u™i¦Ś ś¤qīó&³× ĆÆٹKøżFĆ*q?äyÖnÉXuŁ×:w$!ēwģĄüG=…uT%7˜bMŽč7y1‚”՛œ¬ŚŖ–ōĻBš"²-œfłtØĘL†iō«+ZO3ķŹ0/›īĪF·‹,ķ`}‘~"ū©ļŽÜw¾ŠiŝƒĪŽPŖ5œē?¾Ŗ?“œĆĀrW>®ĄŒq˳¦(^{ŚRŗ2æhØö¬_ŗWl”ūīr*’óV”·Ź–éZܐ\ł‘m)T?ļkÜQ`śŠĢ±S •_ƒŖ_Wé[…oŗˆµÜzI™żöFc¶*š»ČtO¼E>-ĢńĖüå\‡Ł·ĮYöKng+MŖ'GP ŗżĀlZ‚¼ģއ”ž„¤ņƒ›y«!cź&k×Q]°Ļ±Ŗ'›×›«ųœJ¾kĶŅæcłpq®ŃpåŠRÄėsĒāU¹©īÉ _?œ7ŽÜ¢éž“•õŒ/×7ö“¬›<ÅÅ @¹ÓĄUēĻ䳖u£Å?ćk»ļ&'ČŽ£č”Ž…@7Ÿ½ąńwW”2’ Œ ¤ڜŪ6,”“|$°ńy!ĆĮ¼iz+ė® gƒ?±Ģģ¼o³ķ±ŸźŻ‡Ņ ą:Įn¢[ˢѸ,±³3äÓ9܏”ś¼Ģč\?ŗ€ā9!!—RY;‘ü!ŚPWyš’:äå endstream endobj 78 0 obj << /Type /FontDescriptor /FontName /HLBRSH+CMR12 /Flags 4 /FontBBox [-34 -251 988 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 65 /XHeight 431 /CharSet (/comma/eight/equal/five/four/one/plus/seven/six/three/two/zero) /FontFile 77 0 R >> endobj 79 0 obj << /Length1 2201 /Length2 15520 /Length3 0 /Length 16825 /Filter /FlateDecode >> stream xڌ÷Pœ[Ó ć‚;Įww‚»w—ĮŻŻŻ‚»Kpwww÷ąī.!p9ē•œ÷ū’Ŗ{‹ŖaV÷ŚŻ½zw?3CJ(§H+`dcµ±v¤e¤cąÉ(0²˜é˜`II•Ģ-’6ƒŖķĢl¬¹žA²ź;~Ų„õ?x26ÖI'K#3€‘‹‘‹ĄÄĄĄł¢=@XߣĢ C“±:Ą’ ŁŲŗŁ›™˜:~¤łĻ[…!%€‘““ęļć+ ½™”¾5@FßŃhõ‘ŃPß hchttūŸܦŽŽ¶\ōō...tśVt6ö&¼”43GS€Šhļ 4ü%šMß ų/et°¤%S3‡ŁmŒ]ō큀ƒ„™!ŠŚį愓µŠš‘ (! µZ’‹,ż/ ąß½0Ņ1ž7ÜæO’ČĢśļĆś††6V¶śÖnfÖ&c3K @VTšĪŃՑ omōQßŅĮęć¼¾³¾™„¾ĮįļŹõ¢ņż’–ē`hofėč@ē`fł—DśæĀ|tYÄŚHČĘŹ hķčūW}Āfö@Ə¶»Ń’ėf-¬m\¬=ž ŒĶ¬Œ’aädKÆlmfē”ž7åĆūĒft°200°s²€v «”)ż_į•Ül;’2(šņ°µ±ˆz™?žĮz8č;ŽöN@/:žĮ22ŒĢ @3kŲ?Ń?Ģ@ćįĖ·7sh2|Ģ#€įÆæ’¾Óž/#kK·?ōæļ—^ZE@JX‘ś_Š’ė“qxŠ23h™Xœ,¬vN€×’FłÆž’h’Ū*§oöļŚž”°6¶pžKĀGļž#ĆłßSAńļ”üo†o6£ Pü™|-VƏĘ’Ļó’÷‘’c’W”’·É’æ‰:YZžķ¦ųŪ’’ćÖ·2³tū7įc’?¶BĘęc7¬’/UųÆM–™9Yż_Ƅ£žĒvX›Xž·f¢f®@#93GCӍŠnį#¼„™5PĪĘĮģÆg €–‘į’ų>öĶŠāćyāšqW»€ėōæ)E¬ mŒžŚ;&V6€¾½½¾,ĆĒx1±²<?Ōčś÷dčé¬m?Ž>äyŒmģa’ŗQ6V½Ą_¦!v½ŠÄ žƒ8ō"’Eģ zŃ?ˆ @/ž1č%ž ½äÄö1¼ŠG>™?č#ƒģĒG¹?č#ƒĀō‘Ańśˆ¢ś_Äłō’  ŠGĆ’"ÖŸ”åGė’cłė荾ōĄ?ų Ł9}ĢčĀGYĘąĮųå/hö’EždųPaņųA7ż/üŲ]zS7[Są?«ū°żóü‡R‹Ą9’,ķC«Õ?JūPöP•jóųQšķŸÜ\ŪĻ kK ±ć+ćæ­’Z钚?TŲZ:9ü#Ų‡ÅīOĻ?BŪ9Ł8 ,’'3ĖĒ’†dü«sö’€ŗ’Ägłķ`©ļ`śĀĒTżóųĆ隣1Ī’€qłĒ„|ˆużüPéöųQ½ūŸŌ‘܁ö’jÜ’ģ””“żGg’~R~,éšß†@ +ŠveŃĘšk ym`ūSµŽ ķž$Ļé¾j %­ĒŠ}‡Ó t"eU†’¦żƒ@āH/Ņś®Å=’*ĮoÓ–zčÖxł¶_žÆŗ± 3ūm°ĖÓƒS§uxŸpi•ų<ŪyŖųY€·€vI’ęŲ9q Čå”>¹ō‹¹Ö ”®/īĖT±I}~-„RŽŌņ+š'Ķ5Č\Ą"‚r¤Åƒ”B¹rEœæ˜Cɞz'Œ„†õ:‹b.ōŠŲbŠ~^pß(WbrčĘ&ĮÖĄĀæGŸ!ó –‚KE#«4ʋĘÉUq¹ §óŹ$Od ̾£APYįdSnŽ/Ql5/ rM.•½q#½ē ™W/B榽 %ź+‚•?÷S䢨’ĢĪÆ)•Ābq°m⽄7 ±ŽĆėHB„jµķäG/ ;ĪLqĢ3xŒŲ{Šßō”O¼OĮ AēĻhI½d»Ŗ '÷,~GT®;¦³ķ›,! x.I¶š£qÜYĀ‹WźĢ*˜GĪiC3•æ%šé^ƒ^m¦7B•kµeDūi^7O†ZU;#®i”ź †`ō~Ņ*Cį°½ S½ąJ(p‚šsS–.¾ęæŃāv+FĘ?śÖSg›čO®*\Ås_Y‰łfRśąĪm×!~)ļՁFp­1ĆÓ¢19»™­æ8L “s8ü neRS՞1x±ź*¢ų=5į®Ū+Ä$†ßøå›õ2BśŽž,@ zo“Mµi»NĻ$‰ÄŽWĶpŽr%=ZXūӁÉ!~‡Ü™ĆTD³·ßM8{‰6Aųʂåm¬Öąē߅ń±įbƏ£įψ<Ī+“¼#šœh(CÆ(ŽüĶŠ†H©ŚŚ’_6±Ę¢;źy>±Ąę\/»˜]-į‹Ćݧ1a|ė Ńæ12¾ ‰ĻsĄŹ\ž ƒŠ4Eėᦓ(ߊ–°k…‹Hąė#† ā³ĒÕq” ėł…«[gż^Ō]WĀ%gtŁŲ—’×Į–ÆOÅ+)wņwÕ*Ńķ`‰ź©»œg6䙈IĀ©q,Y*N™ŃY"°š\gAŌČūʁm^Jć¢$km/£™ļa‚«u_ĢŽ:¬³™QÅĶæ&D::į | TōBß ņ)ÉĆŅ)mCńąHÖ'*וŖÖ]a€Ń‡Ģžš”½«ÕŠÉk‘­\ēÉsWk£ū}hĆÉŻż’z¹a'‹+Ū§Ćü,F™éĒW¹Wį&ęōk~OGń Č/³øÓŽŚh=ŹüYYģĘ̶Z2Ā0S"šļžˆ„5““V§BāŒü8¢²¼Ÿ?ß*‘k×4]Ģ2$­®6p*,¢Āķč.õDÄ.ˆ t<\ Ęꎓ%»©Ŗ+õž Ųõ½p$¼ńœŸ4¦†¦¢™ł½Ģ‰ØfźĘZęcČLZˆlšvŽó“ŻœFÖu.¤é~=EÉ)“yµSŖO^>ыüVMB¹ä»­7f1¼oÜbbOÉļĮŁV›¶Ūõ)™?ē„_Ö„ėƒ gŖ!!Fķvõ“ó‘嫘;ˆNnCéå>cń£¾4ųA‘ÅÕxU½¢_įšXWÅĖ“×­ŠMŻ®+-\&ļYc'žĀ®€D§T!Ŗ<ćuõ/ˆŸžm*÷ącóf Ū— ƒoŽłcć{ą‘œļÄä8PZEM%Y«Ÿm'OŹc%YYĖŖ”LÜĮŁcüLÄÄ+B§„(ü¢Wę~­ÖŃŃęŠsoaĆL`#†q“ Kž\Ń0X®ó›wŔ%k»÷PÜåŁB|]8wƒnĘ®©čˆZ­‡ńä_ų½¼ĢAIżÕT"Ėß*HŪh£—»Ž µbś¾ōž{Ļ[~ĖC–S‹Ś$‚Ķķ¼^ōįĻĢJ•ē…/…z$Øō¼īģ+YæÉĶ%°”hĀHĢömŽX~ĶģövŅ­Ī3Pņ«Vä“S.Ū "ż:~»DĶĄ#BYJE)—¼¢™oĀcYOµØørū<äŅž”‡g)Æ:ļFõH Ha2ūŘ. ī­w--łK«ĆĘ[Č\Źō|Ć;µ5c6fĖ ÓvTtAīNļŪ`ĢJµD¹2õ£Æ@>Āo8oAēś)™äf@*–¶½‘*Až•łm¬M‚ņź27Į‚įŽYAó^#=÷S‡kć>¢Ś»PZv³ĢEˆšō.Q7oIŹF.8½ØŁųp#“Œ «®śŒæ]ABĮ³” ęĻ® sƒV…™¶)½œä2¢I/m¬äøĄpׂnEņ&·ģK“«%²ˆ~ėU¦}ĒvsHßł"ÅÅóóśkŅÉKÉ”ł¾ /éīļaŠš/¦Ri›GńÅ,Ņżx 'ÉØŁtEåD˜ģ Ł–Éę*S”­³µ@‰_4®£=ßŲ}śÖTR\7šb‚ż†ķ7¾!֘ŪX@„6¶6¤ĢųF¦øŸ¼47ŲÓērq}Ŗ¶µZź]€Eż‰·.Ģ3J9ŪŹŪLbØs>cƇ²v÷ź‰+ėzAŸŸ¾"̤Y~ÉHe/dÓe’įQÅ$“ņ!ńœ^"§m›X)½ąÉPرqä@žteFhn I½×ŌEŃŹ]“ÕłEžv™”÷.T§ObšµT³EŁźŒiÆųŃ9’ž9VS-9<ų8UĀY>>…6O§į®›²=žGĖD.£ <”馍ņ¬ óS#\(Ÿf§IétüZQŲ `Õ.Ürr­Ā]5e’ė—C‘aĒ„Ō~2Ļ€¬'ˆĘ»,6õVåų•0/M—8‹×É+‚sÓt»„S>%ėć~ Q£óE}ŠŅZ©wS/ÆdĀ“YŁłu±‘_Q‘ź{uÆ 0Ā2uŚßēoہò°āg'Šwµ“ €āƽGŁ{眘+ĮĘr^S‘ūŠā¾Ž™üüöŁnæ iŽų‹JžĀØę-Ę"Xp?’¼ŅmülÕXŪP[X£ž4¢h.ŖŁļ Ē’ĄÕāų&’Žžo™ņ8[e'ĮjŁ0¾–­źn|™[Åc+2„ÆhŲĪ“»«:UĄĀYZhpæ¦d>¾zø(Ė21M¢Ģ ”Æ$Ż>¹ÅP„ސg ņ³…(°q³¬Į?•Źn»§ž›ļŅ Ē…C8%Ś aęņ5é…bĶQdłHÓmPŖŗ!ģ9Ū­n“ŽżM<”É÷“3|Š3/ÅT…2i. 5nBĻ~Æę@×G„p ķ¾µ2£Xc¶ōēėš©įŃõßßųN†FČ łštĮ5œįŸ ]”¾Nø›O؅6š™P‰a\ 7YG“B…šµ¶_„XT(×ók4ł@ ”˜% µ2µĘGWٶ55Ł6¬—§Īė„ĒāÆTœņ@ĢHķn7 ¢ÜĘUXCqŹōϤ]}ZģgÓ93ĄŲ©U»q>g€ĪY…AįŌ–‹Huk‹r„Ź}Ł“U >ä‚ė?£‘m25¢’œˆŁ^„śņ©Į‡“Ÿ)EĻ)¹ ń%eńƄ#¹V&’¦Œ øXLąÖ"¢—l¢$…$BTV4B݁ĆŌóö/$Ć* ē¤ysv|Rl“é®i½?ä \E8‚„”GKFžįž"&«ĢbnTŃ^gÄ1"Œ»Æ%·mÖÓTƼÕ,ט<ü-—=łŒÉ¤¬t B”–µĘŅ.éK+A’}äe ßĀüŅü6˜‡Ķģ6žĪ WĖŗU٧唠i§“JxB[]¾¬Cg5_šOŽęaf?s ‡ø„.¢Ņ`āi_+{¦Žń V +Šølśó¬A’˜æ’T¾ gp{ó݆ģ˵Œ‚2×ĖÕĘĆ@PsUj„o{“|ķ}׹5{Ą„ųĘC1ź’įÉ8w§’CżG€“œY¹7ėI¢t ‰gĻ3óƝ$7žĶ»įŽļ¹ ÆĪń"²ąP­a#&Ū XĒˆĘ‘Ē·j3L;•ōvœõ[µg@ #—*>yĆą2įf_}ņŪ8EųPL†»oÅ3PB| -[ß¼įü(Dš"ŒD¹¹eb·ī=Ū?³+9Ø‡ī½ų…Æ…ŸĮĖ5Ó%ŒĪ?Vmˆ åōcXę'°Ė·ŠX2ČØ„¼Ā†Éįc"#Q,5üNyAsø Ü …Ū鐗¾‡4Zndń•kÉA®Ē¹®”)Ć@60ŪŌGĖ€Ą%ƒdžR®=Uˆ >J€ŽŅß-„K+lŃ’( 5„Ūhø |YülŪ—žŻusǵL1ŹŹqŅü¼x—̇fÉ“”Į&”Ÿ×­©^[ćÉ \™f ©±qĀ"@@¦÷SͲßÄ«¼rœ§tņČė@tv’؃¤ó= ąUø»n–DwĮµ%Zѝ~pÄe Y$Ŗ4M}ĮR dšō)/5Ł{Ē4Š(ā0®¶K„R*@sAYłė}©ć§Ż–üplēĆ­Ń&–h‚N["') hkS? Ņ}ŖDžŽe®Ń0ÆoŽīS6of Īī„āĆm)+y1ĘäU ·ž 3M%yŻ:eĪ¢zāĘDļĪÜ”ģbŅt‡TZVŽ1[AżóCʚuC=nfĮ–® ”‹–B‚ q>©÷ńń@ Ų©ģÕ¹¾`IŸĘ—Öč4”»nĶĻz›fų‚«±6—»ģįųJųŃq›ßIģ†Eąg”~ŃdQ|՟#æĒƊ¬å蓳Š@‹hm¢y?Ž=!†µś‰æn iššŚe”xJ—¾ē.ņNϓԦ£oļŽX ‡„’›-§Œ-wŽZč²³C·7a·ŽēQ”į7“f{öRķmcų°¢Ü 2`Ī+;ĮŗM4ų»„ĆļŽs§ņØ4ø‰õ˜ź¢œĘĘ7ēĶĢKG7PA.¬o ßł-,“­‹†µ„¼Bor—o©]«­a[ݵ¼²væēÉjīÕ߈Ž..“ØRö²4rół~Ē>ŚŸō –ĮŽS.”1¤dŲ „ĪF Ū¼ĆĪMóFßŖJ½įö3›ŁwÖ«·“w1.¶Mź-]k~.%¦Œā'÷šīå¹Ä'Ō{½¦<Ļļ4~÷“„·±śįv‹hV_kĶ5 <Ī*œ³Z½ØhÓeœ óJƚDpŪą#T$F˜iśä«ØĪ™ļmvZ n>„5€ŸKQ{ó’g)B@Ż«bĮõ:AĖžÖœŠ“óU=sŒ^šAļkmhzӓžÕv±3޾mźŽĆP‘Čē:³šÆß€_bZsIŌĪ#b¼O ‰ae P.#D±8čž6"É ł‚‰Ó1 Ć×y jīŽwV“1/…pBŠqXæŌ Ū%ģœB½Źä£–Ī˟I M¦Uź(„Ļ5Ąõ™ßLŖ“Üu3^H“AņšŅ-JkięĀ&²2gGńü]saŠw~”¬čÅ §,h¤8É֔Wõ“(ī°Ŗ§ÆÓ’Å4/g«÷䣺ģvĪY£Ō“s¼fåP¾ś)x‹\£ĪČŁ‡˜½šāģƒčéiUö³öłeŹŌ莒géēćƒĄž³’2YhNr Wdpg`ģi£Gźn„@;”¢•jŻA²Æ6+QÄo{ē•żPā ÜUÓė܌~„nK%$IµĘVĪŌ<É0ļäĮŠk»įź7‹|cģįU*’sļ¬*;ByōKG;¹¶n§ėĻ÷’n'UqÚԳYŗ’‹W3ż¾Ņ9š0žÓyxźL’…\kyŠJ79Ȟ‰—kDŪ=ČϦ­ƒNłńÄfŹóģiqyH–2ó?C“WÄcHZ,ķ„«w>f A£Ó·ŪŁtŲ&ņ£„±ž… šl„ 0“+©€aõŹ­6ņÕ`¢ÅŠć²Šē—Óšģ`/¦& ;)ÆWµŠš~Śm Ū(zœĆwŅü8eÄt“g0ś'­y†„E ]¹W „K¤É®±™)ų¶·Æq2DēæĮ%Qķ°n¬T«S2ų‰g–cß4‚ÜåŠJa ‚³÷µėœ½¼ĶfŠv|ą'Dļµ§“Ŗ9ŌÄĶ"ˆPVšKųQ:° ”³¤ÆĮÜ ŚEʄāüē’S]Bż],…końN¹Ļ"óN÷3ųĖ‹«čRĮo°—Įē“qeŸƒŪ0Ę{ ĢXįćī¤Ē×fée1¦ėÕQ@ŽÓ˜ÜŠ•Y`6évŒ\­L$„ØĘ0š;0"hŠŲŠš ś«ĖÅÉND…—Ć?o%éÕ|#Ų”ūž.Ō¶ž ü‰7QGźÓŻVæb–T* 74ŗ|õ1 äĒĪ·%¼^™~^Õy+g¤ö¢9Õā’<1ė‰t”1s«Ėy\S²‘Q-ńDłyŠEÄōŗKpRŽĻWŻCI—ļįĶģÖói†ĆtaVŻąO×ęs‡‘į­Ż›n'H»æD:Ø0~‹ćˆ&£é²>č#ŠÕéčˆ÷:½Õ¤uÖSž7ē}fŁā€zD)YĄĄK^…X…|§“ŻĢsÆdĶ×p"ö[]ÄÆŠ„T·/į<ˆ…ĆO*SDÉO}yYėŗ¢éÕõhGĄ*‹‚(3i9¾ųO‡<¹Yų\> ݐeK•Ī_ūŁ+"D²ōG+ĀL5ßoščŌČ1OŲUł‰āŒ­~GłĘóōlēŁ”5@`ĢuFæY朢M}_>³č?.°÷I&‘f [5a®›ˆDv ꁒÓÄAQI³réūūž&½ĶĒļŚŒV3‚E:43?žrOq­³YŽĶkd’Ć膸pļDÕu2””+Õ•įM_ŃķÄüŹDžq­¹¢ó£3ђw²Óq\õ "žG±RŚĻ“ĻQ ‹W„Cyf¢BlE¶… ”Ov<ÖĪĀųKOpdĄĖlń¤OdĒl<ŁB²•œ›Čо&| dÓ±ėv“?š°)aöK&„8BŅMĒēBb^käuOXĄu&uęf"&GŌ7Āꦄ܂•A`Ā>#æ÷u½I#G&<¦­Q hõ…$ßĖK”ž·œÉ㩳;0ūėłC|ĀÆŽńķ9įĘī•­ģƒE9:Õś”ćÜ!.½K$£Ś’„½‹ē>OšŪ“TžL¾H7DĶ”ń,šˆ¬Į큳:_m°ƒŖ: yQÜSgxüōyMļŚÜpåQų–”¦Ķk3ؼ}Ÿż5y~ozšnĖ„ić/UܛDBīä:“–V˜ŠČźŖ¼øo–¶J’āɕEēŃįŗīę7ģédłH”ƒOś&z5ʄE:²*õ™Š##Å[ņ¤Ł?ć¼żF„ŽŹlĮr®sŌ¢C9Ŗ ń8—tÕ¹“øZuƒxHøÜ6ˆĀŌWĖNPe ­§æÄ¦ō`ÆśżīZÕŅ>Ū+)źĪ‹ČĶF4UĆä*ć™Q±‚J3Ń[ŽĒ‘·B–ƒūmÅo‚ŠėąQ¬m šßµs Šl~Š”ZŸ²™ÕIē†:F©?Æ1żÓdŖck^Bģ©Š Ⱦ°šĶI£Œ(tŹ# ķ^!n1gё—÷ÕēĒhĒߏĖ#6•ī}ϱ[k\C/ĻTtüż¦Üōa_³{“®¾J–'RK£ <Øx0Óæ÷yŻ‰·2ĒwźøKqčB§4äoJŲ“µ·’ęYüø°ą=š‹\'šHŽVÄĆE#•¢)ÓžUdLx6LW–šūRčŠéƒ§KāH‘ŚĢĖŽ‰Z»EšÅ¤O?Š+žf¬×b‘–×¹ņYv² £^˜Z]ō ×£‘TD‡:¹¤3'yĒ—‰“ 1£ķĒźS› %üŻŅ^²ZN*gĻžSšn{-łDeŠ@UÓĀ7Sš¢x@X ą~wŅ*) ż²Łi?ÕB›œ°twŁb“œBŚÖZ„ĶŅKMŸčGI"‹Ÿc«åœpDŠų𯷔/{Wk čj£mžUä,>·ŪźU‰EŃŃĶ|Ā’óŗ­¤‰Eż`‰¼ż‚([!Œ¢æÕ%×ø$ź¼sĄš°gõļŲ­c”š{P_W0“g;!a§†ļ”Żļr­^Vą‰|wUY6ĆČE鼂 YP ųł«Ē=„ 0U’ÉÕKj§†™÷Et!Õ>Ęę¼Ō/Į"n(‚PWĶWū  k{7§G*`¼‹ķIG[g“Q—L}H&1:Ł®h™ƒ/|åQbŻÄm”¾®dŲ:·æłƒ(ėˆWÕH6õVäĄ\Aą Ģ/ņŠˆ’Dj`#‚]1>Qɲ5Č.\!AĘę03ŽõK’жŠj‡ėF®¹£å—ā–‹b“”‰½‚tŗ¤°Š]¼§¤ ø+„LÉ7[M>>ƈöÅI†hmķ©Œ zMÜÉt}C s-÷ł¦Šœ±DēGńĀp#]„Jɀ±2ƒÆĀ\åĢįó{žčtź9›Œ[‹Įļ®œ\^‚ĮĘ O ÖõøŁ›o(óqĮ8ŒÄēy•TźxßÜq”ķ•8¼čņ/|’õÖį«&ģćĖ<Ü)ć -'æFžĄl¢;ņˆŒö0° ó•–éҳ€RŪ<Į-ø  ó²ŗ=–ˆeAV0-Y»š¤Ķ+Xd­·£·døŽ {p¾wŃ 2Vlā*&˜hū Ģž[ń½œŽ&ĆėūXyr}.Å e¤Õ& ףbÓ«‘·mĶ(›ōūõ§>€`¾$ģšķ» ø˜Üō”ƒ ć|A›^^S\ŃŃ-.”¾oC®dįč§»ž|Åźyą’NŽŻŒ~ė jöU’ńé z÷ķ•R’S¼®I„”Ō2ūī)1aŽdYŠPĢr·FĮk7÷aE‘-ہߣ–GdX“lSżz šÉžjÖŁĪ1ēĒ%ÓÓ&9ÖIdżč ŽŅ§ÕA¦—Ąit8 wóĆĘzWž ޶LžR7ż÷7‹;QÜŪüžy~¤™®ō­™wvw9Ot“Œ¹lÕā„ų[.! _ń ^;bē2ÖWćft„Å7½ŖnN{×čüĮ‹Ģ=ūēQĖŲxŗ,łÆ5éæanś+[Ō¦ķ#ł„×sŒćz@}ŒX÷2u…£ Wā="C\Ņ r©ü#ŗįYUpŽł¤³ģ³8jgö:ł² ƒpU"qōŲ4ćæąõTĀćįZTXGŗg[ŽŒXNøs?ŗƒ6²Ź|)”Į’„ū~ĄĢ²»Ģd±’Žwį9…ßÉ^)äŪń‰O†o©÷ɰŗquQ>n£ė^¦Śt××?U~·Ö•Ėuš· “'H .6ŌŃbCÖkĒ#aĻ}7¤P5£©Ņvņ žś¬eˆŸ7X²ė •O’XŹ4‰ņ“•ü÷åLŠ+PLł2d:›÷<C½ øĀCČ£·«=”®FĢ‚]Ś)”ł;#7sŪ–ŁG]xÉæ)ŗęĄ—‡CĖ|Wš:;é*®Ać™ōŲµ†ŪX?ĘĀŪ ŃĶšÆ ĄŪ|—ŖĘŽ ‰„¹n®Āō]#üM †K!Łß.PČŻŚ ©S1tæė‚ ‚Čʾ Ī3AāņčxĘø×ņJ@T¦7ĮKöČ_•$ŗū|—SČKgŃӛßķYē3?QC޼Gaś€ĄžVÓćõ o[ÕłęiZ«"™ß ŗĮ<W` I„Ō·ā…¼ņ_Ź5/nØpGāC)„.ĢéV•%E¢„ŖŻÕˆlÜAɒR"ō•N㊣ŖžVłąsۃ‚ä”Ėč'“ģ8”‚*ŸdWPOĀ ,ȧJ‡ż‚‘4Į.C)‚oœ–£±˜ūyąÉkFddӍ‡4da©½¤Ā ĻvĄ©ņļšwØå³ļõb īq`Å®P/Gy‡RøP* FģS[Ć×~Œ_ŁA¼Ł3["s½„‚¾Ēģ„åTT:ōCVōl٬H¢ē†&+ŚkįJ%qv_·n;*ó9ØŅÅJ“Ūę¢‚æ˜9ƒm]i¦évA{<Ų™j|eX:’…³z×^Ž$ĄvĻv±Zč~ŅUŽHaŒ~·oœņJą ‹æi)!{>õ„HiÉ; _»Ś;-yėĮ¤Ł%Rķ"űā *ĄųA7żśF±†ŗĆ;W“F5HH­xŖ@Qļįy“k£²oØ ōcäÜkó[Ƅe]1jög&~|-•Q)éǁę#ÄA§Īdń4ūŌ4õ3lKł™•ÆrœzäØĘĘEF=”Ö½ņ³-īÆ÷ēʐ}»żšĆs2Dd¹*É莚€.üK®&±Xw±és?*Gy9‹ųm†”Q‚A5)ķ=ĘYƘčI¹čśŹ* Ģ 3›%Ō(Kiؘ™„­š{æ.UKŹtÄČDP¢*hNéĢ–żue-oŸĀpĮ5Āåč›ćCĖvÉ+>>×õՊaā¼B"ŠņˆĘųŌŻ<»Q‡ˆ¤™õ›1ō;°‰9^.†<Ģæ@ÅĘ«Ęu¢!$Ļv®…A5‘;® čiėW6µr5^R85g<+Åß¶,d§ŃFā^¼—–$läĖö,īhO|÷wEfUб,bwĢ ū}"}ŲEōŽø}ĪGŹKžė-24Ѧr•Įē_.Ć£]diYŠ` S[o ˜–øć±é;q>l`ftÄ*>6¶¬˜æ‹+}¬€āƒØĀ aČ®źŻq<$Ś$U†Åš«9ńK@;•Œ bś~Å %ŅÆ'X)¼ŲF ]ē š—šF‘Ń:QéŹ²Ņ|Ŗ•¼õ“g{©ič³oÖ|dõ%“$IĶAVŖŻ[żqķŲö^­6÷–Ų\`‡<ƝåsĮæD(Fœ|óśŚÆMˆ°4ņÖzØŪ’0,µs­ļH{²× ®"Ÿ5†ŽS€6ļi; I¤¹‰D„ÅJ»Iūä„§^Ĉ\Fe”ōī8UęaoKĶOńé[ąų½*ū'x!jPķ0²¬„p *– f‚΢Ѱ¾äø‚KžĶQˆĶkõQĀ1óĘiĆ󱯟$v¾½Ę&B}Ģ4„šĢ8ó0`hs@„# qi8īį>ĢJ?Ņ¬†ę@qęGs$}ó½»p¹aä×­!ߎrm¼Ć„좮µ…o2ģÓx©Õė£wōYüܝ?#"ݲBY¬Ü͊ MvÉ 2L¬)®ßrrĶÖBr‹‰ł.ć°gk⬓nØM5Ū^%-©¶¦;̘«…—'¬Ó¶ń.ŸäŠłŌz‰ÅŲ4oC{+ūR£½Ž÷>µ #£Į\”qtš‘N¼Ńņh®“ÓØ¶ŸųP“#ūy󏢫3µŪ钑kżR‰ŗ3ÓÆeß!e ®äZ_¤zĶė†6r„åփćd›ŽćĮŽķvŽŁz¾÷V.„N2dĆJĢɃŗyŪ2·öŲ7s7n|OiŽ<żY€nšŠįŹö ŽX×7ŠMū^ę™ī@!…šŻ$C® ·ß§€ōf&ąŁÄ.Ż“ÜŹźŻŪˆwyņ­Zt k_%ækEšÖ¹·¾%8ٌ>ŖœÄźą¬³[ümƒ@J‹Ģ­E&ŻŽų­s«;ŖļńЁ³śŪĘväÆüĕ{¾»mC{¶Õųü š>r|E恄\łĻóīx±ü¢ÉK…E Ģāj|\š`#v½ņ‘·¤ęĢ"–¹U^2I¬œ×y»\øÓŽ ķ?ķ–Pēų*ą3ٲÓ1Õ­]Œ&?ķKš’luWŽ*ž$ėŹ5Ł+?„`ļy²Z2|,hž«ZĒŻ$A¬ õąYź“ö°ø\įdÓęæĀĖ9©¬¤>,āyė€ńȟ¢zž¤Ƴ ‘—Tćb:ō›:+ŠNüHžö‹‡Õ]QžR„ÉÓ3ß“Č×Ok{R.嵿SŹTžĄIcN’ofqÕlUū€”ȉō -R²s9FŽŖb¾łŒšØ;r(<ĒįE2*e;Ÿvhū-T!KĆ Xœ¹ļ”JåūÜššš­RÉ1»ė’%كŒÓØģH|IŒd”?§j’Éź&Vƒo&1½ÅW‹'ĻXŌĘC‹`\afU”łH*t.©Œōę§Vœƒ+ŅxÆqūŅęŅ—äåĆę+¾ymA• gr@™äłĀ-éx1ė %Q7֛­YÜł„öōņ¤ÕÆ!Ź'³(ŽŹ²Ü̈ƒ¾ć•ŽPDU“Œo2“«`u!•ÜÜŹ‹ø!‡”æŸv]€¹Ķ(p‘OZ• ˆL\˜dŚüj‘Č5·ų­zwšįö†ĮżO²ŲN@$ó£5ur}°É"’Óō“ÕĻņh÷¦) -µs VųSŗ*7ݐ?&œĆø_ˆ¤ØlņvRōҘpįÕõZ& N7ȏŠIWĀJŒī×®+Ć%"&NU“·`Ż·Ø*źysń[7ū2§2Y§x;_ˆuŚĄE½O‡ū<5ĀÄyƒ<~ļl\Z`lf£ź¹YP²–Ė9c+@Ģ¢3ZÄ*±Ļu·Ŗ¬š=9·<å-g³Ą Ōߒ…‡2ŽfqÄĘʈŖ©H›Ė'«RØšÉʏ×aį¬%8= ōäā/'‡ nćRÜxŌ5SµĘ4Oź—«}o±&Ø×÷eŠĻĪ%*Ē3Į¤-ūAƒœ,ńŅ;÷$š5zK% mW]ž¦"õ^xp()Ņ!6ń6D§źž!w“š {b Ź[‹ŻĮ©žGiH : źš1~a+n»‰8A«†“r¦”LKöĀDø'ūXQAmļõ“’ļŪo£„B÷cs³vsü.WžTļÕRl—įź«bPA™v6;ąÄFā"〨nŲŠ*õ…©ļ=ö@B†’t7Bķ½ōįN)3:aĀ NĻ £³$ŻŠćēĒžZehļM°R\Į‰MūϬ 7ē™ž2žŲ‚$­@Ģ̚r”©ųēĮ+oÉ &a”uŻf%š{ {ł}č9ŗ'ķ›*c3cś $=R1kŅ a$:h T+™ćŠóŗŻĻ6{'¤‘Ī{.l[ ęĄļk‚ٹA­‡[r+•zv2Š‹—¦›2ÅpóŠU¹¢ “žśxÉ©P®~²²ÓTég”4Ų·¢ņru|ųCQF;¢ĄŒłčńMź4®Ł­ū2°£Ģ3¹į[ŚI~6iåæ1³€_v©–į۽ϑT[Qņ™¬ßÖmRš Ģä•hlrųĶä\”4]rOˆ¼{T¹d ē¾UėŻņ¤Hł°Ż' Óī ņZ³:®„ Źt\–¦ŸńŒ~2AÓĻiC!­õżv‰ fįόØadĪĀh IøŚĶJš¤CČ>ČÜŻŖ9-;·(¢ ų퐹ś»Ś’pćs!Å·>WFĒļGK~Ū0Y_]īćĖÆJ’Ō Ÿ„“»Æą‹rŽ¢Xqœfn¶­Ėws˜•uĘ oš¾6Ż#äķ£†Ą˜“4{Jż÷ō]<|÷ć’mŚ/QŌnM¦KJyˆŖĮl74㬚³5‡w³°w­ź*Õ¶śų°ŗ™aÆĶńåó_į[WķÉkł˜]D²øT­œŒsvØT3Ńķ®·MĖeņāĻM ß ¬Ņ ¶š‹|"Pæß„‡Fk\mGĪĪ­dČP½ō‰¾Ś›=<ķ'“N¼ąź[󲄣Ļ5ø:¾”xµ&ŗm‡…v*ndwu3®ÅŁ”[ z1d’Æūt‚¾ ĪĘ7ōŲ܍Łe›ģ“†œ§p†ā¶ ¬/Ųcź’ūQ OzĻĢÓa¤Wµ‘gOć,o†£xjL•vń,\ėÜØ±Čŗ`¼=«’% ÆĒŁ€‘»pˆČżøPEGł×Ń¢¤sĒIq&‰˜·Q•Č ˜9æ9ö¹'#­ĒķSa¬u²T“c3ÆBąüčbĆ0\A‚™Ÿ÷ÆtІ½”‰—}”Oē²IĘqÄ1Ÿļš6ś¦§CÉ×RC‹Ž ųˆŽö—„+UŌ‡z$²M×­£~¾}K¾Š<‰Š¦%ŪŪW+Ģw‡?{›Ī\7ž 9)5ŽĶŅ`{ÉūZ"<¦‡ŲńW½o8]”9Ņ @Ų öćN„’|Ņ1h[…±ŅĢ+ŅżpŸ"XƒzE<ļ- ]&[ų¤VPĶ„]»@4“P^E֟4&ģ^{ū}]ä żŽaŻ Ō¤µģ¦ĖŽ.¶J©ŠŠ`m{Ɔm{ߗŒÕŗžøĶ ӌΠå…CŚ$Ź®XĶåAŅR¢nĄōŠjńU)2»éMq¤)z¤nšIČŚ)-½éźŁzŽē| 3qĆĖž)Ö3}‹¬µ’WÜy±TõXŸ’žĀķ2SģģP—xč[XRĆS)ćŅ—øįm…¼·ņ–ué©©P…Z—=}–ä–Ę;i*XžO$žüXp*Ę©Už÷”]©P 4ÉŒź€«µ%rāo_†NōųŗśØœ*EµZ¾Qœµųc¶CAīļgjeCüč|4Lƙ`hzĮŻ®iĢž}óŠLNķł 7į Gā*-)Śaił™fØIóĘxĢ.>×ÉŚ_ĒĢY¢š1nĖՙNżf8ŁB$:mF–÷€żĶæ’ tD-”>CŁRg„Ž@øY!cļČ®¼ķŠ˜v b¾Čt|źywĖ&ƒdobE ŽźÓž'töwµ†:̱dÖa}¾ƒ;Ē”ŠąģŠkX2ĮÄCmżęŸ)hćއ„Ēv”&­QńaróeC”q>–¼`‚DLÖ)NžwKSƒ\t­ĒŽļŌIq„ĖJ0õań¢„\šÄ“@ ¦OųĒ'UEߌÅäv5L'pOė0ś§|ὦĀwšŹŗjęxČ]w«Nsš,ƒ5ʂN“‰Pūä ‘ęV$€ŪL‚ī{(Će¶Œ9Ī“F•Ä× ģƒ=”Uąkfõ‰Ķīŗ‘“é .œh›ĘuĪĮN= ˆƒč‹Ć1©Äß÷ß_ ļk0›Ė—³æsyé3ė¾PLöö©%‡Սšįjķų ›“ćåĖiF©aßż#6CFxtZ%X&9,]~(õ€ÆųŪ:ę+ÆøB(;Ņ¢_ŪüŻ;ǁ"mŅłäį̼’æßwvSsš>yróīe¾ “Ļˆ=“ßęLV]µ ĪՈ«üō&%ß'70`²]qÄ 7Ć.“~z,.…±³6÷µnjZ cėe°īĻÄE.…˜;B¶Sæō>åžÕČā;]ą@§ŖŚn_s…hΌķšĪƒŸĪæŁR¦‹ł,g©² nLī‡#n¦†:ČÓÅņÕćŽ>.P„²bf“Q_յĄėɚįĒUēÓY‘+G# qCżu" ›ų³Ļ€į„!Ś\+śōIӈJŚF¤Ģ ¢ė}|Śt”DŁjŠĪænÖ8”wį÷¢%uŪä ­€¤ŠŹ3­š‚ѱ‰īŽ@-…Śų•;āŸLIp¬Ž_ӆf<ł¾Vj”7™õĄ$ĄBß0¾eÅ&oŸi¹å ęž*ĄįD„ś~.'ė?\™4еl?‚žHVY„nwųmņDū79UēŃ%?7\£ĮZ¼”ę oGü<–h½5™Ķ€Wļ…/æ>¬Žµ›d†(ŻŽE3† `ɐ©Mæ%eéZŽ\l—ė&@;¢µŹ:]üP€§*¹ą]”$9ŪņØļIоąžZš„gØü±›Ŗéc>;į½äˆf²®½E"f…WĻ~·WĀń’%A¹ė±Oż·×x}€—DiĀigń!Ė‘Ą]…ū{ƒ”są[ ķE’F=ų׉„ĢČ8»€ÜĒÅø"¼® –ĀĮW6õŪ#ųu¬rKžĢģŅ,­,t}ŽŸ•Iš#ßDnfi;}.™ĮŲ„ī0t$¶¬į[)żKUĻ4/kYÜn½€Ä’ŽÖ4šÆ­vœ­ā„­a©žr(Flņ3D×nņ bIyV€ŠrżĀö…°‹Ś88«C āŌĪ`gģ“‹+|I*|huƄ¹b«ęZvX ĀQb@öh7µ•öÉC;ŗ‘š•)ķ9"N”6”jöęn'.7‰L/7aĪŌ|^Gšīb4QŽ'ē/Zļɐ ’¦ŠÅȆkŗ²otĢõ}ļ_“Üs—z——łļūTśœn˜¹§ .ßd‚O`)!›uŖWųs·V͚d Mœd\ˆŠģ»žŹņ«¢ģ"z½ƒÖQ:½q‡ėįä}ŽéE‰U ąH{®[‰‹'›„^Ń$d?Į&Åņ3˜¢ĒŌ/vś"„śÖ=)*“T•kŪ³>šˆĪO÷8pM…ćO9`· z6k°‰Ak[˜ŃÄp¢0ź+±O Ÿ\ɾ·ē*”¼ŌźVķ[)bĒK¦Q{©Jv&RŅœ–2P?I¢dUĢŗ$÷Ųy£^~!ā«,HȀų-įZÆIN4 >@Ū>å“ü>׆Ä]GuÉģ1æÆ¬xRķ½—Ź!(ÕJ,jfÄVŖw¦„Vtcēŗš1¬`Ć|ŒXtR’)žBxĀI¬ŪÅņŌ?ŽMbµµŗnÅč’Ų2hų‘ā¹p G Ü:‹ŽKȈ“(ŪE?x»E=¦~ĘÅ`Ģ[ž2“]°żäÆš^Œó,†("™”­+’ nšhH°QšŽ5[³eÜyō½ēüĖ`~õļļĮźÖŅ¢ŗÄ‘ MžwA ƒĪV-g;ÕŠY;<ļ.5„Ėø]2#]2Į/uŁB~mņ8ŽĪ©:8rM†uىrłŸ‘1g·)‘N3‡-(”VJ±ScM¾;Ś$Óm¶ć×)å÷ŻŌ1Ūéķ˜k¬Ä”Ūīģ9ØtĘÆ=¬s°NŖå²čŒjš–čöŚŪQ^–ńĶ„ŽÄģģu4Å}5_ų=hĆo”óķ–œEQłśĪ?~Žčf¶r@§š^Jl®1ʂ ŸėŲ\‰ÆXW˜Ēłi Œ˜Į¹šĀZŒ’—œŁź>92wJ§č„$ī‚õ •H:-ēr#ÆŲœfcĀҤHĒÜŚ¦źX¼r šĢCć{ ‘SŠšrC"(,ZŽ—,‚ņō„@ßæ7]TęŖŚ"¾ęڽd«"»ˆ§ļźģ}NóĀ”øū­Ī¢eŽ^ė•z“b9GhœŌŌž–ą†b!¬UZ—ŹK®?–³!Ź Š ĪO™żŁ™UśÓ[C:ļx£G=™.$™žķ«7yl ,ŃŠīėM[XTā¼EtGī?SO‡&4xÉ)ŻĆMéŠåÕ¼kä$£”šC„.«3µóFVży§Śä›y°/ļŌÄ-‡Œ²‘sy ’·Ļ.7n"Įd0ŌeMi%µœö;™žJ¾¬ĶݵAół¢“Aæ=ŁĖJžē‘„ś*Ś9|ÅŚé¼Ō— JnD§ń'Å1¶ ł{Ѷ¼J‰„‡c¼­¤!w(ėh½G{i®3“Ó^-ŅO$P‘OÅH!ņ~ь²ÖĮˆįׅ¹ķʉ|żŠāFÅōCąčļ½ö@æµxé “óODˆø)‹† ÷” ³ D«T:›üi„i‰"_ņGaĢĪó’£äż1B’qįdGĶ */–YS¾’ó¼į†KˆŁŹ¶Źō–COœęøę*^²=ģąIł‘Ė»tč/r‹ōw{ä¾wßNA„ ‡Č’fżZåä>/ČļbZąƒ‰…4CĮ€MrUIē1ļLĄc+F‡ī7. fėž?0Ļ’ū¾›Ķ{k0“'¤·«9ó?ūŽ×u „ćyœ¢pŁV8:OĮōō”$®h²×'§ endstream endobj 80 0 obj << /Type /FontDescriptor /FontName /LVAKDS+CMR17 /Flags 4 /FontBBox [-33 -250 945 749] /Ascent 694 /CapHeight 683 /Descent -195 /ItalicAngle 0 /StemV 53 /XHeight 430 /CharSet (/A/C/D/E/F/H/I/J/L/M/O/P/R/S/W/a/b/c/colon/d/e/equal/f/ff/ffi/fi/g/h/hyphen/i/k/l/m/n/o/p/parenleft/parenright/plus/q/quotedblleft/quotedblright/r/s/slash/t/u/v/w/x/y/z/zero) /FontFile 79 0 R >> endobj 81 0 obj << /Length1 1380 /Length2 5947 /Length3 0 /Length 6887 /Filter /FlateDecode >> stream xŚW4›’»·EÕ(Ś#öˆ½©]{S«D)’ˆ ±kļŚ«v©Ś³VUé°·¢¶j–5nŚßŗæ’½ēÜ{Žsņ~æĻž<ĻēyĻ ĶŠDPŁįÕ@ĄŃ‚"B Y€Ŗž±$DɁ@SŚ ś‡”hEyĀpŁ’¦WEAĮhœL ŒĘ™é!ąm/7€ˆ@DRVDJˆ‚@2"P²5°7Ģ 'ŠFĄ”žä@U‹‚9» qYž:x ¼)ßīew( Ćz`“ Ō—v˜ 0(ūÆ<ņ.h4RVXŲĒĒGģī)„@9+ņ |`h€1ŌŠņ†:~Į胯”æ ‘¦.0Ļ?Ä&'“ąn0ī‰sš‚;BQ\n€‰–.Ą …’a¬ū‡ąĻÖD„Dž÷§÷Æ@0ųog0‚pG‚įXÜąsƒ 4t…Š“ wüevóDąüĮŽ`˜Ųgš»p0@CŁĘįū'C¢=…€-ĶM0÷<½G4 óyxČDįµšė §Q.ĶcØaIą?M§fLĘ*\D8ĆŁŒZ„GŽfęՖĄžEEüX­z–xW ā+XŹž0=~ÕĪJ~ŸÖ9wßźÕłęŠŠõĘņL(ÉR~~PŠd~ˆGZ”p Énku‘²›}>ν:UĮ©T÷)E=éF¹ZT Fõįķ&–ÄHsWz:ē‚Āa•ĘwĘYgüŻöšT ·ų†Ōź²Ų•WĄø§DFŒö³¤ī§ˆµ©·O”ļnÅŽ–į$ģ“śF;鈵uC³$ ®Š(ä3fg÷+ĘŃŅéĒĮ×D^Śģš ©?3©³ų>²ą‰āŃÓLj’œ ä›V—›zu9ŖŚĶTT¾/r„•(]xÅķҊu"Æó¤¹6+$żp¤V¢ŗ£Ńä”pķź˜ŗ]"ϦļĢ(Ś2]:}š!°’6'eōHÓ|3u¹^|-p _Į–xŻ*Ń>ަh'%‚o• PŠb=ŗąŹ£Ł8Čź‡#ŸŪ –B‚Ņ˜s3?Ė\øPæFė•aAU©åS#[fūēIeDŻzśl£$) ‡]ļł¬Ėī­6ĖE «²?0ꤚŪ:'ÕnŠZ½§ė æ æ‹‰Ó§Ä¦FŪ‘TšæÓ¤@]”“ó^ō%¼yĄ< 81§4^3•ÆŁo-÷Fm„wn{üIRĄFØ|üsŽ- ņ2Q črC| »ĒĆE’ŌŃÓ!Š”O”æ’¾Ķ TNC‹°ø°ŁX5ė«Ī© ÓįƒöƝŒyßaŅĶ…c£,ó€œĶ­3—ĻqžüĖ|)Lf‚95¬KŌ6oĻynu)ØY;ņŽ9[”ƒÓy9žĶ$GėĶd(+œHčs>c1Źp­¢v©X}{Ż’VMŠK^«^Čī<żt{¬B@bڈdē}‚AŸbnØ×{'ā»5”H6ŒŠA')»'ŪɔÉ3ä‡zo}¼+½X铥Ąģ¼ČšQ:»m÷÷jŅ=-QØõھ—X /»®Ļ“’Æ­š’šČĢ{loYV“ˆ*ŪÉ«ŚŽmšĘė§¶łCvę†ˆĖ £šķĀ.›@&każém1įb"^¹÷aVÓÆNf6äžŅŠ×v²Üc³ž2ó”€(Įž¤Ļ›Č雥GćÓD2qöX’@^/śmļ«KźœfY6±Ļ-ä6ćņ˜Ēu@UW%_pN•”®Ę&Vŗ*½¾Ą^F‰‡·ŃŹ’XXÜHöPPÕäģŻHo¹ć8ÓUGÜų½OYÄH:DYŠ)ŚAÄŽ·Ŗī 11}ī陕͵"”ŌnŁÕ‚Ą/=žÆ²ŲŸ;lܰ5Ęfeeq”zÕ@×\t³M&y7*}%õV>eŠ^°s·¬„_tćśOę'ʟĘymā  V~złEņ·~ ūõ'ļߐõ‰Ō+pļ%ęL-ø”½łźŚżhfSÕI=ē”Ä©†mĢh,6īākŠńŹ R’QažW\_; kKTdž«^b‚ćdČO7Č? Čä“āӌ\ŃŁšŲÖe̜'ņ¾EwW ŽNqÕŃA#Į¢į Kółi`Uu6…ĀmęŹ ­ŽšžB×SÕ³ķ]錐;ŠF,į…ÖD“ßĖ|æs# øL^āń™5r²4|Hgy‚—¶7ÓR˜ĢsÜöNµcż`Ć2g‘[v¤²ÜvXgGūR¢©ōÜ:k‰ė›ŁĘyÓ=XÕŽ§$ż5ÆįWØ=ļėZ¶ęZĻ–Ŗ#lLvvŲµŖIV½©‚ņ=ÉH’=,‘9$#†¶—ž—„ž(ƒŁhü`|d]D’=^ĒÜŗ`3Büh¤ ~€üōtÓ³OZ¹{ķEnĘWŖĻCĻ/ - Ä·&6uW¾^mŖy»G£Ų]ŲŃ0ÆóvcoŖŪ]­Źį³Õ5xc¶õ¼'UēU•fßmO’ rwķ'ƁL 5É#»O•½iå™,Ww„Ō ZåmĖ.Q (Š«XnT^ø–/gnAŁQhŖ*źź¢ą¾ķÓw„õD·¶–}f0Zv€Chƒgt3ĶĒĮLŗ1ÆØ±ÄŻNģ"w “fĪŃtŗ:†Ļc_Čw²/ü¹]«ŽĻgO–if’ył6~׆6¹č'xĢ_xj_!½šńŽÜG«Ā }ę^‚›‹71łß-ø—÷œ•ń“–9 ½;=F“) w*(†X:;ŸŅŃõŅŽ`æ˜ŹVd—dĪŅŲÖ•.A‘^ś¹{¢Ē9¹1yųŗåć ĘöœŠ1Īт­ŖąŻˆ¢›ŻžO%[³üYW²{i>¢ÓŹh¶ėäźqpŻBlÅ•ĖōZį˱’°÷DZ„Ī·Ģņ$®„Bƒ«z»ĻĖ”_Öą)ø.pVś÷+ƒ,ŒéJ7dĻÅJÖķÕzĶxČUyl©÷DĀüŅßk^Łnv™ 5äN_¦WX‹7ÓŪ‡[«ŲŃ÷ЦŪĘS݁{e*éŽ Š«Y˜Ń ^ĽǓą1)x¤qø7„IŽžĄ(SŽĘÜ'6²śÉ¤#{“Ķēwc$f²0¾KfĶg‰Ķh­ĄzŖ@`āó›†Re}Ų©Žh¤7‹k©éģą“©1?šŽĪŁÖśy¶čŗYF§ćF j€³ęā2^®ag¬Ø’ ÖæÉXūłā<£hKŸ Ż-«ČØnŠo©­½«M|Yœl•R¾~©rW /Ū>Ī„œŒÆÄ’\µ©˜Æ“ē¶6¾įćwœÜ5ÅUŹ_L›šo”cŲ›Ž8dŠŠŪŽ£šl[Mī8ŗ)S-c*’ņ}~’c Ā'į½ł2 ÖZ~™†§Š”Ģ”TĘ^.žr† łrļ\šśż‚|¹=æu±s QĄ ; P‘C>Ō¢`‡¦¼Hj‚ŁRĆ‘fyRq±•µöŃoīEēzóZNĄ’W>p ýŗjßĒéq9rSüĘQčpó”{ūŸ†(lƽž¶©¤‘¾ŪžnĘ£źŻMč£twšģś2O-昃Ž>m;Q7L¶īÅPćULĒׇŠ6‡šVń/76gQēSõ×õaĀÅ›ŹØ%µī:×"Ō§ø#‹>ĄėVo¾µq«ŌMvlž9S•ėøn˜g_,Ŗ‘yPIršĻ­3Ź H‰+w^Į®ó8c%ÜLb÷#[~śuōRX½f5ЦŒkå>wÉŠŻ1z]€¦‚?Õ$x”±ė¼tßt«0Āõ{xĶXž“‚~čĖB0ŁGŃKš®ń- ł?(”ؾ/ų±[ūQ˜R†AŖ‰£¼žS`·^ģįaμi]§R£Š/ż·ić±”Ö‚"#ŗzߊ²iŪė“ž±å¦›{†w òØČĀ5{Ę2zƂW|«V¾ÆšŠQ'fļčµ’ -¹[•GйłśŅœ›4¹Dˆg³öTnyĄɎġ42ōŽęøŒ=‹&qŲÕ3NC‹™bØånčžÜ˜‚“:š}±3SŅQ­dĮżĄ·—ølź­ķĒVśˆśēS%ľ‘:©üD-zsWrŅ:ك½6Ņ÷±iń³rKóŽĀ“Om-Ł­zgE{¶OłzЦŸČ|¦‰"BŸ0Jp Üg?q«OC©œĆŁE„i ćü¾Ņpa%ųƒ±Ƽ1ž*Ņé·< ŁO ŠśP¬ĖKjĄ!"l+Ź­¾7ĶGožŅæÕŹz±ń”žßŌµqC¦:sN–z©ĻĀę$Ź;Qč6XY‚>uµūµó7<'[„’¼—Ż˜ĒåŲ96żGE±Ī²¢¹±ŁQ;ńķ4ĄÆ^“źö;ÕŪx*k˜ Ÿ£+< 5}Ł\T÷³æ…ä†ŠÅź?=4Y«›Ė+QīU”tåē"x}§{d,3ĀóuhD[„\iVe3]ŒĒ!]ŁyK®ģv»ŠŒ,ļN‹õ³‘ĆśžŽS’Ī÷†3īŻÆ;…£¼j–9¤”ŁĶ*Žš6…™ŚL[a6ļR¢ѹ{łcoĄĀ'Žū/Ŗ‰¹š„XwŽOó3 lVŌO½aad ¼b@±-\Šä$¦½Ė}ö®N•„FųzćESlŃÕø³¢®I"o…ÖŻ€õˆVÕØņœ¬½¤%•!_ĖźĮ#ĀŌb§4)Ī!IYm30ŁWibsT&½"¹Yekt˜|ĖYĢo*s$ŗTŌ‹ķj½Æ’ h‡ŖĖZņNZŸÕó·Wå8\\ęu¤¾rˆŹÕØ.4…ü¬„ōQ½žØ&!‰}‚µŪŗ«V”Ż+Ą1äō:Ś*,ʜO €”YŹŌł"—›0šŠšN“‘ŌāÕb'ćdKz;)üģä¹tĒ!"™Ē°k¼ŃÕHjfņĞŠZžõ„ŽĶ)&Wóéh“?$t•G5¤ĮK¹öµӨۚ)ÄĖ:ā8ķĮ”Ā#õl’żÉ|&ŃcUqąĄ÷Ę ŹZzQ~G”ŃNŪ8C°\WRAālŅI€źļ?”w‚ü/¹ aļ^ķʋüŌź%øeІ/ńq‡‹2„M„g—R»ļ¦:6óų+u0s1ż“>5ĒӞĄqŖTEo~½Å}‘ÆHd“Żēš„­*ŠĢ0ųb(-m7.¤½r?2±Å¹¤ĆJ$ź‘lpxą*Œ'Ł-.泂«G5ø¦rOØS„śK·EnY9Ž©E[qÖ=MÉ^ČWŻå:pčĢ}¶²]*¼śčdö/†<ÖǟČūrJFTGŬ;B"Ņēųó“NNM >Q’…^ҳę„bēyJŌéł:*¾Ŗä^Š\ •ˆ¢dq” 3ĪX°X;ōF‰™ŽN0š[ŗ|)FoŠ1w¾›kן æ96”¶ÅOVz‰æčBæČ]/ĘBŪB+’q&“±ēs—Y¶vb˜³żŠØĻĆęó§ U;,:ˆŹ\WĪÜŽė„Æųä¢õG‡R\$tĢeGć?Öh Å橊|QVJ}7ś8¾s@ö ®ļÖé%®U_—Õ'ŌĶŁjķŚQ ōB‰?śC!LĢj=VūŸČĆZ/­`׆7źŽ–R޹d’,°–g1ķ†ÖūĀfćMy‡Ł+o¼üšQĂOsŁMa¾mĆb›’$-æ£DéE®Ž­epŌµC–cƕAÆšj™h¦Ł‚/ėėgß.Ö¤Ē6t¹ćĢż˜+ڹč&z¬XŒ49ŗfĪ‘Ņå%«ųŅÉ~„ŠŻN%OeóŃļČ Į «J<A9(Ķā=’ś9|牸¹Dģ$ĖČęĶÕU…ä*qį’mż?¶–oö=‚ŽŽÆ’HµBšQó*É7ī’%Ō§MDף˜Yr ś.„<³TŠJš, P/čóU®Z[¤²x„ü“Ÿŗ;ƒ“j;B*ōłå#‚Žuś}åą.?lšŅ£YK0­[žö&ķ‘uˆów-æ7ŽŗŹśÉŻAd„· [ĀJ”Ź-¶^¹SŽ}]+Š=R­ÅäGÄõTL‹é‘ąęe”žKė*PųŅ™A0­øĶ\1ĮZM„ ¢»ešs¶F%Å£gx¹ēs{ŠÉÜļH«į˜vżŒDŲµW;åÅĒM“ ”µEžrķ³>½?†’šńEKF±y³D7“TE”;=Ī'ĀD5²ų52v—7?¦Į#«›t¶ąŻBžhkt9›<-¢šócčäéļum»ßČÄ’ė(:d”£ƒy O…§É;åČŃäĪżś<:ūŚłżNm¼=ģ'Ū .[Iźėo¶YfÆģž×¬$!>æ@źZƒÆåߊ’½§É X³©æBwįš4üLĘt&@M¾įĒäŽ,~¤Ó£`®™ióg‘j‰%)„ś}±+h”b‰ÄĆcó=ȒźĶČ„–0·ŠÅą×Jč>+źķ~ÖģįĮ ćōļā2^ɖ»Sō2 '!‚™‚ģ…{)öŌ7xŅč‘u9RwńźZ±®pøs|ę/Fź endstream endobj 82 0 obj << /Type /FontDescriptor /FontName /GBCRXR+CMR6 /Flags 4 /FontBBox [-20 -250 1193 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 83 /XHeight 431 /CharSet (/zero) /FontFile 81 0 R >> endobj 83 0 obj << /Length1 1509 /Length2 6945 /Length3 0 /Length 7952 /Filter /FlateDecode >> stream xŚtTŌ_×.Ż]’2€tŅt‰¤ÄĆ 1t‹€t‰tH§ ŻtK‡€ˆ€(ŻßØ’ųŽ÷޵ī]³ÖoĪyvœóœżģĶĢ ­Ē-k³)Į pn Ÿ8@^CWĄĒ'ĄĆĒĒĆ̬†C@PfC«’_vyW%)XĀn0(@Ķ €Āā@q>>?ŸŲߎ0Wq€‚„Ų ĮPƒAAn8Ģņ0goW°=qŹßK›5;(&&Āõ; ėr[[B–p{āDkK@f Į½’#Ūc{8ÜYœ—×ÓӓĒŅɍęj'ÅĪšĆķŗ 7«Čš‹.@ÓŅ ō›3@ßģöփŁĀ=-]A[ƒ nˆwØ Č€8 §ŖŠrA’8«’qąüõ4 šŸtE’J†ž¶“¶†99[B½ĮP;€-h)©óĄ½ą\KØĶ/GKˆ oéa †XZ!~_Ü $«°Dšū‹›µ+ŲīĘć†übČū+ ā‘”6ņ0''ī†óė~ `W5āÕ½y—Õ 󄶾YŪ‚”6¶æ(Ųø;ó@Į.ī U…æ<Īæ˜āćć@.—µ=ļÆäśŽĪ ßĘß0āžž¾Ī0g€-‚Čl BüįųŗYz€pWwæļ’6üēŲ€­į+Šóov ²ż³GTŽģ0įCąūõūge†Š– ńž×żwqyµõuu9žĒ$'óųr øł…ų@>>€bᒟYžį’7÷ߨ¶%ųÆ»ńż›Qj ˆż”€x»æixü„ ¶æŚ…šŸ'hĀ:Ųž•½)ŸŸ5āü’’›ęełČžæļ£äü¶²ż2’VK'0Äū/;BÅīpDGhĄ}żo×§ ?M¬²»;ż·Un‰č YØäŸG»)½@6Ś`øµżż]Dz ҆¹7ļælˆ^³vDŒ7D„~›@ˆVśĻ#”Ö0›_=Ē/$ °tuµōĘA±ųĶiņś­k/G„ōü¶0Wœ_õāšŚĀÜ]”æA1/bzż»ēš:#f²…’‹’B’÷XCÜŻžåę…Ū»‚žĶ‡ Ā ÷„ż" ąõ¹žžƒšµ»+āųoé!x’½’=[@ /5ĪĀĢZā„CĶĖ֋jYOīķ1Éięķ§©ģܾ ®mīW˜ÉģU™/Ö\Ļd“‡ŗ‰–?+²Ź,Ņßś~kŖĆ oNŅi¹ö»±HŠÜnĮł4AŃ?^šM¶¶›–[_fĒļÖÅĻ0Ųµ ¹C9×Å]”@;ō³WŁ«¶Æli$ln[g§Jų īMŁwŒA“ipń ó[«¬YJF 87ɑįĢéŁ4IĪų=½Z'Ž’~Œ@”Æń:ģå¬ĻJ…>æ['Õ#*cJ:ŌS’‘I_¹Ż7ję}K ×\GRf)ŚF7œ^!»l>ۚŗ®_š³0‹³QQņ¢’©FEÆ5«$:3$bf-«­y©ži²rćŅJßkADj,zķ&kSŪ܄%v’»µS‚²Rź+żį$^u\Ŗj‘½Ļ²÷?–›aüŖ\>(«§O#’’„²é ‘PĮaóJŠęÕŗ~}ƞFós`4FļB•ÕĶj•¦%> 0…ĆO»Õ9™BÓZ‹¼ń]„ģhńéé{¹jĆžĻ=Œģśö EćęņĄ^(o(Łt?{'suŗ±sŖ¬EI|vBźęx żEJ%³1|„Y3¦EB”ÕźxKƒ4Ęø'¹3ÉjĄfß¼’زńØł$LmI:{ķ–ŪŠ»ŗ¢Ä÷x_%°e„“€ŽO§įqZ¬¬yŌ>ß÷€kŖØ7ąłDÄ9cĘ>Ŗ:Q¼æ€čb<Ķm¦ŖüĀz«ĶVdk&Øhä'’ü(uĀb¾æ>€ąīK?~iĢ16‹9ÅZ-‰Ø=ĪKņ_;Ė:!Ś5õ YOÖ4I­¦uJk» ķĶ÷{ b3|®Č™‰^”]æłŻ¾ŅJį¶: ©¢ o’t½·gˆ]ü3Ѽ©±7Lt&¼å1»FeghtŲēĒX(Nkh1%#_Ž$Š&VśkŁĶŒõĘȾ*_ūŻ‚^k·žŃ’ŗ‰ć·³č8»“CxfWĻ1é{s*鄣C“¶ü‘ŁĆ?DĪĻ"˜‚¼ v{ڜšcŪNŸ;Z9Ö=roÄŠ-#[+~1h&j™};F”óxæu³~–ĒüĖūŌ„0ŚxŲ*˜›TžåpOK{Bó6N•ØC»•źōŅWłfXĖōMylŗT”ę§®Ó …Ö7Ć4ŁDü ljœ!ĆĒ~ “]XŹ™IÅ»³™ßČÖÅkęBȎAŽyŌÄ·%¼ƒbœ\ÜVžMbOć/DPü³ę÷–Äß|f7ņ›h ļF§K© ¼oõÆ:įó׍±?,n’łK¾X O¹•$†”`Ą˜ŃŹ0€ē£­Öš®Ė;»>Š÷z]bJ8ģ y•ūźč^ąlcr8|qģBg€čīoyü ŠŒ¶š %iݵxųˆĆŠäū5F’Šńmöł“ŖkWSĻÓ·­‰ī̇5éJųęøĶؒł[H »dÉ3Yƒaņa¶m©ĢÜóK µŗR­›‘:Ø(c„p™“įŽĒMįņ®u7”ė‡>ł;[I “”©l¤g ’Ŗ=qJ,Åq$iÅ ŠöS; ĘŠ‰j}-d3u Ó v2Ł‘Œ‹É Œ©^Ń¤SŲäPX9}Ž—zs{TÄT€ūŠC³‹ÉÉÅ/ųČdbÄ8»51Ä»pĒ½Ō d=$½}Ū·øĘčē:nvóś Ŗ—Ÿ‚–Ń›yAbxĻh~ą ²-©ųŃĆ#- -OßüšÉwž£tō”ļéӉ<6¾ģ³ĪXrö°8+vćÜ °q9jŹwQ6ÄÆœ’ %Ó1»½xĻĄSø9$j”1ŹéĢ"xęF¾EU¦eŽ |_Øļģ£jžOÖŪ‹I¾„āõ(õƧ-ädĖ+1źķŽHW•ä&POXŠęȕüJƒ&Ü ø¾ĘgvŸ’?j”*_“:¼LOŗ×…ĶOˆŽßlįv/ä®Pa~Å*ży ūÖäBq±‹ŁuuZŒŽWŻŹFś«ķr:iAGŃŻ–Ł«{—͉ Y—ĶŹÕå™ •;²ŁX¹ ŻĄB/e³HnR^„ų{ĶYräփ°ŁŁgÉ?‚æė8²ł‘Ot[œźåóŸ‹Z&^2³Ā= ųc*ö‹éģ…t¤ćŽß–±ļD&Ū±Ø½}tH_LF43̵>°ä gFĪņøÆä21Ā1øĒ±4d”Ī.ƒ„’Ō³Õ|MšāėbL‹]Ŋ*3°nƒv…Š5śŽ2>éU8ÉC¾ļKĒž„/é?‹#| –~oä/hŅĮƒtYˆČ¼&6¦5č-mē-”µnę˜ E*•ķ2¤“Šœö­Ć ¼?x{ƒ&tZ±Õ©^Õµ É`(ÄƒŪžåļŠüd暎¢ŠåŖ^*«ī•d6Axū\ ŁĀ?Xː›ņ*hč6])AņĒf,‡qNKĢĖÕ®ÜH"eX4čG1v^KöŃ>`ü8uęrļ€Qšž>ŖMĀīžt‚,Õ ±eqśÜ*„ńˆj^ęē\Nåµąģ}¢½õM7 RІäxte'>’Źxs6‡cß®–UNī2Ö…©v’żöµ£ū œw gYu)Pe_Żņ›ÕGõXĄė툓ō!§ŪżøO­č«ĶŲubˆēl”˜qĆĪöĮDŪšŹ4‰1Óųåč3Qń=.ßW55’·Øj„Š!ü&Oß)4ū*ō‰,·Š‰uŃ°Ŗ­fŸOl_3Oʁ)ā“PĪStå<®ł¾q®dņmŅ@ˆŪ@ėŹ %Õ{}•õ8ŚŠē‰Hgé™ķÉßJ·%™§y,w¼‘Ÿ„ÅETzkČ]BŚōܽ=…Ž/)ųąĢ/Ó° RÆ!½ŌńĆg™+iģœnhÖ„“pd™n]PĖĶÅtĆ?6łŌi’4hļ7fF—I*“µ6‚#¦V?Óōpštvn‡Æ’`ösŽŻĻ-Ŗ. ZOčF‡ļ×VŁt(jqi“²]’ŖŹ›h3LEüĖj‚ćX`ŸaÖ}ĆvP« 8[8Ö°égż‚gō˜n;js×ßōh6IÆćhä āąe­žhQĻ®Ļ‚ę$oźį¼AwQ&T_•f1G„ŠO|Ļć.«9ü ;NšŻ$\ęf·Š==oēł³µŠĮ–²÷AĒŠü^—ŠĪøwŹ#ß Dƹ*œjP>+ļ5 ‹I%OߔˆØ„Q˦ĢR¶&O*}?O¼Ė‘6œÖĢērÖ>ÓOZ…ŒåąŚŚeKØŽµ­u%Kē1¦-ÉMĻM+xOŌą©ļkHį(®põ ZĶuł}Å”öO xE€¾-yõ„š¬~Ō‹ÜźÉ!’Ķ!Jk䵳ö”łÓs4YC‘w^: r¦CEµ[^!d]žb<‡ŒÕ‚ŗØ ŠįLŗ* ¹_s2'b Y™‡ 5k–°eé‰OÓw>‘=ž§Š|‚_ԜØp™äE'j H\žėOčĄDŸ#%- q‹ÆĪźÓ ō7ĢįL¼&ø:öĒŻ _qÜX.żĮ0ŲA™óńĄß )büÓ?„d ³īk¶™õ›¢o se1Ņž,dDVF©.ó`Å(ؤ^ N·cq—×ƳEŠ'"yµņۜāOfö"’Žo\®(Ł iŚ•±”Ēšw˜ĻP‘FēƒK^Ų__Żź[ zoÖ>XŻĘ('{5ģŁ&A?Ų)«xŸ=āTźŅ±Ķ¢­÷µD%‹™&ߓénĶųB²øĶÖ÷жŽ<:V‘m¢ö–¹ń=ž­šOÄČgó‡øu¬Éµ5X(G ųŗ€:žŃø0Ė—­!y‡ĻHęŒߞÜӆLOŚ…Śō`ˆMó~ö{{2m8ަoAB±ĀBżČ"£‚"T˜vķC:¦<Ƽį5°‹Ē‹ĮXS_T„t~ C/©}ĢőSõąÓįÓü³°yń5K–xłŹąĮŖ¾B÷ŹÓ'mĻĖŖ‡Ż»cŃ'ؼg™īWž–Šš˜ģV„!Č’Åq|9īĘmvrōMØĆ§š°ĢWŬ ]ūmnĀž‡öd%1ö…°žOÖUq„ćg}^WlōGąNŹHOÜFņKĶ‘F÷ĶäOųgõO±ā%K›…͆i©wj0¢Lhmć·Ęęöß\ɘøĶ9"ž :ŖµÉš¾ÓÓ*‡>S3et¤Ž>ōń¾­E§‰yżį=s›ż•ŚĶ“Ć…D?4¶ödlšlŁc=×eØiĻÓŁˆ1ZʦŽHÉG¦9ä‡ŅKÖTI²ā±Č¬ą×®į(Ö)O]ŚĻįAŅ&Ŗ`śĒ.6ÓłĻ<ψŅėź–Éż!œ2e[!Ļż‹¦ œŽ½MŲūÓO2š'8oܚŻ8Ł®‘+“œaIÕĢŪ¬°ņøß~ŻD|Ž)f…J*®±Śvƒ½-’ķž®pš"Œ×Jā#µ+ń¶ŌhŲ&Žß}Ÿ‡<¾™oŽĘ§¶dz@ńÕ~ēĮØD”-śŻ,‘Õ'@3ø}‰SR.0Bƒ‚ųÜÓöó\Jčzć.jwĪ2ś9yėą²Sći‚ÉØ?`‡\ƙÄażF.¾ž«‡ÕĶ“žķQ+Į­{Ǿ'ń9õ ˜ZęCB_ń%Š:…לgzU‡¢Óœøū½dŽQ¦—>ƹM™tš#µF`GkŅĘÉ/X½IåĢļ¶däqE_”/B‰Żż×³r¢ßE:@ZÉ^æVų 9dšå±Š“ĢŒŽ+rš:ŖJz¬ēżĮŌŹ`Ču¬ŻŽoÜ©-ģŪ —;„ņ%xµÖVĄwāõĪ/^’¬—jšilp)zAē#m•“Ą]­č³üĻ¢Fa§£ē?…ą“ ø+RÓ8†śŽźóÖ»“Vl{r*-HÅ«WŪ½VŖZƒU¤+ģŸAŽ|²"ԐļD"¾¼s/q'h““0”™ĖŚēzŗ y•'QŒz»gęü1O<Ć=f.e%TW§$ė_öP£€”Küē{—°Cö-§Ōߌ³H'„ sĆń4¶n3y0*Só][?üƒĶ“ ¹GYHģfč™$h»•&µ•m»’BR[¦ ߇ "ĖåŻÓF¬ń 1~Wb*X}’Y©~ÆČ!÷Õ©”vŁ7oŚkØŚž+ē1“m‹óēĆ5u!ĮÜdļ믺HX1L±)Ēzn±”œ˜'eĢmżƒs×ó»=®.Ū9jÕYĮń5/Ŗ »‚·>žSmcž«ģ§¼ ~¾ŒA¬ē—|ŹjIĪ br6gĢÄ#ēńD,DŠ7`“ŠUńõČÖYŃŚŹ„œž°]w$TÅ’`DI=CČčo“›Õ"-1®2PµF§­Å”(Čl1=ЬćAŹę¶!‡}ō_ >•3ÕK…Üģå÷åõ6tEvO!~Š ,õŁģŸ•āU¦2L ¬4÷S/‡Éš6~|ŪŽwæž,lP *ź» ½¼ >ŗŽA—f>\ِ1n–:\óX¼r²˜{ļė^–Ę Sœ·įuœłF{¤ĶßÜåłÆPUßåģcäœPŪ…¤%ŗI^0²9oė“Ÿå2źźt~-ÖszEŒq}ł “ze¢ü¢ŻĢ‹…~4™8Š1'µYHń¦„ļĘ'VÉ)å*ͬ2āhŁIæĒwü…}0°×82!•­’aÉ­G&\«“ś”ų[lj¹ė×°!Š-ī6EaÆĄ^š«ę,–ļŃhµiūµ½dEÆpŠC„Ę«š6ŹEKø:” 1›Ļį©žS‰‡Ø€÷õUOŪR¤Fj@°”h®Ó› Š:%X8 Š×äl„·®ēõ³’šˆt×|ļKŁć÷ŠĄt§Ų”€ˆÓi32ŹČ"ļĶO*ži w™ž*Įõ73Ƶœc!råņ™”Ģ'†Ŗ&ɅxiחŒĄŃ‹“NŒĒęoČń¼—]*šjrx%šÅwŁ)ĻN‹ »ĒbĆå÷ÕI0Š(}QK Ž2ƍ­™23Ųųłvo”/„ 4*=¬7æĆoĮΟ\»ƒ;oˆ™#Ļæø$E…ĘOžJ²£yF.œ¾˜œę`ņcZøu¹’hÅŌžĘš³äžSST‚Ihć6fĖŁuČĢ`²mu?„Ią”*}¬:nā˜X” ³Ę§Īl±-— w•!lŗĮźR9}ļ†ŒÕ³’złVxcŌēXér¾āļ4O†āžó˜b‘«GČ‘ÕžT~›~ūÅXÕ µHś}DAžeŃvS[ŁPqÄķքˆ>6I@u;b„>üg”š#Ķ—GRŃ.H+ĶW/ŽĪŅū”z䐹tΦ†¢Ź~Šł'ŌöNõØ}§?m–jŠA I( Ē z(ŹCv‘Ócmƒź£Y}¤±ØĻJ™.#Sz = é=¤ąÕįŠ,B”ĘņÓ’¼\bzOę½1ÕėŌøžh= ļŖ¤­5{/± ĀĘŁŚƒŲĒ8ą)|³°ŌŽf•¢¦ż¢JŅAg“-!ƒN£dEŠ<SZą38zL„zı¹F™qM ļ¦7Į×#=[?{F»økMöEžIbūŽ‘ęE·zģ¬9CNnšŹ#Üļk¢Œų©Eʊs ©Š åą'Ļ.K?‘“=fyĘłāńz{‹²¶‡—”µė=Ō“Ź„!9…SŃFń˜‚üµ ’LMNsFX)š¶ełøÖmū‹dK‹łöއKė;-ėūTZJ<7¹ś H=2“læ§Ó÷GØéuƒ}+—xš·6’’…£Œ'~˜aåR(D½ŹL‚ėś-(8 Õ\ ŖĶ_łē1Ü„ev“ozzA2.W}ĄI$ɦļ+L’·Ā<¼ŽĢ†} Ā9Iéā“՝śĀ4å 7h^Čo-eā6ärāłdś)įW£/f éwŠø‰[—ąA/T~˜޾>Źįå®Ż~#(,arp rѝ[Żrēˆ“dŠJȄ]Z^Xx|Ł8õ~y!žē’°ĀŒ Ų£·oz^Nņ;“…WŻó0 bü»\Éļ؁Ó?·m!ķµ*×äp­ū‘Xßõž†Wķq…*ĆŁŗ@t’·)ÖrCJ×/R·ėZp»Y<6ŚÆß7ĘÅÖŗc.”ą3ŚČčo1©W9÷m{nÉdZ³dQÓ1²Yī.(ȏ~<€ÆåEuvé1täXs’ÅDŲ“ł”­ˆ3‘XŪ‹Ā8ci“Åš}oĒG}žŃāG\}·‡ŸżHä§Ł…bél;S=ēŠĄee|į(Ž£ÕŹ}ē »ž½Å…¾U^«ęį›öōöI`TŖņņj›_šz‹×׌÷Źc²šŸ­²½:H^ō³¦q{D åæo°tłxFŹŹtyd·ÿà~xO¦+`'÷6Įß(x€«īž_GĒ%jÆĻßRoa­ćŽ0ņ­ßy)GõsóYv=5I·Ą3)Ķa.Ūw¶ÜHŹ^ ėĆ«?ČvŲs+ }rGĄń;IĖʧ¹¢ėžöäKyü ā®Ū¹‰’,ŗMŪ»'N^ŲwSŅI?yœJōīƒ_Kš’ÅCf'x£“OŽÕ‘ĻKa7ce z±’ėūŠ endstream endobj 84 0 obj << /Type /FontDescriptor /FontName /PTERER+CMR8 /Flags 4 /FontBBox [-36 -250 1070 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 76 /XHeight 431 /CharSet (/four/one/parenleft/parenright/plus/three/two/zero) /FontFile 83 0 R >> endobj 85 0 obj << /Length1 1596 /Length2 7167 /Length3 0 /Length 8228 /Filter /FlateDecode >> stream xŚø4œ]6,:ŃEoCta Ń£÷č½Ę`3ĀčDƽBō.zOŌ(Ń»„č]A⛓÷yŸ÷’ל¾5kĶÜg_{ļs®½Æ}fÖ°1kėńŹŚ"l J8’ÄĒ/×Š3ńųłłųłšŁŲō”HäÆŸĶāźEĄÅ’ĖCŽbD٬‘(G šŠ @Āā q~~€?æŲ_G„«8@ĮŚj Šąp@"]ā@OOO>kg7>„«½×=€'驅øA\= ¶€Ÿ”šÖΐ?ŌųšŁśP·ß€Āéiķ   0(wC…øĆm!®Ōī=Uu€– žŪYż·Ć=ĄŸā@| ’¤ūż3ž+Ų F8»Xý”p{€h)©ó!½÷Öp۟ŽÖ07*ŽŚĆ ³¶A9ü:ŗ5@IV`bų‡ŸŲź‚tćsƒĀ~ržLƒ*³"ÜVįģ #ŻšžOź £źī üÓ\'8Āīūwe…ŪŚż¤aėī4€C»CTžų Lų’Ųģ!H€昰°y €x€?7Š÷vü™Qü}].; ˆ?Ō‚śĄ÷u³ö€®īß’ž½Ā¶P0`±‡Āń’Ɏ2Cģ~ÆQżw…zĢųQņų¾žódR˜-óžĒżW‹Jz¦†ZF<(’”“Cx|yļbĀü$ ų’;Ļ*š—ż/«¶5ōĻéž+£*ÜūMU½æD<ž(ƒóĻŲpž½ƒ&„g€ół›ó ńƒQo ’ē!ųņ’§żŸYžÆņ’ß)¹Ć`æpĪß’ÜŚ óžćŅ³;5Ō„Ą’×Õņ{ 5 ¶Pwē’EU‘ÖØ‘…Ū£tĪ ŗĻĒ’·ź¦õ‚ŲjC‘`‡ßZśŪ Ō0(¢pƒž¼wPQüü’ƒ”F섺[ÜP-ūAP“õļ}į`„ķĻX»ŗZ{㣀Z |AØYµ…xż’8ČG Q!G€Ā’gcļ €Ø(„§­ Ģ5+?Ńßčąw+’"‚Cžm €6ØjCžĖ$B»C=¬a8Jķü Å …”śž×Š:1ŠŁŚÅ ‰ų åē …»»ż“t„£.ė* ŗøB§’WqĄī®®Øū旊Q•ū»žuYA ^0žĀ,,źų*“ż²F–Ī“wóöŹjgT¼I_¤’}ī…Æƒ:N¦ņäc¹G¶•ŌĆiŚó„į³~tÜG—£^ęo²ƒ–SUr‘hŠ}ėrǼyƒ_OßŲCm“öc"iQ뤟tˆ™ašq$Ķ^…‰t nWm\wŗm›ŠķœEē$Ģ©tČg²9ūčOM˜YW‘C&ę$±d®féīśŖc×čO”±rķ14_½×Ķb3†>|x›Żß—&x’ÆÖS-\NNsĒē!sĪpā EBöĆ&74v9”słŅ”xšBēpöeŒG"Ėß§ņūŪŻģ5åƒnk=itÆCĶJęt/ŸŠ[mdéR7'F9Ü«Ic•c«¶E;J’T-ĖķĮ¤d`×u.ŻhL!ŠK.LŌŃcpž„ZnS_>z–™°H‘„‰||)'¬ ct¶3Z¼z §e#×VÅŠdv\u¾{ļĖĖ>h¹1Sül§łmūPwÄ1‚õˆb2(Žø#sæw/”IUč|šŌ[QY«6‡č²āŠĖ‰› ŠĶĶĮŌnėT–0•›g‰3$ĪÓ'ÓWßFK×Ä3“ œ"!"w:*eØZ¬y!Ü,™"Č’diüų–‚ĪAIķśmīÆX–ń6®Ē@\KµÜNS‡GŚ‘÷ć”ūńW;r&“AĒ"³Ė¹r? ¬ČKž˜ēŚ=ūūeū¬įS®±l]¤),*¹k2`ŻźåC‡i,}śėńƒžŽ”m/•†oē˜Ēä6CŹā,”…°ņĘ8”VłżQfżÖźķgĶø®Ż#vg_ @f÷7‚\,w4?¹|/{,§ #ę˜\ÆŌdóÅ$ˆ4 P ü"JFh=Ž,0 ēCs°kÄ߀I«-Ręļ›±>mŽ&­ū¦ģr|ŽC’¼µ–ųpĄ|Q¬$śŻC[šżG ±–š[oYDWķѓżm £Ēt Į-Ų‘&÷WŠOƛIóMāfFņµÕÆÖ­ZnW¶”"TR|ńAT^“4w÷8ŗŚŻiüŚ„—ēߌ4™t3“OŠ3Zā¦ŠĻ¾³'Æ§Ć˜”n(ĶŌIŃu@UŒJ96Ÿ‹*Ēüy"`„ņ—€¢Ā„nNÜPz»DŻu¶Ęž!S’Lš̽ÉrTi [±eQę¾A2 -U+ÓœŒeV½ójźÕ÷mź/ŗ¤?¬SF]#ŸÓÜe8ļ–!¹GŠÉ§n¼Čöõ[’ņEĒßZpS©†‘Ņy*ź…YA‡S0‰LT1’-é®\“Øc^4\’A(ß:t'ÄQ—¶äњs(Ż]—Ģ$‘œ]+9ü^ź^h’zqy§9Kł×ʔLŖ ŻC,]ł”łBĢl|¢)«{9”ĆŁÄNd”Ļlģ`Ū²Ŗ—Ś–čeuž ™äE¶Ŗƒ*>Nœą ĮÆļńŒŃƒAzCŚŖuv¾j£„ļÜhĆŽŽ™T·ē<ŽÄ™åµ|ŸglVgÓŹ“ŁĻP O"{°¬ĶūšåšR€GĀ̽~Özƒb é³ŗ}éÕ$īŁP¢9*É%m›’ŗ2q’Lf¢å±`J”žfØ]k8€Ö[§("¤E‹+“ž°‚_djk’( /T™ ą[¢®ĻKņÓS»]߈qKR‡÷g6ņ}32ÖäR†÷fżæ½ī_Čq°ć?õ^^«±ؚŖ’±3Š&ÕĀiEs„ŠlŻR‹¼ŗļ¤%Iuų£\f֐Xņvļƒ6Bńé2Ֆśt7‘īc ³Efģƒ‹oM£ó;Sꈶ`Ė9Ö&ö˜ĶÓ RQXJÜF“[ {hč`üښ%W&³žfo 5į)śjÅŃĀxŻ*eP‡KžDÜNŹ•»%š^¾¬ŠI†°œ$éR¾|)C·2#®v¬%l⢔܈żŽ7Ąß7r¢P&w*•ē)}&”čÖu)ŲzŌ>ø“^?õqĘ·ŒP³4ķ“›ŪײŻćZĖÜŖfešĘf…įāĘč@H—ui¦ÅŁŽōĢ=ōĆd,)݁D8įF+Ņ£ŪŖ[ww¤N,^`‰”}Ȭćr÷&žī¢ÅUų¢żDaiźNW’†Ē<£˜7i,eƒJ¢·‹­ĀąÜ: ɑę”=.~¬jQń!ĖĘGY^š…-Ųņ”Š“y§6õš³įB]ķÖ­¦ń›Ži®ĮŽXÅ»ó;…¶=›]t¼-oŠ€t}¶Ļ±ž ]t1óļ©œ‡ĆŖMÆh{óՉDĒ^Ÿ-<Ÿ6Œ!ī, WDg©«N·Ŗ½?;mĢįJ’‚ó8‡gn lāŅ÷®­07ė>¹•ĘHĢõ#^™:~2Cģk:Ž³ģ±ŚńóR¤^É`±­ō‡Zc LrĪ“°Ž 'M£“ׇJóväüėRwź–zpVt9gĘ,ęŁHųŃeÆ®œCŪŠbF‰wa~Ī!ˆ©·„÷it6[)*C󼟓ū%Å-z0‘}āy_ĖŲ›¬ŲŽ~µ€‘ØŃæ?¬ÆD+—TĄD‚ÕģčŒīų,»ęZJ~Wfńå(»?n¬(āģ¢īI© ’Dć|_×øą3©Žcź×„p‹±’>/ń×U~ÅC—ĘhZS½oͧ²«ø‘uoWię›e7’[Žt aµ£*×yfhśA^n£ł aŚQÜõ/ Ņø"»¢N4O§ÅjĘK—nI”åŁxϧ`V~†łAõå=†ŅŠ.2²(ŸÓmŃž>æ®B)ŪGożĢgA= †Ī[i«4‹Gģå‡hN>Ķænͼ%ęƒÕ¶©)æģE>iMčKĒ*F0p¦‰Åō»ŽĶØ>ĶC8VŖ“{9ęµņįŻĆ~wÉcŖ™}õ™ G5 ¦ žIĒC0č¢Q›Ž8k?éąx0nұ‚ į=/‰brE‚bø…ī¦ŁF|.@ĦśZȗI±žĄPĀó±gä~‰hE›ĀrŒžęÕütų®š]%āD4®OĶSĒžĆ3—ln%9Q0ßltäóŃīżZuĆØ'goo®. ļĄ¬G -Ųīš±=Šo+µŖŅi‚ŅŠnø¼>ļ‹eĀĮqKDņę3‰Ć Ÿ|WÅõy‹>_?ļ­čܤ–›ļT^>ķų! <—ĪļCU¦\ŰŹō8Ŗ)nßŗŌHg—Ķ'tŠśį«–yćŚünA¤Ŗ7oēK>Ģ©»Q}fIw Bī*N'ŗøT+q——|©]N÷ųäŖ5e; ß. Ä° ᮦ;0’ҹ-5Šž)ĪżnYĮżŻ3бDvėDG _Š6ž<®ńEŁDūž5ī½ cµnō%ĆFŸÓÓY†E.<ųŃłŲķŗżödŅžŒų%õŃ¢‡ūŸNv- %×fEĒānžæočfž|gŁ ā›_Zź]ģÆB†”ūvŃ{µƒü/®&ż$ob2Qægŗ…“ü“{°wÜ2Å>3Ęśol&qć3šŲ»ČŽ«¹÷FŅϱ\@ˆT~0X$ėĖ Aā§Ōꆓyz’¾] R Ż`Ė0~*R7{µ5…ŽBą@KÓE¤ų²1ėģrrō0Q/SS»–tcu¼'; X¼¦C±Ū%Ēhxö„õXL1æ•2ŽQ’©…4 |繯'Vµ±ąE”Ņ‘żTWŻżēr;Y²%åd«_3­¼^žøß€ĶQ?~ŖŅ¶£žĘ«8½7«×—+|¶ŽŽE’µ Ų,įƏG Śjæ?£:ė šŗPf½É„ -ÜćóĻk½=’ÜTBõ~¬Sé]F2ø¦63!X’ŗņ3Õ-&īįŽ2>lą¶'vo”®h+§ĢĀĀÓLBps‡L&»ŖsZ·—RĘĢoS Ÿ‡dFa”DF7,“†ņ*;—ĻE§Øf°x_fkŗZ'ćģ–tōńõBGjÖöFĀ^‘4;ÉŖZDpQi\4źåoݘ¤.ĄhƒŸacgÄͰ—p[Ę2 $p\eЈרÆŲ›ż¬Œö¤]t2NŠ֐Żģ-”ń$ƒ‰*ä=ńęp>p{a°$ęĀlՉ^¬Ó¾ųeƒ£H3K¹žÓ*Vŗz_ɻ׎õdšSAc©‡y>Ņ ‡’š—a·:lą„ Ļ|S٘pJ±,ˆrļ<ķ|ēTā-x‰X‹¾D{<RYļ&ŒSš\k¹“($蠋§Ų·}᫘H1TŲóŌ3hf5ƒ”•Āpuہ™}īćÄźäÄjqæšólל÷­š¤MÓ(Uędųō»ąóó4&˜Nõ‹$­Œ(L›Õ  Ė魆ÓōśI;•&D1­~ĢȒ&vĮ÷Éu¦qnņÕb}Ł}$Ģtå`9Ÿ¬›AEFĘ(ė÷³_~깦¼~lØ ~‚|@7ćtĕ.p¦įʳ;k©>LY]Ėæō¾Ė¹^żˆmŃ·ŒŽ¤˜¹]‡1ČĻī¶āÕrf·-WĪS1ćśō“āŹ'3äÄ¢½–ż3—¬ßX_IŽ”ż<—-½g+#ę"±,£M%Ś›”ŸAcćÖšW”ļ”ĶŲ-Ģ‘·}¹šŽ5čźŅASŗćx«DJKŅ sc@¦*s\¬É›§¶ŗpaVrc’ȶbŹ$ĶēŖįlł–UŲp[C£æ”.”šqæ{cõŠ…üʦ &Z£ŗ©[§¾¶»o„[{ėXĶ„vĪSŽē•„yOÓj•¾\j³“©†‡ó”·OštBDČ„łĖ9SĪq”¶tt™źõöN8boČ8MTyćc`Ŗ¾I<š”ŲŽ’ĒUÆÆz±j¢Ā`JjXkSšmö е4™Č¤!ŗ‡’‚U©d:UEaįĐVŚåĒ{"­åŽö2›’d[p÷@æ\öłĀyž²Ś¼¶CŻĶz³fLÕ!«½Č@yÜc}JŸåI;¼m¼S©É1WA·ŻG}++‚fr“_Æ~`}䯋‡MŒ³`^Hŗ¦)ąd—o}Šp("ų<€dÆžÄcuÆė,@mÉČ7[cjYPz.īY©Ę‰ÅWq#‰;¤Lńa$éXĘkX”rL‰xQÅĘäq|Ś«ŖŅ¹Ģś‘¾ŪMn”ēU!‰’ĘŃ?n_' ÕæŽt Ō@JyKV‡sÆŁČct>±$ģ@öŃÉŗÖęĮ8/ūŠR®No™Ÿ]ĢēŅ«”ļ‡äi'±‹ ‘ÄčēīŹ>jö÷O'ž1J4¹s±ģÖI|{Ɨ’ŚķŃ1||õEžIt×Ɛ6`¢‹°_ æŌ66śĻ{5©P~–”©ņ Éż Ļn»Ė‡!^ˆ‡«seĢ#žWĀZųüŸę"÷‡„Hó ׆Kėx*H ›**__1ˆD×øgVĶ–ö{ooõ&įčēĘČ ])»ŚÆ`÷’°ĘE¤Å°ūÕÄ5tEć>Ił \¶1/š“¶G˜W­į±¹ĀéH…,Y_~ˇ>̲µčÓA1¢ӚO t&ā‹y[yŒ§kÖI5žŽŠ|ąxw ÷Gšvo;ؒ|žčµ„?ńq˜¹FĄsš,§ų<$®Vś<,|Ü4ć>£Z¤}fißNAwé61¹LL¶~E2`†Ćśœ…­_Ķļ‘Žš’Ēü·ė'ī įŁIQDž§ģ×½¢b|׳ÅmŪ6“r`žÅ.i‚A”¢Hv˜Ų™q‹¶Ō8Üž OUi[\ŗ™<­g 5 ī'rw6+üX®%"ädōĶ©0æ“}Ųøš#äÕCe61E÷ƒāWsšK¢ź[Ē%·9"A’)‚Œ»t“ŸS'Ę)¶b<Š"µĒšŲø¶1¢¾}'1Ī-ρ4·ū?“ä“ĶÅRŚŅzŠ<5AĒ6I=’Įä‰p!?ŪĶ`ĪPģÕ~.¢$ ėuŌ&[;©dÉzcŸ$żv1„)5/ga±>a ŻPL’zī×(ń“øĄć;Ū%Óbµ¾Ł!xŪāS0=šE9Ķ€ÖńŁJ9vØwō1ŅĆkFÜŻV'ŅŻŌŪźĪ+}[–¤²—6<Ūo“Ā-ęaÕ^9„=Oօ_ɓt)Ø1jįŠ¼‰°Ėā“—ń“°+2Ģī6Ū x²RśŗĖhI,+čQ7°¦•å1YMß(p˃ßēŪ¦~óņ·až…wlīžgŻ2ĖņńKœań€*–œf„Ņlueqö…ÉųĘKbyIuGnH}KØŽö–Łź»i1Xż†ūė/…‰°oźńo9‘R3»W\ė1–LiÄō§\^Ū<Ģ„÷=s“īwč[,éīGC~ĢRK‚ßłėŸQõ“擜©J¦ęšÉąõmҊk©Ńšż&@¢[Ņ]Oģõvg—)R§÷ĢSĪ~u'—›°_­¼ŸŸ#;Ų“Ü!K6”ĪØ?æ|{¼wOV>¤ŗ¢Ģ–¾‰ĪX%“°vć«×žŸiC'BR½æV Sā÷ņ‡0؈į¦éѰĶ®ĄŻ āßtķüXž°˜Q%0+č ]³Ņ¼KŚņ>ĒQöŽMé`ŪÓkqµÉGž.ą1}ņŌ8ę÷KV7ē*ét5—Ń-Ļ>D‡'œž`šMķ£\ō’”ŅålŠD$Œ_Ž*ļ\IČÕÉhź\°J½Ļ6Õ*(f|dŪj«4Óć³²”§ßö;&w`|Øć+ĒAkž£īݶįīW‚;Õ¹pdƒķ©^ńčwŸD•½>*¾Dkzę _Įe·œķ~ߎ¼§ęĘó¹ćŽVk@Ö§qT¢HqÅxJ%“ņH±œ·Zŗ9ĻKr*¹ėtcĀč×¶ ™')ųyŻ?ŗš‹ Ė®;²®a荗hM.sJCUSlƒ)jMj•äsÖ3 ūK9ŁüÄlÜuÆünł|§•3 V®\›6ū\źųdf’VELUmN9ęŻ ę·*Ė—3†’¹g¢€£p^Z3²ĻęyL{ĘÉ+µōŗ’ėFvŻõÆ"Æ}Zˆ6 _DĮÆI…§žWż\Ķ/¬Có|Ż] NƒÆ>ģ «Ą>;jäO‚R“ZĪcŲg,ŽązßššĀĆdšŽä˜ŸōīČ<É*›“£²½ÖC^É:z1”»ēQīz¦UŽU¦īk 3MīųčIųœ“h,DŸ7“īgķßhØµ§xˆ¼¾]Z©ł)¢mQ»öX>•uµāšŖä¶ÅŃB+ [Į½ve>ž° ¤īJė¤WßšŪšØˆM;}‚{·†Ž<­ō`2Iń½lnŠśķżį7?Śū(ė1‡µV{/ %ĢXVŪÆŚŲE¾Ę1¶ß(Ū œČTŸ,Ų¼ąČäĆäyś‹›8ņāpłÅŁ!śž¹G4ą‰VV†ŠŠņÉ8)Ś4>–i‰ŹŅ˜ž€ńˆ¾ezõå¦Ź–BcŹÜÖ!k”\żŪÕó ö“ĮGšĪ+ŽõfI1U~U‡u‚ ų =«cYqŚeĆčdiŹ<§‡0Ł#=ŠŻógSI€™R_±‚Wpī<]d=Ūxs„Ąāš;yÖĮ-Ö£ŻĮĮ-9rÄbO~ 7 J1PšóĢ$*FįPW-Żr1äjÉ4P(^„Ŗ”+›ŅŚ[,šģķļĒ€ÜAņćGœ‘%ēEIļÄqŸøĪ…¢{ćīōī“Næćū„ŁJĮ ŸT’µr]“%Ģ„ģ9čE=Ó×̓®щŒī† [0““m`Õ;3ĢķUŠK~É,yü]@B¹ Č“0ƒ:4śųc–u<”Į&›\P‹åbŸN ‹†!½V؃:ŅĢŻļ\Žō&oZƂØSŗŽee[Éārģ„§Ū¦-^œf“GŻbŸ@_|„ P‘|ŪŚ¦éö8¶ŌŠ­± 7§<oz+2IL10¼žt`ē¦ Ī,öö¬Ü‹QŠ5öņmE'ø€/&]ķӈ÷m™Ü}×ĒL¼¾±ÕTõįŻ“æŖlµ#yīWBŽ!z2±.ķ$”>†“VC!ŗnÉ<滸[Ģ9Į—ź°ŽhjU"%ą·žČ³.nĻ*k„åW3fĀėŽyƒ ł!BX š÷ĒĄ6i‚4KÓ¾mxĀŽ?£¢/Ø8ę§÷EšHŸ ¤ĢEJ!VhČĶĻŽ. té˜ ÖWłS+÷ZÉ.ü£¹kå÷—Ź„mßFø.6$K¢½6Śõ#9śŖüŗ ČžĀ(°śM±`ulÕ»ŹņFīͲpį €R1ŽIѾšś'®}¢!$öŠy“Ž5Wõ_”å/¾/ˆÄģ¤`É<ĻŅ5qBŸ{!«NĢ~xcH”IČ]‡„÷UĄ(ėI—6, ZŒ¦Dļ+ęŖāšB›"7×^|/æęVpŽ”ÜvEól\±ež/ĮMŒZÖ×y©ę`w@µģé)Ƃ‹dH9n\N_> endobj 87 0 obj << /Length1 1394 /Length2 5935 /Length3 0 /Length 6885 /Filter /FlateDecode >> stream xŚuTÓżū6-N etctJ#- ĀŪ€l£»S@¤A”I‘‡’AZB$$DBŗłĻx~Ļ’ł½ļ9ļ{vĪöżÜł¹īūŗ¾ćį04V£ķ·Ń(œ°(,TÓ7±”‚Įā 0X ĄĆcŠÄ¹ ž˜<ę ‰FÉżÆ5 ŠĆŪŌ”8|œ>ŌńpŠŠE„äD„åĄ` ,ūw #T‡z"į@}PB`’„’گȽ»f&7#žOUķ ō…e%%¢¢2’@iiY`ĄæĖügƒ’e5„"’\üOEm”=(ū~xćšüC ž?’ž»Ć4žĖ ’?Ō·K‚aų/Ń’oüJłæńžg•’õ’ūB·=\\~¹łł’7Ōéāó'Oe^śh¼8P’jų-e}éįśß^m/”žāĀ¢ °Äo;{鍀"q0ĒßDś{ų.HĀEž|ćą³Ąą’ņįUsĘæU°ų…żr!š¢św_  ’©>1I) ƒśĄx’‰įYą'Š—)įż‹ß@ Ć§ń€öh ąēZ%d€"n$>Ž ųWi˜ƒŽ/ąūž}ž„rĀL£aņįN/ƛ«TX½„æ¾'›ūÜ“dŁ-‰ćxźēØw)KsÄ]õ>¼üZ_ŗįäóČįqVĮĆo붜Ł4­'8®Õ-į¼Ž£6Ä 8šÅaP:=ffó”ŃuŖūß#‹ńÓévń劄³첕ģŠX“OĶ‘ĘŠ{ ’Ū²FgÉĮż÷ĪҚ:Éš0Õ6<#ŠC&Ø6Å3ł,@2ßĶ̼ĶéīJßĪ×ķØ”*¤c¦÷ÕįČķKīafx˜£S%ąU•ÜW{žšÄÉüĢ5’w–ŚÕ1‘mx³Šƒ2ē\z°łp÷vżmeVHĖ䈎0<Ąn«ėåŒĮeēZѦõčżś¾»ŲśV|ƒēŒSö³„śp牾¾+i·ŗE>rZÕ ä§Jž§3ŽųŲDŠĮdū~>U8Hé›ļPĒ䕹GŪߏµMwĀ{""°iʆ‰Ć›³Ļā©Žßó„ž+[ĘĶZ5{LŚQķ䊮B[ÜÅÆJ–sēū€čåĆāżĀnš0Š÷Kx¾V»ć{IvŽŻ!eA±¤”ŽIb]Š 2"Dåb{#ļžŅzŗ£ÖW=×{½ę`•µ&ņkńčYļM’TńhW6Ž&aźh!‘Hcö9Äc õ,µm>äØC$+‘CpI”Iģ–Ģ›¬É’Ż5vI:gŠźŹa{+%^q V ą ½Åyåć·īąŠÉe­§gJ% m`R\ź=H%ss+Mf˜ŗov›' »Łd݌ݦ6Ec.ÄGoķ͇żpL.ģ·‘ot¬ńŚ;Od‡Æ4?8rĶ’Œń-Žv6 f)”ūœĀD³/=)µ"ŻT•jf0‹f8" Q8q’ĢÖFĖ—p@÷Ł5če°‹“؁»ę[ˆ¼–Ł[Š‘K/ OXbäf¶(„OÕĖ’HĘAœĀĘöžÅ@:Mš;r7-%nŸ°š=#ĆąNqv‡S8&7ü{’į 9©,ż‹¬ÖK²Ō:ĶŁƒŌꬂĄ GĢ5'mI:“‹jš““· ¤~@ŖżŠG®cY‹žłLeŃŅ«oŻ”~>pÄ萭まäJ «å2-~zÄ\äæaN3œŁ [n4×\č&¤ Ķ׳HS­ąµņ%›#č¤Œ%(\½v­ÓĘ·Š- Ī3ņ8ņ{¬Pśˆ<0¶lź1GɲۋåpżR2I³÷BŠ1ČBˆCˆ™²cæ$dŻ0xØ{D`Tl,…¹bõ)–ė“§oĶ·ūŲ“c—C!JЇŃFu2ļ•÷Iøäī&bwn«–÷‡ģ¹°]ņéā’ŚĀÄĻĻ=/kg‰ &µ%a¾žE͆ó…~&¶m–“čhM„]§“¶tżai¬ō̧1‹C( ēÉK¦ł®;½g7~Q¼W÷B¬E$7 ÉR“9ķ$ n "(×cĪŗ²[ ˽3ZæLiRč;D! 9—X q³]©»³évRꮪ¤„ā›Œ9œfą{5ū>;ˆęnņQēēZ’Ā%M£ŌnĆŚąÕgU¬Ń­¶‰TĶ+ Ćqó·.üyf¬FīĒ*Ā:b ż3tVšī¹xEqCŲænę™?4„©<”ŗmOxŻuėӓĒ$§Ä ‚‰_¾R ŻŹõ40€Nc„ŠE÷O\óŠÖƒ”+“«Y¦;\a“eGĶąÅŌ~–3‡ĀZ}›Æ<~×čZJ2,Ÿ0ˆ,…Š!Φ³ČyŻ×3·­žōł„ļKGŽī©°ē1ń“C,ėī¶ĄjRkī „ŹĀ3Ņ@ió¾±±®4ÕTļņŠ‘^}u1©a¶“ÅBŸ*tęk¹ÜˆŽØxNõ <+×öNV;Ac¦…€ÉŚĖ{}ȹ?ĄŖ4HEsg!Ž©ĮéÓQČā÷ÅłČtćżöʊ­×®[¼‰/_vŪ¬E”,ĀBÆõĄ ŸIņ6]•ā<»˜xøŗÆ>Q±.:˜®¶üń„–»{²wŗ"w[QŃkŹų4¤'Ų* śW.żW™Ī…6ClÉ“œĄa<ēS ©÷R\ƽŚKšs¹¦„Nµ±¬%”®]2¦otĆ;¹É’ēGŚĆųĻÆXn‘z)éhw„tš„t74_ęŠlŻ ß§H²ƒeÖZ8@ó×YV> [DŌß’K ėMW™må&ö*Vŗ¶QĆØĀ(ą>~^–@SnŠNV§¼ SIŅ»:=®móŹx±§õęŪ¤½ {¹Ėł¢Ųˬ-’H  ŽL/ń½½‚UŹqÖķDŽV$3ß¾õ5'Yėv/÷‰'Ofhž ķ/ī»#¼’#Ų– ™›ńŖ )Ś œĘÜ¢or$>Ē<©ˆxV‘.×~×ćldńEÕŅ›×¾u·9٦9Ÿń ›‹ sCš“ e żØ± eM‹~Ļæ@¢(źixƒWĢ„-vŪQL›ńŗīYž*ß“—fX7KŌżzLŠvźŅ.}āäd£tGĻé’ʆ™¢"Ͱ}Ųµ›óecŗ<¢é± N&g‰ĆŒ;j5ŗ ŠVcō? ƐF*9I6;ŗŠ Źx ÕĮ_øzVßK’QĀ4+ŚżŖŖ‘ł’ŽnāJ5VčåL:%ŅgҐ…nņ )zw¾Å(Ķą ’ø¾sŖ<ļż8ē6w8«‘ōĢó ä!Ó.¹M“ßėär…„AJ’ė+Ģkŗw‡n KÜ"Ö'b Ŗ‚Ę`¾ŁS~“d¹g”ĘÅ©:ł»ąn"7˜h>ģ±j§¹.±9G6¹iyū’KXg„å«"jm"š“øh—Wß|cÄ.¾Ö ł„ˆ„7­I© Ķņ'WX֓½§LĆlé®ų4ˆŁ»“äŗHnźJ~ŗĮ'™œŹŅdœŠY_ŽwƒĖJMģ…_óŃ]ćÕg²Ģ6>}·8­ØŁć`Ķż>¤¼/²AĖMŲķČUr·KøÅCóqƃÜܓMä”6$/śn­ģ›PE¬µč¾Q$0>/iōĪĢś7‰ĪˆD*X«īĖ!.ūķü÷øäÖūōĖZ’Ä}łŹĮū9åe‘°DŽ“tź²¹‡R†4kSūļō¹*ņdX2-Ś0µ­oč<=Ō4ąƒ¦üCŠĒ ©Å5ĒK Œ³ā3ezh._żB›ŻƒÄ[+„&Š„n“” …±7h$’?Ž5Żć„Č?ž²¼„õ^jęŌ”ü“ČōøšFĄāšz”O²Ė<:īYr’Ā—øśfķł‚é[™F聁Øēžšćöļ|ń ‚Ée6÷ū”Ÿ‚IƒKMĆ.Q¤–—Č8$É÷†ėĘ_ «ĻHē¼'ŖžŅå»Źńmüžvpė‘~z”õr} z5ü‹HŪy“½ęžćÄBKtRu®Qp^%m" Ćł'ßBÅÓ¾WįZ­ÉY…ūT(Ł£Fb‹š’éņ‚@¬h$S¹Źģø©Zߙ®’Ćͧ;sQūN5KFjun(«é(ė¹ß*[4Ń`½ä°‚Y˦įņa…”ʶłfų?¼³>äN9„®ęQ]Ź;æōhĪUȐĘ^vŠ­#‘Šś©6¢ ž—–ÅÄr¶c®hćµÕrɖ³|·#_Ż7?vŅ„tüŒ;ćīäCtχ”A5},Un¹G?æKž+­k­ōYĄvź…æĮ’¢„ūꮳ¬Ū—· ó"u>’7e–s¤t-l£„ĘŅ’Ģź4Ć{ŗ2Ē<ėśÖvݳ+M»Z„²ź+W8<<_`ÓüJé°ģiqS–w»ŪžßŌ\ &(p qTOą©«Q¹MüHŒóĆMšõ:śœ+-GįŠ™…‡äĘĖ‹ T^#MOü9={ŒĻL×ēét®ē—˜n_JŅš¾”R‹õtü »ę­ŗś§š.„×ŵO=¹Łˆ;™ö œ‹sZ#–C,Ö¾†‘ d}X2}źIč汤1hS–4}õŻ®ļ_ęÄ/NÄ«óØŠšŽCÆVŚś¤ĖŁ£}Ģnz½“¦J\*ŗن‰4 …7fJ0бŻcāBŸyZŖ^æ+?žżŽS®g—3…\„éĀt_!ŃÕ ĘX9#ė·žÓ” ŃĶĀÄ+ū󍐄ž”‘ó:Ńł Ś=uP¢Y‡āˆaØ@+ -ϚČĪŅWõ«Ļ”­H/×ī+v„yäŻ m’zķ ty””AßĢ­«Eøō±8µ@ʵąå¹˜¬Ü tĆo“ŗ,h×kpÓR+Æj>¢69t6-/IœK²Q/MļlĘe‘0£KahU6xČM„yBö©śqekÆ0—Ūfw’÷ŠtRz ķ²yĶÉĶÉ ĖŒƒ|ĀÖ¶J„3öiń«”Nä\S]¼üRŸŅY ė|sņˆ#x÷”»… (9Ū÷Ļb(Øi1ėų_mŒnćWę”īā"'K ¼ Ķā2  b^ī“Ŗ¦@«ó`“`Pˆ]Č÷†źue€ŖŌ˜·LČ­:ĪÓ¼ääÉą~Y óæ:¶õ^<ˆ)Lr§bš8:©ß»'f|~ŚwŁ8-œ?+·;ņƒ;‡¢YŠV[óŸdžŸķ[c-$lĆĢŽÉM\M¦ĻT ‚ÅFvT„­}ĪUa ¤Ņ%I¾Cj‚0X…Ń?…*g¬†• ĢŌzŚśe]#tµ·ę>®æö^¦RD ,#Ör")żŚx Ģ5"“VÜö„ŠŒ(©č>Ŗ«[Ō¤$/lwÜ[hÜĢ_™±Ńh{.'ō¼5Ńź#ļ!ßųf‚® ¦ˆ”ĢŅéŚ L#Ó=”ŽK”Õī®t9ķäĪ7}­dĀ9sżŲ„꣑tUՇÓL„'Ź–IĮųŅĶWå…/ŹĒzR„‘Œ ¶ķĖvŌZ=U” ,IÆ!=ƒ&K%V_¢×X”QĪ„š‚g··•:OY%ZR'rå~&)ĘŠlÜŖ:Ļśī:ŸĻ^Šß—¼QŃ$,õBš>[}Ā[Æ Ķé„tšH®D:D¶Ž÷ÆßŌ‘QNŪ$Ę Ā5Jē£CßÖ&‹ÓˆäØ9ģū±$*9ćĖĪ$Ēm’}ŵķ>jśČ-õśćÕfœj³¬%rlbGōŠŽĄU,ļų蛶³–Eł(Ÿ±wń6lĢo,Ł#ł.Kヲ}ćéfpÉč€` õyńq`½Ēfå‘jyŗüķ˜3fՅżŖ–æīY|ˆĶ—°å^›½öœ³z=»\µI՘cFɔĮ ]žŅtļĖ;š,cŗd3XÓłHK°_ÖjÓC¦Ó5ž/œžéĘŲsć'ȇkĪ!΁ e)"œ¤«cɇ„¢Ńn¬ńńg»1·zĶy·i^Ž&Zīˆ“-īM€µÕ’)Ž}’¢ņå"Ć: Msšæ (nāŅj:ńLŻń HØ$„-ØŅzœjž~÷d§ųÖm4émŻ:'ŻšJ”6œŁ\½d§Ņ“SWLFyE9ģn3'ŚÆŗö囓nqC‹łÉ=Ys§öjȼĘ.[F UETęåqĒ£ĆWŠ®ÉŠ“Ōé(üšk?¾Ö-žwcŽōŒSņ{8ŒzrKåżU‹ŗĪKXCŸüäā6»š”‚QU*¶dŻP؜öņ°Q|…<_ŲWģgWU…ó–÷ …WOė¦' ī}ü 8ćł ^»¾ōnć}OįjȗžfAnQ°4ńūGŖŹÜRćū£ÆĆ_}Yś¹-oõUĪXƒ¦ü†'\ōE~€ökĆHro’·łG8×—ķ« ]=ĘfŸĢŽŌ½ńé‘U0ŒåIZ©>ŗfO“·MŁÜ5‰žVGÉĶ„;æ¬JäŸPTS÷0G×2s5{~5׿pF‰¤¼Ä<›‘Æź*Ļ(9’®§¾{ŲąĻ“†īœYČt>Ž…yØS3¹^ßkę7Ū® āūdųˆ"ä(üö°–cĄIæµ •Ē‹­$ryėˆ-įģS_xy“ļHy¹&­€·÷Ē܇ńf!Ÿø”š V>HóÉ¢kW_Ćtqµ’Ü]C(?»b“‘·xŲ›äžĖ}µė‡łĖŪŪ·¤L]æö»Ł¦ėk…ęyGTłoė”;5<]Ł&lĶ­X&„\T•Qxģ¼` “)äX¦Jœ“£¼Ž=w²¢Ž¹žö X?cĀŚ ĖO¬øJM™2ģ7©øŻ“_¤ QI6h-’Ų¹šę¶ˆź/ŽŽ½ś†ķ–«Q¬ø•~Ē+žŠf"ĶQŽ»‘&Tä絈a«Lį>śéM‚ ¹”×OÕų>‘ś‘ūä)©S……śČxÆ¦ŅƝZ·ƒ.CpK^ģ©ģ0źüj&p8K įØ*®™ÓßĒÕĘéÉRĒ…‘R.'3C–*‘f}pjå_s /ƒzŚó E³šI}‚ƈ]ēDä°WvÖ>R&=µėčė!9ėÜ[Ķ­MFlæ ܂£8„ÆŻašM婒=)÷%›hP[øÜ³°šd’Õ§cäq¦²`,9ļH“’9!X˜ endstream endobj 88 0 obj << /Type /FontDescriptor /FontName /NLXUWS+CMSY8 /Flags 4 /FontBBox [-30 -955 1185 779] /Ascent 750 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 46 /XHeight 431 /CharSet (/prime) /FontFile 87 0 R >> endobj 89 0 obj << /Length1 1443 /Length2 6504 /Length3 0 /Length 7484 /Filter /FlateDecode >> stream xŚu4œk×6¢E‹.„½D™Ń»čF½ £Ģ £·čŃ!!z'Iō"zō(Į Z¢÷’o’“óžļ¼’æÖ’ÆYkęŁ{_»\÷}ķg8Xš+Ų#l”Ŗø'?H(PŅ6ƒ„@ °(DÄĮaót…žķ'āxõ@Įp©’…Pņ€B<1>eˆ'؍€4¼\ aHL $.„€@Éæ)€2ÄfŠh ąP‡éēstņÄōłūĄmĒIJŠóżN(øA=`v8@āéuĆt“ƒø v0Ø§ßæJpĖ8yz"„}|| n(„‡£ĄęéЇ¢ ŽP{Ą/Źˆō5"€” õWĄįąéń€0W˜ŽĀ¤xĮķ”Lw€X  ‹„Ā’kżąü9HōŸr²‚Į'CģģnHÜw8Ą\”]U-O_O>n’ qE!0łoĢb‹üPUŠ@0 ’šCŁyĄž(ĢõGĮ_e0Ǭ·WBø¹Aįž(¢_ó)Ć< v˜s÷üs¹.p„<ąoĖ·wųEĆŽ )h‡¹{AĮŹ0Ń?>GØ'@JI īØÆ“ெ~Hčļ č—Ć!(‰@04 A0(ę‡(ń†<=¼ A’;šo‹ŲĆģ<¶PGœčŸź7Ōį/s’0_€9#?ųėóŸ'KŒĀģpWæ࿯XŠŌ@ᔊī½?”’TTDųų…ÅüB¢ ˆ‹A’®óŸų›żoļģĻtĄ*‚į€ä_$0§÷7ļ?Źąž³6<€wŠA`ō p’#  (Šóś’^‚ß)’7ķ’Ŗņ’”’O¤źåźś;Īżą’ˆCÜ`®~={ybvCŁųC”-“6ŌęåößQ°'³# pGŒĪłA"@‘æü0”*Ģj’ęiēō—–ž¾ LWś‚żzļ`²€Ą’ŠaVĻĪónAa®ģwŠŁ¬÷UŪ!ģ­ Øāįń#bt&$* avÕźū[āA8Ā“Ąp 8 <ˆ~]¬¤8@ņĖõŪa(żĒĈLłæL1€ ēoó_3Ųyyx`Öō·X0žm’~'@”¾P;¢™I„t„s]DĖi­ĀžÕ!!ŅžżŲCBćzļozaJ2gĀqÓ ćkqg‹”[B„?›\Lh.V_3ć¤hgZšlŃ|#”²ē[(-/”5Ķöv3aø½#ķĪż>‡÷ĒxčųÜ÷V'²7Ōd8ßTŸT9ķp5n ą %Äܖ&Į‰hUČn­V|„06ŽfGķßśžŹ¤ŗq–ŁŻ/$ŗÜ󄜶”ygs“©y˜½)—±ž^ŒAÓf0ʱņ^åöÅī°Ć–ˆPn[Ō€Ģ}ż$­ŌGöĶ›>Į+ą'aHua‰{ńßžķ„œš‡ĻB”–‡ņŚxjD‘‡2 Ļg”\~©uŸóĶ“Y6²w±*4'kš3³›¶–Q|”|E¼ź_ŽD舕gµFœź¼]ŸZpż8ž$Õ¹§šÓk~§Émƒūę3țDūkj»|Ścåļb°ä+?ł÷Ü\*o¢-aĻŠ•/oõ–b‚{”źāJ,…K†AøŹą³¼S 7³"=ķ,tŻihć‹ōĶüCõÖm]‚‡"±scn÷YЧ 4"Ł7ų¬śr8ŹŅkhģµõF„Å£©(_³ā³RÖJ±„_ŲŻŃ«Ōft—āÕž¬;ÉÓČNČĢTęĖĄß« ī…ļĖŻŪ\¾2ˆŲT ĢÓß` <ŠOڼkšTŽ%ū‚0—\’uńżgXŲŽˆł“UqąéĖęKA&ł=_œ”w` õ uœā¹”½¬9_ÕžGXŲ Atņ׎Še§¦“ķę—W¦˜„"$į;é×äÜpĆłēÖkÜi†bÆZaZƒRóŅ«5ĀÕVjń­9­„Ęq·[Š£ĻPN¬:YŪøį}+4ĢĘ?^¹40³õŽ¢$_ĢŲß)ūń¢ŽwYJßgJ¢Ńœš¦ńŽ[—ņ¢°Ʊ’˜ūŪ”‘6MDSy ŁXB•š€@6Ķaf¬Ckå”̽bŸ‡ÜlóH ‹ŻØ<Œ›¼Ō¤Pö1Ć[5~™q-+@ hndEĶęAó3a£}’\ŸJbžˆ÷²`ˆšxķ­~”ŅÆb.ēEł‘9š³ķWƕń!#) Ž\‘Ī»żģ-?ąś‚ŁĢ”Żt3 5Įō°÷œüe•Žsww{woį…X—XģŽĖwY×4%W“ę…“ŗzśMõ©Xb3‚¤A–)ōĻØF£š“†ń­ņ>v0ä’ĶeĪ$½ūvÓĄ&ĻĄD|ļ“ś~„CĪźķÄ)ģķŽ{s.č%MӀÉU¤†>ł…|yŲ•ƒ$µ*Tœ‘ƒ=īę\ ĪČ÷”°1p[b©tōn…ņÖ©Du¾6±ŠņŖ¶šRT„ ?üŽH“{Qé ŗ|·7²*”A:×Ģ<®3£±p~ ģFR@13n~gØõŃ'W÷]^õn¬³IV‡ ;Ɵ6¤Y•DßFC³ŽŻė³rEöŅ,Ä¢›é™V-q诓e"‡Ė6>£M.Hü¹ū(V4(rb¼sRĘb=Ø ˆ„3ōÄ—ĘpHČJÅĢŌY*¤&Elœ7UĮHNe_ H….Ośxćķü#ʑ ”Ÿ”©ƒåŽÜ Łģ‹ŽVłE"ł°VŸķSź†ņ€„'‰ `MRŸh ń†‚±/~fÄ?•¤Ų­TƋį)W6T¶“‘va^X\²fõģ¾{DCTĒ*•7ŪŒk¬(^`ję!÷ڲG6Ķi¶1ģu} [ūÜŌė”žŅĆ^Ł! zG—·ūVėfCaƒöyu¾-øßBĶīī’o’w¾”#T„;>oP/cq©ār°Čx·†øõć ź†=µ­~ å G2Igr­‹\-gl7h‚oV—Ü^ y_kĄüĮd÷ŌŪ15¤ą2ؓØer®}¾?XŅfąÓfŽ”ĖPÄöͲµė­˜ūļ›sŸJS>3jƽĘqq$ 7Źč/…įDäƇ±]Ā¢žõ]“˜T= 2‹h4'gp½ūś»ŒwYž”ąłS#0Ÿ0 IÖSF@X׏a3Y:².ūŽĢń”É&ą{ķƄj{aųÕM«Mi÷Ł€£ī*`Ć"kIÆO÷)£K/Įū‰iŠČƒÄƒ3:išĀēƒŪ$!ž÷×īnĻŅGé7¾-R@WM®“²å>-0¦üĮ ¼³“M'ŅB—Z{‹Š9ʀ&‘Žé]ūЌ׍ ‘usŸƒ’¾oįrEī„?.PG™w‰łL‡Ž†4ÆhM–°Fö§,ś»>ĮÉŲą>²“ÅDĚčXaKŒēCˆõ«dŹUģyEN·ŗ‡FGu³²%Ļ©c%ßś»x’ˆĒćNbĮÉbuīyŃp-ن{°Nˆą‹×ĢŽSY$TƒNr <ĻõĀĒkĶ“-Y_ŻųxA2ż„Œō ¾v‰R8#ó0ŗ;ķŪģ`ŌÓ£ś»FŪHęĖ”£Š!2ƞ~āw.åøšĮ[Ńė:7øiœP€’ †ōŌSĒKŽkŖzĻ–Ü)‹ĮĒĪwD6‘1\µ“ƒBmG¹—4Ģ‚Efcs¢.EµčĻó¹ē‘ĢeČŹŸnG]ĶæxĄA"Æ42pL“ĮxSržQ§ĀĆC¤īĮRŸe8„ĆĢÄ®Zƒh«ŹƒÉ·‡źĒ…£©ĪĖK‡;†•ągU­įŠåņ„Š/Kń99=G‹¦įVo*r㐟ϷØ •±n]©r‚Ēö}™ ēĻ9¶ķha4č¢åČ ŃQÜš§»2'™ļņ•€JT5G\ĻÓ÷)£:Ņ‹,śT+&_ā·]Æų7÷˜ŃÆX"Į³Œ¼+[E0dz®b“Ÿ6Ō?ųā[B©)˜Eć¤Č.uŪøĄr¢ū™ĖĢö>Ī™u#V1JŃ;Ō{ęK×H‹—ź‰šŽ4?%łøė€ęPHŒ5ę”Ʈֈ­|Ņņ_ķĶ \Ł5øēk‹†F1šB…ó䤦nPēœ«źµöÄå7FøÕ’<Ŗ”Vā¢ß¦¶¼œėć;°ÉŒ}lFÜū0…x’ ŸĪ„Ņs1v-¤I?/dh8ksŅx8™AP„ŲŌJ÷"®‹¼}—ÄŽÓV(‡†ė§«X'øŠį0‘«nŸ˜ĀėįMHń1üż“¹ VŽĄ#å„•Ā‹§f‚|]lx:Å ōœśūŁ$ĒJ‰SŚį<…Ē_ÜĒ©Ógqx|Pīїį2eæėĄ¬óäĒäV×I£Å ¢Ÿ?]l„ü©ōMßĒ‚G©7ksŁ}ēœŁ~i÷ā$Š7˜§ĀrĒ,©K2µŽ0„»|ś‹ōĖ\å¼Åē ”aį²±lś=•"Ę Ś‡ä “¢,/Ćæt XľNŁøėxśm“](3}śĒm®ƒ8Œ(ɽ‘n§śĶłwūšÆīo™ż¢ÕŠ{ß»):¾EgöVh@Fyh?·½)»bĪé@Z¦”³fy%ƒ£³ÜšGėŸ4:1ÅĆöčŽŌæŪ£&,÷‘Ė9 įČéųåŖz49ūž[!ž¼N )z)‡ ¾xf”£üõ§‚¬^‰³ųCZ²œÆU©·²¼žG,Špy¶Ēu„Šuģī0ÖgŽGć*ÕŅ ą‘ŁĘ\ŁK=Ud1Č ’čŗįO]õ­ŅH“ļG½©Oś«µšdoź…+I“Ģg~ź, Ŗ¶j [BU"1wP’ōŚł†ĖŌc f2Rł}włŹ^²3Ųóܕ-5pV¶¦AŖ`-Æł/x„U+ž ztސõāņ‘śYŁģOó £µŸ6Cařx]¾yŽŠĆH %’'÷ŻH‰©O['fƤ„SVp¼6V«€üŌmōŒ-zīĀĶJņ¬½ż5ØŻŠŽ‘T{³_”¹I¶VēGĮ“<™é¹fŠŁ³t¾ž”GmęID~¼5xņĆóõ)*Ÿ_¼“ī3ÓłÖhŸZ¬bĒ—½Pön ĒKK¾3ŗ“ŸŽu(żŽå®×Ńw­BióąL{ŌpޮԊĶĶ!6"TĒÉßõĀĖL$Ō2źäŅpó”rzgŁŃ« w¢’Ö|4ŒN¢æ½eN'`'EF/4ƄŠš=ē4Ö1>ėÆTrEž!ŽgÅVy‚bvoŽRwūy½hӕģōmīQ’ŁüiF±e%ꤪxфū—o5RĆ&‰mŅŗJJiCĄ ʱ>Åz'ʏė"”m°ąį+J6’Ü*£©Ko¶”Ž™čµ%'t"u²ĆDŠwĻ*­~ÆÕƒŠņ”ˆ^17>MĻ«ŞŒO֗Ā0ā&ņāŽŠ—›C^W꟯&kÕøŠ›R÷ō²9Ł.«Z•?xµ£dFėØ/ōŒŃ®„wŸŁ•ć_ś*ā˜ÉkĮ.×c\ZĻtMˆæGĮĢn™ŖÆn؝óēl3>~w]OńµģњOkįČĘæśĆOoĻm¹³§ņd$ĖŠĒä²t¦{‚›'>?¦+Ųz›vĘF }¶OB¤‹÷É{irBbz®*(Q”L$ڼż%‰Żū¶-^yƒĮśīøBį6Ō™äöhü{ū¾;ė҃Ļ1CėäY¶Ļī"īM<¼VOByó”ļoZˆĢž¬Ņq{ĄChņ-įø–įė|~ū£ęGAƒÖ”"N'UzRÉT%K®hdˆH ĆĒžé}Ār)ˆ¢8›¦xl|ūd3uK¢>äc?(÷Åść9~ü€<ōī>mzµ“§=i=/„5~Ē’Ö#,g!ˆ6͵īņ+|E-¶6’7$ų³ĪІ‰LĀu’F‰Ł[Užļœ^ ?- VÓ·}sWĀF\ ]€p5$`%l¢W¾Ē§)Ń[ņa’öčµĮVBa„öG.m“¦ė“:"µ#Žxaט’X.ŖĻZŗ<õYJŪ†±)ćóIܑSjČĀ‚ĘĘ_é#²UĻ›bÆ©Ŗ%č@SĮg)3O9U¤%G™Jī- ΧņˆiģtÕŻŲ»ŽU'ŸśbLę’Œ4^š§ĀAJ¾ŅK˜/ÆĆN~€¦¬K*ÄĪgŗ…Ūb„0“åć18X ór÷łųŃ•ų¾…$æńÓ驽@¦åµŁ}G÷“B7c£ž¢·Øg¼$bZšųwp,I…ćä"µFGsxØ Rz “øxĻõ{[œł£a ¾¢ƒ§køŲģ'ćēs?ü"©'ƒ7(‰ļ’F…EÕ3¤&ń: §·¶=q÷ŸŲōÜ„ĄUNN[P%sŁń¼Ö#Ūg”écŌŪRt½ÅŻņI$uUnA*Ü)tŽ»Źż¼ó¼Šs§C™÷RÜøtvE4ŌæD­ąĖ>ŖlzĻżē*”…‰ø·[Ūt—Ü[Xµź› G›äāäøR熇MŖ8Œš„"‰g=‹Ń[ķdńd,Ńį½'w4"ˆätuĢņ¢‰ˆJ •™¬ė¢ŲpĄM³Ł™ {Ü„äÅŁõŽKŪx1ŁŽńÄ»DƒnRĀg_’MÓ5yČżœź‹f‹N(Ü ›Ÿµćj1`6¢ćĒM|¦Vß)ń15P°‡õns‡6“fU‚K'€ó4“”Ćf2ąĢ¬,3/ khŒģņævVčcKö-©•Ž\¬Ś½ÅfÓĶõŹk%':_AeO-³ŽńœXdÕ/Ā)ņkŽŠ`Čøs!lud*:‡GQĮõż÷ƒū⊧%9NwżāXŠŻ¶=Ėo-Ö6ŸHŠ=S3øõB8„3»Ŗ?)>$ęXgįµ½ _CĄ‘ūįœFee½ WĪZ5‰g'+õܦø.Ūā†ÕŠ/qx”<čØÄ†ß±Õ°Šäę‡My lšßk6ŽdڬS±wg‰ż°ų™“~•€ƒżü«D„£‡°/½ėlüeÜÉySā¶;-Ŗ»qqŽ ⷁv^ū>-BųŹĶGK9¬ŠÓ{`\äž*(±kLJ·[÷zīs{7Ÿģ»{-äsm^ŸBØgĪ, b…œ¼ć(‚eģ Õu³ŁĮ–msć:(«^2oÓ×=ź•Yq™a½-l82 TānÉŌ½ś—‘£äøŃ Ī<…o]Ž»ŲF›żĒ…>ʼ).æÆ5Š/ŗž (©6ŪBÅwŒ+.¼ń¶źŠDŖ‰™“3qÉ?£ón<“.y`yV³Å1÷H1ńjĀu…³Ą;׍„y뀸`hƒF{ŗ3 ƒi/Ś¼¤cžJ1³]—‡ŌØgZ2{—EdjŁFޚÉ©üżuĄJ³7@Ķ|ēč¹%Æż@#©Lū|ƒµĘÆņØ=·ģļo)3Äż“3Šp¬ß"£†½Ģ¦,”åĻє1Š71Ø;砚Kę LĀ)ī·.iä½²7l‘Šš°‡9Å'­Ó¶˜öž”> ŠP3•ÓJ#ńÓ%eS6­ė9,oŁ8ŖøŲR¹p|‹Æ®ćMɎY¬HJÖ ±[Œ5‰“Š!Ŗ“ĶWI1Ī/+SR[9]żü3Bl)9}¾©1LXFW/·!æ¢DąŽoK­Ł…¬ž=ķY»¹śźMŖtF1=ąÄĶ!įęˆ‹ēJN}jŪ‹Ö·f?ßSs,N)vĻ!ŗķ'Ó[9r‰ą×ŌGV«”ļ.üÉ$XÜH±öœīi©:•'y; -t³Z;|Oz>žRTZļ=Q“ĖüZōDžÅĮ!bkńĄļ,ŸĆnV¼»G7.żŠ_ŌzƀtŒåųĢKÖåūy–?®św:=§Æ·ć„„Yƒ2®‚Ī‰Łƒ-xņTĻ>¢éÖ+żč_}xƒĻ3Œ—Mī’†=ĶüU]«J!uÓՕZ&żÄ‰¼›Šj|wīD£É¤Ļ—īŌI~¼ĻŸą;;­ģÕ8Ÿ1u żJ°Å£öäg&¾ĻD¹Æ„C„Wy}Ž”Bó„åŠņŻm`ņćĘīÓL³%įĖņĘ=ļ2™ū$.źÕB 'v7|ł6‘BęN®RÅŖ ?¢³¼Ķ’E?gõ¾ĒĶłžÕĻF`AżöĶCÓēųó™ż³×Z8sŁŲē7 m闆t ÄŖ%‹æĪ’i ŗŁmÉՅT2ŻÉ yŠŻœ‘_QU)^‘8Ēyq„H¼HõT:ĪāfōsÜÄ3µĄŹ’,¦&;›|¼.8)¼üń l”tžĢ6S…'(G޽ØīEšÖ‰(®“G ÷狁čä=.’[LLf$ź«ņ„:j}Yü•…“w^T³p€š;ł«ę½B·_ęķƆ¦.ū‰YüĘ{i% ›ö½ĆćõgVżåq‚«›\)Ī©yśó>xÆĻĻø¶‚ŗØ8€āc£"“љÄm-&“Ź ½ń9xOŽ’Xgߋ”ĻŅ›nĶžs5j:]wuēx ¼<żfUģ¦=ż8ög˜5šŁL’׌£Šü°Ŗ,młƒEˆ6LS«EŁģ¹ 1R9 …ļn¬ś‰!¹ß ŪĮōĮ9j‚ÕEE‚PóŽó×įł¢>s"Etš ķ@%^„ŠŌ”•Œ¢¬ēĖ] «GT‘09ÆöŽ*‡ÉčĘŖc½–Wo4޾üj„Ņ92Ł0VÓŲ‰m„“ئ]}> —Āi5äĄü…¢$Š3“Ī®Åöh­ HU’•M StTa—š,žb*ÖśīäĪöQŁģłI[1?“Š |óˆĮ‡z)qŸNŹ2ƒ wĆÆ+Ā…LēxÆņyšo2Gpßä¶{%(õ£¾Ģndƒz§¶AÆ„Uä±­źŁ˜Ž²1ńb5^ķėĆżmŻšKgß…蛍Ø.Šcɟ²¾ˆ1ŁT#¼®ļ· 6‡Ī•Ž2Ż’qphz endstream endobj 90 0 obj << /Type /FontDescriptor /FontName /YSAVEO+CMTI12 /Flags 4 /FontBBox [-36 -251 1103 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 63 /XHeight 431 /CharSet (/a/e/p/t) /FontFile 89 0 R >> endobj 91 0 obj << /Length1 2549 /Length2 17215 /Length3 0 /Length 18696 /Filter /FlateDecode >> stream xڌ÷P\ŪÖ ć\C°†ąīīīܽĘŻŻƒ»NpĮŻŻ=øxsĻ=9÷ū’Ŗ÷ŠŖ¦Ē\Óʔµ{S*«2ˆ˜Ł›%ķķ\X™yb jj,Ģff6FffV$ 5‹ šær$  “3ČŽŽ÷_bN@c°LÜŲ¬Ø`ouµ°°X8yYøx™™¬ĢĢ<’U“wāˆ»Ģ ŒY{; 3…˜½ƒ§ČĀŅēæ_Ō¦4.śæĢ"¶@'©±@ĮŲÅh ŽhjlPµ7]<’Ē5æ„‹‹/“»»;£±­3£½“… =Ąäb P:Ü€f€ß”ŠĘ¶Ąæ©1"QŌ,AĪ’9Pµ7wq7vĄ)ŠĪlājgt€£TeäJ@»’(Ė’Gšwq,Œ,’øūŪś·#Ż_Ęʦ¦ö¶Ęvž ; €9ČP’”gtńp”Ū™żV4¶q¶Ū»ƒlŒMĄ „n ł03ü›Ÿ³©ČĮřŃdó›#Óo7ą2KŲ™‰ŁŪŚķ\œ‘~ē'rš‚ėīÉōws­ķģŻķ¼’‹ĢAvfęæi˜¹:0©Ū]2āė€EHd@3337+čz˜Z2ż ęéüėå·ĢĮ×ŪĮŽ`¦ō™Į’¼Ż€'W Æ÷æž!±°Ģ@¦. Čéw°hž īæČ Ė ?óļæ¾éƒ'ĢĢŽĪĘóś_-fҖӐ‘U¦ū›ņ?‡¢¢öov+€ƒ ĄÉĆ šż_/’š’/÷æ¤ŹĘ æsū—?;s{Ļ(€k÷_nĻõßKCųߊöąiØ’ æ3³)ųƒå’ó üeņ’oņ{łž’›‘¤«Ķ_ēŌ’Qų’97¶Łxž­žfWšf(؃÷Ćī’Ŗj’³Ī @3«ķ’=•q1oˆˆ…Ķ?…9K‚<€fŹ SĖæ&ęæm{·Ł•ķAæļ 3ó’9Ɯ©5ųNq7ėÆ# x£ž7¢„©½ŁļÕcåą;9{"1ƒē‹•ƒąĶŽQ3 Ē_£ `b“³w›Ąģ|ęöNHæ[ŹÉ`ł-śā0‰žA\&±?ˆĄ$žń˜$žA\Ģ&É?ˆ Ą$ó±˜d’ pł?ģSńūTśqƒ}*’A¬&•?AõsP’ƒĄ4ž p­˜‘ńĪĢŲŁ29™ŗŚž#ggż-ČŁś2Ų‘É?ˆ…œ‰“±)Šhīņ/1Ēßā’Ģż?Ę,’[]žGŸ‡ķł’1—ĀōÄŽmjož‘Rd’-±µżCę÷š0™ż ‚C’“ė7rtļ×0Kó?!Ą™˜ƒÜžXpü>¶wuś—XÅāGš¹Åļ' šß*ą“,’$ .†„§ƒ%Šī_`č_Ü,«Ap¬’Į¼’dĢ &hó{žœƒ«ō§m,ૐéO(6p$;W[“ß—•Åæ2ßÉLör»?µ’u ęåšēģŅüą“ūŸ¶±³ü-żß¦±ƒÉ8€;o’§ ģąš9ŲøžÉ™ \!GW{ ™Éfl< ’× Xł_Õe3ść‰lä “żŸĮWŠŁĘŲŁņ_fą“ž8ßĮL.–NĄuĢŃÅŻž_`®FõƟ ΦöN’.ø9n’‚ątÜ’µ`§’‚ąØž’‚ą"{żÉģÉ čōŸ žēv3uuWŁåÆųźū/žėWč4EZ^°7å ±Ŗ łz_#BąĪ°7!0K±§™NĆą½ģŌįśˆ ŸBS“éōS$eø}mW‚śVx…ä—÷Ik|x[҇ö'ŸgĆ•é½v¤„)܁ɢ‘ś~"DB5į}Ÿ_Ž>ÖŠ­²yޮܨŹX÷ī}Rõżå«ca {ö«9åŽ<—Ļ0ÄØGė–ĢQä›|šKēĀ@„@‹yé6wūs3wņ•D6É÷4†ķ³·Īkģü×z„«s>9¾Ī["č[̱iJoŃĆTY¼EļŅāčMÅfFˆĶ±~ŸŃNŅ3^]yL\WKöYØdȕÕėēWUjézE‹«ü,p[¾£;FŲ›“¬_óŽ/}Lg¶[gÉsÄcØ:ŗ.¼v0P“R\7aö"‹³qÆmžŒ‡°=TŁ÷Į÷[Āfgļ“ńķ‚£įƉ˜¼•Qi’Ęu»żƒćū÷øįY…ęYZŪ–yÜ}ķ/iŲc‚§k(ŒN{X•ńęŽĢā]>œĀ¹GŸųō™ŖæYśLN1Ž—ØˆĄl ×ČĶAŪfŪü4X£Ō\ Ą‹Zō&n.øüe+Ł÷nż¢‚čSCZ'ĮŹ|Ę0[¼¤œŸ nŲg.a\5.‘5…'%eŌHF¾Ųõųhé:P˜VmŸo]ā}ö¾Uæ¶Ö­Ä¢kÉ×BŽĮv‡ÕxQ™ÆÅŪł‘ŖÜē²<.‡1ģ̦Ņsóģ—®ŗ§(īŚ½©™9{ŸXæźŗLĶ ¤®F7d YŽdD¶˜doæŠ.A‘ ™ |6Š$(‡"‡f}ä D' Ź»*£‰-óQŸ¾(;‰6ǃ{ØĄo,r¹GŸ3Kė)ÉØĢŹę’ń՟Ž ©č܊«›ā$üš†»ƒ5„Aƒ91ŖĘ1åńN}mJņØö.¾•%ŁEb2h¦y½@eŗ æ·°NŅ@E(•įSʧėžbGÜxƒlҧh(Z ÷»Ö®|v¦ā¼Ü¶NįŠ½.ÆUcÆćiĀ#šĶŒ[—?£$<‚“©Ś†ŹļŽ9"$Mż쬾±ītĢĆ-˜bĘ»³ Ē<ߏ²˜äŹč‡gGv{¶Ōńʎ}G1_Č/[;ŽJŚ;¾*~*5·8„čtČā]‘(SSy—ÅĶ׍¢ŗW¼Øī«³ØøÅ_ÆF§ vźY''ŗö}‰ļ$«DēKķgcŚΰ `‚»ÓĪuŠsįŽœ,æR„ÄW…”B*yOK¦ģ5ŽĪŅ |ŗŸäćXĻ.R¶™¢ĖÓXńZ)LĢ2Å% kÄf †Š”«ģ†Dł®¦f·ūø2A’NE%«\ģ³ŒA5Ē/ž÷7"gŪtBƒ¢'äkƒ4lju¼%ԚTūōŠį/¢żRåČų N‰cjła)óøŚ “QzėOŠ„”čždY®WķĖŚ[eF‚ÓFÄ Ō)U³Tp¶DoäØŠävfQØs1²%¶”éy½#U٤XUP…9õr·„.ē pµbØVoż%q-Ó{aļ“ rƟl‚ŒĖKŻĒ–æØ;Œ—UUŻģd*šŌĀ}7˵˜1q'ŻICūźÜ8¢6“ Q%Žm4Ģ«éHŖļČwoO2z=,*ƒ¦Śė1ڲ4€ėAVS‹“©°“ž“łŽT€Ń1žx{כg„¹žsa70=ąēā:€Ŗ”Ų!b•Z¦B›„u’gÅĒ<õĪéŹR¦S„GX5$ #ŹSBļź·rż¼Œb§ q9ž‚Né~,·‰ē9vC∽ø¼å¶ēČĢ>ś›œ³*“Q“uGśT韌„¤šCīžmDEE»;>©kXxG×qāęĮŚ…dØo7ŻOGsfLŠPŒšög~“}©˜ŪmߊF:Ų÷£H,ēu¾öhr§Ō©Ž"列v‰Œ„Č9£¾ųč>˜×٘˜„3+%ŌO+,n¹ ZĻK"Vń¤0?‚­9Ž(³“óOAÄĖī?ĀF}šJß~ s«ŽRzķJĀŌnÄIļČĀ+‘vU¼x äöJ0ŅpŠd»Ń„MŲ/'#|©B öĀ6Ś'õyńÆ2¦ż2nv ž&ž†ŃE†ŠŅ1ań%‚˜–:Ļń< ­6 Zš DgP±Ÿm€d(n‹ ­/€GÉ„I—Ķ'ę’ƉśG«ĆĄŅĖÓ7üfŠf:”£ø|Ē×Xļµ3£:ģ¤!3÷dŸÅ)ŁW/¦ęģCiŖo:ä!—!2–&ŠøcжbćtŠĒ"b!‹ų¹6½«å60zļ4h(°0·­GÖŲ‚CN3Ōģ‹žÅģ|Ł›u^†j¼ŪšŗÕu^y$Źs椾l»&°ó¬nŁć;~g *Śö;BõŲIS õÉ6ē!Y¬źŅŗbtõ0—2‘xft×ä{ Ͱ§ļBÄū,*om-×č ĻcŽ`ańLisäSAł• `ę-ŖĀ1mįłĻDnļךO¹ŌOMüĒ{›ą+ ؚ”°ĆķZѦ2&X¢3Š57*^ąK—_5֐ĖŅ]įčx^WŠŲ¹0¢<„ŠØ§{^67QJQzŗ"ÉŖ¼FvPķ•z “}*Mu^½D‹öƒ…›uDHÖæ=l =R÷L„āÉ&pR _‡įµ»B/γš>©[ˆ6ŲĄ`-ĒšØ’’<–­"ĆŌuŠļy³;ā0a½Ō7ѕXz¦Å09Ÿä•°ńM>LØ>ą* ļ™—X.ŠļĖķc¾ę+ŘVrČ- łR8/žÉ0Ćnƒ¤Y¦čń‚¬ 5$§.ƒķ;ivĢ“§6„•Bć/jč7UÕg# XŹ"ļĢŌČĢ £É`„€wi/Z%”‰*ßś$OŽč—²Ź‡õApĀ _ YŅpSŽį0‰£›’LM"ÅkcŽh¼tAoVąļ‚Öb†ōź`Ł$ē$Ēiö} Ōäßd±Śķpqü"’Ę^ „¬iØ”ÉļŃ»M䫹~8“oå]æøņ%j”h-„ŽUgfLź¬ŽeŁ ycö„üžĒˆ Ü8_{€²>fĒpćU+® dēKŹóaJ› 4}2ِPÖ§¤ĄŸ»&¢¹“CĻ‹Ü>k«R“9ėz|mŅČHvŪp¦¬›Õ$ZpŲy,¤B¼[8Ū­©{čø.ļ‰{·p…(Z§ļR,B"U;ŗ^™¹ĄqˆP_ĄČ¦%MŚ£ų)2“Ćc(BHß©R§Ū­—kQ¼°I0bT?"Č£Įt`ŻČi“Ņ©ė€Uęō3?n„ÕP!…EõXÕ öāķž6łyØMQOÕķtßŪE^ŲHÜóĪ ż7÷*˜śS’2_Ō¬=.³¬,Lr¤“Ģ©y‘ŗw.*² £§ Ņ(Š;Ėoqż+ ޼<čW¼ ĒMõ²v8ķæ4‡5¶ŽęmTŗH'©­‰żš\¤(ńM9īźs?c{¶4‹FŲĖ;”x ˜w5U’S$ļū}ioƒ)h£P1Ė]̜ p³Ä ½L›Ś3Kž‚8¤üĘż—zZr€€cÖ(¢9³ BLČČ]}g/ŖĪ!޽IcM‘†ņ Aö·tH栊9\7d‰Õ®«’¤#p ¹Kµ·›qķZ°¦&½ŸkѾŽ?"äø¼Īų*?Ÿ&»ōį”ČzŌ§p/ĶŖ®n3āéy¹®æźāD4–ÜPµ²uGÄ=‡rõčĶ;Ł…)Ź’4æDM^güŹ“¬²®¬{S{żMÉŖ3­ćŻ—Ķ•}ŗxMą»ł)ē2…y“(šņūōŌŻ[šå²WŚW£YÜ §],ŻæąĢŽĖʳą a)4 a‘õg™”Œ}čF%¼ųÖjnŚ<5›ėŌŠQż†ßĀĘ/ę"-C»ZnR PuļJ’Ä I8¢(Ąžc^Śy+čév gą˜éz§-jĢZƒpŻußā»ņÆü؅st_*v›”©ä=į‡źNC%™ĶV.ü¬I&ļx/O3§ń·(ęłc$˜\²›Ó W÷!‹³]w ŖŸŹv©rßxyć·ž˜4~ž5µV6Aš„XBbĪÆķé½/÷"Ų•™­" AQ n‰R)'Ÿ„’LTzŹ”w( QtŗH)‘ĒŻ]Ÿ1ų¬€č®~—}Źž¶“ŅGŸ½*×6Śl„.ékÓÅ8Ž($Ń6ņk#čņZkćßš Tß›KÓ. #Č×oŻ“uż6Įłä«t„/ĮØfŅØƒ1ßź—‰aČ©QŠpŽŸ×@Ą®rDG„[T7Õx|¹ŠŠRf&›«ŁMŁ‰Óź£©Cżr<%-8,¼>Įe¦Ō[ø?āØfœp_½V…—ĆėŒGļFLK¦Ą?Gœīy“øcÅ£(£›>Ąc9æŽĘ —łš]žŲd§›¾ŚBɎŠgųyؼź )Ž;‰¹0*>¢—P\@ųnXöˆ?žc€ĶaélåO®²ü “µįT²ÉīVY8Ió–Z,wõ|T·„S° Ŏhü“Ō?ü»9¤ŗŽ„¹Ń ć' ސ"š„ŃŁTؑyƒ8k ݜ4”Vq Ā ćĶįRrƒŹ-ƒ7-˜2<Śók§ĻfÕY…®-Äα?V`æw@ņՖ—Ó z菠’6{'’~”¢½\Nu˜?¤(xĆÆe^šų7Ø+,¤ zśźżŖ=”ą äv6ęšńŗ·“µCÅG“Čī[’ɱ…Ģ›¹ˆÓV27}1ZµFæŪF°=gSķŠ©…}ønżr=īy$æ%.Ą$R°]‘Ę.Ņ“A»–H<Š.ųD‰”MŻŲ°äbCŗÓÄ ČEąeš›²;ˆ§ŗ­o|ļŲ|D¼$·µŁjĀ/©J¤Ėn—äŃų½bSd—˜čvb( õ^õóįäŖø‡o¶JTq ‘åhīłšĶ‘į<Jւ¢Ņ3‹<”{øqöeĘ÷ž BćžNöŲ^k+Äę­‚É„–åȑ`āCģwņ˜ČÄśŌŅo"ā˜›ń֜ēĮ:”/ÉäÜUTCgCB)q$Ī·E“ $ł­}Źė˜‚‘§ÆŌqq6ވiāģʏŌĢW®m¹7¤Ü¢#±6ĆŒkČPö·Ä“øó®nHrĶ!ŖBćĢ:üåD_Æ rģ% ¶.’Qųµ"̌r(~ƒ[Ķtˆ¤Øß¶ųm„ZŻb<-˜yKȈYŽŠĻōŖ€•2MČŖĪĆ¢2jĶŃósn×˜ĖĄĆĘ|D•vk7rŸ*ŠŻ)³£ĆeŅˆi'ū]éĒõn^WYżĮ—Ąˆå+ö8£ŅĮ1`™É]z›P…Uµ±Ē%1rķö8.ā`>d»_”Āž˜ŲMĮĒ/É·Ģ3dN™ĪYŖb_ö”zfŗŒ"R3éö ļśš‰oBč;qīĪkŻ¢„h¶ŠC}‹Š„€PĀżłńĆéGm£Ņ#YCŃź-bĖ’9Ē«#,ndR¾aĘėÉA‚NھNy…»ŹĮ‹ƒ,“Īäb9ü4co{¹,™}»iõū÷y ¢k¶ÄīłŸ•oŽDB—TehūŖ ö2 z}š«ś 5‹”Ø]ĆMFĆS«0Ā/…/ÉEÕ„TŠÜīh št¼nŃH‘#d!Š-³åežŪIĘÅø|“ŚČ±Fõ¶ČwµĄ˜ė‹‹22ē-£ }ß;»¢ŽŅ,¶żžhąŌõēZ‹%ū§bœÆņS•‡ę×ÜʗµŹGŲź\*čY^S«r¶ā sV$ÅÄF^61±x>%ō72~Ü”z!Ī¹pćÄŁ·CŽŲ £ķ‘M?)}å÷ķ\?ūæżĢ¾š«”;¶EĒX`jr\Jīņ³"žå˜±Éwxap¶Ūtś¹Śū{?–ŪéŻZĖ&ī˜×ĀM8’ć›qˆ«Ō”©Āuž1'ø·dŁ&A.M#éäžGSå ł§}ĶŌ·= 3s‚…ė»ĢŠ9·ž$ŹE¢‰Ķš“D:bĆY‘J9ĒŖˆ'ĢõGóĘqxmA ]mp{Ŗ!µ)w ¾\ƒęp—ŗ³hńZdľÄy³ µ†‰D¦oźōׇ’‚樂@-…šę]:&ē. ö×øŠ.Ǧ †ų/Å»:b*włČ=zĢ:+²”#M·zO… s·¬Ö¢BJśł0ių/aĮčÓM_„tƒĢCĻśp(“Ź”»ŅBVå>Åōž”€:’I»R–Żǹõ’ŠÜ‰.Ė%óWų>Mͦ-e”¼ęŲ‡9”]y®$šŖz‹Ÿ́a‹?ĘšČ#ŗ¾¾š"Š%²~Ńī ”Õą)Œü āå"¬¾µzg›•\NŚHU ӉĶÖźŻGĄÆė8’^sž1’Ä.~Ż Ć¹m˜7× MĮ»—G"©æ{šjŒ{z]tׅEóżI½¦ó*"[¢ozྟž¤¢ČÆiŅbä3óäKŠ—™Œ¾Įū÷žeB”€Óˆ“ŽŃzś„Ī »Ń š½•QåcķŸ+jŁvtš™fA¤ćŪ Xn°,Ȗ\!V/ØĒ•ļ÷SœÄõŁ8 óåjP‘ļ^G2|¬o‡#Hz{Ąøw_ü%…ģ\ÖH7Yt£«ķÉvŖ¬g<-†ŖLżčÆžø UR¤>fėUĪ5/·ź¢±Ŗ ÜY¦EæŌō¾dH8$뒁AÖó©n×“©tŅÖ|?üņUČĒt"ēېOŽŹĪūtó#Å­…éóģw?kW*¹×"öƒ4~ŠĒÉ\ų ĄGG»Ķ(Ó­:b«Õüjz25oÖŹä»^ź[ęD­D:¼É½²?"ЧŖoi²$:’e¶q̈T€•-æ=¶S7¾;øŽ·ĒėNy^Øér„Øxżę  6ƒ³ŁŹB*• 9ū©n’Ķ óyžÉH»M؊X’‹@<¹(ŗWUćŶAĄ!ÄJy’`d¹ÅśÉĀi$}$åu {†ĘUÉ„š‰A§Ł¢0@!¶c~vUļ8>>(Z€Äóef7v{5ĖŠ`šl™ŗsƒŠ"<÷”vTGM=ÉSAžś‘@ĆRşѐ.G®Ł÷¾š)wåE»9“tfić dwŪRĻÜÖ×ÖÓt“ߐŅ5¾ō@31 køNßąĒG€ƒ²Óm„2×ņ˜{ČKĆÕcÕS–!xź÷rŹį-üe×&żJŚkŠÆ²8E•]j3šĶĖRr~½SeĒŪõŽÅ*i;x³Y8HŪø wW§ 3 ē'ʇ8ˆĒ1«Ī¢ć²žĆV“£we×Dż`ŖÕƒ‡€ĆØ“Ķ8ŽmVĶI]ĆL•łmõ:āv/.hdš]ܹݾš*’s.Ķć;ÆiE@° `1u¤±7! ~@O—čŅw­½'­6I§M Ŗ;.× rĖåƒu+uM¦SĮėž0¢€»gĶ4-IU1Ä7XT3]›öČ0ż#•F’CŹEoŪw{œä!öōQŅ…ŲļxStx[f|j(„L™Ž<Ö«ēõ0ÅZŚe½÷ £õ*v,dšMd8čljšxœŠn,ŌÓ”š"˜č“LD”¤w±/¶ņr””! ć¾ēv’)ÅŠÕźąWoŠĖ‹>zōÄŅ£:ÆWRyŒŚ£÷2n—:yšĘĶGÅķ—ΆŹR=Pv‹ŠųÉl‹_ńÜėi7”•pnmiš!HĆĀÄD:iœJ½_7_ÕGoLQłl’€-ho“#éXaˆO¢Š~pÅż`fÖL=?ĢVC/ꤩ¬×(īƒ†¼Q©gK+Oü;…¶9SŁ.ØŁīŚPµÉųźeņUŁŁmoĘ$-łß§A £ÖŖMēXøø3²ŻĖö0t/>E˜¬/#ØA0ōÕ3„3~D•m‹^–w “ „‡ž-wÆL"c?š£“3!HŻĘæ£.ĖIač|÷üi³ ļX£ł¼Ŗ9čµŒĘ’„ č‡0ņ›·©[UޤŽŽES•čō ¹Īcį *kœD%RW žóŸ¤h[?_|އ."°Ś‘­ƒ¢3U ³x#é¾ńQ¢›&-ŗ ®øœAyõ]ūb1GcO^•Y—ę™F¦åź5åęÆó›ļwņŖ”±Ē!©ž·; «>« eƤ¬Huõ”aXmēRt,ab––Ä ū¢Z 2©}§ˆÉs6½Ā4+ś6&a07I•H ųÅ~æš'WžłˆüDĀ{ż‘įó«Ō=DŌ E›DłĘq/Ģ{ƒūüŖö€Ć¬‘·¶Š%|×£sø¤ŚlōčÓĒk¶­s©‰, ŗ+¢īkü½D”óc.”6H’Ų‡––.ń§”=Låkŗ0:Ą]“×AĘē3ż¢Éo8“Ų×?÷ö–Ć~ÅĪ—–… r¾zž|"hÓŽ1¹ö#<%S™I½Č~V±8ĖI`“_øŁÜ*@ņæŃßč<'½×°Ä1¶AīąT!IdkZ«’łüt’°ŗāĮŚ¢2YIµ¹ ¦u}=ūŅG<ā%Ł…ūŌ?ńįt\gŗĘ Ó5n’՟×Õ×uońķžŗrD  ÷w٤µŹÜ¦jWÓćS„_4ķsK„å…7>n&.HėŚŖGWtń&_SŅ×,m,ƒōų2Ć9Y7hQ0Ėń˜ØD×1?ć;ŘÆ]Xs x<ÕL˜žÉKc‹ŃR IµĆ8“byĢy9*ˆ1‡F ABćv’ž@bÕ5ßķōcč1YOŠą»7ŪÅóuę½tóG˜ÓŖé½™}\͈4׋“ēļÉÉR›XHīn¬Ī%\ žu”ÉųŠP ”ąų>Ÿ'Ģ¾Ų&LCzžC/hčŪxŠē¾ õA)ķĶģŚ¦že Ł†é®ž¹FÄUĶB¢h CH‚«ŽĮ5¶aė’b–²;‡Čļ=+šĪŪŖē ±j ŅÖ{æÆłȦ&čqé++ķ= ßÉ Kć »†±éB±Ś~ņOå—6<Ԉó jˬĮd#ˆ#ZõF{0ŲJ–:|[:9*¬0ś~IL_B »otŠT'1-µ˜©ŠE×¼ĢēĶøZ¾JC:KĶóÖ"Ė€JšÉ§/;…å³ĒŗžĮ3Ii÷²ŲÆē·'$‰Ó›łšEH.-‰ĖOIFĆ­~!Ö.™zS*>ņ>7,ßyū Ī~¶Ó›¦ SQI+éŸX0«|ŽoZŹE1ŌŽ±ŸŚzs…'Ab•ģģ&Bš°’+j}foPĪĒądÜU0-#tµbl—ų@ŠE;”9>ü;h+ƒĖÅTSD`9¢xEŠč"Ū5ūZ"›)šūō{”oĻɕ2™©ÉęgÜÉ_oé°€ Ś:›²ģß3¬(Õ/ŽĪ&ÅŌčĒGœįo ’DZ4Dų>³ÄنD \¾ƒO£Ųi;:Sµ>ē(Ŗ£…\‘šēš÷‰{Šlōė˜$+ø7‡˜/±#·r PŠ]hā®Č¹wŁŖ5„.O¶/)z>[…ŒŚB™—²G{–҇<‹ :ī-¾ó{ĖYå «¶“Įœæ"–ķ~ĶąädµŌÜ#h2<Ź{ąIEŹ ¶JFm‘ž»§›8dh¼}Z—WĆ×GsatˆÅŠąi\¾QšˆĪh+Ä|½ģĀŠG«®ń”>DŪžéó†ļF©!=1¤Gł¹)«ź›¶ŽęW•Šū_Ŗ2÷K+0*?ųæŗtAĖÜ }|lÜŌ›Ä ¾Č‘Śs]:I™Bž`ė|Pßkš”Ķ€Ī“óŖ–¹č…Ź‘ĄŽæõš~ziŲ¦€ĒfEē¶Óėy¶‰QšµķFہkf-v³_K¤šBf&Š@ ~ć¦įó•ī)‡ōi—‘7öģ'óąšzĻA·O ē ~† ŖŌ¬÷¹„ꇵ>«`„'ą¹Ń‹ÅŅRų/fŸDŻ÷°ß ŠŃų š6ØS™;?ó?tAš› Ә#ÕĒ(¢£S,DŁaØbx+¤_¾Ä`©‰ĀrĶŗšm5±;ł)šŸÉg”wdMŁ ß§óźńåB‰rß棝*7TŠLĢQiŻ—]Ö¾ƒxn`1x-[T©¼ŁToxßK:×Ę K܅±3ŹS„2Hī4æxRW#ĄnV5:°&aĮ„ƒŻ„A~3{Ę åL `ĪEīØ:ĀœŲ 5Õ©q†^®Æę˜'œ¦Ø\lHĪ3Ż·L̽…š©Į5!ļ.Jbż4£#ąń²‹-sŅgQz;hX'żvśYų»„å ‚É(! -󝀱Œ¦&ł Ü ™ręŻ#„Ą]Y6į mÄpöō'ņ7DŁfM0xhźć÷¢U£Fü·1(P¶¬b‚N> k–Ō£)VuB¬]ōe˜:yŸRīˇFč™ć‡-”‡śRØŲE7«Ģ®MÆć9żˆGŹ“r1 ¶½ę½7 ·Ģóį¼6U!tŒ‹lĻł­ĆØIN’––ē‰NŌ?\lĢIķŹĮ`6Ip›{_b†§5ÖŁŚ`šGƖœ•»·KöÓŽŻ“Ŗė !¶ƒėe׀;7[9ŠŃQqƒÜ7«u'ę‹|'euI7ņ¢@ŚŗxŅ/Ņ,¾ĶĆ“nŠ>œ1eĘcŗnDiK{]ĀŖ>Ū…”)•Į!õ$gœžŅĀ. *\TmÕy©¦āžĻi]ÆWXs4Œ ńSbą°ŗ¹Š{tŒČķDåEHŁ"l”)ūĢ'æąIqTö­~šėK üŖŸķŽ=tĶ[BCš1Ö"vg°ēHŁįdœŒń\rĻ$jłžģгŪņÕwT^Ī_uO'~DŅģŠÓp@ć@w%§8„ĀDD" 5|Ó”Į\RQūleo–i ļ¹\ƒĘ٧®Ę°OČgF…}Ü.fÖ <¤`-ø¬™›‘Źmń)ØTXXŻA׌N·ÄzüjZ ^‰GXÜÉ@q©éĢH×dxŚr/`;5’2T¹Ėų{ŖӃ'®Mr©^±¶ĘɄJŗžŪ®Ė·X oŽ%ŪĻ2Š|iü&VzFµLæį ½k‰˜“ż†]¢ŗNį Ó\n…™Y'?/¼v,ķ Ūģ‡<Ŋˆ*:ł—åå ©ČĻ\¦a{śµ± rRØķ£Y <“oÄ‹źµ7¤6GDžŠ‡ńÆ3õ¬+øĆŗŸŠč š_čEĀg!wģ÷ŒōŅ5™N€_Žk‹¶?°ī\¶ Č8÷7ŒIŹ ²N;sÄ(üšÅeŒĘy;Ćx~$©ēŚsŃųŽĮ©™W¶$}sP/å=r—Qp2‚wĪEb%m¼q\ (t–<Øż“эŌLxĘ!®†5”ō¼S|½*|ĆŹŚM ®Ą¦:S,ŽĆDŗ’k‰ö½’ D‡ō²fÓJ²ūī׉؍…W©m„BźœK/õ‘¬Šnːoœķ‰ŲFa÷,æ™V4™xQ`Z»ėŪŻä¼-Ņj¦Ī M!&ćÉĆE­Œ$łŸ±zįóĄRiŚ{į°”Ć9«qf|hMtÕÅÜPVūœ'ó:«ŲŽśm˜ČŻ KßŽČœ5r~“¶eYšøń~ƒØGä…*’ģcŲÕ,aßG­(vE Ƴ|ŠęÜd'õm•"°µŁŽ”Vų×Ń“¬öKažtņ "-ę/¾‹p2MrŸ¦øų¬UJ ϬZ&VtŅnØ{JGˆ”P¢K0›ŅgĀ’”p‰‚̶ļļ8 L0®Š·=„Óö,{ÜĖlq¦æŸāā×(”R'Ō@ęJ:zÕ|Ņ%Q&b~ Ļ‚‰0Ų[QįqĀ–?³Øe$R7]n„+T¹öó7lk½`ée{žQę­x0§ŌārŲĪLŸ\Ž’aRėĮ½S'XÕģ¤?ŗęoBÆ)Õ·āOušž2Ę ä“ Q“œxX[§÷šœŃB׳ vc#«Į’æ¤XīuķÄ:ĶéJŒ–—!õā$sĶīUēó‹%0øėÆG³¾ķEčD½WzŚ?.ė»Z?h ƒž1‘'nötȵR TĮ“Ng;šĻ`[c¶Š ®v{ļśµ> 5„śÕ®*‘ķ,é.ÖŪDõP%ÖŲ÷ģUŲ]£ū©ü-ާ@•z‰KČwrÉ»‘9„²‡¬Ź÷bg1Āt[ć½]ŌłćV—»&¤o¶u÷<Ķٳ›éŲ;‘„«m…×}±ĒŚ|Ž2ŽĘÄÅėĪ“[ŽŹ‘°"ėU•Öc;§ !ę{©ćŽ}ĢU;« CņČ7pņ1*™ŁD5yv~U®L>©¹ż¶Ē(uÕšƒS¤3Kč,aŃ¢ģ9IŹbȔξPJHć*sOöƒ©iOĻē~­Ā…½ŻĻ"šüA°ēlās@&Ā`µŠZäzuS(˜š®„K<ī–h?`vyʔ^¶Āiz ×·ai0A¤€/u}%Łō7O“ā5ÓÅÆģēš9æ4Õ| 9ķ*]“²cOÕ©C ų#üį(w«ź-/ųģVo3‘”A€ ˆ&·:ƅ«Š€ÕKā H›K7¾TFŖ/›ĀĔ^\81„hs,ž/Ž&ŻāĘW¤“cTŽŽ„ž0j«Rē”ž'}1f"ļDžÄ§z2± «ųoŠ Õ›jb®”üĪ P©ķ±®Ęó«]e«7‘>£’ “‡c{䥏ĮI꾆½ {É»^ǃ³ÉJ„ö,“¼Æ)‘. >ĪŁ­yŃ;·7<Ր¹Öśą%²Ÿ˜jžž©~ĀwO­S™ĀQ­“Ć8øł­#d°Ė cŸó{ƒĀ z£™˜VT$ŹLédĶžQń‚ÜäŌiƽN-ĘalÉŅ.tl4üŌżĒåyČ”›«ņŃXNb)ņÓĀóÕļTsŅz)fڃ—8ā‚/š t}ć÷ģÉD4DdxNÆ4‘°+ TŠ«D63eöŲŃÖūBū#¬³ū+—!?žf #I+ ]„¾Ćżh=čŁń!r§•dóµ³×Ėa`J8ær$SaB_Ŗˆģ žMźvųDQ.łŪčU!'}āKł²S[ļwU9£V|ÄƒĘ)‰_™Ū=!?܀xˆāi™ų75ž6W4^jœ$ _whōłfŪrmŖ ÄĪ=Óš…dõ;eč[ł'ķG<ĒĪ1±]¤ÕœN½ā_wˆ×uņ F£i±ßr­‰0:BƅkÜ*ÉAT8%- ōpĘįė:?uü ŁÓųUłōĆb+ŗ¹1 ė2Š£Žk§«õęīVc”Ā\2µ]rĘy8š¦-Ć©v°Üšķēģūœn”¢_f-š‡·Ó3²\){sPü)˜bHŚŽĀĶ-S=’"æ <ź8cXųUɽžĄĪł5ū'µ5—×ʈś‹"ŹĄn±Ź&μŗÖg£€-—‰-ø6ZH¦lGĮx¢ćōs<™pk2ŌŠŲŹ«U»Ó…H‡×oŽu»›ßļ>Ųķ7k1˜ēŃĘųInżØmčŠ:1d3zY§Ż½-iĮ'ՙŁ6Į[Ō%a y@ 8Ö«ŁTQĢoüņ)ع’щ% &•ĢjZ<ā?i’4IóTļK€‘¹°ŗLŻ=”ečIDA­¤Ī¬éŒ0ąųś’ķybqbÄ“{¹§KŪEŠ?Duė™+Ó_&l<Å®6Õͽz“ž2¤6$[ū(ļ*ÜwŅ:…SĀ›sƒÖØųYDY_.>±µ–O}vé%2/U&Ŗƒcī<åü¬æž ~ŻųF_ŠĆ‹ Ģ^Ńą¬%ŲĖūŸØē(¶"ŅĄū9Į`*Ķ„ÆąKŚąjߎӯ@Ī#Azcņ18 åŲSƒļżÉ€żJµ@äK)oœŅ­qæ™üŃ÷ƒ2‚»ø(‡£Ļ.fjB4ϊBė“UZ_KBLN?}>ų¦Š=ĮæZ5r6Ūė7.\e-˜9)N5Œ}i!•ÅūåŽ ™rG×~%„£Ē‹żė6k¶hWŪä×UÆvæ“›,2Ļ¢čƋį GRšJź«3;NzĆB0”„VdDĶoE7GLł\EØš c ) ÉX/BŚGõ¶Ģ)"d_&“{¤${å7Ÿł7W)4»øbfsĀWpJY8ĀÓPēĶ•ć4­‡9ŁcL°ķ?8]īźpó!Ć'…y}|×¼ų­>œ=Ę­né.Wö•ņ ¬3_ ż•`ÕÆĮ€·ÕeNĘČAܤgņrŁ„*R”Āåņea†š=ļŽ>¶~RØB 3¤Šæ¼ŹźØ¦ę•ÜwoQ?śņ­3Ž@‚Ž2z©zøY%Bm܎Ŗ„‡Ódõ ė•äģķƒž“ōWĻ_uIM·zyfLŚņFn*v)ŪwØž~Ša Ų=}:Ŗf^žčå ä³čć_§ ś”āāC°¼kżæiĆ#£Ž|1q©‚s’7³Ń[TłŠĮöIŗØvĮQ²¹Œ(:6°EŪcįĮ[‚ø×$ ²µRTŖå½ ¤ÕN£z~™šģʎŁÉ§ RĄ*æÜ(i<ńB»VnöƝ9½L×§ų„9ğ‡æ&—¹%ƒ»óĻĄ\—&(žų†PŸ„ytKś RŲ¢ŸFņ¶+ I3&­C&™ß•źā…z-’8ÄjQ‰óÕ`¼³”Čņ*#Bf'sĒv_„“$R:2ø±ųŲóTQ WG¬£›„Ÿ1ęČļH:aõ¬±ö‚Ź.QĶxŽ :Q“£md_2Qˆg2ZޱŚ`#¢Ä“$jZ[¦Ł`¦C®ŗ0ā„&Ö|FŠŽˆŠķŠ;ĪØĘ=eŖ2ńæµō°šéķipڃTF“̜lŁō.ĄņZŽŁĻŖ Vāā@Dų¼Ļ«ÖE&“$DX¦5¬yƒŹ 9øŌEé|q“•]‘U{’bW—PŌ‰BՉ²Žu‹ę1-÷rx¢,™ó‰Źœä†|ćōĒ7Ō2® 7Ź'1܍»NĪm¶qXߦ£™¹ä9فfjŠ?4æl„ąŪʒåxęžšM9H¼TÕæōĮ‹Ģ%Ō­”_LŽ”£? –eņdāyńHž®ų”Ńæa sqC•"ł†ŃQi•bDČĪ£)yM|ņFĪ’’,ļöÜBĶɵ»XĮ/汐ÄDŠGŚ.ʎ\Ł‹YŒN•¤§īŃ-Jn jшī§1Xw¬¶Å Ņ…4ÆYsBæ&yĄķSė—WßN@]?a§ėśŃõ9aG6A+)ķ<’ˆ/Ӏ)§ÆjŲ¶v‹-*F`A=µ\ś%Uʔ0Ń3?ÜĒØ·— uī)ę‘%F'³eš³Óŗt彩£8Ō°ęćm:>k8»BćĮ)Qė! €ŃØßÄŽOĢŚ»€yS7żép ro0®ī9CŖ–ŗøŻ©$E6YIšÕ”1ņ’0÷z*Ē,n0PƒUōõ„1I_5ŸpwøB֑“łį„7Šŗę3Wōu¾]²ić‹ŅŪwJģŲųƒI—ē{Ī?L ×^ }–¦±ł:„š'‰ ‰Dœ«’ō WOÕļGˆį÷™ä“šéåąĘ–õŸ§ÜDŌy½We+ÆŌŗgQJš©€ė¬ß )|æ×š±d#ŗÕI怹>ćdīŌ²ŠŽw1_˜Åļą—.¬ŖW‰{~ŁŲė+«ģ×ŪL"ÅuM*×T2Ō# årÉ“(™™ŠĻŗėa›ź~‡X 5 5÷ńSfdYō#ųZ@Ė.Łų !¦ÕƱk<ą*Ģcz"7%ŠŻū]8A_œ-É:kńl–ĢUCnp8²ANXĄsYjķ½/ƞó:bQÓėJÉTvAā§¾%/žtńŽWŪsœÆ‚Šõ Uēµ”z#%™ƒõāõWź óĒŚ}oæłuJų%yˆēŲ°Ćrāźõ™žāÓŃ.„wį ¤\Eį€eČ.õ“wįŻ¢V‰vÄŃ|õ)jSŸÓb2‹ÜśRvˆ°”#Bˆ×ĘuśzÖ£˜Ģ¢©b»›;KÕ»-ėäöU‚÷ūm&]å­Ļcn/Tƒ¼Ļš!©(°Ņ¬I$†h(ĮžV“øģTq÷ļŽ¶”T=ŃÕåŲZ|7ķĆK+É=?“Š%ڹ²–½j“©ˆź±:üŅ÷˜j`anz˜É†•% ;ćÉńdLTr :Uy…čG‚}[Ć{śPŖ{cÕźg†{UßwńAOŹ-ó3Q¬O‚L[ģÆr=ź%ōĀT„ņmŪ³•ČJ› uųšČ>?I½+¦ĖaHD€Ķ˜9¬’[ö{7”  vg7øÆrņ¼Š1’ÜīM“Ļ2ŹZ“¹'ŁŖ=$MuĢ 8Ł…ŁS ūF™Ōfę+˲ą=Žjłpš” ŁiŚvØeįĮzöM#Ä­;Qšõ˜“„Æ»?ß*KéQ7įŽ»ūt ń)©{÷+Ų¬D5ĪpZ®“cWRŚbÜóŖæ‘š0ra±7†ŃL>¶Ł8*ųŒ]_#p`q†£¬lŗ4»\%ŻĢ#ęŗ£¼¹c æ%›X_ÆPü8|ŽaŌć ŌOŅå$,%éŚEśā±IŒgOĻO'×Ķk7|HéŖŹ©7yēęEL‚ć%eׄ ĢNģf7Ōų®#Æļ0€)„n܃|[fōć'ét2kÓś³ÖV\Ęģ˜}Ÿ“'kVŖKĪ«÷ģ󄔀;ģ%ēĢ,‚"¬ļ’=Āų9P}ÓK•s4:Ą‘tĖį„6C[·iąe$H·×bÆßĻ“„’L^ķ)µā=Ų,óś) Hvģ®@Jõf¢¼ž~õš4ČŁHe)×Ņ“OŪčķ¬FCpSB'q¾łFĪx4£AÆÓlm¹u‘ Ų:H><äÜā2½{ÓrŠÖŹšłū¾ŪFĖW±Ųå½Łć;ڧć0+ż»†:¤1]ė/Īь->āźå^•(Ձ«”!‰”±ąFÖŖpt'§B85eŁéų¹¤ĖšŌĪɟšm±Ī{Y’‚£žĘłnš=m›’żP’#*­]õmJ€0%| ų'H« 2ØÉļZ«ń0Õ =¼ö3urM{ųX¼æE…Ę˜½m“„0,hHBr7ŗcąÄ@‰Tķņ0­ĶVW‡Ęk©l' &\,ų@ŽÆžšäk„Ō Č*‰¢mަJģ@ēGÅp!ńŅķ·!_ÕCųæ·„ŸāMŖćł£¼4 ń’Ģ<÷ßż«&Ä“¹gĘéo'oĆM(¦†bķ6f­ūõ¤+2¼¶Ė V4Āō’°Ļ ›™1fIä4mąį-“aŃ[/6 ü}V†<@ĢhŠ|Z&^1=)hŸŻß#„M¢›0-Vų]„ö¢Ōåé˜yĶO7¶V'Ļķf¶Č9šŲ4ń\”„„²FdŹAz “ą»L’ŸĖ×FCūf®hL4P'‚8Ą‘|““}bÜ 1ĄhwœUÖ[2ŃŚŅvQ(-N;Յć yų³}Č_QŁjHš>°ėø d„Ąųšśį–cƧÅåŻŒd0tu³ĢbŽÅ¼g ׅ‹x9F7ž­hkÆÆ.TF²¾Zƒūć6ŲjģB®hĻž’œ(,ęz)ilŒ¤ū±ėHmĀęŅn$žDĀ•µŠWnšƒö—ŒĀ•fcKB$°ę§ƒ? •¶™å”Ē旝ćĆŃZB "¹7OĢūéÄ;eśY.åq‘÷7Ž`}2ą³|ŻżŁE—ÅæDœ¦MąÉIH]©mbĄNÄk§e©Ū8˜"PĘ ™„¶¶ ĢäzN²b ’B±p/3v&piG{N6`ˆŗČŹ7ā„ĢF5£«ÜłFøn8nkČØĖłx“čr[¼ŌźŻŪ>‡S•1ļž(Ō₿¶ģ!ĀT­2t³p®'¾ZœŻŠ¹'¶3g„W¹Ū®ųc€¶Ń㘟¹6]Ќ)q‹ź‹zi¦€q/K)[ćlp’VåŪöĘ-ƒ›µˆŖåĢ±Æ’‡E”Y"¬} )(†9¬ūvGSo& Il”Ľ v·Ų:Ł€ |Ēh݆g”FyQ‘óń’OņéMŹ=»^Ļ›¹V_Į"?hˆ–÷<ņĀ€żFįk#Š/|ā>~O”°š2yu§N—oĢD8#¢|L“« &0xÉӄ#X3ŽĀ’A-¼éĄ{zPķHõx 惱BīŪĄÅ}…Ģ6)V*šrA‹1Ž£!/ĀėJ“£’ųćÉt@wÕx7n“aÜķ…(…IW×k곌 ņϟśf^“ؾ%¼N³ļ¦€½ v杙€_ERŪ ūcÄš“>ģŠ| HuK€O†a’5Xq­ŠįdĢ‚s“¬śźŻ%MČǧ æ!17%/+Ŗ›¦sõœ¶¼Į30Ņ~\†ŽiĀŪ?%3šE­:’=Œ{̾šŸ2aÕęwAöt{g­Įƒ˜SÜćN(W°‡~~’ņŗó¶ä[XWćAā˜aS“N,4„  V€Gp†1…ˆ6‹L<Ä÷‡ą«ņ½Ģ¦4”ė·›Ļ÷’ŒdZK6d2c©‚ŸaBĀ”*żųŲ%ā|5D²|°V É3ę>¶Öśš%ŪŽĆg®–‘ĮÄā"0øSϬ/kG“·V||˧¹¢h=…±Ė÷‘īŲŽå^Å÷ŠŪCe(;qV%Z`Lv'XkĮ”Öč'½Dšæ+tÕĘĢ»Tłßj»=„)Ø„r+eß¶åS°*ęosQuœęŻ«ĀļūhDīMGž`‘lS?³U»3”M$.?ÖłĶŸ4KęzhJsŖ…śeŅHNŲ„G!Ń8wq5’_±’ćnū؁7€’#!Zlø%*?d)Ŗ)ŖĖcŖ[Š+āłnū³²ÆązO’›KąŃćv‡×U•–“Ź mdĪó½Ś5hŖ?¬“÷5lWš^Ī)Īū™)­…·SĘŽO^·åą7V@ß]P¦ōīŁmQ›]½ŠČ'^a¦Ōe­-Ā£2ķ>Ö²µų¤®łHjJ½Źżr‹¼Īy@LWŪ±6VØäŹ6śåł‰ž4Ū—_ Šxˆ{&?Sģ,ŠpŁšDQ’KEļ«P+‹Ū~? e”U®Yö՘eiĘīĀ» ڱż…œ÷ endstream endobj 92 0 obj << /Type /FontDescriptor /FontName /YKVIJP+CMTT10 /Flags 4 /FontBBox [-4 -233 537 696] /Ascent 611 /CapHeight 611 /Descent -222 /ItalicAngle 0 /StemV 69 /XHeight 431 /CharSet (/A/B/C/D/E/F/I/J/L/N/O/P/R/S/U/V/X/a/asciicircum/asterisk/b/braceleft/braceright/bracketleft/bracketright/c/colon/comma/d/e/equal/f/five/four/g/greater/h/hyphen/i/j/k/l/less/m/n/numbersign/o/one/p/parenleft/parenright/period/plus/quotedbl/quoteright/r/s/semicolon/slash/t/three/two/u/underscore/v/w/x/y/z/zero) /FontFile 91 0 R >> endobj 93 0 obj << /Length1 2272 /Length2 8501 /Length3 0 /Length 9818 /Filter /FlateDecode >> stream xŚµTŌŻ5LJƒ ĶŠĶŠŅ Ņ-] 0ÄŠ]Ņ(ŅŻ!!)ŻŻŅ!%ŻŅ"„¾£Oąó’¾µŽw±°ĻŁ÷ľēü.•š&›„…ƒXÖźŹĘÉĪ!RÖŅāäppp³spp”ÓŃiA\ķĄ’ŲŃé“ĮĪ.Øą )g0Čf“¹ĀˆŹP€‚›€“ĄÉ'ČłLƒĄÅĮ!šŃĮY r‡X”Ł P° :”ƒ£—3ÄŹŚ–ēŸŒęLNg¬æ$ģĮĪs  rµŪĆ2šƒģšę°«×B0 [»ŗ: ģ {vg+Q&V€ÄÕ v;»ƒ-æZ؀ģĮ·ĘŽNв†øüåŠt°tõ9ƒ0ƒÄ uqƒZ€°ģMy%€Ŗ#śYé/+ąoqœģœ’†ūūōÆ@čļĆ ss{GŌ µXBģĄUY%vWOWVjń‹²sq€¹ƒ v 3įwé €¬„:ėšļž\Ģ!Ž®.ģ.»_=…É,µr°·C]]ŠÕ' q›Ćt÷ž}¹¶PØĻ?ȵ°üՆ…›#šāä–—ž›3”?Ų¬Ą®^~nnŲ ö4·žJ ååžķäüe†õąēćčą°„µöƒX‚aŠ}\@ī`€«³ŲĻēOĒ:''Ąbī 0[A čŃaf°å_v’ĪO€lü8æ~žżĻ6aP;Æśļ+ŹŖČÉJK³üŻņæNIIO€'€‹›ĄĖÅąąųż7Źæż’Óūo«ņwmńä”–æZ€i÷OīĻćßKĆųoŲ4ƒŒĆoČĮĖaūÅł’¼æü’MžÆ(’×į’ߊdŻģģ~ū’"üü {ˆ×ß Ų4»¹Ā6CٶВ„ꀒZge°ÄĶž½ņ® Ų†H@­ģžā" ń[ØA\Ķ­OĢ?׋n‚Õ\ æ¾76NŽ’ńĮVĪÜöMq]Öo¶Q’Ķ(5w°ųµz\¼|³3Č 6_\¼¼NŲŽZ€=6Čup…ĄŗóX:8£’ŗR>^Pā—é/ÄJ> g Ōā„’EĻø@¹Ä Ź? PįĮb*= Põ_ÄĖžāĮ2č> Sļ_$Ąź? Xe ‡Ź`ł@®NX³Ä CĪ s[0ģĆoł‹ū_ū_3śÆ–×ü_Ä fī`»ž,<<æ,ööłŻŠāK ~Øīrrƒö&žåVŠÕꓜõ“ĄFšKjżPL6k/Gk0ōĢłĀT·łĀ³żĀŗz؇V¾ŻÆ!{šĆ4°€œ0Ā©`_5 ĆC10.ģŻūĆ kĄńĮ ;ė{z ’QŸ‡óoėµēUķū*8<ØÉĒŃĪķā`O1Šé”ų_Č ģņ{…80½ž&ĪC˜.v ė?°Ä®@Ćķ“ĖżėŲćrĮ:ōüĀZóśĀŌš~H ‹ä vžK½’,²¹›3L×ßßZŲ–’ƒ?Ø`°'Ų}qĪĮ\(Ħ&¤ķŗJ‚Ōƒmgœ‹kąüõ%ŖĪ¶ ±ūžz”šĶ÷Ūȉ®»‘7ėx‡\ļ~6ŚźrŲÆł¦E .Öµ![šm±śNā‰Üŗ(¹qķ*vvź›rC-¬Oš4†<.Åg˜ž²:ķĢfī?¦oŖüVa}‚ĀŠpω0‰BÄĻĻ‰Ņ.‘Ł^)Y-1ó±CžÖå\|üK¹ģžMZ’ļꥧRVxČFéĮ–£āeęhźē>EÓIĄ Żv Ń],cŠe[H £™ĖØZl!‰„Öyća”›*uH sӗšm¹‰²r®­i±K-£g!ĢVq;ģ8Ÿ”$Q+[6¹PcÕŪ„õŲd"&ż%­*Ē® Åhō\Äså}t;Ļ(Ęēę_L22qūq>įµż¢1kNyvyœ_…ńfćüvĮ÷6ĻQ·KW×0Œ}õÖIT ®qY}æ j ĪēėY”q‘ŽIĀ,PŃ­dH%Ÿ[+^&‹uGĀK‹Čé7‡jlŻāQf¬ 5¼†«)ģ.UFÄ.>Ńø²ØéÜ¢'ՆŸB£įW­Gŗi‘²óĒbß2DĘ ‘y'åō¶|ā#ŽGŅA{/žh²`3ģ›z°½£ŅŻŲXĄkÉIBž^^ēõķ6Ų+`ó9—ļŌv©¾oDÄ2I3v™! “p@xū+”čā PĮ}ŅGQR̬ŗJø v˜˜-»øįļ—ļ¹.“©•xń”}£ą_s¢gŻźŒ°ÆeF’QOŠjh~т²£Čƒō¾Ō4[b<ģ¼ŲYi”æy4ˆO4Å_ Ād®Ÿć¤o‘‹4wĮ†śjpbīd!é€AL2· lä–H¦ķ„“P/lc1>{11«g/ž'²HŸŽX Ż“Ÿ#žÜ4©ķw©ščĄÕōÖ{gp„5u“wiš§X‡c¦˜ «…“ö7xLsJŁņщüżQŻ·vńR6¶³uŪ ½ĒšyqwųkPąK¶č[ŽÅ¬zĮoض9™ŚÅ[aį†óIŽ‚OT4¦ØÉEś–Ėę.ī„6 „ó]óxƒč0Wåģēé“äŚhļÓk+™T¹F0ŽwYī j=UÕĪ«}s¤šUģłķZ‰śŗ“#~³PŽg}¶¢©Ģ“ļ”[ś9“ķUb#ąÄ.KŽž 껎#Óo¾ppåSˆ.—ōٳØvCU&IćTÕ`h)ŃSŅRźŽµŲŸf™±Åć?«¶G‘—włJ›įF7¾ŠmFxøõĮóć+ĶfĆ9Ö ¼Kża‘„ņMc…Tō-–ŪjėÉ,‡Mž£ü ‹É2C¬EŠBHĻ:nĖAQńi·JeQ*Õ©t‚%¼5”.ŃŅĮ¾}žƒĶĆ„Õl |Ó+¤„čV×ę>pSėŃ ėkÖ)qEĻ®ę^Yˆ‘é r§ÓMÓÜ+ޘe]pŠM".0+ĪŅŗØ÷ź¦ĘS"×öė nÕ$ųl›ā"FöČzļ}:öNQDČSE‰¼I&«­žĪi’ÓpöĖō‡iuŚ!ŪÓpāx’E![0®Væré8ü™¦īd“Ņ@'²0I<¢Iķ”­ˆžf9Oéi¢ļęM†‘€Æż’A šÖ£€#Q„Ź+[2ŠˆįöŖ&”oÆ„­ØJ›ßHµą8g­4óPė“厜F-åįF_Ņj§zTL„*‰$[ØéHYZ{53īH|)±ł6ÆÆ+*ōCVyƒrŹõ“£kŌÕ¶°V;Õ4OÆš9Ķ9¾š¤’ąJÖBGW-®”ÆT|ś˜Źē“œ8wš[>ŻčŅ4UuY¶b!ĆÄÜŗb~²œ›+$?ĶD <*øieA_÷ŲēåYļkc Ø Kć2efiĖźąĀœońr„c‰1ĻJåu T³VxI“ż;=Ākż^ó£@%Į~ƒČĮÅ{¹>rµvq|‡#;ų'ŒQ‹ZńOkZ™B½āŠĀ’ĀDĀ–²Æ}féä`U‚“>Ņ3ūĪäqf ėcˆ8Ŗjß}ø¬ *²Õŗ”¬VūųÅõ9ˆœ„)ńŠ·ūĀW'ĢōĖXRYgBu*ö5­;ŒĒė¤ęGGR ¢Q©†zčÓKƒ_ĶM1ż Ob#lmŠCŖL1›ŚKżiĀрŹUˆŽĒū&97‡9.»“ø6ž&‡#T?Ė©’>IūJ¼m©‹R (éf}H'Wpń)ĢÓ$C>ćvOr&ÄŚĀ‘PJŹįE%ÅꘫŠS5Y!å¶»/^1^- ³‡yn!BØVńž Šæ{Ų !Ž8/ ,Œ«-łi%ŽY‡¬Ā.o§Ė‚²yn|ÉüżLĘ`%‚ļ§× —±WīÅgõk†—‹Ū²7ˆš8©Ż9Ųb»Ÿ4ķŎć1"IŸjv`J`ö¶ē—›,/ Üé*\j ą­ē÷ ÖĮåPJ?~É@ėn:¹U—V4ä„Ho#ț[ßõ8ŗŠc8xɵÉÕ/±·ŃœäØ{E'ÄfŹXėŗ„ę=ģ6ä擟žŠ@1žŪgŸŻW°7é‘Ūõ-†6ø•?Ź+É ³öŚŹÖńś˜“±æ6łŖÕvÕX³K؁6qEnIń®†Yē“^ģ"økr i ¦čŽŅŚ{¬VG–õn,?9ōpyŽ ٬)@DMM£&šRĮó 3åė½žqpéKģ$SRY—ńOg• šs4™‹ęŪż'Œ£öŪż©I³ČČyd‘‹ĶØ.…”ÓGh³¬äąŅ_ŸˆĀ`͵!B`Շ“Ͻ$× c/<īS„q;^$¦™ŹˆŻē’™@Źæ-æóqōmfŒ·1ź>Bwö•Rß0£Ž÷Æ~0»©|¢W–œ3B%ĖÜO~ńN}gf|Bjęg屎¤Fū«›µĢŖø'?9 ?;lYĪ=Tˆcqߢ/ĢųeśN»Å†ÜBĄ=ŠĀƒĖ+ZĘ(Qų‘’j]©?‡Ęˆœ˜äå|Ž2 B»W¶?0uĪ×:ו=ī”a;{¦>ļM4±Æ6`ĆL.§µ—¬ˆļõ“¶ō']”õWK²Tc_1Č$oM0 rÄĢgKVč Žń^L-Mhm9i5| ﬷“ļOĄbĮ}O—©-ƒż6©6!9gɐŖ)J†«¦æ¾/¾s¬žŠØ§0jübhaYL‰Īm{EAŗ€$¾„Ń^>.Rxžsreu ę5“jÕķv„YA„Ž!‰jQ“ ƒ5”VµĆ&:kēY "Uū2ˆTOĻkV=__ ŗe“ōļV…)L¼Jlż¼¾!³x²»©ōł"P„QŁ,„Ōō>.³=Š]+cŒĮœ¤n6OÓhU/ē×OIöIižŃ˜æ^Źč~ że#WŸŒ€ ś|cösųq³?.Ż[8„4½N'«T5ū×WNt-Č_×_ä°Jt4ų”®¤¹}@zĮ„rpšÄ%śøLƁŸ’l«e·!­b†E6¢Ē=‡ŖEÄų–6„ż€eō3łpä±*tĻEފNŠ­“Ēėhę*_“Ō›3k £Œr_sž;)Ōq¦Yāā–sŹ…Ö—‘*?ž¬A·Eoežżų³ĆIfˆvcĀŲĒĖGTp“Ļ•‰3z£¹š¼iščR6Ēł*¦†BĆāfßsé;‡˜ö}÷-‘ŸV¶rŌ×RŚć 5y-ģT]»ŁĒ{¤Ü*ø’€PōŗéĢŖ”!!7Aėu€ūRqT‰ņeŌį»÷Ż|ō`z›“šPÄiT+nĶõ¬®!deÅŻkyyĶp„TžŠ[NÄXū‘œ.ŽļKĒ˜ėAŠ T£• h9m÷ē5šRé§ūÓ·Ņj$†ļöˆ m¾ėž]o½dRŠU½ŁŖVĪó£°'«^źų„ Ŗv2Åģ| X'ūØžV›®Øøņ›uÜß±¾Ż# ķˆüø³¼ėŹ~Ä7Rø$¾Vg¤sģµ”ÆžōŅÕuϳol:‚Š.yCš6K0Q“ˆ#Ł=4¹ŽšēĆD1Ńõą…ż)$Ę?¬^4’.¦ų†xēÄ|. eiµ Ž²Ļf6 /¶¬Ń¢(bÓ>/ˆ²ÖÖń}{x ŖĖ°:ocbg;!ąŸmėzßHC˜õŲEɧkĘg¶0µąÕsf’*jk-_Ä ®ƒ·§ƒy4nØż›YąĘĒC‰W‘ś\õRjÅBģā¼”¬>ęīÆēąā|­{ﲊ®U!–N{’޼C‘’CĻĶ‹žN\wŹąxM~=ƒt­#nžģUPEÖgģRŻ5wE9BhķÉ> “Néü„éŲ·.ß^l9d’׫¢/īq™śOµuPå 3|ž‰„éŅņ©Włõ·Ü ģé"vݟśį}Ę5øŒü³Včoę…ń{mÉĪ6ė”?įŖx’4O·Ÿö«źó ?i#|Łłįćøih¦ŌŃŹsxSś¾ ō5gl•G9ĮĒy¶ŒiUŲö*Oožv+.5‘¢ˆffdyī×*įĒP ó Nś~»oēÖų²ہ ^öĘnŚŹ*š sƒb y$9pœ äĻd¬}B@4œ“śŖ©aļcӂöå×-°„uÜw/ uBj¢ž½&‘±'k¼›Ų'·436%¬„FpcA¦k–<Ž„)+±g«­Ēņ; <{Ö¦ęGŒ·ødјū<ó8kG²zł šķØ>Vx„ČŲ/Ż–!œĢ›ŸaYŽń@«ĆŖdœ^€Jf¬Ėڜ3ÕęlėėĆŽ)©c®€' ”ęȱʭe‘dZ®Év«‹…†åƒéVOtgīįqöłCļ*ū§±“PҐĄ|{p”ėš/u-Ŗo¢ ÜöFīć•ŲU…ŁÕĆń¤ųĀė†Uˆ|Ą§Č•„”/ˆÜ«°jÉŌė,łā5QĒ_ņ4ļ^ńö@Ä æc’ž¹…äFąø\ ģĶ Š§Ļ†“»Į)#źŅsAŻ‹]õö†ČŸ.œĻ‰“įāBm‚±+ĢÉāĻy‹ÕN f¹³ŽlhĖõ†bµųŁŖ\ē¶{IøQ§ļSį äējMĢ‹Ź$Ü9eź‰ ¦¾e-ņ‹ž:œ]&#wßµž®%ųåū½ŲµOP;©­Ņ@JJ å»&6÷ĢČT‹ʟ¼éH,]y&½#Õ»ųD3ķVcŪŌtb€ś—ń8ōep+ŌÅīKŹ%ļķŖ üų²…¢¢mC9eWŚönþB76jĀ=`ĪĄ‹z‰¦ąÄ‘¹źĮœŲśŸéÅŁ!澤Yžāé?rœĪ %»Ó݉Zt†ŸĘäŠÓs7½iiÅŅNĪ›eģōJć5Æ5¾ģB”óÜŠą­­é‹ØŽ‚Ų-:ą&5E÷ + źc0yn ”u4֊\ļĘ>»īøe ±ba§ó=‡ß½2šfįXŚrć®õpOmŠNÕOÜ®ŅÜJ Ÿ‹ĒU.ŁOé[bPp˜d^œŽńsOG/ülōøį.nyĀƓńū! 4łœyŃ­˜ś ×6 qÉ7Tvč.ŗŗG]gčØb/ÜŪ©œ¾ŽB+:×¾ŒŽĘÕĄBņ“ĻXä]‡$ĘŠ(µ^š»xœŲļ¬ĮÄĻźKķóJC"CG‰qśe³ŖMü īKā©¼Éś—Ņßß v_v“m7R`Õ§¼:!w‘!xŖP’•w¾£hPmqV”[ąĆZ_”«Nó˜ŗLõšŸqéMʰ(Éö ƒ’rœžøøT­ōʱY¤ņwęÄ"/ŽErL÷Ń6Z’E0“qž¤Ļ=ļ'kå ÓW&†Ź¼55ʵyĘbvąpoL3­ōķŒ%˜{mėü†åKļ…­rµIö”/–aČ4ę%ĆõĖēō «Ļ^D–ēŌ3iļŪ°c}%š¤wYę·`B> rG°ĘĪ Wåtܚ6“é¶Õ䚻ó”øĶ>T”7£‚č*e>¦ğUžEŁ|j÷üY‹öpŃ=œŽÜ×Su%T!g،Y-a–²…ŁĆü›Ÿqśœ9 ¹ŖļŸqŽ`0yٳL­’"čyļ’Ž ö™ in,Ö¶o£\­k}ÖCńŖŁ9@!CČ+ ė‹Ī 4P>š­—įF}ĶV»żŚĒ__ģ ‘ Lu¼«0šķQŽę žģõʰn¢qć?įģńó[Į_łŌ­LAwˆÄA)‡hšĘ”…——Œ¶÷u _:8эmåčŹ9¤’Ö“üb‘„˰‚KA"æg?BėźŠ„Ī/3Q ldo7@åū;|'ĮåéÉś*«—ė˜¤ŌĢvy”ׯŹ=ž“š’”§ŗ Ēh.ĮĮ,Іč“4OQńŽrJoŽKw°ˆ|Ÿ4’ߊ¶Ūś bńH®„ø¾qž°óŠ÷DN8WķŌ%dš±(ėZǁPN»Ów>ʃ;1byB!ŅÆ[®F{½Wń”? ź3^QYµ0ļ’ÄŠ|.ø_:' !źFt‰,ģ«YĻM–›öĢm4ž6ž1ÄæœģŸŽ:Ö£N=ÄVjÅæ¦•„Œ·`h#kr#Č”:į2!<ųc_`Z"™*r°nļ łĪ&H&‰Ą@)³äŖń¬6v¬Ą<W$;žŒcUgē<°"{ß\_jSøaś­•Ž;jZdeÅ8ą9°#ė‹Ÿ.+uŽ3LēČ6:}_å¤xČįžØ¶·;¾wHoqŽĘō¬€ėYÓŠšJļ›Yż77ŠŁj÷}ȞČ7§Ņdoœ1”‚XOl4å·|ūėUūöćCSģ‘{§nćɅ|³Oܶ–ĶöS$U›ēĘ=‹’äÓŹą » 0öź·-Ó<*ŸĶč¬ŅŲ„-ü$čˆiŸ6ęųŲī{’č”’¬:ó ōJVńƒŌ…Ź*Qc¬oNÅĈ¦“ö /poKž“ -³§ĒXDĪPżc©Ž&$R§/Ū˼bÅŹMO5ßeB«؃ū$ųAٹ< ŕų¢ē’"™øFuØwØėCÓ-Ó-Oβf,p¼µV¢Ŗ,æēŅ­@§÷6sQÓ$Cö†zhƒNI²÷{ ·M(āņiS1Ī“zś•]Łćø@‡>F±TÄ)“žxåjI‰ Å»¬A>4”GHłń¦•†MQßų¤”uķŖ@@ŃBŖēšćŠ4Ѿł!Ó³œ×‘KwƱ™‡~O‰3šĻŁńģ× ½«!½æÉ‘"EūAFßŪP«? ^†&§ND#ó¢`Ž!ķŹ Õļ#ĄtwļÆ}»ø“X`Į®IE5¶ŅÜØTšVüŻī‰¦ĮŃwņÖÉØVōØŃ–łÄPe—„g{Ė<ÖdßŅKŽ{ŗlEņŌ’…®·ńghé.©Q©«}ĒDńžŻVx¹½mčKÅ:ØŅ;†Õcł"^żD®s@̐Ąžz›†½Ü>¢ŪĻSxq’xś2Ėégų_ösÅ}!”Żōjłš`w™® µ<ń8o®ŚAžēhńŌ<½XŖŹĘ9ž^-Ųū®5kÖj$U›x,°ź^Ō]Oū]E&ąaÉ"cmč“ć}—EӃWĖš.Ä’^¢MX<Ü Wѽ`f\Ü#“ŃźŲRżv¦]ühėT÷žØ1FFyŹ•eÆhöų؀ż±A±QĻ;|IRŖa'Ź,’½–@.ƒ€Zƒ›$€ö˜¶€óL €¬¦ŪIåcū'”{ŽwәņKYČåxWfīA¼ŽJRsHšječŌčļHnė‚ī[XX0Օ±5Vü8į©ށóĒśyĆWåC’8Œ“M›†ńhå˜Ośm„;zŌ*+‰Ų…1±ŠąNŌąļ·›Žė«7\ĢśĪ±į«ŽŲmŸÆNœ.“‘”žiÜķŚą»[ąy-=ł(bÕź›šütņĄĘO8ŗĖ€¹UJŽjמä°АūĘ.fa!õ% ä*“ņ8é #ĄęŠę:} ż)R—„sféąyjÜkw–ˆo6!ļ‡Īģ“ÄĪxZ@ś®oėī%¹·ąV¢”TM”}Įc~Œ¤t¢čEJŲ,ŹÜ)mwr0żLvm~ _(wæ¼n& (F’ūrõ'°Ī¶š\wdŖ¦©G£ķä ČF;h‘ÜłĢPq£8Z¢>Iä7ʃzó”•k"“ęÉk„•ŠÓœœƒź…7¢’ŻØĀÓoKōG±Å/[䆤ŒīYć ė߉c+D’ģģR+p­ĶŚöPn&〲£“4kÉŽ ŁVėAW‡Ś’„.ߌæaŌ<&xŁDó~b¢ņĶl×°öēp©£3x+šEg¼&䣧3Æā§¤ģkŸ jnÓõm„¶”µ¤O~„£‹Ņ–®‹}¦–6¦©ĄsĄO‚@ĀMQ‚­K­©Ž£@­®žDZÉ)`Ģߢµælē©PÖŗõć×5b{S˜ %gūa“Ā^~«wŸė<źN> endobj 4 0 obj << /Type /Font /Subtype /Type1 /BaseFont /MRZHQM+CMBX12 /FontDescriptor 62 0 R /FirstChar 11 /LastChar 123 /Widths 60 0 R >> endobj 5 0 obj << /Type /Font /Subtype /Type1 /BaseFont /XEPKUM+CMCSC10 /FontDescriptor 64 0 R /FirstChar 43 /LastChar 121 /Widths 59 0 R >> endobj 10 0 obj << /Type /Font /Subtype /Type1 /BaseFont /KAWGNH+CMEX10 /FontDescriptor 66 0 R /FirstChar 0 /LastChar 88 /Widths 54 0 R >> endobj 12 0 obj << /Type /Font /Subtype /Type1 /BaseFont /MCIJYW+CMMI10 /FontDescriptor 68 0 R /FirstChar 58 /LastChar 122 /Widths 52 0 R >> endobj 7 0 obj << /Type /Font /Subtype /Type1 /BaseFont /ELCHWD+CMMI12 /FontDescriptor 70 0 R /FirstChar 58 /LastChar 121 /Widths 57 0 R >> endobj 38 0 obj << /Type /Font /Subtype /Type1 /BaseFont /JVNWNF+CMMI6 /FontDescriptor 72 0 R /FirstChar 100 /LastChar 111 /Widths 45 0 R >> endobj 28 0 obj << /Type /Font /Subtype /Type1 /BaseFont /CKXDTL+CMMI8 /FontDescriptor 74 0 R /FirstChar 64 /LastChar 121 /Widths 46 0 R >> endobj 14 0 obj << /Type /Font /Subtype /Type1 /BaseFont /PTJFEA+CMR10 /FontDescriptor 76 0 R /FirstChar 12 /LastChar 122 /Widths 50 0 R >> endobj 11 0 obj << /Type /Font /Subtype /Type1 /BaseFont /HLBRSH+CMR12 /FontDescriptor 78 0 R /FirstChar 43 /LastChar 61 /Widths 53 0 R >> endobj 6 0 obj << /Type /Font /Subtype /Type1 /BaseFont /LVAKDS+CMR17 /FontDescriptor 80 0 R /FirstChar 11 /LastChar 122 /Widths 58 0 R >> endobj 39 0 obj << /Type /Font /Subtype /Type1 /BaseFont /GBCRXR+CMR6 /FontDescriptor 82 0 R /FirstChar 48 /LastChar 48 /Widths 44 0 R >> endobj 13 0 obj << /Type /Font /Subtype /Type1 /BaseFont /PTERER+CMR8 /FontDescriptor 84 0 R /FirstChar 40 /LastChar 52 /Widths 51 0 R >> endobj 8 0 obj << /Type /Font /Subtype /Type1 /BaseFont /FSZVOW+CMSY10 /FontDescriptor 86 0 R /FirstChar 0 /LastChar 114 /Widths 56 0 R >> endobj 15 0 obj << /Type /Font /Subtype /Type1 /BaseFont /NLXUWS+CMSY8 /FontDescriptor 88 0 R /FirstChar 48 /LastChar 48 /Widths 49 0 R >> endobj 9 0 obj << /Type /Font /Subtype /Type1 /BaseFont /YSAVEO+CMTI12 /FontDescriptor 90 0 R /FirstChar 97 /LastChar 116 /Widths 55 0 R >> endobj 21 0 obj << /Type /Font /Subtype /Type1 /BaseFont /YKVIJP+CMTT10 /FontDescriptor 92 0 R /FirstChar 34 /LastChar 125 /Widths 47 0 R >> endobj 20 0 obj << /Type /Font /Subtype /Type1 /BaseFont /FNHFDD+CMTT12 /FontDescriptor 94 0 R /FirstChar 40 /LastChar 122 /Widths 48 0 R >> endobj 16 0 obj << /Type /Pages /Count 6 /Parent 95 0 R /Kids [2 0 R 18 0 R 23 0 R 26 0 R 30 0 R 33 0 R] >> endobj 40 0 obj << /Type /Pages /Count 2 /Parent 95 0 R /Kids [36 0 R 42 0 R] >> endobj 95 0 obj << /Type /Pages /Count 8 /Kids [16 0 R 40 0 R] >> endobj 96 0 obj << /Type /Catalog /Pages 95 0 R >> endobj 97 0 obj << /Producer (pdfTeX-1.40.10) /Creator (TeX) /CreationDate (D:20100707155522+02'00') /ModDate (D:20100707155522+02'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX using libpoppler, Version 3.1415926-1.40.10-2.2 (TeX Live 2009/openSUSE) kpathsea version 5.0.0) >> endobj xref 0 98 0000000000 65535 f 0000002616 00000 n 0000002504 00000 n 0000000015 00000 n 0000212210 00000 n 0000212350 00000 n 0000213471 00000 n 0000212771 00000 n 0000213886 00000 n 0000214164 00000 n 0000212491 00000 n 0000213332 00000 n 0000212630 00000 n 0000213748 00000 n 0000213192 00000 n 0000214025 00000 n 0000214586 00000 n 0000004433 00000 n 0000004318 00000 n 0000002811 00000 n 0000214445 00000 n 0000214304 00000 n 0000006636 00000 n 0000006521 00000 n 0000004583 00000 n 0000009104 00000 n 0000008989 00000 n 0000006809 00000 n 0000213052 00000 n 0000011533 00000 n 0000011418 00000 n 0000009325 00000 n 0000013362 00000 n 0000013247 00000 n 0000011720 00000 n 0000016042 00000 n 0000015927 00000 n 0000013488 00000 n 0000212911 00000 n 0000213610 00000 n 0000214694 00000 n 0000017854 00000 n 0000017739 00000 n 0000016275 00000 n 0000017980 00000 n 0000018004 00000 n 0000018093 00000 n 0000018457 00000 n 0000018843 00000 n 0000019359 00000 n 0000019383 00000 n 0000019999 00000 n 0000020095 00000 n 0000020487 00000 n 0000020609 00000 n 0000021154 00000 n 0000021254 00000 n 0000021911 00000 n 0000022297 00000 n 0000022983 00000 n 0000023470 00000 n 0000024122 00000 n 0000039122 00000 n 0000039467 00000 n 0000049696 00000 n 0000049946 00000 n 0000057703 00000 n 0000057989 00000 n 0000068945 00000 n 0000069224 00000 n 0000081826 00000 n 0000082107 00000 n 0000089798 00000 n 0000090022 00000 n 0000098836 00000 n 0000099081 00000 n 0000116327 00000 n 0000116731 00000 n 0000125638 00000 n 0000125914 00000 n 0000142859 00000 n 0000143246 00000 n 0000150252 00000 n 0000150471 00000 n 0000158542 00000 n 0000158806 00000 n 0000167153 00000 n 0000167463 00000 n 0000174467 00000 n 0000174690 00000 n 0000182293 00000 n 0000182519 00000 n 0000201335 00000 n 0000201858 00000 n 0000211795 00000 n 0000214775 00000 n 0000214841 00000 n 0000214892 00000 n trailer << /Size 98 /Root 96 0 R /Info 97 0 R /ID [<1020F1315E3BB3F4882D33A871954D57> <1020F1315E3BB3F4882D33A871954D57>] >> startxref 215177 %%EOF ADOL-C-2.4.1/ADOL-C/doc/tap_point.pdf0000644000076600007660000003334311417030411015225 0ustar coincoin%PDF-1.4 %Ēģ¢ 5 0 obj <> stream xœķœKÆ$Ir÷÷Wä’ŠI?¶­Éī”…P)TQ¤$@_öć™U3œŗäN a€éJ»ž07;vĢ<žå‘žł‘ųßłļ—oż·óńĒ’õ!éćžń#Ļ“Ÿi>jJėYßnAŁ»ÆąKPźsÓĄŌT‡š+®ß<įAÜ-īQŸ¾ŸÅ—æ’ķ9K+żńb²’å÷:Ļųųõ£„ō9÷£“ŌžkÄÜnI]ūYņ£ä¾BJćŁłŁŹ³õū÷—x  ?pµČM\Ļūēyķ $7?·ZŸåÕæŅÜļæž|÷zśūńk÷~“b«z -žZēs®˜ÕKRŹ3×GÆ”3±Ó%ĒN7~GĖz’ü”Œj¼„*聫ƒė·_Į—¤W?qõ0Ę3—×+ü“®1\ ®1^|? mŲļuj’ŪžŸœŚū¶å”*ū5·½Ā|¦}ĻmĻē{n×Ļ×Ü^ <ņWž}½ā5·œņŽGī¹åTĆ\o8æ^3»’| łzśū)xbµŌ-ßTĀ…±łö&sSćOĻ Rz~f~ēü¬ūžżå£ęŻżÄi‘Wõ§‡ū·ßĮ—$žŌ§‡šęsõ×;ĪļxāÅŻāåéį‡yH#æ“cėī"śÉyLžśķMšč įAfüŒĒCÜZ ŠŠļß_>Lœų·łzžśéŠžVuóėńĄzßõ’Ž®\ ®ž~˜Ā5±X ½pƁ¼4ÆKóĻ÷ĢgünĻQųæ2NĄO{5Ø;?Wyup’ÖōĄģō,óńź`7¬Ąż’db×®×OßĻĮ0ņ÷8/6l„ 5pĄdō÷Ū-©#ŒMÆŃź…Q/Ü| fĻŻŌčļ˜Żųń_#ØųĆĒk¬ZÅ%…é /?ņCŪ{uõ»¶y^jÆė×’““X |¶Ķ®Ո~VŹ^ā¹Ųŗæ{„?j1µCo½Ē+ÆżįS}hś“9䉙–1Ź‘–Ī-eæč­¢«H0v1ĻĖ36>Ÿh„6ŸcE«]@ć“ Jźžį/ÜŁ'šżś±Łņ “{“®ļ­vĶDÜźģ3Ķ~ż˜ń¦3O­>ėŪčkąiŗśy£pŽ Ż1 ›]Xn‚éĀžŗ›Ÿ5!žĄ+Ē£ ēÅžN>Ó,}ęe}k‹÷D«mvyc°¼čŸh†n…ŸŠæV]6˜÷+KŖŌ/Żśy³·‘D«eQkŁÕĻ4‹ĆĆn[Ų§<×Ö+‹Ö—γfŸiꀁƒ³Yį‡Ęß+ąb€˜µįgmb‚=ÅyĀ3E(K2&' ź/–įņŸicŠ“6ÖP .Ž×JēUaJ÷m¤?Óģ׍+0†ó¼ĮÜKQyyĢ@%ŖĄ0öĒ žüóK µøłłūc²ėõōė§»ö··ōøŸa{ņ~õ~łøp$Æń©ƒ'šÅĪ ńw8»ų³ĄvbŪJ(̈n§÷IU°÷`ū™>М?~üK˜h)ŠłĻ—o’ōŪĒ_’m˜ģś$l}üö÷Ī€W¶„"Ö”ayæ}ūų«ņ~ūļ’ł·æłsS9 \!BÖ?LjB{9°ż{%’WŪ„ &… ŒctA‚p–qöĆ~Ē3uś‰fŃYé;–‰ÄŒ|F0.÷āĪ>Ń ė!K4=«K^<Ģd„F “>/ćžÓVŃUļ™ų-—X܊5k;ĄgąÅˆMb÷ζ¦Yt6l1rD6†*_PįÓĀn\ęų3Ķ¢³ÕQrn‚ĄPh±9T/b„ušĻ4 Wīm”™+ ‹5³łŪ›;#¼h“—ąąŲ÷’{ž{Yڈā,ż ż_DjĆÓÖ”š/4{Å«5y@Ē·čP·ż dz’V؄aä[„QĻų[™K„Ńūė~¤¾Ż’šīiµ.9ĢTębÅæŻ’ŚĮH'– æ¼(+BĪZmƒ™x ü³Ę'LĖ'ŗl±ÖąØ ą§ā§%t[țCö™fŃŁ&~#¼ˆUŪ:×lē:0Ćŗõ'š†¦“Ąkqöt/­ 5Z@ęÆo’7"įß÷ Ó·rF;bGö–°Å$ųéøūO4£³ų+0üZPŸx•BĆ2ÆĪ~Žģ­3؞" ßˆīŁ÷*ö}g”™ōo˜UóŅŖėO…Få¦?oōŅś\ -öMDį€cIaƒæ"I„™’Xż‰¼JTā )4w21’Hŗv+$õŁ–$­5Õ;»üTA·C&ĘMˆ…šJ¤–"B'‡ö—&I ‚ś “[ZÜyU‹ĄAĀÄ :®DĻ~LIŖóĆ=¦¤Ą-§I&`t”_?vLiĒģj›Ž26īx{C‡DĒĮ%pbk¢oæ~¬ÉVikń)] §aįčue /ļI±¹!˜œĶš'µn憀 l[ėņtf uʼn 8ŠõŸ™°Š&¬'"ĢG/Ā6Ž +ߥW¹.«Y%ā®o¤Ā)r,ˆ|Ęba'֙0-f’qx”bøQ‰Ęe”T4āĘR„%iœ”XVŪ®Nm„ƽ"—0r¹e[ÕC9w ¤8Wį +H"$ģIļ–c0r(ZY«™śĶaŃVĀ€€JÕ&Śhėß {5 Ā Š)÷ÅŃn¶j‡Ó@Ż·$³Ÿ” äsŖ °-»=%U3‡Äćo¶#;w >°'!‰ó“Ćź„$yo" _dŽ:@1Š”6Ē‚“¬“·cßQņēģX}gĒ& &$™’"až†°^ÅŲĘWóˆU”c؆.£ŠĶłĆÕm+¬VYČ>§qE†šć ō±®6aYōTģŖt!7֜§X3ÆGōShūœ,!°„ŸX½ÜµĻ”9˜ž«ŹŠ¼żfņcM7ę2lW?†[nĘÖŚHFä‚5‘ķұĶcčŲĖvÉĪÄŹlKŲ®só4•Z©µŠŅø(E%“beÓ„0I‰j‰3ĪŠõ®•eC«š¦µšü_˜°C*äKČį©5å@µ1 až>fš+™`ьyŃš•³(øšį§Å…„Ł7&««#n,SgÕ2šĻvåąSJœ*[`.¤“ä.¤‘…” ?% JĪÆ±÷GČ*¶G¼ (E¬É~ĶƝ—p“ģaŲ/éóץ<4“ģĆI­¢%ź8VĢ÷‹6/ńņĆŹļKRD²ĒReo¦R¶łÄĘ[29µX°āšµp:°3–\Ć©åoEĒrģ…¼ŗųń9ģŲ•Ž’I‹Ż/]°ĀzŖ*üDRĻS逸‚_å)ķ²†Üā_2W1Ą¬ė±Ń‚~ķŠš„G$äV¹Ģgo¬¤«Ÿ>¦1¶ Ięl<ż 3N¢¦`3ŠX‡é’käw¶-)#åłfģŠĪeHšW8ņN!L’e’$·ĀĢLü›¤oÅ"+¢Ń¬Źā¼Öų–1 A„ŽbłCRl5j¶$™h0$&’‘ø˜-$Cā8;Ö¢?“xS;m'‚"$}<ķ:‰ą<€n™¹’ul8:ÅÖdRŪZģĶźĘ9Ė-4ٶŠŠ°œaݚu:§¢  Śį­æ¾ģ§““ĶWön‚®…ėBOCŠģSJY äšģ^¬¼liĘčV=Båœ@ćk{•Æ’B¹†”ILŠ"ū‰"vZ¹u[|d!5ɼEK3ā0¹“%Ė&sXåI*Ŗšńd¶2a<°!8ܦ‰hT6Ó:Ą“ ƒŒ_2p%v>Ϙ‚ŽN&ĒkŹ)Īō³ĖvZяŲāłb÷ć‚ĆŲ’ƒDŽū)Ą(Žp?'«cOĀ‘‰±– T·›(~ŖėqšŸ×Z½0‹Š3ÄĒöé<ĆURøq’óÉŌ»āHN“ķ V[uY“żÓÉwµNÄE¾~^Żż h“ Ö |0ˆłõ®Žõ¤Žb×§;N¢ˆ¬ [sHŃw±µjēäŹ:ai¶:{Č-ܹFӚźrƀg£Œ8Sˆ°õd3Š“łJ¹!”lIl ū)¬.āŲ|Ć.Q¦;–ąVׁŌķdU¬ ØPL‚”H3šļ9±CĪ“¬e»y`¢KaŻkõPŠźw$!ŠŻĒāł”,sQ`­Ōć˜;"Ą·U-b,{¶ńlp•0¾æ\˜›6ĢÕĀÜhClp JCģ#šŁ’Äß ŅÓ ģ"KX(›³ŖųrƒÜK#c­6­©Æł\ĄÉēž†DģhŚpRGH„.øQŠ“E ‰fqŻ’0Š©łØ'K҉cė1¶'S »”Hƒż‚ƒøćį¦ėa*p-& —U3÷yVö,)|÷’ā¾Ē,ūØ'EDČXĀt$Jģäɚ»g]‰Š“>=Ė╁8Ģ5܋ļ,®ĖĶd1µ™0ĄM’ØÅ¾6~6­Œs9i]”`[ö]S]pOZc+Ģ¹oéT–5CK{(„ĄTņõuØIDŖ¬öüž9učO†¬CA”‹žŲ"ķ$XG";ö&©véy–‹æ!v-¬—7Ģ€Ū‹IbŽ¢†¾IÖ!ČŠ×÷]‰M‘0<Łbe,SŸpYŠĢ ų4‡š]É ±:Z0xˆÉš"Oūńņ(¢LB óÜjŠ~Œ£H—ŚdE~R¤‹™'•·O{öPV)É©w»°żŖžm8Ä%Lih=iLČ55éV›,`šß”8±ö1“v‘qŒą}«N…ĄĮń(XFK:Ī™ŠĆŪ¼YćØh˜¦ĪA IóA,$gݦŸ «sŠŠ'•ŽU»Ö sŗ ±fu|r˜ üś^īoõIŽēM5Wóū‹Fģāļƒacźņʐ¬ŠVÅ_LˆČė.O¼Žįr^ĒGa2T"Ņ÷įVI¤U—ēP-Œ}œĄœ§0ąŽo„‡XŒāµæŅLŪ’¶N¼¢­j‡£+Ūł¦[ 3vuĮŠńqŖĖjR‡Õ¤B‹Ŗ˜ćR~!Ÿ×sˆ*fK’aČ„Ē*ū’ÖęķĀۊLŃ“ķ¤ššaåÜ|–ŻÆä/EaĘę £–+½÷²; øl¹Ic ‹xvꊙ2˜£[²@B}\#@RB2Ī[³±ˆpČõŃUĻ|äī7µkž`¤"Iņ™®Œó1ø*ģȅüÖ¶ŸNTłČ×ųWŁęv/ć[)¹™ō‘Ž"Õ­šC¬ļ<Ō®—=ĪVė ŲŪ6¾Ņµ gĮį ¼Į>(e 2<ĘUăXV ŒųS'W¤žŅ‰c2H+ŁŖO×ÖåÜļ*&¹Có·]Į2‹Ä ”Üj70’ś#RW Xd#éś ½»ŌVĆ8:a!ȕ…y™ŽĘ ŖĮć!ųe±Ń€d`C½_6!ŧ§„XhŲ“/P<žĢéųl³“jļ;M.Ŗó M’¼mįx?xĘWŗŗ³"ĀIŹ‚4įĄ­é[^Pviń5ĄšW†&\ø"ŗ?ńšŅyÜÕk«f•¦¢rįŪjóå€×m»Š1^ĪHš=zÓupŸĶ–U€ƒų7ķX-Łģ“ĢY–œ"IH#$i#Ē%±Ž”ŚWćŗƒY°÷rČŁÅƒfĖĘ8Šų—nh*qÜpP±‡Ü99Ė9§Œ•ŗĆƁn ›Ä (FĮ¤&ā4Į>ećoX¦ųM²’.»G§i@ cŠÜ]D‹øRÆ ČҶeöČéVc½]•A'޽»PŒ¤jŁ&‡_ŌnĀDPY%ČÕįą3U_O !š'ųteO*Øx؆°[Ā ¢•Ųo-WĻI—¤‹źqŌ1Ń3!Ā]ŒŁĮ«ģ/¦“ū)ņ.uŖ!õĮˆ†Ģ”œv‡Ó* 6T…Q@·ä՞X(I€€T‡ÆRĒ\ĪĀ¢~Ś«Ž^£‘°ēĆÅ9M_Ix—t±}ÄCa„®B£:·„ZĆ¢{*ŽULųĶ¢‚5ś9ĀxŹR}ė'ŸX]ĮqV¢óÄźŪWUȖ/ėĮņ1²OnĖč&£1V—ēä•ˉPš·ņģū˜ł¶Ó°ƒ›Ē µ]8¹ē©_§ØSŲ0tKüļw^ēĻa0DŒsH²£ĢN–—óĄ]rļŁT %§Ü7™zµI":ę–w÷eÄ‚åšÓg¾o×]dnüy–ātó›ä×÷’­ęä·²®zeęm‘B’¬ż„Ķ X ĒO¼Ć "]'ÉF…„ß¾ƒ±ėÅĒŚ’U $OV/{˜BUätĮd ¾bĮU¦ę"ŠŲNx›QŪUČDłĄ\O¤‡×eĢ >ÜøĘLŁĄJp“Ÿlķ銤­[ʃę“N 0%¬ūņw!<ä”6•TßHjmžmśęM󚼤č#9)[Q(œŹ[_ŻI6]dW DdÉs‚ĶņI¾$cÄSåōĆ+ĄQßNię}9 +äĄ,˜QĄ]'šé$żd–‰Ą!ÜØ˜²YbļY>@92®Ś„=*Ö6õfĖ@¹‹mgYĮ(ölŻžé®P”M,Ŗ F ÜI7nIˆ”U@ t~­f,ƛ Āf^…åYÆJ˾‰Ūę*³L€y&1GøBŗė›ćšgÓ¦UI|Ŗŗ^u2[Ūę6(+ ei®Āą›—»®Fdxe‘Äņ³˜.2„(ŅRZšź .’­:J1uć”1sUgÅ]K šqVdŻL–$rŪ×GMؤęšRÄ.“P„!FWœ×ä“CŻ]^Z}kféœJ¢¼oĘbIÓĆf Gąė™a ϜķyWāæĀö ‰Łó;}RĘ醘UóŁā{\æ!ŚöH.•ś=µX]łS}/5åŌ|P -¬V²łž?IyÜ×R^Ÿõ9žń‡düÄExÖ/›P€zī䟓ę‘(Ń)7$ÉtĢžU’.a źēhµŹ”óĖn'zåė(ŁKqN•ŗæ÷r“Š/lźwŸT(ųŅZYU*ŌĄĒ·UØ¢óĪw[”nص+ ~ōŖob`Hr;ōÅś T=„F\ęē謞JpJKtļ²Ž×ĢL7©ć$ ÉĢ™µl ®rOf­“q… ĘĪŃEŽ'ėY ś³S+A9hĘf–ø>Nƒ’`*ÓX¢?Ÿƒ գƔU»­JŁ“æ¶DhUU“b˜óEŽÖÓɲ“ˆˆY¦PX·¼żU§W`«±‹Ü0q–__Ļ·Iņ‰…§Gæū] ƐU@毯œĮ]Ԉķõķ¶—„ģ»§ü]›ė£'__ßń`¹³··>­÷”ø1č,ĶåXz.VŖĖe5.qd}k®›=ŠnD;¾¼aī‡v©” j,Ź[1Tc’5«~9(Šx¤a24쀔‘4©ćŲīš ¬“cŹ]*|E=:uĶ7rąōso»½UĻ”(]hś:ŃQ¼¦’}eéxįóG’$` H . Ģż€ķ c‡J‘ŸüirõIÉĒф‡•+Į›RP³µš§]ŃUD õįNO«sć‚t uBĶćĮøDįŃ L·”ŖŸāf *n”ėU”\—ž–ÄźÕJ/<¦uH"¬Std1E•²^F÷ėVųĻ„¦9Źuݱč·[ņJ‹æŻ>Üåܳ*Bü†dČK¾įb/”ĆÓ A„¤)ƒĄ uņ7>nå+¾Č&oiŌMÅ#˜?_A Ń,QiĒYØł ” =xĪCS8,]Ku*®•åģĪ”«˜ŸT łaūڲ²Ye–Kš!4³gµœ>f ŪĢ /V ‚¹†‚ĖØŁĮāŹ*×%Ķī„XIÖØ3¬V²®õAŽ”œhg©Œ¾ū B>Ō€øhž6CWĄ ÆRw ¦ļŠź0ŹłyH°eIRg=øäąČfVĮŠ“Æ^\HČnjīc°ołt’äœ:±­õnŗVXąžĄS„Ä©I®ĖQßRdϧ”«©į6R†&‰(u)µé ޹“3H |R¬Ń¹°µųęU>ģbUzvŠļ­Äó`ųķŻųrK”Z1/ßpA&W/Ną ÉE§ “Ī„».gCļV%5™ŸPX°uļ ‰«EūĆ+s¢hĄ›Ł¼ĪŻŗ*`üģ'ö†‘£«uHœŸĻŗķŖńQø Ą×ż+^©:KĪ „¦Q·é“…Ē ]0—;Mņ&½®¹s7%00R2‘qīŠSŻ\tī,ōwnŸ'Ų·–$iĪąÜ¼>½óvæ~ofüQ£åT ó:“X:µŲōŠU½værĄäĄIQČiŸ¶²>Ȓ!Õņ”Y…¢p7źü°?+]¹{.Ī“.χæ½2{óT¹t_éķ$_Śt ¢‰˜ü"Ļõ–ęiäÄåwʦ-%_śįé† ńƆžL^#ź‚FDéĢ¢sFįąŗ’¢ąž:wŠ– 0ƒL¼|źQV6:öÉęĒ™ssÅą±˜_Ģ|aĻŹŽŃ¾ŗēU:E™Įō×\ŗĆ©]bÆŹ©PŁZŠĒsIµqC^Ņõźęo(ą0Žøņ€-§ųįęHż”vč¶ĘĮ†jįZŽ›8›ˆ3ĻČįbÖ¹S«oĖ™Æ¹;9_{kŪŁßmĘņŖ¦Ģ’å±Pü~9]1ŹÉ`÷«æ#%w3×jpĀ0‘©;\« P©Ü—/«j5ī0§aAb脧é¤U²J€6DŲNRB‰h4Dŗ50 G¶ įó%*«Sƒ7Tw£’ę“öéŗęE%óIA3„g£v[Պæ*ŒočĪeŻćt*R¶ŽDõU÷Å4GóWF„³µ(Ü>R@žxywéį©#é|d`QŸT˜—S¢€€ļdģ}²_"įØņš“|ō›qo”„…‚`Ģś)`ŌĀ>˵ŸT`UAå8 U欙nPć|N¤ØE"£šĪ…XW䣓“tÜžŚ'÷¦o 5ޱŁĶk”Ńė ’M6Į֍@%źį’n Eę4 —"cŻłÖÉo’ퟒńŸžųųē’ń’ōæłģÉæņ™} –$‘š ēŃJ{p67~įr.ć·?|üUā/ä@a ~éē’+ł%ó§_@ų)įžĆ\„Nš§|uåo>ž/¬uV(endstream endobj 6 0 obj 8991 endobj 4 0 obj <> /Contents 5 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 7 0 obj <>endobj 10 0 obj <> endobj 11 0 obj <> endobj 8 0 obj <> endobj 9 0 obj <> endobj 12 0 obj <>stream xœeTkTSW¾×ÜÓŅ6é-¹·/W[E‘޵L;*…¢­y(£ isIy y˜A!B ĮP”gŹA^B)ŠJ„ŹŌYµö¶•²Z; N×L̜ėŗü˜¤kĶĢłsÖ9gļż}¾żķcaė0Ēó”j¦$.S«–jBēMģ8ūä:6–9 {ļĮN~,–ÖĀ[Ćy0<¬żIĮœ­>†n<‚.<Šńp|äOß%kuęb„\”§ŸĻĪĢ}aćĘM’»Łš˜˜Hækž…NaJ”r ½!ø12*­NĶhōÆŅÉAo•Jł-W™uŠZ*“1²PXŽTÅŃ©J•R§Óéē“_ āć·Ę—„Wétƒš)Ön¢•š„F©7ÓRŒŽ§fäRZ-•1!€µR_l¦ÆŌü7:]©~×PB’śe:]›H§Ń™ŒÜ ’’æưV§—Ź•Yqń[^¢1l¶ĖĄ²±×±=Ų[Ų6,{ b"ģq Ē ’Š…aFģ ž:ŽønOÄ+ąńęĀž + »ÄßĆߋÜl5lfc®ąß,””%Žiöiņ¤»±ö=>kÅÕ0³Āvš°"E3q°Žź‡Ć%>šźšB0P½Iq ÓŹ,‡BN²f"ĻSī‡3™‰æJ꒎Ø,{w‹ļUuyfeEVitšE{›Šƒ÷ŽCļßć!7›Oræßȉ¹'V6 !Ž’'£Č-«ÜćT™–\šßČÅrüwvļ’ƌ”v¶ō&ü¬N_’\ÄāŌg,-(c€ųDųÕ2,GЬ>6–ōÕz”‚³^ūajMAˆf`nEÅ~°"+r¶vՖ‚ m%† ö ŠĆAač9ōč?¾x@Rœ-” G]¶QQ–e‰F/ī"ūę†?ürf'8^Ž®äƙĆ}āŌoŸeĆš›K<ŌĄę4ŗÜqU„£²ŹĪdå’±ōDE•£ :aum»\ā. ¶÷åĻόfÅe§ŒÅ»FX»(4ś"‚ŻoæŹF„ē~Hż=óm¤h…MæAZlåN+śŖ÷')”KĄYgÆ5`Īo݁h1.)/Mßfź “·uŌ»<./Ućs5@/čč›éÖd‹Ó nóŪ–ćł ­L6eaLڤäŚäxūģ5±'·Å8ĻĀv’Šą¶Ü%”ŹYi,/±i+(“gĻSõœFė'AˆrĶĒhįT8źéöÜŌÜEo,vwGŠ8¶"Gw&hu›¼††(]£Īs4˜ڜ”ŸÖĶÜ(¤Ž™Ķ‡³PSf‚&hō—›€ˆKÉÕÄäܖ¬~u»kbV<ŅfŽĄė‡'’Üy2*§®ŲOƶĮ”īŸĖėrĆ֚&×IxŽ5÷wö4Į °×Łi\ÕZ 9Xõc‚ŸĖä;e’„ŒŽÉNoÓÄJ„-nQų@8 QŁ'żō~Ø ĮvXų_ 49¤Ģ-Y|+ŃPėÆkŖõĮ耯TBqV&Ū+RCz·7ozŽ7Ā[!ā 2’:½^«ķŠ÷ōvvōöč;5T‹`+ūóŽ¼æš÷F®UšåŠŠWœąšj%ėmMš Ą6\&v˜;¹u p üµk·ƒŽŁŠĀ ˆ@Ė(gEdr-ÕRmėz ģĀ÷QÓżü+d”Z Ž€ÜCĆ¹‡¦œ“\,¹ /Āóg†‡®^A¢õIćŃS\¤øś(¹4Åń9†c$ō¶m’!RL!Ž2õė|Ą‘r™‡&ƒŲܞx¾š{NÕ××µxĻŌ7BŠī³Qk‡Xx\_Zi­“UK]Abz›‰×jKįG€ż[(Mų5Ūł%Ž~Zę±ZK–y 2Ė*߁ŃÜqz „üø2ś5¼ż÷ß/>“•kxÆ@\¤“YRŚQc?|ĮŅǙےpdóöŠKå2ųålL•]ūDˆnŻanEŠ.”8t—œ‡5J jænĶLŁžłV’Īä ˆÕ-Æ%Ų@V›QqŽpsńN×ų45=Žuž^,Öō›:Žł%­@té³éĪ]ŽłvļܖCK‘\¬ÖYö5Ÿˆ’bjp‚O§$ir«¼ø˜R«µÖŻ%Į¢ø#LmlNŹjō=üżośĀĆæo _a’Ķd ž endstream endobj 13 0 obj <>stream 2010-07-07T15:52:47+02:00 2010-07-07T15:52:47+02:00 fig2dev Version 3.2 Patchlevel 0-beta3 tap_point.epseckstein@NBTF01 \(Sigrid Eckstein\) endstream endobj 2 0 obj <>endobj xref 0 14 0000000000 65535 f 0000009306 00000 n 0000013378 00000 n 0000009247 00000 n 0000009096 00000 n 0000000015 00000 n 0000009076 00000 n 0000009371 00000 n 0000009472 00000 n 0000009825 00000 n 0000009412 00000 n 0000009442 00000 n 0000010100 00000 n 0000011861 00000 n trailer << /Size 14 /Root 1 0 R /Info 2 0 R /ID [<0896A01BCED4649F7F1838B8A6236630><0896A01BCED4649F7F1838B8A6236630>] >> startxref 13617 %%EOF ADOL-C-2.4.1/ADOL-C/doc/tapebasic.eps0000644000076600007660000001116611227416777015226 0ustar coincoin%!PS-Adobe-2.0 EPSF-2.0 %%Title: tapebasic.fig %%Creator: fig2dev Version 3.2 Patchlevel 5 %%CreationDate: Thu Dec 18 13:02:12 2008 %%For: awalther@localhost.localdomain (Andrea Walther) %%BoundingBox: 0 0 314 156 %Magnification: 1.0000 %%EndComments /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save newpath 0 156 moveto 0 0 lineto 314 0 lineto 314 156 lineto closepath clip newpath -27.6 185.0 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y tr xrad yrad sc 0 0 1 startangle endangle arc closepath savematrix setmatrix } def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin 10 setmiterlimit 0 slj 0 slc 0.06299 0.06299 sc % % Fig objects follow % % % here starts figure with depth 50 % Ellipse 7.500 slw n 2937 1440 33 33 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr % Ellipse n 3150 1440 33 33 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr % Ellipse n 3375 1440 33 33 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr % Polyline 0 slj 0 slc n 2025 2475 m 3375 2475 l 3375 2925 l 2025 2925 l cp gs col7 s gr % Polyline gs clippath 5230 930 m 5415 930 l 5415 870 l 5230 870 l 5230 870 l 5380 900 l 5230 930 l cp eoclip n 450 900 m 5400 900 l gs 0.80 setgray ef gr gs col0 s gr gr % arrowhead n 5230 930 m 5380 900 l 5230 870 l 5260 900 l 5230 930 l cp gs 0.00 setgray ef gr col0 s % Polyline n 450 1125 m 5400 1125 l 5400 1800 l 450 1800 l cp gs col0 s gr % Polyline n 1800 1125 m 2250 1125 l 2250 1800 l 1800 1800 l cp gs 0.80 setgray ef gr gs col0 s gr % Polyline n 2250 1125 m 2700 1125 l 2700 1800 l 2250 1800 l cp gs 0.80 setgray ef gr gs col0 s gr % Polyline n 3600 1125 m 4050 1125 l 4050 1800 l 3600 1800 l cp gs 0.80 setgray ef gr gs col0 s gr % Polyline n 450 1125 m 1800 1125 l 1800 1800 l 450 1800 l cp gs 0.60 setgray ef gr gs col0 s gr % Polyline n 4050 1125 m 5400 1125 l 5400 1800 l 4050 1800 l cp gs 0.40 setgray ef gr gs col0 s gr /Times-Roman ff 317.50 scf sf 1935 720 m gs 1 -1 sc (tape generation) col0 sh gr /Times-Roman ff 317.50 scf sf 2340 2205 m gs 1 -1 sc (time loop) col0 sh gr /Times-Roman ff 317.50 scf sf 4365 2205 m gs 1 -1 sc (target) col0 sh gr /Times-Roman ff 317.50 scf sf 4230 2520 m gs 1 -1 sc (function) col0 sh gr /Times-Roman ff 317.50 scf sf 855 2205 m gs 1 -1 sc (init) col0 sh gr % here ends figure; $F2psEnd rs showpage %%Trailer %EOF ADOL-C-2.4.1/ADOL-C/doc/tapebasic.pdf0000644000076600007660000001342211417030411015157 0ustar coincoin%PDF-1.4 %Ēģ¢ 5 0 obj <> stream xœŻVKŚ0¾ūWų+1õų=×JU„Žv‰ŌCÕʆ,]JÕæß1±µŠK/‰ąń7ćļó<Ā›T€R„O~®vāŻSŻ”d'Š‘…(Éj ėän0ėI¢‹,IŅŠy^ Jė;x ĪVg@›*B^ē#’G¶8 Vk9Dš‚č— Ÿ9”żžįą=Q°ėa!h«ü%ĪŹåÓĒ{ś"–ƒŽ@”ÖU,…V@ļGŚAEĄX óä!ąˆš1€äå(+ ÆāžY—ųƒŖB ģg~ÅżBĮ9÷(뜮LdeC!=‚©Ŗ0ZĀZU4lU…Q ®"äõØ«X ³!/G Ā ‡²ß3¼' ślݟŖs²dśšģ "nŪ kĪit ŒRGÖylżĘ³†©+–ŸFĪV“Տó֖ć…L”ؽ$†46q-–ķha0ŠŁR¼®Y5D¾¼ÄKM0CäńłAī…‚ØTˆČo€$šEÆÄGóŖćpއAś/ų„xü£Īæņ«T™:\ÕP³ł§¤ (ZśŌū:‚BÉÆ^Ś>ļÕUF čRš™ßÄpŻ”ÅÄn‚ qnƒ8‚·× Ż%ŽČóEu—WRZaó6(Å4ÜWüśė„ÖĮ„4\y“Ģeqģø±’«|ßš’N0"#›µč’ńŒ° £s\<й͛˜ž_[ٵūöų|Śöó껹ƒ2žL¼ł&¾ĢN›]+·‡Ćė|”]ąś ģ{ģŚÓükó‰³D Ź?£eŚģ3[’ÜÆJŠ…ęju©Õ+Ąfæ9„Ķ ÷Ń£ų Žńkendstream endobj 6 0 obj 645 endobj 4 0 obj <> /Contents 5 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 7 0 obj <>endobj 10 0 obj <> endobj 11 0 obj <> endobj 8 0 obj <> endobj 9 0 obj <> endobj 12 0 obj <>stream xœeT{PSW¾×@ĪŃ%›"¶äŽéĪŗmEEŪŹŲ©ŪQ·RMĮ¼€$˜@"! 'D!@xEƛ h…²«–¢Ū:«ī²Øm©ÓķÖź8ŪķģιĪķ{ćĢīž±3gΜĒļ|ēw¾óż>’[C$‘!WJ+¶¦«•bUhǼL2ƬabyˆU=ļ|¾'<–HńńÖ”Šė}LDįg?Ē·×ćł $'’še¢Zc(—ĖJ“ōk™éŁÆoŁ÷æ• t‘į?;t’“B.Sћ¹^ŖPk”R•v7ČE+ņi™Ā )© Å‰T:–%VHOŅÉr…\£Qėé×_§wĘĒļŲŹu;wÓ©:„“\GĖUÅr•\k Å* }D)•‰i„X" $)åŚrżV¼\õßÓ©re‘®‚~ńd:U@§ŠéR™N!.’’‚ ֫Ԛr­Nü”“X&W(i‚8B%҈cD&‘Eģ'’ˆdā ńń[ā0‘JÄŽW"ŒŠ×ČżdłĻ5bÉĖå]‹ ū!<1ÜĀēæ‰‘ĢYäe6]#®ā¤U^'óŖ°ŁŁęp#8ą2åQ¬ t‹9ē 4į/Č9gņ  Äcąźå>Ļ(‚s~Åū+(„ژ ’xA^SĶAlß\ߗÆ0:(zly¹%£*†»Ń:Ąģ æÅßņ°“)²/ÅoaEģĖ7ć(õō_X„£·?aAU«…«‹[ŲX6üƒƒ{%Åž‹zJ½PuŻ…O>ŗyWÄa±Ź.£§0‘ŸF-ÆbŻ£hÉÅÄ ]ŽäBp¬Åz‚ś©ęP¶År“Ą„ķ>ž^GµŻ‚x/õ[§ÄkæĆaųWxƁæ¾q¬ <³€Zu™ś’ź c ~cÆpčzšŹŸēö°ååķM<‘EāGȋ’žŒüĖ*ƅŁ$ģpŗĻ»Ŗ (Ö P®Ķv؆cÅęF/ŗ±ŒĢĢš]v«[Ōiv×µ#č÷v Œź{äb•6)śŲ³t²ź£§b"ń°u‰!ļ¬ņp+“%܌!æ­ĮY'²®;m³J3 W±ŲźlȎĪ:źõšwģļło.ĪMśFEÕn}¹ŃŖC1ŦĄ- OżBģĀ»ĢQwWqņj“ą2S1/“óó-ī+~ +ģN#’ęYåB¶ µŻl¶htŠ%‚’“cӔą2~Ąn6ƒ«g;L(²Mą«9š˜ź D33į»Ą¹śłž ūćī«r—mōGM|“ü žåтĒLźēB£¹ĘnBPk똄p6@ öA“_,ģ>Š `eė¾¼mOeææ·§ļ\CSC UļjhE-00Ņwq. Ź„vŪacm” ė*ĶņŅM)³K³—z–DMŁ>ż%4†z=ć“Żž•)ģ§õ5fõi=‚%ź±ź@‹—‚xŻ, åw $ĻÆš˜Wq¼šųYE:‚ń‡bšćµ»_Ū-ÅmT³®Uķ3ō¢˜ }Żż×|ōv^N„¬ˆŹ-PDļ@ö„Ū0ļņÅĪį (ąļ -¾Ąż#V`$™8¼Kx|O”źJG…ƒŖ†IŪhżÄKüŚĻ¬ƒå#Ź`~o6ŹE' Rł‰"MJ€¬čŽo0x²¼ˆ‰i{Ē Ż÷Ē&–Šņ«Ū߂/TĒüz„ü‘“ÅMNģzNŸtOövXU>Qg™ĒŚ…`·Æ?XpįČį,M~UVP+kŲ N~ÉŽę£ż–šÄP¹¶{A‚ÓāFĖßʑ!u°ŖųÖy\:Õ45pGõ>°D X¦”Ł(œzT"“³²E×ŗQÓ¦i*ć> oŪ—Ÿ~^J2ŒuöRUu%ŖDzOĶ„J(`“²5„ś²ī[åu?ē ›łn‡ĒъąH›™32€2ĶÕ)vČā)ējŚŠ5Č|Ī4f„ÖdcLäón.ŸŲņŃ*N 5^7gæķĪ֐ż^pU§Ųę†éX‡QīY&7š‚x ĘÖ¶––óż3]ćĪö• X%@Ē,–ōPŽZ/Hw˜ŗŠMˆ›ĄŠĢØļ ‚7|š]+ćģ¼¶6ĶĘ©½ ¬QŁXķCS1øąµ’OßMĖ)KĖnČ™Ø©Ķ»Rą2ēÜ9§8ē6qv䌬ģa²zpFhķ×?jˆųŚ±Ž ž ķó‹” endstream endobj 13 0 obj <>stream 2010-07-07T15:52:46+02:00 2010-07-07T15:52:46+02:00 fig2dev Version 3.2 Patchlevel 5 tapebasic.figawalther@localhost.localdomain \(Andrea Walther\) endstream endobj 2 0 obj <>endobj xref 0 14 0000000000 65535 f 0000000959 00000 n 0000005226 00000 n 0000000900 00000 n 0000000749 00000 n 0000000015 00000 n 0000000730 00000 n 0000001024 00000 n 0000001125 00000 n 0000001482 00000 n 0000001065 00000 n 0000001095 00000 n 0000001744 00000 n 0000003701 00000 n trailer << /Size 14 /Root 1 0 R /Info 2 0 R /ID [] >> startxref 5473 %%EOF ADOL-C-2.4.1/ADOL-C/doc/version.tex0000644000076600007660000000017412120123050014732 0ustar coincoin\newcommand{\packagename}{adolc} \newcommand{\packageversion}{2.4.1} \newcommand{\packagetar}{\packagename-\packageversion} ADOL-C-2.4.1/ADOL-C/doc/multiplexed.pdf0000644000076600007660000000671411417030411015566 0ustar coincoin%PDF-1.4 %Ēģ¢ 5 0 obj <> stream xœµW»r1 ķ÷+¶¦XlŁņć ØÉ-ųHqĆ Pšūȶüöffg–I‘Č–ĻQä#Éūk‡ÜEųįß_ß¶/v’ńgÓī·ø·æ|ŚĄH»Kvćæ…³ūs{læČI %h#ų>7Żü·žŪėZšĆģą5.  “Łz&K į’•|ĻmD±¬­»ėuūņa’¹yŠ!9: łĄcūL±žX„“€m‚Šźœōū‡Hx'äė…좀Ž„o²­Āʾē¶4MĢ=rÉ.Sr‹Ņu¹ƒY6ōØĪé(ÆwĀ…œ’Ųµ÷H¬céϔĪßß_’ž¼õ 4½<±\D‰i“vŒęČ“ųˆk eöÖ“;H³tŸÖ›’–žė >°Šg½ĮÖŽ£«8¼ŠTŖŠe4՞[®?šī3øÆÖ/ŲCzæX@PżVŽķ U)"^@$I=7mģį•xæ^ (ųˆ“śYŗ^%Sč± Ā jÕöŖ9¾{f&Q×ģÜ“ž ö•īEB8 ¤TĄ%Ž&O6\*ļźz¶€”āćŚnŗ6¤›½CŗēhĪ™QK÷.c(‚»1Ƥ7ߞ–˜FCŗ\ōĮ3ĖÜŗčSo2č>ģ,W²@¼įS-ĒYŽ”Lˆ!¢ mĮȂSŽóJĻśöķ —4,<šK )©õ”kūPĀ%›»Ś(5ŁR`ōēģńė¶9Ē©‘×¾1‡4BŽ!XüsM”AĒ7C^É0x ³¼”’ kA°ÅåS|OlŠCF;VW|žŪ¦ILĮ¬ ½SētazŻwMµń¾RÉd‰Ęʐõ[ś_]­žyÅP*®AG°¶źµ f›ų£¶jńvtQ¬7ā]jø>“‘ž™± 긚žg®°ÉĀņś„#Q†šV65²ąoM vIŖ6Ž_ oü­Jƒéįf:ź‰dėåHŗģp—rźø"ņŻA“„ā{bóW'©Gīsš§×˜Ó)˜%`¦÷a˜ŸŃ…œŽwń«1ŽĶĄōī+ŚĢYeåZ~ńņķōK»ØAńs·ĆŌjW‰#źgʤ/PødLŸ·B^YZ@-šżŗ6@©ŪFŚ@[:³m±-µ»v×ųєD ŗēĄĢ7ŅiŁVnOæĻ”SŻØŖ‡*¶ņ Ģ¾g¶6ķ˜ķĻsŚ>¦`–€…Õ9]Čép×tšn+×HÕfĪ*+—A¾½\3³ĶjąėńßQ«­b"šGʤÆ\µ#c콐Æ1Šį%'ąendstream endobj 6 0 obj 974 endobj 4 0 obj <> /Contents 5 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 7 0 obj <>endobj 8 0 obj <> endobj 9 0 obj <>stream 2010-07-07T15:52:45+02:00 2010-07-07T15:52:45+02:00 fig2dev Version 3.2 Patchlevel 5 multiplexed1.figawalther@localhost.localdomain \(Andrea Walther\) endstream endobj 2 0 obj <>endobj xref 0 10 0000000000 65535 f 0000001268 00000 n 0000002929 00000 n 0000001209 00000 n 0000001078 00000 n 0000000015 00000 n 0000001059 00000 n 0000001332 00000 n 0000001373 00000 n 0000001402 00000 n trailer << /Size 10 /Root 1 0 R /Info 2 0 R /ID [] >> startxref 3179 %%EOF ADOL-C-2.4.1/ADOL-C/doc/tap_point.eps0000644000076600007660000005535611227416777015301 0ustar coincoin%!PS-Adobe-2.0 EPSF-2.0 %%Title: tap_point.eps %%Creator: fig2dev Version 3.2 Patchlevel 0-beta3 %%CreationDate: Mon Sep 7 11:26:42 1998 %%For: eckstein@NBTF01 (Sigrid Eckstein) %%Orientation: Portrait %%BoundingBox: 0 0 594 402 %%Pages: 0 %%BeginSetup %%EndSetup %%Magnification: 1.0000 %%EndComments /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save -2.0 403.0 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /reencdict 12 dict def /ReEncode { reencdict begin /newcodesandnames exch def /newfontname exch def /basefontname exch def /basefontdict basefontname findfont def /newfont basefontdict maxlength dict def basefontdict { exch dup /FID ne { dup /Encoding eq { exch dup length array copy newfont 3 1 roll put } { exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall newfont /FontName newfontname put newcodesandnames aload pop 128 1 255 { newfont /Encoding get exch /.notdef put } for newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat newfontname newfont definefont pop end } def /isovec [ 8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde 8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis 8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron 8#220 /dotlessi 8#230 /oe 8#231 /OE 8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling 8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis 8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot 8#255 /endash 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus 8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph 8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine 8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf 8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute 8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring 8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute 8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute 8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve 8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply 8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex 8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave 8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring 8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute 8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute 8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve 8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide 8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex 8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def /Times-Roman /Times-Roman-iso isovec ReEncode /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y tr xrad yrad sc 0 0 1 startangle endangle arc closepath savematrix setmatrix } def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def %%EndProlog $F2psBegin 10 setmiterlimit n -1000 7391 m -1000 -1000 l 10454 -1000 l 10454 7391 l cp clip 0.06299 0.06299 sc 7.500 slw % Ellipse n 2700 1622 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col-1 s gr % Ellipse n 3433 2580 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col-1 s gr % Ellipse n 8505 3004 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col-1 s gr % Ellipse n 8505 3004 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col-1 s gr % Ellipse n 8505 4804 45 45 0 360 DrawEllipse gs col-1 s gr % Ellipse n 5130 2779 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col-1 s gr % Ellipse n 7025 4544 45 45 0 360 DrawEllipse gs col-1 s gr % Ellipse n 7020 2612 16 16 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col-1 s gr % Polyline n 1125 2072 m 1125 677 l gs col-1 s gr % Polyline n 2700 1622 m 2700 497 l gs col-1 s gr % Polyline [60] 0 sd n 7020 2621 m 7020 4548 l gs col-1 s gr [] 0 sd % Polyline n 7020 2612 m 7020 857 l gs col-1 s gr % Polyline [15 45] 45 sd n 2400 3620 m 4605 1909 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 2710 3615 m 5040 1759 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 3055 3590 m 5145 1894 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 3340 3590 m 5145 2134 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 5265 2074 m 5965 1510 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 3660 3575 m 5145 2404 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 5295 2314 m 6290 1480 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 4045 3575 m 6645 1450 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 4425 3570 m 6920 1445 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 4700 3595 m 6990 1654 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 5330 3680 m 6960 2284 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 5645 3735 m 6960 2524 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 5940 3785 m 6825 2914 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 6270 3814 m 6630 3439 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 7080 1624 m 7275 1444 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 7080 1909 m 7620 1459 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 7065 2254 m 7260 2089 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 1875 3529 m 3390 2314 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 1695 3394 m 3375 2014 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 1495 3290 m 3375 1744 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 1290 3154 m 3390 1474 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 1060 3010 m 3270 1264 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 885 2884 m 2670 1459 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 2760 1399 m 3075 1159 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 735 2749 m 2670 1189 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 2760 1159 m 2895 1069 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 585 2599 m 2655 964 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 1162 1866 m 2475 869 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 270 2309 m 1102 1664 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 1155 1641 m 2295 779 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Ellipse n 1125 2072 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col-1 s gr % Polyline [15 45] 45 sd n 155 2185 m 1080 1414 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd /Times-Roman-iso ff 210.00 scf sf 5095 1062 m gs 1 -1 sc (2) col-1 sh gr % Polyline [15 45] 45 sd n 1155 1364 m 2040 694 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 8160 4039 m 7140 6079 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 8375 4215 m 7380 6184 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 8580 4335 m 7650 6259 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 8845 4435 m 7935 6319 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 9075 4534 m 8205 6364 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 9315 4579 m 8500 6365 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 180 1904 m 1065 1189 l 1095 1174 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 1155 1131 m 1365 979 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline n 8505 1744 m 8505 3004 l 8505 3049 l gs col-1 s gr % Polyline [15 45] 45 sd n 4995 3634 m 6975 1969 l gs col-1 s gr [] 0 sd % Polyline n 5130 2734 m 5130 1204 l gs col-1 s gr % Polyline n 3435 2542 m 3435 832 l gs col-1 s gr % Polyline [15 45] 45 sd n 5203 1846 m 5530 1610 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 7790 3594 m 6650 5874 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 7966 3815 m 6886 5990 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 435 2449 m 1095 1924 l 1095 1909 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 3460 1695 m 3655 1585 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 3465 1965 m 3830 1730 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 3465 2265 m 3995 1900 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 3440 1455 m 3485 1440 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline n 2070 677 m 2068 678 l 2064 679 l 2057 682 l 2045 687 l 2029 693 l 2007 702 l 1980 713 l 1948 726 l 1911 741 l 1870 758 l 1825 776 l 1777 796 l 1726 817 l 1675 838 l 1622 860 l 1570 883 l 1518 905 l 1467 927 l 1418 948 l 1371 970 l 1325 990 l 1281 1010 l 1240 1030 l 1200 1049 l 1163 1067 l 1127 1086 l 1093 1103 l 1060 1121 l 1029 1138 l 999 1155 l 970 1172 l 942 1190 l 915 1207 l 888 1225 l 863 1243 l 835 1262 l 809 1281 l 782 1302 l 756 1322 l 730 1344 l 704 1366 l 677 1390 l 650 1415 l 623 1440 l 595 1468 l 566 1497 l 537 1527 l 506 1559 l 475 1593 l 442 1628 l 409 1664 l 376 1702 l 342 1741 l 307 1780 l 274 1819 l 241 1857 l 209 1894 l 179 1929 l 152 1962 l 127 1991 l 106 2017 l 87 2039 l 73 2056 l 62 2070 l 54 2079 l 49 2085 l 46 2089 l 45 2090 l gs col-1 s gr % Polyline n 2070 677 m 2072 678 l 2076 680 l 2084 683 l 2096 688 l 2114 696 l 2136 706 l 2164 718 l 2198 733 l 2236 750 l 2278 769 l 2323 789 l 2372 811 l 2421 834 l 2472 857 l 2523 880 l 2573 903 l 2623 926 l 2671 949 l 2717 971 l 2762 993 l 2805 1013 l 2845 1033 l 2884 1053 l 2921 1072 l 2957 1091 l 2991 1109 l 3024 1127 l 3055 1145 l 3086 1162 l 3116 1180 l 3145 1198 l 3174 1216 l 3203 1234 l 3231 1253 l 3259 1271 l 3288 1291 l 3316 1311 l 3345 1331 l 3374 1353 l 3404 1375 l 3435 1399 l 3467 1424 l 3500 1450 l 3534 1477 l 3569 1506 l 3606 1536 l 3645 1568 l 3684 1602 l 3725 1636 l 3767 1672 l 3809 1708 l 3852 1745 l 3894 1782 l 3936 1818 l 3976 1854 l 4014 1887 l 4049 1918 l 4080 1945 l 4107 1970 l 4131 1990 l 4149 2007 l 4163 2020 l 4174 2029 l 4180 2035 l 4183 2038 l 4185 2039 l gs col-1 s gr % Polyline [60] 0 sd n 1395 4322 m 1396 4321 l 1399 4318 l 1404 4314 l 1411 4306 l 1422 4296 l 1437 4282 l 1455 4265 l 1476 4244 l 1501 4221 l 1529 4195 l 1559 4166 l 1591 4136 l 1625 4104 l 1660 4071 l 1695 4038 l 1731 4005 l 1766 3972 l 1801 3940 l 1836 3908 l 1871 3876 l 1905 3846 l 1938 3816 l 1971 3786 l 2004 3758 l 2036 3729 l 2069 3701 l 2101 3673 l 2134 3644 l 2168 3616 l 2202 3587 l 2237 3558 l 2273 3528 l 2310 3498 l 2339 3473 l 2370 3449 l 2400 3424 l 2432 3398 l 2464 3372 l 2498 3345 l 2532 3317 l 2567 3289 l 2603 3261 l 2639 3232 l 2677 3202 l 2715 3172 l 2754 3141 l 2793 3109 l 2834 3078 l 2874 3046 l 2916 3013 l 2957 2981 l 2999 2948 l 3042 2915 l 3084 2882 l 3126 2849 l 3169 2816 l 3211 2783 l 3254 2751 l 3295 2718 l 3337 2686 l 3378 2655 l 3419 2624 l 3459 2593 l 3498 2563 l 3537 2533 l 3575 2504 l 3612 2476 l 3648 2449 l 3684 2422 l 3718 2396 l 3752 2370 l 3785 2345 l 3817 2321 l 3848 2298 l 3879 2275 l 3909 2253 l 3938 2232 l 3976 2203 l 4014 2175 l 4050 2149 l 4085 2123 l 4120 2098 l 4154 2073 l 4187 2049 l 4221 2025 l 4254 2002 l 4288 1978 l 4322 1955 l 4356 1931 l 4391 1907 l 4426 1883 l 4462 1858 l 4498 1834 l 4534 1809 l 4569 1785 l 4604 1762 l 4638 1740 l 4670 1718 l 4699 1699 l 4726 1681 l 4749 1666 l 4769 1653 l 4785 1642 l 4797 1634 l 4805 1628 l 4811 1625 l 4814 1623 l 4815 1622 l gs col-1 s gr [] 0 sd % Polyline n 4185 2035 m 4187 2034 l 4190 2033 l 4196 2031 l 4207 2027 l 4222 2022 l 4241 2015 l 4266 2007 l 4296 1996 l 4332 1984 l 4373 1970 l 4419 1954 l 4469 1937 l 4522 1919 l 4579 1899 l 4639 1879 l 4700 1859 l 4762 1838 l 4825 1817 l 4888 1796 l 4950 1776 l 5012 1756 l 5072 1737 l 5131 1718 l 5188 1700 l 5243 1683 l 5297 1667 l 5349 1651 l 5399 1637 l 5447 1623 l 5494 1610 l 5539 1597 l 5583 1586 l 5626 1575 l 5667 1564 l 5708 1555 l 5748 1546 l 5788 1537 l 5827 1529 l 5865 1521 l 5904 1514 l 5943 1507 l 5981 1501 l 6020 1494 l 6058 1489 l 6097 1483 l 6137 1478 l 6177 1473 l 6218 1468 l 6260 1464 l 6303 1460 l 6347 1456 l 6392 1453 l 6439 1450 l 6488 1446 l 6538 1444 l 6590 1441 l 6644 1439 l 6700 1436 l 6757 1434 l 6817 1432 l 6877 1431 l 6939 1429 l 7002 1428 l 7065 1426 l 7128 1425 l 7191 1424 l 7253 1423 l 7313 1423 l 7370 1422 l 7424 1421 l 7475 1421 l 7521 1421 l 7562 1420 l 7598 1420 l 7628 1420 l 7653 1420 l 7673 1420 l 7688 1420 l 7698 1420 l 7705 1420 l 7708 1420 l 7710 1420 l gs col-1 s gr % Polyline [60] 0 sd n 6525 3917 m 6480 5852 l gs col-1 s gr [] 0 sd % Polyline n 7715 1415 m 7714 1417 l 7712 1420 l 7708 1427 l 7702 1437 l 7693 1452 l 7681 1471 l 7666 1496 l 7648 1525 l 7628 1560 l 7604 1598 l 7579 1641 l 7551 1687 l 7522 1736 l 7492 1786 l 7461 1838 l 7429 1891 l 7398 1943 l 7368 1995 l 7337 2046 l 7308 2096 l 7280 2145 l 7253 2192 l 7227 2237 l 7202 2281 l 7178 2322 l 7156 2362 l 7134 2401 l 7114 2438 l 7095 2474 l 7076 2508 l 7059 2542 l 7042 2574 l 7025 2606 l 7010 2637 l 6994 2668 l 6979 2699 l 6965 2729 l 6948 2765 l 6932 2801 l 6915 2837 l 6900 2873 l 6884 2909 l 6868 2946 l 6853 2983 l 6838 3019 l 6823 3056 l 6808 3093 l 6794 3130 l 6780 3167 l 6766 3204 l 6752 3240 l 6739 3276 l 6726 3311 l 6714 3345 l 6702 3379 l 6690 3412 l 6680 3443 l 6669 3474 l 6659 3503 l 6650 3531 l 6641 3558 l 6633 3584 l 6625 3608 l 6617 3630 l 6610 3652 l 6604 3672 l 6598 3691 l 6592 3709 l 6587 3726 l 6574 3765 l 6564 3796 l 6555 3822 l 6548 3841 l 6542 3857 l 6537 3868 l 6533 3875 l 6530 3880 l 6528 3882 l 6527 3883 l gs col-1 s gr % Polyline n 2070 3659 m 2071 3659 l 2075 3659 l 2081 3658 l 2090 3658 l 2104 3657 l 2123 3656 l 2147 3655 l 2177 3653 l 2212 3652 l 2253 3650 l 2299 3647 l 2351 3645 l 2407 3642 l 2468 3639 l 2533 3636 l 2601 3633 l 2672 3630 l 2744 3626 l 2818 3623 l 2893 3620 l 2968 3617 l 3043 3614 l 3117 3611 l 3191 3608 l 3262 3605 l 3333 3603 l 3401 3601 l 3468 3599 l 3533 3597 l 3595 3595 l 3656 3594 l 3715 3593 l 3772 3592 l 3827 3591 l 3880 3591 l 3932 3591 l 3982 3591 l 4031 3591 l 4079 3592 l 4126 3592 l 4171 3593 l 4216 3594 l 4260 3596 l 4304 3598 l 4347 3600 l 4390 3602 l 4433 3604 l 4479 3607 l 4525 3610 l 4571 3613 l 4618 3617 l 4664 3621 l 4711 3625 l 4759 3630 l 4807 3635 l 4856 3641 l 4907 3647 l 4958 3653 l 5011 3660 l 5065 3668 l 5121 3676 l 5179 3684 l 5238 3693 l 5300 3702 l 5363 3712 l 5428 3723 l 5494 3733 l 5562 3745 l 5631 3756 l 5701 3768 l 5771 3780 l 5841 3793 l 5911 3805 l 5980 3817 l 6047 3829 l 6111 3841 l 6172 3852 l 6230 3862 l 6283 3872 l 6331 3881 l 6374 3889 l 6411 3896 l 6442 3901 l 6468 3906 l 6488 3910 l 6503 3913 l 6513 3915 l 6520 3916 l 6523 3917 l 6525 3917 l gs col-1 s gr % Polyline n 6479 5884 m 6481 5885 l 6486 5887 l 6494 5890 l 6507 5895 l 6526 5902 l 6550 5911 l 6580 5923 l 6615 5936 l 6656 5951 l 6701 5968 l 6750 5987 l 6801 6006 l 6854 6026 l 6908 6046 l 6962 6066 l 7015 6086 l 7067 6105 l 7118 6123 l 7167 6141 l 7214 6157 l 7259 6173 l 7301 6188 l 7342 6201 l 7380 6214 l 7417 6226 l 7452 6237 l 7485 6248 l 7517 6257 l 7548 6266 l 7578 6275 l 7607 6282 l 7636 6290 l 7664 6297 l 7698 6304 l 7731 6312 l 7764 6318 l 7797 6324 l 7831 6330 l 7865 6335 l 7900 6340 l 7936 6345 l 7973 6349 l 8012 6352 l 8053 6356 l 8095 6359 l 8138 6362 l 8183 6365 l 8229 6367 l 8274 6370 l 8319 6372 l 8362 6373 l 8402 6375 l 8438 6376 l 8470 6377 l 8496 6378 l 8517 6378 l 8532 6379 l 8541 6379 l 8547 6379 l 8549 6379 l gs col-1 s gr % Polyline n 7695 3434 m 7696 3436 l 7700 3440 l 7706 3447 l 7715 3459 l 7729 3475 l 7746 3495 l 7767 3521 l 7792 3551 l 7821 3585 l 7852 3621 l 7886 3661 l 7921 3701 l 7956 3743 l 7993 3784 l 8029 3825 l 8064 3865 l 8099 3903 l 8132 3939 l 8165 3974 l 8196 4007 l 8226 4037 l 8255 4066 l 8282 4092 l 8309 4117 l 8335 4140 l 8361 4162 l 8386 4183 l 8411 4202 l 8435 4220 l 8460 4237 l 8485 4254 l 8512 4271 l 8539 4287 l 8566 4302 l 8595 4317 l 8624 4331 l 8655 4345 l 8687 4359 l 8720 4372 l 8756 4385 l 8793 4398 l 8833 4410 l 8874 4423 l 8918 4436 l 8963 4449 l 9010 4462 l 9059 4474 l 9107 4486 l 9155 4498 l 9202 4510 l 9247 4520 l 9288 4530 l 9325 4538 l 9357 4545 l 9383 4551 l 9404 4555 l 9418 4558 l 9428 4560 l 9433 4562 l 9435 4562 l gs col-1 s gr % Polyline n 45 2089 m 46 2090 l 50 2094 l 55 2100 l 65 2109 l 78 2122 l 95 2140 l 116 2161 l 141 2187 l 169 2216 l 201 2248 l 236 2283 l 273 2320 l 311 2358 l 349 2397 l 389 2436 l 428 2475 l 466 2513 l 504 2549 l 540 2585 l 575 2619 l 610 2651 l 643 2682 l 674 2712 l 705 2740 l 735 2767 l 764 2793 l 793 2817 l 820 2841 l 848 2864 l 875 2887 l 903 2909 l 930 2930 l 958 2952 l 984 2972 l 1010 2992 l 1037 3011 l 1065 3031 l 1094 3051 l 1123 3072 l 1153 3092 l 1185 3113 l 1217 3135 l 1252 3157 l 1288 3180 l 1325 3204 l 1365 3229 l 1406 3254 l 1449 3280 l 1493 3308 l 1540 3335 l 1587 3364 l 1635 3393 l 1684 3422 l 1733 3451 l 1781 3479 l 1828 3507 l 1873 3533 l 1915 3557 l 1953 3580 l 1987 3600 l 2017 3617 l 2042 3632 l 2062 3643 l 2077 3652 l 2088 3658 l 2095 3662 l 2098 3664 l 2100 3665 l gs col-1 s gr % Polyline [60] 0 sd n 8505 3004 m 8505 4804 l gs col-1 s gr [] 0 sd % Polyline [105] 0 sd n 5130 2759 m 5131 2759 l 5134 2758 l 5139 2758 l 5147 2757 l 5159 2755 l 5174 2753 l 5194 2751 l 5219 2748 l 5248 2744 l 5283 2740 l 5322 2735 l 5365 2729 l 5414 2723 l 5466 2717 l 5522 2710 l 5582 2703 l 5644 2695 l 5709 2688 l 5775 2680 l 5843 2672 l 5912 2664 l 5981 2657 l 6050 2649 l 6118 2642 l 6185 2635 l 6251 2629 l 6316 2622 l 6378 2617 l 6439 2612 l 6498 2607 l 6555 2603 l 6609 2600 l 6662 2597 l 6712 2595 l 6761 2594 l 6808 2593 l 6853 2593 l 6896 2593 l 6938 2594 l 6980 2596 l 7020 2599 l 7064 2603 l 7108 2607 l 7152 2613 l 7196 2619 l 7241 2626 l 7287 2635 l 7334 2644 l 7382 2655 l 7431 2666 l 7481 2679 l 7533 2693 l 7586 2707 l 7641 2723 l 7696 2739 l 7753 2756 l 7810 2773 l 7867 2791 l 7924 2809 l 7981 2827 l 8037 2845 l 8091 2863 l 8143 2881 l 8193 2897 l 8240 2913 l 8284 2928 l 8324 2942 l 8361 2954 l 8392 2965 l 8420 2974 l 8443 2983 l 8462 2989 l 8477 2994 l 8488 2998 l 8496 3001 l 8501 3003 l 8504 3004 l 8505 3004 l gs col-1 s gr [] 0 sd % Polyline [60] 0 sd n 7705 3447 m 7705 1422 l gs col-1 s gr [] 0 sd % Polyline n 9442 4556 m 9441 4558 l 9440 4563 l 9437 4571 l 9433 4584 l 9427 4602 l 9419 4626 l 9409 4655 l 9397 4689 l 9384 4727 l 9370 4770 l 9355 4815 l 9339 4862 l 9322 4910 l 9305 4958 l 9288 5006 l 9272 5053 l 9256 5098 l 9240 5141 l 9225 5183 l 9210 5223 l 9196 5260 l 9182 5296 l 9169 5330 l 9156 5363 l 9144 5394 l 9131 5423 l 9119 5452 l 9107 5480 l 9094 5507 l 9082 5533 l 9070 5559 l 9056 5587 l 9042 5614 l 9028 5642 l 9013 5669 l 8998 5697 l 8982 5726 l 8965 5755 l 8948 5785 l 8929 5816 l 8909 5848 l 8888 5882 l 8866 5917 l 8842 5954 l 8818 5992 l 8793 6030 l 8767 6070 l 8740 6109 l 8714 6148 l 8689 6186 l 8665 6222 l 8642 6255 l 8622 6285 l 8605 6310 l 8591 6331 l 8580 6347 l 8572 6359 l 8567 6366 l 8564 6370 l 8563 6372 l gs col-1 s gr % Polyline n 7705 3448 m 7704 3450 l 7701 3453 l 7697 3460 l 7690 3471 l 7680 3486 l 7667 3505 l 7651 3530 l 7631 3559 l 7609 3592 l 7585 3629 l 7559 3670 l 7531 3712 l 7502 3756 l 7473 3802 l 7443 3847 l 7414 3892 l 7386 3937 l 7358 3981 l 7331 4023 l 7305 4065 l 7281 4105 l 7257 4143 l 7235 4180 l 7213 4216 l 7193 4251 l 7173 4285 l 7154 4319 l 7136 4352 l 7118 4384 l 7100 4416 l 7083 4448 l 7067 4481 l 7050 4513 l 7035 4543 l 7020 4573 l 7006 4603 l 6991 4634 l 6976 4666 l 6961 4698 l 6945 4732 l 6930 4767 l 6913 4804 l 6897 4842 l 6880 4881 l 6862 4923 l 6844 4966 l 6825 5011 l 6805 5058 l 6785 5107 l 6764 5158 l 6742 5211 l 6720 5265 l 6698 5319 l 6676 5375 l 6653 5430 l 6631 5485 l 6610 5539 l 6589 5591 l 6570 5639 l 6552 5685 l 6536 5726 l 6521 5762 l 6509 5794 l 6499 5820 l 6490 5841 l 6484 5856 l 6480 5868 l 6477 5875 l 6476 5878 l 6475 5880 l gs col-1 s gr /Times-Roman-iso ff 210.00 scf sf 675 722 m gs 1 -1 sc 30.0 rot (Taping point) col-1 sh gr /Times-Roman-iso ff 210.00 scf sf 2670 407 m gs 1 -1 sc (3) col-1 sh gr /Times-Roman-iso ff 210.00 scf sf 6975 767 m gs 1 -1 sc (0) col-1 sh gr /Times-Roman-iso ff 210.00 scf sf 8385 1652 m gs 1 -1 sc (-1) col-1 sh gr /Times-Roman-iso ff 210.00 scf sf 3400 742 m gs 1 -1 sc (1) col-1 sh gr $F2psEnd rs ADOL-C-2.4.1/ADOL-C/doc/short_ref.ps0000644000076600007660000143304511417030411015100 0ustar coincoin%!PS-Adobe-2.0 %%Creator: dvips(k) 5.98 Copyright 2009 Radical Eye Software %%Title: short_ref.dvi %%CreationDate: Wed Jul 7 16:07:51 2010 %%Pages: 8 %%PageOrder: Ascend %%BoundingBox: 0 0 596 842 %%DocumentFonts: CMBX12 CMCSC10 CMR17 CMMI12 CMSY10 CMTI12 CMEX10 CMR12 %%+ CMMI10 CMR8 CMR10 CMSY8 CMTT12 CMTT10 CMMI8 CMMI6 CMR6 %%DocumentPaperSizes: a4 %%EndComments %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: dvips short_ref.dvi %DVIPSParameters: dpi=600 %DVIPSSource: TeX output 2010.07.07:1555 %%BeginProcSet: tex.pro 0 0 %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin /FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array /BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get }B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr 1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S /BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put }if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X 1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N /p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{ /Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT) (LaserWriter 16/600)]{A length product length le{A length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot} imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M} B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{ p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end %%EndProcSet %%BeginProcSet: texps.pro 0 0 %! TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0 ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{ pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type /nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[ exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if} forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def end %%EndProcSet %%BeginFont: CMR6 %!PS-AdobeFont-1.0: CMR6 003.002 %%Title: CMR6 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMR6. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR6 known{/CMR6 findfont dup/UniqueID known{dup /UniqueID get 5000789 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR6 def /FontBBox {-20 -250 1193 750 }readonly def /UniqueID 5000789 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR6.) readonly def /FullName (CMR6) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 48 /zero put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DAE339BA29C1C6F656 1DEF13780383DAE38A868377CC7D396B2A05F341AEE0F8BD0A0191F51AD11A4D 2E927B848A1EF2BA15CFBE57A51E3AF07598275195C9613041F71C1AF39E61F9 EFD5F6512FBDA76E29DE6B508F62F5CF9F73F5288DF1C7B0B82C92D3B6358BAD EC3CA20BDE55DAA7CC58004AA86B6CBF8C410D8287E88BF20588A39309C2B703 CED322F030AA6069869064486CA651DA054FF3F5E56534CA358B0829A6B954D8 9103436E6B06DAD1658BD4A95AB41343B01F5866FC87C4EDFC71F1477C98F8E1 1DCF27EF743FF90BF918AB8C4E5AC35841E2F745480E5EDE1C1DEAFAD8D0018D 2C1F1CFCAD9F6609859DEDFD1648A6CD23D8ABB80747F94899F17C8F3E6CA55A E176F19CDFDAA0D7C920B3A72051A4745560AC81978C92459EEE5AFE85AB247A 32981139CBE352B248F4BE5F73503A084A3E91F05328EE521D9669E44E202584 5407E7846F9FEE3D54EA18FFB144BF2D6803BF65AE402034B3CDBB40DD24217A 3CE0E95E2717CACD603A958187C42B3558AA38D6B6390EEEDD396F96E6041FCF 6F8888221AFA87EAD79F46E0E32CAED91E6C8500879AB6E580C581E8C8CE9B68 2BB5EFE2604E8DCB2432D39D75EE556969F1B2FBDF6A4BC72D106AA7CF22C268 464027898B311613E06E1584707F262F71D9F49D2149306A88E02BC60BBD6BDB EF41D90F19197BA9AEF32B5E63D5B9FF41B5602F9F786E76621DA54D574981AB 87A72081EA05D6C6BA940EFEBD0904EA4E77BBCE17E20B42E1722617E0F6EF32 F1ACDE9D758594E9C81049CCC10605A27C2A06872FBA9F159CB155609B496ADA 4886F478E44029B5E620DE8319E257697E93E1CDFD27D560E2E4D34507020E2C D9FF06BFA14E056D81DF701FAC3ACE4BE6C098AE116E079F0044391EC1661F6E 7A93B9320BD7F91E8FD2E8EB3F5CAE997D5CDD35107A1D35302260D1499B8B65 39625B7925F97D917B66BAFEEA992873F07220714F192839948CEA080BDB9A03 77B9DD032273DDB5629CB28B5D8797EDEFDBC601823E038384C90C79012A7D96 8F27784DA15BACE21501C26E3AFA5DCCE81B52B0ABAF71A35D33103EA86F2415 A39A830D559C5C6CA7423945BD3DFA942B20A06D7A8D8671F9831DBB52907AB4 4E54776D29C6085CD9970B6DD21DD3EA8EB09C49CBEC6CDCEEB0BBB1B8827109 3BDE64DDA024D67F098D6C1998506DDFF7907ABAADA1C39C759C850E0C6F8E89 A392D1C9329ACFFA92D361218D75E115F70A47C53B73B356D703E9C499AAD098 AA9C8119EE9E9708A9EA3049E976FA19AD04210D5F6092C7903FD155113F3A3F 269B746560F70970AC9F8D09956E0E84DACE4112C4E7C7F6B3F0B63D26EFF95E 2B2E9699D16BC8AFC4AD9113AA3A974C9E82E877288CF71E9169D2DCC61AAAA6 C536E5604EF0716F6487292BBB677518504B52C63822BED3BD5FD14EB41EE6A8 AD4B6CF90D39F98E12A765B645CBA3E8552FB9A986390212CE119E7C3DD675AC 17BD006144BEC534DA2A860188619F17589008409C5A309CB83FBA70F6446B6E 2B56991B6A03B1DE10C621591CEE45BECA27C54BC8B4F1754A9E8F660812710E 117850E1BB6FD89BB13F8CE391C43DA89EA67E9C3E7A4697790EA26B0E4E2E80 DCA508873A7AFFC11B8C02EF86C2316E8D8B6BCEA37F81A3A87546705F070C3B 9D4D28C366CEBC1EE485B8E2357DBE46E86C87B9939DADA60888AA9F1B92FECC CC1C198DDB594BB70A8FE690ECAC21A414BAC89BF019F34D2A130F485EAE35B7 2A10C67EA3A48A4D9734759CC93AD85C6A570500AE5AC9973FC76EFA06BF5DDC 26E20E28D16B50957EE01AF2653F8D860817967AA5A9BF9BF7ABCDA710E9F34F 4F0EBCC32B3C9C2971F6225D2DAA6A451366B83F32B2ACB83E746D365B2DE38D C1AB7447FE7B37F9630E410E5D8F0ECE74DF46C538947B3A167AD9F3E4A7EB3D 60F5425AE75AC3A27D39311DA35696C3DC7282AF1532E7AECE63D13DDA0296A2 01487185FDF1875AEF55A36C17D6A8DD329279D229259463A2F05CB7A874374B E2320E1F6CFECB9C1CE62FF468C29751ACD9754AF1EABE8E7696C2888914416E 235B6766F20FFBEFF285277B639A51EA2F2E30D207BC891B00F0436008F980E0 9EEE7FB375BB069B9E0BA11DA951A99D8E60B4F920A0495C247FA7DE904765AB DB5C3B2D634757E43EDD6FAA4DB3C67F82D6853E1170F0B2D8CE496DD4E72B0D 28277BEF172F1402959F64527F9B640619F04416DDB9D05FB2ACD019CB9C119E E544D24EA6DAC5C69785394EA50E6EC9AAA9E14B904EAF29A733C6D7942B63F4 85729686742F26DEF78DF0DA1CA7CEFBB684F4CAD99021A3B3D1FE03B9C5A4B1 BD04CAC89BB91B11952A2B17A61789BEE0C54B46C03FE9A1AE73D17CF94BA30A 237C29D414C3BCE8E3E2DDF83C0BD59DCB66C4D2C3DE73DA8378F3C6C8035D28 7464399857E57651A53E9C4AA68DFCA91B2376CF98AC5290FDB9BDAD9EF1604E 9B0A70EDDA1E564B6D2456E7BC722454ACA8C4950FDD44B6EB9AD01169A9F845 B06A0DDB7897C847A5B1F42258AECF3807AE936C8F52C3A7A0A85D68160AE442 FE81543DA6702D76AB6E8701F80DFC1D87C961E350D0E52AB2A298B9E5908600 7E14D2A87309043CBF13F69AEAAB1BC239DEA88EB5176624F6046664B1D2691F FBB2071D3706F97DCCA355A6DCC4D09FD35DC078FBAAF672FFDECEC61050A120 10B5A96629041303FD01ACCC7686165DED6AA712FF8E5E85DE33C4E7D877C49C 6C469A90410BAF60BE65ECD91CDC2EE7AC0CA8BA7B53865F26092BFCAA0BCA77 B80DC51DAD09C93C8DD8E43502B4B68F3D5918C3492196292447732BA90F5AB4 9F5E1D634ADE1CCAAD028DE5EBA9535F6FC5908DBD2D643E0A7E059C8C386FDC E72659C0033F535C0D7F6B98D0335552D0BF3C6E302B672A5EAADFCEF81912E3 8F54E6FB7EC2B325125159713D0AC50DEE3673B9B148643727E94C80971A2E73 5E1E13237BE69C84FC039DCE02ECE2668AFD047F21A61BB94A9F498C9FE5CDEA B274B40728B6F6CA9B6C15BAAF92F465B0D7311B46545CBA90D874839443CCB9 3110F052EB247B24B45A3D2FA6FBC7EB2A4BEC2A5892914B3C5EA3F4F9B9DCBF 6F932D95700E045B49E4B1F2C9D2A42CF39CA2F5A2654E6E8E6E92473D28AACD 5E35C6705EA728F704F5996D286BED433F976AB7E018621A577AED7C0AC0A84E A032FE1869F603E6F20386E3A190A30A21EA886249ECF8CDDE2C33D73BA8647A 3DCA7A8DD9E8EC8D9A415D126BA38B6771C489DFC419303EE9C1B83FBFB3A0B8 97D64F30E4BCBEC24DF603FF3BF541E00D5804B6B6543D3D2B661CC551D497A9 9DFFF535AF424B2F3150BB39AAE8CDB306AAD37767BA10BADB031DC2FAB16955 EE78342CCC0E8B5976BF98F215461A8C6F63EBE6E2F1A1104662DDE53388CB51 8B44F3534853B8095F3B746A2459C2EF800FB1EF7F235EBAA9731E3AB3BE4369 1D3636E3ADD5BDF0C34FA80E90D8A1DDE770943FD196E0A7C5F1FAF6970B34C6 4673AACA6B2B5C12B9608521AE736C1F4B97209B063D991300ED5AF3D7F27E76 68E0B858FD8BFF86581E2B9548C691E3E5D9EC4D39C9715CDE86C7D22223CCEB 8A38C776A30AF14912390A7546DBECECD7A687D4F08646E57A12C80DCA022B7A 33399761A50B8E0ABEFA1163EDEC3DFB5DA3248792EEEDD894872D4E6814B4C3 548BAFCDE0CABBCDB97EC6D1BA47F2E77CC1389BF19D73661749AC33F46A618E A665A85776545BF9662F2179D7BFD604FA8EF4700591AF3AEC647E27B24B76F3 133F9198DC15C1AED830E737909E43EB91C334C44BA35810007A3888E33F5DA5 B3B2C35481C648AFE630CC3E08F77744E401B2934E407D1EC17ECE737606B076 F8DE8EF3344F57495EF49D11580D6FB28AE0B1422521B320843B13467501CAE2 3DB93D7BB779F73B6AA30050DA74BDBC3F8DBB30F32EAFD07734A151BB2BAED5 C9B1F790059339B64BB4146470F30928C9A49AE88906BD6FDB7431A4B50809CE 0F67ABA01CDCC2320B0B097187B9299E3D80CDD7BB5DD5BFA7B28D924C5633C5 45A23CCEE097C41C3759C1FA8DBA0DD95034BCA89BD23FAC18C70093F40FF2F8 0FAC5DD4835F2DFD40540E9A9E9FD951A8AF2CB766597DE00147B163BACFB7E6 EFDA4DED594F1C746D8B46A1145E0E4058F5917B3F21E9BEBDE745EE72CDCA64 FB31EF7A2E55265F32559480E2B6726D3DE26FFC97EB4E3160F117E890C4B2E5 8DF310E6A728ABA85540F571C024F8DD58E1D7827FE97CED5EB31547EBC36415 02B8C0E10B7E37D816F01D56A364B8552CBFAAA95BC4BDDCFDE91CE0EF005B4B 7AB56FFB47A093AEDF0DE1EA48FC8103CA3CA1470864D2693E360006D05668A8 AA422CCCED20DCEEBEA5CE0DA1EFB00FB93E922B18124FA11A88D0F6E0F719DA 57603DD5DA42E1C56C2FD9E5415AA199D4F334C151C1157E75C107FBBFCEB706 5F4EA47A29B54ED8CAEB8DDA2F53D2A703B95487619780A52DA1270011648A28 AA64338E04AA5B92C1EDF3D8DA34FA6D227A0325EA6F22E9B38B6338C657BB21 CD4C582DC04010330F62923F817E4EDC6E5C0E6500F2A975A8A95BAA30C4A134 BB31B5AC45A2E7F6E9CDFC810D41344C4F606049445F8E93D74271C1E29DF7CB 5459593BA28AECF64D903D3E4D77CF5C04B06DE44A41EE4D9FC769854503AC85 69E4A5106E84016DE3D59865D4AB30BD6C9E45C45DCB5408421CC50CD6179C85 34E55CC70FBD8FEFE9F1D5160664981716E3BC7F24B6F54E0323D9BC4B692971 24419EE62D8B0BA726E2B4294A9A76F328B8101DA29E78BD5C4AC383350FE196 4D42DB1653637D19530124858950C22F1E9CF5BC07D46B7A58CDE19CC88DCD2E 7FE4EEFD8AA6047E919823C8CAB2EF5274F45E861E6508CC11A8AA90AED2403A B2BF1315C2157B3B50A3685205D93E40906EEE9DE5985405974BCE0B84BB37DB 080A45C5237B269B93C0A7CF294A18B45464A41F604C494CBEF829A381155CFD 71CEEA54CC39EEDB6DF58A9896246B09F95DC6BC40BA6916AAB5ED3D24F66154 3662F8978FC63DA9280FF7ADB09EA5BA79D3B66E0C88BEC1EDD78DA93839073A A4D7B0E627000C4ABA76C47CCFEE92E319315333A5584A951E34C55412049C4A A5569FE65A006F77B416E0530AB6A8E7AD6C72340AD4CE25937158FABB2153EA 281E1D840206F5DA38E00815E9081F81DAB9FAA8F4DAB305867AC84735DB4F52 A36129929BD2084A8EA37BB6889695204BF7290B68D5E722540BF8A276F8BB6D 451D582EE59D2FF03F6B97DDE05FA00C3D375D2D0AAC8FE298F85CC067B15481 48D70B6A0354C705715B891915FE8EA45244677B9FCE81E72D66177E309F3F83 F744B9EA9E55C3B30DEC6E5E03B3988FD526A82A5E8E1DC79127FC62B2FA7949 B3AD3148868DE22BD4B5708E32CEAAE6ADEED1F463EAB9692411E18F8D6BF391 126B2700B4CF3B59D02E3F8795130C96285A63FCD1E0F647ACB1D35E9C58BD01 1DD06BABA00CA4343BEBEDBE677E053E9732B33A7495DF51782A07DA07F5646C 770C957AD915CC70BA8E08BE7A1F4E6BA5BB9C603E38F6FB0A2578471C4D02F4 283069856D926B9076EC73AA39CEB0A061AFF1575C7093FDAC9F89C3DC06EA45 06F3C2A3BC9FF21128B10CB758DF0F099B459A5264A8C24C098110D2BA1A8532 8FAE146A91BA7D033F591AB1A94B8A6FE0FFB610F698D216D58B4EF6C87B1524 8037CBB7E23D8550A620341C6625A1A2ECE7CEE2598D66277F857231A36155E3 984F147783E9B93975AC38A29F2FBCF704C8A04AD84C3E04A12D2321FA56811A 5B6744813CCC187968C5C26BB8D3E6615A912FA5369C01CCF8C0DB790593B190 1A90CFB5339B8771F325C5FC448D36C7312B11A15A8635BAB59CF3CAD176131E 026F6E141B2619EF7F3048750CC9291397F141591EEC8B612D6656DD34DB54D6 DBDD303CED74BE76664E7DC86FCFEEF2001C9DBA56418FB61F589566A47AF36E C94671C5E8939AF9F4D53C0DE7142B7B63C86AAFA65877EBBB48C64589AFB2CB 1280AC099FC48058855CBDEB6C2D2A0D092267996591DC3B5EC8252984E9B27D 2E9EDE8CD8303F0905DBFCAE497DE1B755B924452CDE11CF4F20893DD6FF7251 427F520FE00580DAF1703FD968E0F8ECCDE618E1EA5820EE6CFED97C78864EF6 26FAFEEE194A268F24249D44829AA360D731C34DC285501E966A959180718F72 6330E4CC060588A2F65AE64A720DCAA818D49D4440F5D0B6C1F6C3A107E12445 F1BED2D3FCBB87A9597F01C7332AA79143564056219BF87D4B907A04F77621AD 054935E883B2B137D3D1C4BC792E8335CA08B6D83227F35736C41312A0BB077A 60FC6488C5E02FD51A10AC113D4EF70038C649C1677B2204A77F2ECBE9B3C341 F4126BECBCA61E3F3801F9188A3775924A62D30FB096B440286FA655EBA00A74 9A4162904BEA07CE68EE76018346DEEE20839C9A2FF71179B58E1D4AB30856B5 F5D97295A097174467010B15D733AAC5813CAA633746B430B1AAF9F997FDAAFD 436844D1A56B8E25A89D2CC4BA6EE7ABD167818FD4F6C747E07B262C99EE2C35 323F0B471586CA50F54C6381B052B15B0C58C19DEA82C0CA29F00400B727419B 2379979CDCBFA966AD513FA903160C571C3BF1BA239540B11EF2371A3880837C 6D6CA2F374280CFA1586427AE975A2AEC34244874E4D441DBAC6CD1828841C91 069AA87FAE849C5DC7C9EC1B9876E59F3CCDF8BB23D939F5348D7486934BFB02 CC5A22541ED352616830A510DE7732E5D8F7E785BBD31C2BC9D348CE5632654D 2C1740F89D57FB2AA1FD8FA3304EA03F757BB8F498ED98E48485722E78D97B12 A05F3A28438084D1CF90AC4C3FFCD7B3365941C45E1E02CB13CA1E99F7FA1D00 1C9D489D5C95F019AB4CE89FA3B6604473DBD2CE8E278969E0A0FCBCE68C23F6 9381882443D3FC16966555FC222F3FC4B1207522201AB7A15A7A6F22CDC9D392 360BF4C95DAD35770E0AC7E5EFF015F2C74ED7391F40EC94B8D1C163B5DEE5B3 911A20C2625AD3B24BD94D2A42405E655DA47D3F94F882CA2F479437B4E0BE71 8AFA4482C6FB270F8D05B4599A01403DAAA90C01DF3AA7C2BC7E66AB6AA833AD FB6E5EE13E45CC7CE7E200FBFE639F9CFFF5D08512C02764997FD28368969BFB 0876F236EF6189BE73AD827332DF1B2EADEAC0ED3B939CE5BC3CEC78975FC636 44FCBC2CCF4396AC7343EC62E0E4F3DFFA2B880BF31D93ADFE201BE9CCEC8BA5 0B9B919E05B851E0909968DA259EECC6AA0743F25247978CC09C28C4F878E29A 5070E4023BCE95FE0ACCCC01D0EE219FA8344E8F6D7D4347563BF8AC030B9097 41F24D4BC9494915A82EE9FD37FBB6A46BF077B728FB569B1258CEA5F51F36BE 4F4D0F890D782E44748CA3FE8C8A515998371D9C7D2311F192B4B7E7C68FC6EE 3F7136714C282A2570FE591F247A08319CE9EF1E43274E4E57166E31A2ECA506 85350DA31AA4C33C9687F5210BA225EA1007C444FBFA2126769767E47A967884 9F68589E4BAA9ED32A7A466DE35554C132810C68ABDAE536D9D884352F28EA02 8A555D2CE11F30598F44A65E2D86B43ECCBDEED9E4E5B5B7DCDA20EAA09D9FF7 422FC91F2201431A9E8FC624FF44D26C0100183D77BC7E6B1A6CFBD3FA8BABC1 AE4CB0FD382E26BE0A83169B46D91429DCB746A0326243E212F802AF6A56C709 6E70C6C7CA3775C382F911F6DF3D26A9F9F39C6A49A61FB0FDFD443ADEB01F74 1254040BC520FE9C85FDDA97E17CACFC5058DE7A5441CF572509CF872FC95647 9595DF4367413AD5423162155EDBAD3683306BD0FA9A40AA39DA670C51832089 E396B3CB263B9EC95A396F5CC61F2DBB262C41F77C73D66932C4D4775EDEA58F 1D0A0D549B50B08ECDBB7521A29EFEF99B08EBA954F736A6FD7F3FED45F64940 F76D624C3793FFFD98333D3B51773C379576D6E6FF129278BFFA6C1F438F1B04 07D5C0D0409B7A6358E3787DB0EB85231C14C88C185955851251B8B16694881B 6982B58FBCA693A19D7E822B5298C6CB1223F071107F579EBEB70F4093F8595C CFD44D8AAD508396E66CB755BFB2E81ED8 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMMI6 %!PS-AdobeFont-1.0: CMMI6 003.002 %%Title: CMMI6 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMMI6. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI6 known{/CMMI6 findfont dup/UniqueID known{dup /UniqueID get 5087381 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI6 def /FontBBox {11 -250 1241 750 }readonly def /UniqueID 5087381 def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMMI6.) readonly def /FullName (CMMI6) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 100 /d put dup 106 /j put dup 108 /l put dup 111 /o put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFB83E8A2A6085DA11 61B1632328B94B21D3CBF2E7752D441A2C9A03F6681FDAB37C4B67D5857720F7 0C4BCEE266586738012A2237A85FCD0425DA7E8E8632543F5BD5D50F9DBAAE69 9E053AECA6027559DE42F7291EB381D866F1293107553809861D43508C6F2341 5E4FCC431AF4A9B3660386AE63E877DCF5E513D0D5702B98D58B34897FEE163A 75CD6F5A2196F91CE5060CA5E72F9C5F79D18F242EEE58135BFAB02D5CA430B6 D1B9A376849751A45E52577B1810C4F0C7F6C8196071D5B08FDB731C5384CCBF 03B460347E0CAC959E4A12620B6C2ED62E06A241D1637F418B5599A7FF3C1390 7AF66A00F7C31B4EDF249C56C268EC9D546CD0489DA51B734C8292CE7B3D9E30 71448C85ACC64FA99B2DEA91AA4CBCBBB9DE20833700AF96395DEEDA3FEB7D6E D6E3BE4A62CBFA18BD0471C14F3A2FD025C88E8166A9830C5B5B94624A3D6482 D1A1D83805D0EDAC1C79EA858A523D9FA3356DF42BC01886E77F6AA6B04E4E3F AD107D861FC626F0A439BC3F125D48649E5101BF79C71507FDACACBBB4C4335B C41A5C15ADF1DF69E1D68C3EB9BE30BDD5385F81D26EC8F2F206C1C7032B9EB7 0392BBCA23B4693686AF8D2E1ACB2FBEE81D75667CD1DDB906BC5B675660ABA4 E63429F16623F20B6A040E4942107CCA26CF6C1F52DEED9EC7EB15BE4F18F2E3 9ABDEEAAEA9AC41E9F20C37C54B33F609F5835AE5A1EC9D674DC50FAFF6D3511 2198195590F62B3B8A6FC8C3431BB8895A2F910F0361062DE32CDA9A7F41E761 B09BD8545CAA2D7124B5688B54705AA52E4716E36C0303FEAD38E0510B3CB496 6C30B115C37E02043D47B4ED796C671E30360800EC13F0F0FF3E0DBF5A642396 EB0F39A9DAF0974678EA1D041F08BD73867065DA91B044EF2AB15FAA6546031E 189936C1FD302BCFBE55EAF369DBA4895DD0996BF7292762551A86C8A3604E9A 8AD29E38BF6FD40172051EBE7C694249F3378ED0139D37EEA3ADB66F3A80A1D9 9C3655F054CACE93BA4AD42DC78A03F42455ED1BD5C122F234F21ACEB8FEFF9E 3BFE0DB2DA6D368478299ED63912A234ADB1DCCF1E519AD20772B71F8522B5DB 24E9658BDC1333D76F07F63D81F7A51D12C445ABF698092A24E5E5C36A52206C 0C41F7DCA529BB0A4D146DB6B4B341459FC17FFA357CA5F93DBCF30B61374613 4846D619423BCAC59B7EB40C14C70ABD985754A0094C98350D01FE9FA371B0F4 38884690DC7700C49236EF68BD6E806E8937AD8B77648F552C0C907007465A76 1475BDD3FBE1CF69C706E703226471C249A3448F81C240ADBE4B5474216D0235 6B0816BB6935A2704E851E20C002F85B653BB0700915B358DDC168ED3FAE3D91 8280A5CA5C2708D622B03DC47A70E5FFCAD5A7C8D9AD563857BBEF92A3BDB588 8B5B55CC9B960F20CA4AEB598DA8488004DEDBC9671488011E836D9D8B6251BF 256D08E6F1808E9D498449DF1F18E48B310D561D4DD3146C2BA64D960E66447F 6DA8B07194E3BFAF662C00737BB7222B55A5CC206A1C46F252ACF93D2063BABE 2BAB874C01AEC438D3F86AE37C9D7FCE4077F5B5785E12C1E0B685134CE2E8A2 2E4DCDDAED2D53D13014E428FAAE22447763D4693E82600F850CA4A49E1ADC5D C8DFC16E97B9F6164095CF7F31373B591F815621F45DFF77BFBF89EF60C9F50F 0C2FBBA4EA9602E197B9447FAB6AB57B19B1C801DAB66BF7D263F6572B9EEF88 E06744C1FE197B8EAA71E1EB67716B7CAB30C859A2D1B2DB95ECED02B83FBA32 E62F97EE4403FADEC936CC8DAA161F7B509B2723BA2B735572A80D7D087E6395 6A9D34D5963E3C6E37F307C66D1CE551D2F055BFCC7360FBE93ACAFDE2B1A849 37FD373F62BB23C1A2E3DF61C9452A8C995B03D44D6210A968C6293B4A3BE662 C7B0B59E6EF6D53FD293B2C290436B0C448E7D15A63533DE321643E53C85EF8B 060C434E46A736EA617EA00D185323460E77B95C49070B035194A2E7693C3B15 104ED7F56FCADABE49F27F9A576B354C574B5BAFFFC57FE9AF02FBD87B8874A1 24C53826659BEB1EC50446AC26EF3A95877ED3D81D33A8BC1BF7473FB9C11ABA 0F27B38EEBDF77D3D3EA63AE6022DB0D4F1125DF274B86EF0A4A263E108D6044 7A885F5E87362293A53F457CBA6C911D23653DA7CE4BB7D4FF4481AB97C0DD81 C13515F0E3BF8A7E8DE2CE69B25BA9C185D9BF31A65DD290B0D4FDF40B61E2D9 AF92BC6468B3F5AB5D5B88710C489ACC69198D697055B39AB3DE8B3733825C5E 6E763E2698574381A01352A7042A36EA96D17DD2EEEAFF04ABF7BF7D877B0FC7 B6BA51BA994D431F472B6EC4B4C327399576470A1773BCBAC61CDBF0F95DA6A5 0BE5239B7E9CD39E1E4D27EF6695D1FB56D4CA2C2370509547D6D01273CBE6E0 66A696C35D2D0282CB8C85D7B1C51453A0AD0BC80E1D183D11AA78879643D9D9 A3D0B2BD8EE3EDF29483CC5871426232A20CB058EEBDAAED85378B163425C270 B0F7BB46B7D1B89CF84E6A06791195FB17F11F34A2548FE424DE10E376B39A2F DD9B0BA2F2FDF3ED4AACBD0D60E67C0749D6DCBDE6E79041398DF3FC8D9B6CFC 693B870683CC425C52705902DFD324E157C9829F25B14A057AA92AFA17F156FB 0BA949698EAA0657B03D9538288D887959EF24A427EE7EDE47F304A1A6A715FA 2966273831B5B3A9C11021C153E67A73FA606FE3233C3DB217404C6AED6A4C59 DD4C2A98B31AF5604D8DE8354448B4CEC66022E756B0056CD32E9B002ADC712C 0545C2C16D9457E271D98A4ED7DDE01BBD1856F5C3DA28794D2C7951FE2FE6D9 18643CEEC41CA4A3464D3D3A102653CD6EAADA59CDD44918523B8811C2ECCABA AC0D188F5E07B37AFD56006B10B32EDD179F4DA693EEBF4DF5425D996585F21C 8780A4D23D24FB0618C12DE65CAD42A0138E28A100257978EDCAD168C55C6F07 78A067F0299890356C2A184820A554FB07448395ECE36C45211757552E288ED3 7DFE46CB92EB2070442AFC85864A45000C4854D728096AD3D4C552EFC26DB6B9 C340358451B50AF9F1B35C2E32D495DE85B5848D78940270DEFC07A14D960730 878B5B55916FB40FD805116C9C2AC8C6D4645DA67A978F1C6FE705EC188DBF7B FE7AD6769F2EEC4A9B05306D5BCD6EC3A240D6A29ED07D1D82E697DC8CC391AA 015DB6BCD1DA5C9A5A7BE3C5936681215E859E9837027D108A54F42AB24E38C2 4A7D8CF3264AE049D4B1AF48BBC564BCC88AF19D37DD81CCC431D0C554DF29A6 94ABDF8126EE4FE1DFB78559B9BF36FAFEC9791049C865694F9E2FFB7A308FEB EF0195FAA6BFE7A081B65C5125623903828372F117EE17E588B2FA26DC9AE37D 9A6F0043C019624D3D87AFDB4B90C46AEA78919CEF5D7ACEE316F30EA0229742 55E02E0E2533CAD78CE9BD6E0260A695D776ABA229D89CF9BEA92CE0397821A8 830A557021B3B90CE0B07A4B34C24337FA3FA4A3728B6E013BA01071CA7FA667 6FFB4BA3A28B5D5614ACD4E80E00938C2589CC6CF885A260AF7589240BF8987B 20A19FDAC73FAEEDD93EBCB3D46F735214164AFAF1A7828FE96E2BF7CE1EA46E FC1FC4527A0ADF2B81CA51E3D96F3E786511AF00FDDD9764CD3178362CF9DEE5 F05D100EC21A301F40FEFC3EF05AFEC140A9466AE68FCFD6CAC1A143BAF2B7BF D0DF808F0CF87FE2399CD9D2DD424227CA7D4073ED002CD555FBE8057A797B60 313D18ECDD779FA7289D4E7BF82D95A7535CE3F0F4164AF239AC666653736654 C13E436B526EC5A1DC97E1D85C4EB563C7061AE1E81F0B38BC45B17C15FDB0DA E5F6332721A925D4DD5A97BFF3E3F11D4F4F43BAE4E73A294D314527397F03CE AFD12DDF9D07DAD8D6C8EFAFC2F52E20FBF62026810C0C31A1EF71FBD612654D C68B7A24112F0ABDD20EFF3DADBE447AF9CE568F873ACE72B63283CB26B89BED 4B3315F26084453B1EB0877065A76E7B704B27F93DBEB365574A78E92FDB4B82 D6ED91A1728F571FC9CAB636A6E81D0C1C4F5E3F6F4574B6EED48BB61EFDDC80 1831E2AB9327B37881F0CA5D5265575F210BF4BCD8653B4193F74E3FF65028F9 2968B8127C68CA2919DDF529EC882EE99901146CA629A07B4DC59E7868DBE083 6E546C5769655EF6628FE2EA78AC891D130108192053D5056A7BD06C09592AF9 6310B3586A2609DB94CB0079550358F5547B9FBB2B77917A327EFE3F972C7263 54076627B4DD74638C3105FB25DA246484799D5326EE80503F18672B893289CB 1FFF8D3F662FB33E93025D86803551A8A1DE363D1534BFA3EF968871B19FB189 DAD841C177E2AC98B6B69A78048221C5EBBBB86511939D3A9963B3BF021185AB 0B26CA7D0A779DC2F7693C7E48286BD60EE46615E31B93FB0E6992AE20C792A4 72AD6FFAD6682D0F606807D7AE63A6280B5967FAB889DCDF0F76347CE302FAED A59E1B1AB785D9D0ED695A0D05DD3DF0EF0B275AFCF9EC7031E1357E99A3DB85 B4D137567875F7580E2BEC96B08C97ECB40876000B610E0BFE81E7884C9BBAE6 6BE9C2C612475396BC10EC7FFBD1118A7971FE1971DFD0CB677ECA65DD837B5E C7D36FE9F20A15A941F1E77C11093C902DF5B7639580B9C0E4AAD13518E1901C 1162FA095F301848770C6C618E371A0AC3463D0D94221EFCC0884B21300194B5 97E03BCD5C4878CEBF352EDD1D2173B56C9B6A08BF3F33419DF226E1633CC5CA A88A57AA85E21657569916E9B4B79E51B5535A57B2D6FA3EED1D0AA32DC0165B 12F8F5A681040B456D8DF175AD6053A2954F327F4EB4CD453A056FB1701242C2 59755058640C62632C764E002CE928E6B908BB137C28630A3CDBC7C34CF2B643 FFAFF20E345A86F31756C78A8EE2B9B1C5DAB2C863B29A44190770FD90BC6AED 0C25942BBD6A370C21650947B49AC8EB6825BE65DEFAFDDA32007754DFE0273F B995B8986E505F95E58A3F8873545DDA6F3FFAADE992F3FF7B2DAB76D663280E CF2BA18BC8871A7C361AA3600B192948CB918FEB0F2900AF2BCF169576828325 449CBF0C7AEDC299FCBB061F491469B9ED1D56771A03F9F202550E17FDB15B51 4772B2F06E6AABA4027D13E8730999532DB2475630D2F8EB98242E36F5B45A94 2D8083014B63A806BB9A01906143482C614B5CFBE8C5354A3F2438B2160F6DC0 81AFCEB201EC67F66DC5808C907A3C6CB664F444D24095D9A11D4978A7B57037 87C67552FD59F5713D0FE03462F9A1A323BB3EFF0AAD61B1792CB109CA9AE4D4 D7F7FBD3FB91258DCFFB4634669FA13E03C0AF699165311CBF37D24378022787 87D1320ECF878F859149B2F994E700A32CB7253297AC58753E4583A08A1F83D5 CBFF10F2D26D71CDB20E1C69A666E9C4D23BB0E6BF1097FBBB204EB736E61FF0 C3FDE1986938F8099694B9F998B3C735770FF21F73B1A6B750498BFD21184F11 5E6AF0F1FBB08EAD436C4AADE1E6B815F5E58988C113B4B2335A340798BFB201 40586D0BCD6AF5A08CE9AA042910197F47D98CBB4411A6D435A46F46B3964F85 032D7F8D880732276A8FD24DA772F642F06C9F3EB4C9090AE4A3AAE67D8768A1 7B2A57E15B7FC626450372F40E3EE28D8D997CCC8CC89C644461D1110740407E F6D884A0503E05AF830994AD0CEEA924D935749F6EE9F2DD65A58ECD59229918 A303C90E19E9C411FAF24AD5E9B786178F8182692CDD508A4755123B4A594AF1 A8E7287456C1CE2CA485CF4CF9DEE5238AA7328DA204816F98B7EF49EDB30875 3CF8C48E0465BFFA8F2A1CFB6A8F165B63CC80F54C669D02BFD9A0EA0FDE2B40 D69F0101AE4D2C10185AB10953019FE7D373BF40C2F6D4E36693F118866D1267 12BA7987ED4313E8635DA02A4FC1F7815105F8EDFE8004A8801CC1AFA8D123FD 1768A6C39E838BD489C6BEFFD3BDF650DF48D5F8D99DD5A2E8AD235F2CAE8BC9 C13AE9B214CF3FBFAC7BDFA54CB6E675273330608BD35600775FFB2A96FF648E DF55A78B43CF54CABC0DA8D574CC5C5C62E9D658EC62035EA5028767749E48D5 658212BD39C7E76ED0C6F3E0A1D138A0DB8BE574987AF1E43070F1F12C560009 F48993FAC935EB56A5793BA13C28293601D268B4880F9BC33D553FF3B6A7900D 37900BD3B4B558C84BBAB09B4BC2B14D32E49596DA090E586E28D560903B9744 7D014EF2A6AC4F711A025DBBC841F1C1C93BA1F8327DFE33C803A0993050D590 C7AE262261DB7D04B9DD91F89927161A69E14BB2A48D29578410E312A4793101 B6CD65B298988AB798F45B76E1F58BE24DB207C7E07014E17525B436D41FDB28 D1072CBEB526E17C72DDA00ECDD06394940DEE8BD02CD3C81BFD12BE0568A459 0F53010A0655942C932905FEE87183CE357887E2ED286DC1E89F2F401CDDDFA9 B418F218D4115043892882C09F2E3749D4671E75AB1AD01C78F59FE3F54276D2 A91512C21C68180CCC0E147E834002D7799FF393842CE88BEA714672E1952C9F 7CEF2FD0115B0E292079909A7775769341A7888CE6063537ACFF225B4F396972 41BF46C599D278906F3BCFF81DF941BF5888DE8A53CB0A2D71610CDCDCC1760A 7844F89FCBB892AEA853CF5D967648995559EFE852C95D2EFDA2CF063500F88D 2C83B615618831267BD8F5438DC53C6433CE7347E9C55E103B450EBED6229219 20E979C00B0B9D86345FC3A8EA2B049B7E148A7AA1C859AFE93381DA74CA578F 8FAAB28175D5B57F6A74F9869B2F530009E953913C6925D0045CB2E817A17742 3C5B7574E9BF3BA7B769C161C2496EA2D346B4E19E434120FE92A0ED3F4A9ACC A8BFE55F04D17DF035D01FC0B06182D8C27B6D32F36551B9AA56D61FB6A34254 D0DF918C6716D8D05B973C8BAD5AD52C06EF3C6503D4E0F7F791511C79AE74E4 4B707612149D583C5D96E534CB45F1E7CA5B23642B1BDBC881FD8E4F66CCEE96 7CC0509B5CFB0B3596682A81E682DAF6AE58F605FD7A1F414F62572298AD8491 B76D0A23B4AC731FB8E7682F506B5CC02F7029827FFD866EF4DBF56E07E7743A D42CE65B38EBDEA193CE5B172E87DC88452C3DE192E363EB9DBEC4EC65F53002 BE9E94180F73B53CE1E8EE9333DC86DF5FB2561FA1F9B2511962CBEFACA739CC 38A286651CEFBF451FF6568CFFBA8AA68555181147C1CDBA18C4F5C77BA8548D 2B1BA37E05EAF7F69879C3ECBD02783028CB1A8649842EB71023F89CEB36CEEF A9B04E9ECB0577536B88ECE7C1D81B0D6D5A478F8E92DF83D194759437088D7B E93C6AFD0CC6D568E60E2F1265A6613F97A6C4068C8EEBA70F6CC4E88A80F65D EA7B498395390A74BA57221B86611D3EE5DC4632F139CA8A15E5B9D2DC97088D 7CC65197CD93F4803BE4246394F40EDC2CB4904BC273C597F13C8DC680245A3F F1AF2D7BCE5D69E9CFC81E5E9F46927C5F55C719AFDB2CB1AF2E4D55B0E3ACA8 6BBBCF253CCFF8F02B8542F296CED0EB8A06A88549DC959E22C3D6C48F310452 22B32C44B046A61A4F7F8AED613DCD3C464DB2280D56E517CFD16DC32C83EACC D3E936D2F3A883B265444D818393E30EE3AA59E6FA73DDC421F5A0FC8442F89D CCE98189ECADC080F1973E14012C2B87F6A8289D7E168092C539BD54D5D3FFCD 2B5E02399614BD5085D49ECD04E14FDB8686A39D6B3F7FAD25D751CA66148781 32296AFD919D83DF85BA4FCBD7FFAA1D831C8897E39819D72F271AB142F1C4B5 D94BB96F64B76C0C8A2D1481910C9571078DC7A4E23C0F133241F06609699988 7AD4D12DD860E2A8E037290EACAB5FC3D90C30A01449D0F3EB9358A8B1E1C2D6 AB92277FC241439926F02B1D5E36F4A5E94C0430A0400E3EDDCCE5BE60B3AEF9 BA97205FA0BAD80C3EDDB35945946E27DC9682816BFA4436B7C995E8353CA6CE A532D8D57FF0B407C2AD1E917998E0394DA34FB91A4D0DDC48A5A864FD0F9471 93E02919AD6C9143CEAF479DE58330B0464489C0F01853B81FABA80ED0589969 89300C1C867B4F93EE674C7A14924ECBE93CA7FA8EB6F56CC66772E7EF7E7638 50BF18A1F6DFBE0C02B70E4F1D96279B9640A6944BEF9444EDD9832D3215B3B1 C15D47CAD873608CC345C296A519CBB72C813DEADE0FDDB2D6C1F993C032B8B3 D3CE0FAE11818134743C7BE084B1D96F729519FF3416EC4D41472935B0F1D6E3 D6C341A7FB3CA407FEA1D84BD263AB72F733608C040813E03703D90E3EC506AF 7066146DA28B1808949DE44AD29EC0C264EC882EB451D77AB588EFC3F1CBA1F4 87858B6C8422AE980A5C555C62B031DF3F250080ED54D4A10A9D0EB1F17A42DF 08776E31ECDB3C350F59F69A6A3D94DD4A12913ECF0305143C77819CFEA5F745 5C546D2D992503C1DD8AA91ADF50B9DE8D806AB7E4CC2BAA1A10B105F879BDEC A7A0933083C0DDFC17451FF149312EF4CDF86340AEB0CF84695CAFE8041D12F1 27DFB2224DD9DA35EC4ECB7C1DA19A19190D66B71D9723A5F69209AA83645365 262E9E882A4AB8389C0F73D3B8C1192DA67FC1763B6497A37808D8F26B374005 0BB1FE4ADBD13108FDDA982072D739DC82FB00DA71EC652385E19A2E2187F31F 381B1CEFA673A641E49943A172A217671D2D0CC5FA624D161759FDED112218D5 6AC8F9FCAE8D798B5D1C7604493576839C6C56DDD3E417A156AC9659118D90EB 59378A8D3B2AD0B9F194EBE1D6EC431D702C81E28D2599A9B783147AE556E7D2 31A15CD152DAA60493BF7DA50BF8276F4478F7978F9A4E0283C06D1FBF9892FB 2C7A02BA1B220BCF89B6B119A663D8840CEED17C5A8BFD7462484AB930332857 F2DB8CD26EE4A3C3640C775D86B86B58AFC816D4E66846F84383E436580CC6A5 99DE7C83E24C12260E817628ACD3C1E8396273BD08C91772B7F3DEB5360FD7B4 4F6619B03E70B15F0A128C90BF9F6E391E4EF22ACE7E54FFBEC9DA3080065389 1BE4F130CD3238FB5FE0C733413D88E9E36CF40DA6F5B2E1BC41EF5F7CB49825 EA5058FF7C49C5FA11F9F9F575AB4D8237FFC2573F94B695CBE9BC44A1BB26DD C6E55627BA16E5197CADA519CC7302DBE77F1FE4CF68C558D8F6E264 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMR12 %!PS-AdobeFont-1.0: CMR12 003.002 %%Title: CMR12 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMR12. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR12 known{/CMR12 findfont dup/UniqueID known{dup /UniqueID get 5000794 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR12 def /FontBBox {-34 -251 988 750 }readonly def /UniqueID 5000794 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR12.) readonly def /FullName (CMR12) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 43 /plus put dup 44 /comma put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 61 /equal put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9C535A5E57376651 F6823308463DC4E0339C78699AC82C769542FD3B410E236AF8AF68CF124D9224 FD6EE92A38075CAAF82447C7AF41EF96F3ADF62F76FB425BEDE4C4124E7B1E0B 8BF254D91912D3A99557F5427907A56514C5A3EB961B94112077FE9417B70DA0 B2E1C1FA3E1D6F01D11F640CF848E45BE3E205258E64FE36AFBD4DF4E93F6B1A 966C8E7FBE2CC8FF43C1F67BF6C361678B5E90F4BA524FE8A4CAD6AB28183E6E CA6C9636E884845105595A2E40CDBE8D4807A81AF4DB77B31873FEB221BCADD4 2C4669459704CB58A7BC230FC59F867EEADE660E49AEEDEEB042BA9A7DD8193E 56C3A36A1F639F7EA512EE4BC6992F52C2FC82A890EFDA730105B0AF7B819295 EE00B48F64C2B5BCB275B1DD62F289CDAD4AD9B7EF057684642FA6FA6322C277 E779CAC36D78F7779CB6DE12638B3C65B70C6B5F8A8C6421A379719B8DD44973 5F52856A4A29B2ED37F2B1FBE6EF4B79B7C0CD6395C756A00FACD763C235914F 847D1D99831023CE1FD89EFEC83AA7E313131C0C197248605EF5BA773D0A4000 72F607551A8EA6F0FF19441ACA179177D1FF7B423FEBDF58B0C19CAE3C10EEF6 3538D8FC4762B77C5AA023A8186C40D0365A4487DC3564265B3DF908572DEAA2 57E29EC669DD72974F806EFF5ECAFA9ADF1F9D2A63087FB7BBD100F0F81C6FFB B1EA1C9DD46548AEDD147EE64B1B4894972DAE1DC3E8569D6A3CEF9F9E46DEB7 547E10BB2959D374A33E47C58F1B20419920AB485F166062FCCC08EB5CC9AC88 F388F0C0155027B727729488E44CCABB7064A1432E179189C4627453C5231535 47D1F2B8BA43069696830CBB6E5F9A135CF22D3D1FE490A3A63C088EA32FF444 24A2427BBA63033DFE2E06DF8CE67949B6AB02F26335A376B57376814D2A7DE7 64A4347577EBE9A6E33DD2FC214A09C6D889C8FFBF1D567032548851B8F97204 49E215CC7D222F593E1EF1439ED60AD922D41E0E9EFB5CA48F2FEFF75AC5FEE7 FB6676D8B8D4DB6885FBE8B61B586313E4DAFB09D94CEDC0507E93000104F3DD F83865A2C6F6A7DA8562BF86F5DB233CC9B53391273A1462E40876A8AC2B098A DBADD5A160DEAC061F86A5FCCAB495EF8A9D121AF07928EAFD56F618E4EAEA97 CF89A3AFD406FC9DE1E9769C1E1EB83BB883786BC075EB5DA2692CD59C4DD7C1 7FD2FF9B18AC740A390C1DB38670DEB18C67721A1DCD502FE7368F47DB4281D5 459B3F020595FA3B10544AAE9EF786A0645FB7C9BB29D091E1432CD878A05918 1665643005BFD9A4B0FFD347ADC84CE22D6F9AD4EDC05E8C7179DCB360AB57D1 6ABCD200A4B4AD56825DC345984D9A3DE11CDA5E9EC1E5006EE4181E4EFE0846 67D8C27BEE8F84A1E01947E945BBE988702DEB2240C4BED952E433E5305484E5 71965D3DE95C4115FF78CE9EC18E323C599727C8B93CDFBCD1CCA780DB8C81ED C4B5E596E1603624308972FFAE9A57B0EDB51FDDB6E23EDE2946F61BEB241345 2A192D8CAD53E823D687F9C64A70A4B4B703291FA6317C051DC6A44BCCE0288E 3839D726A8F2E39BFF429865E95C726E808E02CD06F36C1CC9AC77999F8E28BF CE9D74B699CA982479E9D0DD98EAB24D29C981EF0349721D6819549A39413801 F80182D567EE316E2F0AB208068E15693E4C399A381BF9BBA625E597E6E109B8 16F3A84C8EC92F2ADE288821092A421A8D3B907048FE947230810F0777EE2542 29A3485223FEA079B359034F70464DAD2F0E420271A4E0CCF57A0ABBC20AB327 0CA71B292126D395E0D083B19BEC6B48A9DE2BF470C3D01A8C3F52075BD4BE02 A0C518355814478202FD4762EC542F8E7B9B1F7824F0554660CEB83E35635E1E DF0D03C94C903ECB36B4948ED98B6324E0094EB1DF70863142D4ED3A932D7346 39D69F8F044B6084482D7748C27328AFD24A3A70B99D1F7D32CB984488672254 28B6A9E9DCA2C9FF6A1B311D72413404B3CE5428BDB7FF3C36357D7975184F56 FA6B32AD54C37D0AF7576663AB1397B80D4E998F0B4C4F6D90B483029EF2EDA9 D4C4204C1546EFF3100629453EAE01918D09FE104E626ABA38646F17B6A94CE8 116BC7A8D9C319434CA5B830859B4164DFADF1D7C3ECA5C78D8DEA930EA4AC3F 59DBBF3148C91A2E807FB934E3439D4F67C6DBBA9972854E6E3688E1E0A34B74 482217CFE031CD7B5DFEF727C3EF8DAEEEDA08F4C90289E62FB2AF2357EB2E45 4BC547980FD479101FFEEE477AAC6268DD659E8DD9E244676FD3C6909713B71A 323B211E571BE711D103FA23B5B9AF077D84E2D20FEE805E81D20C03501F0F17 C3B081946CD0FD577F00E50B76CC37CFA97A61B89C25DD43911B28857284BEBB 5BEC61FFE3A14C64BC5425A7A82326617F6F1FA4FEAE56071C9F559F91568179 46369B394A5CE96FB7420FF8AB7C61CB83492FA5AE4A4B0799578594C9EA67E1 E54498AA5CD6ABA34AD3417F04F5D8D664A7EB39D41E2D17643CAEBBCCD9C38C C5C9541641A09335EFBCE0D276A54253EFD68141807A66F1DFEB4BEA5889FFA3 4D20BD52012206A9F8D3E0F6AFC03FDBBDF3E51506EC6336E249CEFB571AB84C BDF8E471E3795C04E38A5306BA6D450D72E50910D1AC385BB06CCD4B8E433A32 5A4B7FACC976BB31FCAA1E62DB2C4FE06DDDE7367930E336B49F47DAD91C8735 9A35D80CA2E117E86B52E41E9278046ED923454989E48610ACB3B1663F197117 52659A9D7BFA561C7ACE0771794FC778675F83C5EDCB132AF124C7E6540A140B E0A268836C73A3C746DC964E482E63C56C0D396515283970FBFF182F9F684FE2 655FD8F5D057D22246DDC3FD11B77552DB4D90ADBAB77BBB1FB1592129DE0AEC F822D7D36E52BCDABBD560B403A5C56C5E1BE789C3AC049318C7FAC5E5861E42 FD66C3C0F46361078D7E036281682BCE9BBF77983C93ECBBEBA9B359769CA442 87FCA1B98F4EEC4935CC93B08AAADDF355C99816453587310F08C50B9BA3D107 5388A1F3AED2AE32BEFADF0285DA90436D1D7EA85D7B9B6DF2AC4B778CFADFF6 6EEE54D1A1C5DEE3CCA7EFF57A7C2931933CEED90CA26DAAB45E4388EC4DC366 B9E88518D6CF094861D2A59282044CC06E63EFB390A6DF4BA5EAC7CE39E1EE03 3D84099F5BE96612789AF3EDED07266EF10A0FC23EA1EA97040B6BAA63138B1A A9CB8F5DED781260962D7618EDB200C3ED976033E8967A8CC676E9C11F74BE34 343A7ECE7EE97E8F76F7E95517A6D6163527406EF5A669535CB2BF4031F29046 BB2D0FFFB47A576F5EAB1D00A582965C56F28C00B3BB7BE2CC8D8391F789070D 775EB775437F0CD53DA840BB3575104B63E4B0BF14E3F14B320EDEF65FD4CAF5 8596DA491BBCF3153DED3B718F833D106432DF8DB8B8E6B34D5308C9010A5DD0 7E0E53260BB84BAB3EA748E8D72F75901604F80F4416920D69B4B983DCDB72C5 E9928F01A4A85954FD74578AE336C782CDF81D1EB7EBCEBFBAE7ED8AB4862584 397928F502D65139CCD582CF0723C5262EE54B9D2B8C39614652A8A90E1C3B65 7D26B99DA298FE4B9A7E98848F619C9BB4FF9FD215B72F99506F06355B332689 37D80AFD9F9ACD8172CDC51FCD3A759ACA0F7D4EBB07840840EE42C2D5B8B257 2C6DB3A7657B75F2F0B9730A20112745703E2D0FE709436CA6A5F36F59E64D9E 37C0A23D6D289E1AC1DA273872F5FC5C3DA2B127F078A4D7AB3FD7E124455817 DDC796D54EF26A1FBFD539D3A21B86DD4477DA49213259ABB3FF241424F2BE5F 89151E02FF87E0BEE26E85C0E518D8BE7CC9214B8E9A9EA1DBB49C6C212CCF08 90C0F23E9858947EE344062EBD9C574979087439975EAD4E85CD7BFAD3C91CF1 EFF577843AF1427D06CB2F3BB519ED1591974218C43F0D2038665F9E2E3960B7 FE68CD3CB2DB6B36C7997C6B21EC11CF1DE049541001FFF26D14C255E3AE862C 5A5701292FD2FB3D04523D6E2F3547923BB117718DFB6E6520F0D0B5450C695B 8C9242CC8671B7284CB2E1E9EB097A3DB1B4D5E8EEB93B4DC7E38C0A10474665 54DDCBAF079B92EA494F6FA75A84C5AAFE280284D0823D7C22249A21044BB0E6 4062074ECD17B62E03EDF4945A294BFEFB51F5FD870D9D7230FC91B83C1D85A8 86CDDF326FC90E04362145D6E8630C50594484FB829DA18F5C078F2EE67D2F2B 08DFF39AE2E8C9741FA989AE494C7166F122D2C5F71B97C973B7CE8500E9F87E D59C30F2E99CC4D34713DAB680598F41955FBDC26A14CF1E73D6BD6B9AAC8D3B B998F2D0D647356CD236DEAD6561389ED3A6746221B0CF15D6648412B35A6B54 6A0EF5BBB34AA376D9BAF025BFC650C1B74333CE85413D0EBB2F4D082A26A5BC 3C0A25D2B12CB159F140E00E262F1CFECCB2C802FF94CD34DA0CE9B4B3830FB1 DA85B9B670D5169928990A2E9CC869891CA2FFAD9774E6B92549644DAA5FE00C A5BE4F5FF91A0B6D2FD8F96121D766391EC4ED3E73DADD476B7DAE1A50AFCD98 DB7E27E44D30416088D9BC07D4661D9ECEC0806830ABF14CE55AA3CA2DF66E8E 748B8ED46466F1EEB072AC0674FE6FED231E0DDA59ED7C42BC05EF00E176050A C4834D893DE42474EA20DB1E25059E84BD137EF65A02CC295B0FFDE4CDE95879 0FE88BDF2519ABAE7F8CC3E6386ED35E04A14F1E3861922645E3A3F43B48A5AA 1999A5EFE192515FCC625C829FF5A7B337AA422F5E920545F9BB269C869A821D 6C4C26DD2AE746EF0F0B4C1E7E9871ADB5270E1CA9BE28225F7A0370D4C52422 E25263EE101C4EC1C7811B05AD42F364844A56BB91EE72FC8ED53CC6954D2BD6 F945D739BE4C61E36143CE890FC0CBF2F610018D678ECF7CEAB18FF5A0E48F76 FDE2463D40A99380D679B3B76D39C664F4992D23E5988B0D1AF33DFB04894016 E852EFD1EFFE586153C0F31ADBDBDE3F73FB49C5EE64D0D02E1504248FAFAC3D 903FD44679BB09C30288139B41B1E90A10139CA3172677250B16535A1F3E5E4B 6F4264DE58896E66051FC677030A121C5A285C47B6129CB5A3998830CE070D21 2F093FC1B44089F603A21F45F60960F134A47226874C737EF6C085634B0A4A66 139420501351F737A73F39D960EC38420BE46E5B09D298E7C16B8E32F01507D4 0141FC52DA1DE718D634AD9C8B00E46EEEF84356759324D2B9A3473C5DA38DE9 E30182B87F91B6A7F7BACF29A93B44C879CCDEDB063F9D2E51E0F1FC9F018FE1 2433D85AF24B55DE3A61C4D0A2DA4FDE933F5F6FDF17E9FA9932BFC46E2D71F6 585EEF5B2E4E89E797A24B799D7F064DD1A817A53677FC9EB8CC3E7F93FE50E8 D50E3191052943FD6C98B573BDD1F6D70349E1F8011599E3F8FDF1D6E80A710E 51E434E85801617C6FD8ACCF1B77B4BFCCDD35CB4C0367F4EB4D8D9DE8284D5E B4F43E2F8320C2C5A9AE90ECBA7E65D377E91DB69FEF27069235366AD3E126C3 A73CE97F4C90BA00D206FA012C327FD69EE59AF4470A315B1799CDC0539BF90E 512C8FC3BEFE4D1B01D969EA9E3FEF976CD6E0FA4C9ECEC955B265CFD58AB8E5 F7371E479279EE14B689269205C5B506940606CF3E24A1E7EFF3CA96ED30AD6D E243DE57690C3D69A401AB3315FA49E4BF4ACD4DD1CA39272533E82EFDD508E5 1C2CD286CCC5DE1202C7C7F654521750632EB637F918667E2233A43DF75239EB F28F3129EB5DEE2FC5BFC331FF709B0FE9B327CBBCE98BCA2C861C6547E50407 1218CEBE6EB5F9BABA4F2E11BCC6FB553A544A567B459E06375102C69F8018DF BA6A227CFB13E2D74E6A521E01B74F2963E9A0A1C9FD87A88EE6356E3BFABF55 BABC751D2BF85E6712E8EF57914920775906662E4BA68FFA21AD422D34E15578 43CA0568B431101A1194F8AB1EF25E886BFCDFC10F4A5EBD9530816548BC298E AE4A0B6B52B8B59C644C409B4191B6F4203F52314F2675F02AEB65A72C66E92A 2AC703E15D8D381522C0AC30C165B822A9B8D18CAECC094EDE020756018DCF51 D0701B507519C4270B70D8CE94B436F640C15872F9B5B77892AA3D110E4D6A65 8F0815C61A5127BA25815378683F46E69E54A391A8675977E7DF9C2D4E6FA991 9F029E50CC2F266B31EE9F9F24452D5838905F330CB7E416B8AF836C5AC26AB8 BE2ECC6EA4BDAA08C30995709E225C21D35DB6369167602CBFA8DB2697635925 969002CD1BEE745DA2E56C17EF3F0C05E3847147F86963C37A221C8827195A8A 3D38993E4939AC915BFD9A212F5FF3F826F742B952018986F9FBDDB69C3AC65A 845F7F33C55D4BE60A1817EBBCA7E1538E8087E1BD5C083A320D52953BE65F31 E8339C612A510B59CE48D2EF7061560C4AD258E7DC59694493E3AC878246F37D 6DE89253EBC8830C6B209E818213C4AC4CF1F391AD91D57BE76FB0E2924A1407 E4A949C905E44F54EAED6419F13D59942C8079336A172D4758BEB5D3E786FB93 3CBE4FD2EB53E4E1DAC34E821EB30FD44BC6CB4298242C38F848FC23AEDC9733 52BE6F32E31E25F18301370F8936810B0566B664B042C7AE0D78ACF0A87E5BF6 F9B66E358168B2CEA30DCD940074F3ADB793CDB136161FE2522905E87B8E463F 95D4DAB7E14A3DF7BCCE8141C5A08FCFA2BCE9F2D1B05A7642E75877EB840149 AAB007CD239AE47AD115929427717F219B0A8907F0EC79ADE1B901DAEE87A2F8 39361DAB43DFFF69650F601B24061A9353CFD619FF9626F63275FD09A5B13BB4 8B3379EC4D147C41197E8387FC04DA7BE409524CEF74EA91DC066808A7FD0EF3 957A44E2503EDA67B1C61827479486134E922E560A673BF314D601C66003CD07 55569085AFC8428389A140EB976CCFB8F29E27587E46C413ABE2EFB51AF5913F 53EEB74063162E0BA1E24CEDCA320377D3E11BD374F0B44E132A5C35835B6E2C D32948EF9DC7931D104C1385709DA882DED6458319F21C2329938396BC074106 CB9CFB9E0A915F8DBC8435F386917AC87A2BA45D857EC30ECA66FB4044F5439E CDD556B82A0E43418D179AD883C85AC276E1190CEC242E3E1D86E725ADC39E46 BB6C47FE9E17E29F8EA81E870302A00D91434F3B7A05F243176E6EF1082541A1 B9052191EE5C2B8E94A2E02DB65FC769653CA8D1C07A13CB853544AEC7FC35C5 218DE3128AA31952DCE19C55C23FD69BCEA2C661F57B11B8F9E86BFA718D1521 3346E78C701A5E51923D6D937E62FDE3669B214D240538F069A100A542720A86 31DE88116DE775F7ACC2A49EA6C02A24408271A846990669F2AF60AFAB4C16F9 7F4E88E917F0FFDCE68F22998AC0AF2A60A73258C3A4BBC42A2F918123128195 196D0E150D79AC3CF4628503D1F3FC528265ED8324E56849A47B3B07C29940B9 1BC270071E221D355EA51E9942D3BD7F99816304FFFC8F5B036C953B38759341 ED5D7B9C8E6B70C409DD8362FD291201CC385E4A98D73E8518A4C0E544152563 82032FBD2FCB6E403D34B85ED4053A8CB619BDD4DE001F4C3007B1F317579651 E6D6662189CC2D95AB85D7473F65C5D7B4AC63B0FE928F3400035D5A9D443D0D F3532B99F3AC26CB25EA3CD64C341159061E02EFBC7C033C05CD919BBD827A6A BAD47EE10B9AECC871B76227228CA161EA7B61DABB252EF91E607AC8D3F85774 DF0B1507B60BF52E4E9BC0FD04400A548D553D4A6EDB247875E0A2E013685C51 D23EE8A56AF57025AD67D929CE8BE791BE91A4C4D9F00DB8B4F16252C04F7BC2 02236296A9052306639F4672E90E3B9DDE466EAC17E200523B2AECD6C05A0A83 66D4EBC86C0DF27B789D5597FE88BCDAD2925CFF60F5A8EA618FE867857D585A CE25A158AED63B8FE391030C518693AEC75AC0AADD0C11B0065E2ABCF51132F3 82E3718B9A9FAAF727F2D8286177EE27BAD040C66D0D2D7C092B45D9330265B5 6B5C8E29F71C9EF548BFA4BAFAB242B26455E4B7FC1882D68E408D25E6F58EC3 03AE9B7A5F45D61E02D0AB82AFBE793D708ABEF45FEE865969895654C00A5FA2 093A297AE74BF625A96FD85F58FF994921C9F1276635C8CB65FECFEE37C77BD7 FBD692DBDF1079AD35F8A8198D63A3526ACB37FD59AEB59228CA89E14E6F0E24 C7C4257A928F94507621F887A05D18E3FEE1167C08592B4F4C595BF0D7C91711 C35C467AF3C1551BEE15954F01DB19D0B2EB7BEB076845EBA02E163971750D97 19CF09EBF31E25E480BC3685C72F9478BD32D4AE7F4F2363AA26CB534E109B3D 81F6ED00BF7322107CD00C968A4879499798AA0C0620E1CD3BBD274D907347F0 E8F2FAB76E71A49DD0549F2D3647D2B78B5FA8C746E8728C97F121DECB3918DE 8711555B27C758F8E8B9E3F7E09D03F63AA5200AE1B882EC083430E914E6D85F 559AEBC87F53164D27F53F1E555AA05B5B086334CCDD73DBDD3738CC381E19BC 4757E8DBCA477277C138B888958079B3D42AEB55365084750516FD02309FC1FF 0D58BCDEA1CF93E93BCFADD5D86B24491592E3DA3A9CAEF8DCFFA0C52EB7B49C 8F9C7447F85EC0F7D0FD1EFAECB12F240467D8EFB1B66A4B0B87EB0A69788953 251033572E9C74C8A94272934C39E9783E23679798FB8BA9FFBF8DF2E404D2CC 5C7E4DF1F5F6566F6441B58CF541998B7B90A51B377B87985B67E41312B06293 D2BD9FEA8F3707632337668580E1E62828092213E222D12B9835FF7BEF2D0E24 5291E60AA9A403FB906854843A3404C4DC4A4C5F89CE3F68D73959F25C102676 60AB78B86C94BF335B9F89AC282BCED4D7BF525461509A69D75C4CCE2BFE8937 A86DA8F1B0F279C8B8EE47FD44982CE0F9BB29D94ADAF6DEAF14AB5CC0EC717D 38219D4BD8C34C4F0FA60EA7A3F7CD2E5C8BC0EDBC9D59E20E3D910B04B4239F 810CE349117A823BD363B1C583BB4ED395FC0A71A17EC648BE5456E0B3671C8A 4F338963519179CFF1FF9938ADD2C2C0694A9C6EFCA73E6774DDBDCF6F675C68 6E6E247892BF180EAFB4F1925C5D727A38528A8580139A7D5E26A054373A9C8A 91FBF5178376E79507CC4F91DC84745FDD23E89177DAB45B6DC5D2E3F027C9EF A46E8CBF3BF0C2BEE116504274F968DBA297644CBDC3D85E3C310CB92B3ADD04 B33276319B168B3D5E7B0E2E2490D285F4D478555F16687096F67240277B99D6 DC5DF5BA40DA75CA99922F6C0216FDC71D86246A86834CF9B561367B8F74B44B 60856B1DFCCF78536F1AF8B4FBBABEA0655823CFAF994AE117A94785A970C0E8 CA6EE4EC6E7547F1204D4651AF0518549FC0E74DCB6A83ECA28CD6A3AF756C22 824B71199EC79767A984ADF93F3AAFEC9C87BCF00E9B43E6EBC1DD2155FBE5CB 16B2EEACED26AC7921F419095859E0BF74CA6BEED6EC9FF6942CF30A0EDCE2E4 6C90032C71107A9DADA802153E4C1743C127BD722D4A4F11F1B01CF873D3A819 943A446DBCCD5D92B4B8BC4662DB3FD268A7CF422A836DC082314F2654E52368 0AA5DD774FB39012B048BA5A5F86C79D742D0B68EF4B81A4C69BD9C84B2333F8 D5B07A11A9068BA8FCBA60D2AAED8D047C6EF86D86C6D6DB56E9A8FA02BD97DD FBF16274A352A618BA09B03F5A98108DE3495306C99859117B45B337DB038700 25F0BB85E71D3AD37A50F0B7FD308E52742B12EA772BD55E08468730BD7BD892 E566CAABA35B9E1E9C50F935906286BE3868B67A567767B6B41A8A1515F3B9C7 317EABD7C133AE7BB768E79F1974DADD521F082C96482B613DD3B81A44ADD1FB 03A1A1B1C7A8CEE4F841D00B8CAB8C579A3DBB773D5EBBF5F467AB9EA14A2CBD 8F99219198B10E98C96759D0F9F7817C68A73A52AA1E4326C43B35734CF5BAA5 4F2D7476D94D27891F59008F732EF386F2650833F9139EE394B3D488771924DC 2F1E866BA7ED46F2B099FFA4ED98909155077DB505076EDE933EF0702E303A29 E40D1A34D0424D48EABA6412CD22C2CD9D10C8D0AB02C368426F18132950C3C1 417F19D6204D116341169E891A5CEF0192782C3B6423AEE4A8CC94CA5F663375 8A2088A982EB8FD864B14D2E981DAE86786BDF19EDC4D5C430E5F3E5E8D873FE 624A8F3DE8BB485740C988AA0D8718D47EFCF3437913113A5B390E5778710A3F 266F98046CBBFC24CDBA133FDC47091711494538067509B89C71E972696EF62A C48C29E216F321E25C8FE5F2179D1F0EE73D3920E864923CE27D61087924C784 348AFDD245FBCC3FA3F99299CC35EB2E7B0276D31391B5D92DD95A694245F40C 6BD42C378FF867C159236CFBA0B1923D18CD03A3D99401BB571F6F42DC99A6E3 1C18BFBEC8C453C2DA199141996C2FE8143906C68788EFB2CAEFCA66EC78BF26 F0E466F4FE5699CB42750670B9CD4AC7CA237BBD039B177EBFB93703C87B6A42 A60EF6E857920BB054A10000196E645059354C56D8ABA28593EC553043017F82 49695FA70BE5578E56ABDA92631E6FC4A5417584C50AD069F5DFBBD4C33C3A7E 73E06F3DE43F601FFF3854EAD9269F26AF0C6B4D4808666E4D91114D37A71EEB E40C020F3AB3260E77CBC769CDF5DDD4EFF63ABB930D8F24B8136B1E88D5C8C2 9452CE9FBA0A211252909D3279441DD4B088C1F1ABDEC5EAB8F2082DA1B15234 268442981B0B7CDFBC9D64C02BDA12960FD7B5C158C982D4BA48BC4956D10CB5 7D1FEBC38D26B301085C3DC09A40A57A016A4211949B62E4F4CA440C2A22786A 4019A3AF4385467421AFB2663370455B5D8A 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMTT12 %!PS-AdobeFont-1.0: CMTT12 003.002 %%Title: CMTT12 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMTT12. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMTT12 known{/CMTT12 findfont dup/UniqueID known{dup /UniqueID get 5000833 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMTT12 def /FontBBox {-1 -234 524 695 }readonly def /UniqueID 5000833 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMTT12.) readonly def /FullName (CMTT12) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch true def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 40 /parenleft put dup 41 /parenright put dup 43 /plus put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 48 /zero put dup 49 /one put dup 58 /colon put dup 60 /less put dup 61 /equal put dup 62 /greater put dup 63 /question put dup 64 /at put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 72 /H put dup 73 /I put dup 74 /J put dup 76 /L put dup 79 /O put dup 85 /U put dup 88 /X put dup 89 /Y put dup 90 /Z put dup 91 /bracketleft put dup 93 /bracketright put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE32340DC6F28AF40857E4451976E7 5182433CF9F333A38BD841C0D4E68BF9E012EB32A8FFB76B5816306B5EDF7C99 8B3A16D9B4BC056662E32C7CD0123DFAEB734C7532E64BBFBF5A60336E646716 EFB852C877F440D329172C71F1E5D59CE9473C26B8AEF7AD68EF0727B6EC2E0C 02CE8D8B07183838330C0284BD419CBDAE42B141D3D4BE492473F240CEED931D 46E9F999C5CB3235E2C6DAAA2C0169E1991BEAEA0D704BF49CEA3E98E8C2361A 4B60D020D325E4C2450F3BCF59223103D20DB6943DE1B57D05DA0555DF933BB0 7B42D264831116C06C79335D519461E7B0E870A6715E3D74A08D1BCF86E3BCC3 A43FC6BAD1C68BD9D4AFCC06D845FD1F1E70D7A47F0BBCAECE8396E04591E5E3 4797F646AFEEB7DB548183F0B74C9BB6BA2AA04E7F5950EC8AE97C741D4B2C5C A8E7A8DF5A36A30B5A7592D95E1DBC63EF33C92FE459792CED29E2B8B6919251 75EF62089BD7D44A6E1F9B62EC802FBE62B821DA1C3B2DDED45D27964AD29ED0 9FB7868F3A8FEADA87A8E42D52C1EB7229D7C79B60BDA263F2BDB025AE14A507 098FA274206BACFB4A0A7257D5998EE8F0FDCA79CB61DD1FC59DADD11E16BF02 ECDFD706CDA1E72054D4EB55AF7BA9F19955886BC0BD6E0E3FE3769C94AF3581 DFB2BCD67FE2892AF07E858A01280194D8DD7332B3D0A585C87FAB056C2EAA9B 5AD48D1C9F00CEF8EF0D1408DBE1C03D04B231D7B8D5D998FE0CD7EE19828EF2 F988EBF6DDBFEE00F04A4A1F4E1A55DED7EF3AACEAB5005F1962C724A017C914 2936E2E0DF26A55ACD7DD836C6035CBF07981C1BCE3615064F0540A1034C69B4 E3908E76EF8925D486DF0B4A8E1F02D8AA99585A7C31847AB9382F83880C1C21 C496AB2DF8E7BD4643B28B704B5F6B53429D3EE940A79135F5BF0396E5B46F23 42AF406C26D12BEA7A41F332AEB75DF43C15334CF4651A99F602036946B1B91D 4BB0D2E51C20216D892C8173241AC8FD15A37C3CDD8AB4FB67D8565AFA61C068 95E3D6E46D7C09BBD09428207D506AD43C693F3C3D787F6A5C39084AE45E81C9 830900DB50DAD10A17E118FB5E9680B5194716A788FF7514A1167DD1A305FBE3 FC1F39A39F5613D50934419B95A4A2FE1B6C18912CECB86726926F6B77B5C3AF F38F85F974A2D2145BE010EBB4A390B842BC222AD4A0B7FDD882668C04C51F19 13FF91E7CFA0A0F4E99A1944B272E0291BBF3F9ADFCF3F625B87377AFEBD9F11 6385726E908BAB7D1357504048C0F5B26251A1FA52F08BAE1D64B9FC32A684AE 896F3DD0AAE9624050D4DFDA25E581FB2630E8840AC5322D38B92F3E77B55CE2 91ACB8321BE53A2C7D274D63CF0C68AC833BAF4B22B26EFC197D4A893A5AE492 660D995DA9294C16BED1113CBCC18AFCB5968175E80C2933E0819A4A08551900 25B0DFBC2D9DF1A90608429E8B3099D91FD4D7A1205D9D7610C2595E5B089E1B 9A97FEF3E03191AC688AE6DD3081EF8B5ED16BDB4BB5A2DF3DBCA0A1E8C65A6C 64698927D6C6C1B404819E48BF00F1A7393FD6C0751A7D639E32C569264A6A91 743A0907C329A0C3A6443795FAEC0EECC7A182BF5B61D4CFD11CB1A45974AAF7 DE60DBD2B69BE0D1124B78BAB855AECC20193DEAE543E77F9BEE110D29547D4A 6CD2180E4304BB80E21ACB4F3844D9E5F789B7877A1059A8C448B176F8860C11 6C5876ECB9D61F83AB6FF680531C93DA8A0CC8EB410DFA1EF42A6E308FD2E86F 8012D9EDB224FEE86E3EB98997B3A27330D1BB848EF254117B1A7E44502B32CB 9443505ECE5B893BB3031F2C5091DD50E1FA8713CC9DF67DCF2FEF968D05FD42 780167DB486A77725986A61AFA3AA90F2D96B45F09942544FEC6D6C08811717E 7313B7CD4AA5514244FB22C96F14DFAE99D82BF6FF69D5F908DC4C7A15021C92 A497D652A3E2A02FC24FB50B4D828F39DE1D386370FBCC10DFF511E4651E9A9A E9A4E0937E10684A78B642A171BFA6E82E11A42BFAF6B2C08AF8A15F4A4DF3F9 672689D2CC661949DE98264F9AAC86B920B32A6C15FC2D84BF15F4D098168A23 E98B7DD1A04B79FF4D2EDAF3C954A1C6EDEAA22631832BAE6BF131BCA0A5C010 AFDE02F807DF1C38C3BEBF20B37C94DAAB44B587B805D2F6DF7765ED0B000DA0 48FB65FD8C7EB079C2F3A0655EA208F9309BED538AB64FC473E4ED1C7F528E03 9EF496F6E1B7B3D3549F555674C14DA775CF717ED63B2B6F4103C0786550F458 14C7DAE16F3253FF767052DF9F30C02FD60E4EE1C19BAB7A7D13AB414B6A1F9A 6E7EC8B62C1DEA9E78C46CCCD5E5AA1CD48564D4258C6DA4AD306078875FD8EE 121E19CC120B69871FCA8D50C58E358123515BFC6EE2936C6BE0564CD11CDABB 72E2CA769E5D530EAEE28A638A1F2F5D69EEB9880B7A2245B87A8C20DD87FD96 0E6B6A09E5D995B69B3B4B9E929824EA8E05DE48906B3B6DB1A3EEF03F7DAC57 387CD2E4216C307165F33BA450A274BE5377ACF2BF632E3010F1BC42EC5FFCCE 9421C8E9259DE13BCB30ECE05E4F37365EBCB60563E3E2FA2126F3A7637A71A2 B565D9AE82D16F0DDF6F5CFBE3CF53B5726101D57893C89A6501AB64B569CEFC E26E4A0703D69F2220C3397B388984A044F772E59F331C6E87F207E190012F89 CBD7077EF2213E12E67DFEDF4F1E22F00C29F563897B117A3D578BA261CEF8F7 D147B4877FEDE4F5CFF2D62E6410602B7F76B645982CFD296EA41C411E1D073A AFEB01371F62ABD528327CFDA18EEEAED406D7FD2562BFA420347F0C48D2E13F 6268D194BF50A4316C23681F747BD4684859FD5652F490CD5CFD18FA87C022F4 EA939E7AB8A1ACCA17562D669C131DC655012FEB1417FC711DBE488D4621E78A 9084DF3F76C597BDB78ED95CDEA58DFE0EF9B9E48460E8BA644E2C5FA56773DB F41954205FDE3B7F756A2B3ADBE329D7DC0BB7C9171D84A6CE93A8DE69EAD34A 2C5BBE27773A7853EF42E4EBF7C35910D06CA46BC426F710560A9BB88D414ECE 7B60E5FC316A282ECCF2DA741E4D9C73E9F72BA19C26CA5D72216EDF26E6C2BA C78FCEDF9CD0AFB61F0060951E935E02A5507C1BD965C8AA84E6EFA7086F78F3 0CEF02AAEC58F831E7AFE251528B7DB0B9B149477A61AF49AE45D8192406236F 5341732EECD50172F917BFC2599281952E4FBDA438084163C27F3BD9A858EDDD 87E1641283886A2309978F5DA02D6AB4252C4E0C9FD6C135AABD5C2B6D5B95D1 6A1F73B8257E1976BC549B7BE91BE901011BED60599C9E5EAE4D80EAAFCBC0AA 8A46A26D8D080870A28AFD09A32EA03F543D7858E2065CF484CE9932F34DDD69 CAF44CC3A1B77CAAF77A3C5FCD7F2C13929CF61976766EE379DFA5AF0587D4E1 F7AB4DE7397BBC8A4C0EF7548344922828FEFAB4F6CC28FA5DE2B2BDE1686FD9 4C833B92E41934AC16415E5ACF434415116D288EE253F9C41066785F72864C4D C9667B79BD091126FB4B09ADAD883763D102775E072BD89799ACB65DAB7CB098 6DF1349AA017FB394DE46AD177F08593EC82A83DB6FE4117A28319FFDAB5FDA1 30BF5EA701C95AD40D53375402FA4E93704AEB7923405E3F9AC71166E3822A3A BB70CEF3BC17D9D1239ED9C002E3060A22B886EFC27F228ED504C906D1709B0C CCC70179A380E7330EFADB37FAEBA9176AC8FBC61976942DE1EB9F563EE84987 19E99255348E09DE7425DDD7AED21D6AF69B7D71E69F06DD65DE92E3B0AFD624 E6455F1BC8BFF6CC40BD87360E761E04FCEDD1A203233FA11B9428CC372F860D 358AE0CBA74762AE685F101FEE117157CEDE6D1B22DA0DB9BD200EBDC2F197B0 E72CAABD5468B5B06B8F2E739A7D267747BBF456F140E6D4ADFD0A23AD5B8998 2B18137903C90EBBC2B9A5B5053741CE32D1518C59FDD6FF3BBCA8DD22953A0D 0DB3C24628ACEB35DB2BFEB138EDEFABB4CCF90F171AB835697791E7EF54AD25 FE82E7D8966992E0C85D0BC622011C57BFF49BBEE4AECE4C99533517EB6DE0F3 5593204CE84D56356202C52224DAC1C498CEFDE8C978C2F9EF60F56BDFCB248D 237EF2BA57D7830E25E00B786BD92C7A5C37A4866A49D5F490EEF1390BEA0B0B 2E90F66EA6E293707A1EF05659150A0E4988BB5B5144E3123C140A03971E7799 45F62557531531799E6330668EE63756261555FD6CC7D0430D82194CDB01A2CF 6AA119C9AFF3F220D53FF738D84C53A410874ADDED42C5910D428113CD04FF86 E8F1400B791CBE9001D168A72D61F17D56987B556A96F0AC2B75F6B9FC63E5C1 632D718009429A778472CD3D57B442DDC7F9EA6AA2D93026058D61B30D952107 61D43EB2C25A60051133DAE6F3C454FE170525A2CAE45937C9BA52751F292B42 3724C31AE7879F7D9F0135CBEB57B88696B697662CBA54B2F0AA66E2D19F2C95 D2306BC8D1C69C7EA3906E8F64C404454A992E8C3A114449594EE917035A2EB7 E1B3A3B657930646C5B418DE0502B5CA5A3B50A0174D1AD7C2087AB873060C4E F27CE5F897AD3BDD2F883A23D00EC6E60FE27D5D97F53F2CA89DC01A1A46913B C24529CFDDCC1006FE7F443509CFC980962938C011EE1A0C6D7EC57E8CDAF6DD 7B3F010449A4C1C14AEEF3F618470BC2754C0A3BBDD3C6178498F21342482DBA 00ECFA1020C3FF13EDF2CBF82D074697B3319FBDD515CB5E9EAF886A9D1A8EDC 756EE4C67D02B7F438A3687B6732EEC9ED5EA55F7B5F595BBB2B56A41CF6387E F8E2A9972542EBFE595C075A8C84F68416E49F71D05693E15373EB8A16D9A75B CEBF8849AB6D1FCC9E5F880046F421BF00FCC88F48F5E4FD960BB70D1BE71319 074E215B012B231CB37748AC5572A99D3AA1A6D373118264C79CB85B2C1B9893 8233BDDBFAC5791AC897508002FB12CC917C1E20DE4294B3DC7162DF366189D7 2C57A1B2D9948356DB6B1AD0FE30B109ECD6CFB3A2B152CC954E7E03307EB898 C62BD7E978175FE02579E4014C2FEC8594A7D0768B07BCE5B7C741FB192E8ECF 2936E74C532EBBFE5DA96A5E84B2EFAE094C73B8EBE914DE6C7ED6483B477D88 3C45D8DBB4EC5EA0D606B4DE065C36BD039C7A6E03F7C65D999A700706CABB55 1D8D043A7E74780B7F9514F799391F13B52122971363FF5AD8A9DE6F56E7BA35 B34EB84BD5400C6A68A0A1877CC9D801A385998E8D64F7B92B3BE0C9B370E081 9C5E50321AA2836E8D78FB9B08AAA986707757FBBE17A10434C56CA82AC2E055 3BCA1BC2C2AFCFDF64408AB125F5A293112ED7BD0F12AAC6FB43D514D5730E9E 6E1EA836F7A8CC9F913FF6D9A7CD767C726E7BF22E0E6650CD8C979E46282C67 357714CD457DAAA9FCF2527BE5E1A6B0C0A5DB5CF3A2460256CC95583B12D8B4 6958779F572260DBD6BFD97AD64A5E2351B9F4AEBCAFCD2A42BA9DDED7044F6F 503B19EA0921C81FBC5C8FA055E36739AD715F36F8072D13ADD2542B80700905 40595518C09EB6F89E9A28D707C4EC622455A019D08FDAF440B7C1A4EFCD7DCC AB4339CD8EC0BC4EC945545BC694DC46BE681974FE5F25B6FF0950A3866C43B8 92F070003046C48FF51D63E004674507358EBBE842FB9558B5C427D0A7243BC9 536454D218276A5D0FA4EA4248E99B4DBE0C4B41515254A8B48FF9F25FB768B0 B3A942C021B2275109EC3F053E602686EE6C85E8945D23E876A5A2E7EE0C0CC3 F3DB84E39AA3DBD6ED54763E6999CC3CEE478BCFDF1D48C20E18CFE6EC4603D0 F523C1327F0F770D81D3C8EE666696D57FDB731B8A0BF509344A73C1E22D55B8 8313A388F17C17D135A9B8DFA086AE438432D15198E34987D85AE3B082B0F3C5 1F24347D24CFEA31E611CDDE5B342ED95BFD2096B553F832DD7B36047D430F7E 5DADE7477877D3E01E03F29C59F8857C5D44D782BDBDD5EBB5FED8F1BE58F633 728436106A70DE61C195F347BCCF1F53FA47091BE97C11285827B18F21616CF7 B81BF8E4E5DD112032FFB4B6E1B0098CEFC2AF70AADE949E99E1A3D64C95B037 FA9FC17AD1F0D6E56BB4CE6D141283AC268E950A8876947EEE5151A21667C2A3 BE3CE3179BFE6835CAE0C01F30F54AFDC68F680B8C23CA72F40FF08DE6531E5D 0292DC4E94D4E78F017A628A3BDA48EF02B87A6960010843F52EE98AF7127CE3 E59AF0C1BB68C13555F652981168E81632692849239384DAC1ED44859B6CD3C8 C781838638148B4DE6A0CDD80E1BA2A39AEB3FBC6A97C14231B223DCAA3F7B01 6EA92EE45D3C10A5DA6BACFF47253C6276DC7F0C09AED0BE429D51A711B72149 27196C1DCD4E81687CCF3272A593D427D238F3F93B982A54FCF06C66E159EB9E 43233D482324E68C9B47E68C34022866EB26988DDC47AC5C13012CA3995FC401 1539C6A82848170312AFA2C922D9D1078EF9C5E036AEA790C38DFF7BF4D1B05D A751B6C9546A49A4281312AAB2D4CD3F25290547C59AB6439DC9A724CE7F90CE 918D4FD36AF1607FD79681405E7CE96F85DE1703DE9A2F273ADA79626EB639D2 6C5DF6FE38899222ECD4284E13D3F81F938A4350893947575237FB513DB641F4 2A787DEDAB928362E28321564046A6211BC008D518B7C441083D9FA264835E73 BCCB455E1768786CEC09C1E1FEF15B30CFB03EEB28A7EB298E6345E7452B499F CBCCA28123C56E09CD5E8C5A37F8F4892E42D4D0358B380B667B9093C1DEB84D 4B3EAD8BB5B66E25FA50BD89465618AA7F9FF5DF5D6ACDC49FBA3A54215197CB DA1A381520CD064CAE4043E4217F207C7035613FE17DB48C04CE6D2459205D1F 9C41002A3B07BCE2CEB2BD53630190022EC6BA96591E6D23A6FFF80990C4E862 8E918C6CDEB767E08D81F5B66F1D653D53BB5555CF6E0249350EC0DF44DED506 E5F37D0650FFC18DA9828039D54A004311F0ED35FEF8702CAD0791CAA02513C7 7F1B456B57CFA6C2F68A3C33F0E7D362B790E57001506659446993E662F66F86 C179D632412EE208A0EB5401304C9B7DF4AF8532805667CE622AF60384C22A68 7C779D2D62DFB72D659224BDFA8B22000F38573533215507C4047E11E84AB87C 75C4ADA3557C5AB48080A7C4AAC60B732AAB2589536F7D066D4327EE53C4857C 1C634FA49CAE08B666C7459F135C9E9B42A4FB08887360D1916868BC4CA7ED01 33F692CC68ED5144E855D0AA3881509A6D4628C8CDD63BEF553C6A3410A34AFC 71A09671F24C6B91A98686091CDEF752698641BCDADC6127EC8BFE0FD33A3658 79801DB2A90460601CE5D2F96BB74F5E3F01C446325DA5FCA081ADC443A48BAB 31F2078C03AB494F363282745771B97CD65FAC389AFB91CA27F0E9BFEB66B8FD 71B4E987A4E166A89558806D4EBCB04B0BC0ACFC9A75C6931CCEE9C42E11E616 A7AAD602AAA64E374190AE12058832C42B6ECF7FA368B57DECEF8B9D989D1211 6A766D587BB0F4324E2A6334E0E5940D3BDAD53E315438A7FE08025B5CA3AB1A 543F304F59461EF15547E9B11CC5B7593922B3E39231F1C88DB007803943C8F3 B006FED06E67943FDC62D961F785D43D431890D2BDF4939B5244013D636AA781 AE2F1D817979E3EF48858F03734EB49A35B008B7D5540BBFCBF1B4B14CD44044 9E1D593F674E8D9B07E561F94EAA805D1EA75C5CABAFCB69893068B0C7F9F5C6 5738D627FC773AD2C4A24D4D915206BCD530C820197829AD21FA1FB25C68F335 A1BE51B5F61A74769508F6E743EBB65A2588F2C0A513D5287768BC7E6FFFE6FC A55EDDDE9B98ED57619FED9A95AAF35881019933DEAB7BB72BD8DDF3B8D2AE37 943B12FE3CF7081C84196FC37D7EFB8E1C7785B219509888A170B6BE583E3134 464FFD4AEDA144056032A850B7535FA1E3D2F2A4C4392F1B910F8BD865451958 678BB7AC7F6CDFEA278649351EA80E9F9F98DF4F160D390E34682F68F88D3B82 0A2EFD392805D8C78999B9384A2D49C9AB6AE39086B99AB5187850AC5ECF43F1 9800826B769FE8438B66B7659F307113E2D2E949FF6555E08A4A0BB4EE3203F3 669409F8C0EE407D885E463BD02BA08ADFD2EF9D5AE8D3780D28A9A8DF587664 5590360120A5B18DDC301032AC2CF11F31BDC3B6C8B9B860D2772CA1953BEF32 8596F70D6B6DAB1DFF4B965F9A6167987113D6522BDB77E9041E37C0C8013054 2D298FB6BB07B7B0BF78906E3F1ABA803DB0F92111B0FB895842C4568881A1FC 14EE94A8BA2CF41649427241FAC694BEB70A3E428648BF2BF63D2CD3C9A05ED3 F020636DCC4F5C409B72E87AD5B47ED932C12B884E73CCF5987733F8D8E3F990 500A3F85B828401CBF1662F5A3189DF5B11DCD587D47FC8C98EEE3A6844F0323 065FC3C59E7AB1C1F555150F0C7E4DF1009AB48CC5D991976051BB22DD0BEBB5 886888D4A6C511B50AAA8D9A788CA045E69DFF3383A3681F8ED5CC720CABFD6E 91D6A4E50CCAA0581A7C8FE39C76E102DCED9C80BBC3B116B7C011F1D1739AA9 B8C368D73F2B7DC63D8C1425BCE7B0C873ECD2C4C2863C72D4AF16C5293599F6 3F24E655919054DC900685CEC269BDE6999F1C6EEAF4B6B385549DD18EDD2290 BAE69C3376859F39DEB42C9A858D44BFEB87E2CB723D8D8C0EA047E4C3BFE86D 83CA6FD2D245C28B9F396F66C09F88DCAD8A9DE576F9267BC616B1688EFA1C05 67041DE3A3FE873C6C4D797559FAB4E28D8056228CE51DC2FD6013C56ABC31E2 8621E02134D1E992C234D05512444A8DA9BB5B4ACF7977EEEC6C46B2D6301DBF 3AF91A92FBA905077B9BCDD0BB54B4C8ADBABF58B0BD50D51E5009A2D947E898 E3750430E851B4C090E488360D97B0860BCB757483BA55C6CE92EB8EFA4ABE1D 3B53421CF300350D827B68884CB3EB0560E87EA05C938D61E23D3C1CC1EC304F 0D8F61ED3701CE0D87203089F627F79D31A0F5C3A71DB2D05903FA54D096777E 70ABE6B0C22C5FB3971E2651660FFA663695FBFDFD23076BD636D1F477F986DF 93903730DA24B4F8330AE03BEAF7E389FD2E225E53C7DD7AA7EBF4341106DFE8 BC4382B5BE83B459F29672DC44FDF921E09E6F908C99C469FA8FC5B171C416C1 F22DB20F483D4DCA0DFA1D9FDB3B90EF2F661703C6AA5579F9C95047508A7640 E114B534C0218A800BEB8C7815F82F642EB1926D5C568B4C53BFBC04C00DEAC9 F6B5122675EE833C4752184C75F7458FB127DFF0FCF08C94924DB2E589193D11 25A5C802A9FD280694227EB7466ABADBE1ABBD7437957D142E02467682B800EC 51414D66D2C2A483B598B1BFB4400FE6F37A2B882E489A4F569891808D93FF7E BD460F45E2F4DF424E39B707642F6F31F8DB835C5B3C94A5C65E071A3E74E381 96EB38291346BFEE5B1A2041D7BFD186D81B9552D7F28AC33B68312E4172711E 3C89784EF5CC4D992C1181DAE6415CD536C4B8E67E43C9C3BE1C692B2028A018 FEF7711CEE0B9771F5C78A1A513D540EBAA2FA3F8FB6C3828E1555A76FF19D93 93ECE2F689F08D6CC5AF601596E5C2B4EF3D0CB7922367A42256B875BE98E009 725621A81157D3D570A0C1A9577B64767CD323F83E1F6DF22463BDDA76F4ACAC 9E7F7506DFC0B0C0E374A4576A9B2C0C50B9D8A874358FB7BFD6AF403BABE88D 2038D9881D48A31FE519553FDD70FDC5C7296F0E3AD25B47B92A477AB8CE3BB9 9FCEF5A5EA8184C6299F1733A6E364A5E5C295661294599071F595BE97E6FC94 0B9BBEEC7B1A985A2AADEA1D3470117BE11BDFEFD68C57CE96823846936D2755 F6A046D3F0F675F5C29F77ACB28F43BFEA1028C49AF242467C8D779C15B32372 F23E2A8F3DE1752E7ACAE2D6D8EF87D897DF10463374FF42D89AB375E846A19E C58B43273DC0C62F5B517997754A02A482F147F6E3716F327097660921968528 4FE61BA3B199C0C21B9483B2FFD54DB9767245B78D27AFB3F2F51993691660BF 3C2F82FEDBAD26D98695D4B1DF4CB0C123ED0A4B5F61EEF12592EBB8103648CA C005566A0AA21F088F12741EBDBD213690480211524B5230C555585A5869FA20 D913948F1DBD6C0B54D280C4A94772A9BC23067351DBA83AC69D0A9DF0DA28D2 9AA90C54B13F53834212282BB7BDFC55113419A8DD9A55E57A33330F38299E5C C950922340E4870D84C59CD6A78BBF9870C1362AFEF520C9541BC4D22A7B409B FBDB93A26C2367172DCF7B7C989558B7736186D85A932A62DFAD78998E9F742E 2730F0FF36334A5FB68446954B428EC50AD18D702C5D3D5FDC3D009A0592D677 F163BC896BF1A4673038FE960C972401523CAD429E69D725FAEC1341130D921C 5A0237218C37599722970575303B9A2795B1BC3697E97AD61D1608C02EB06E63 3E773CF5E9866030BCC48EF0EFEEFE65404234D433796C6FC1A0328FA3E6588E E47587FED3354FD8C99141293993EC7A0452CEA078B5AE0AEE41C686A499FCFC ED58D652C253B3CD98F8AC74C98720872ADD40EC836095A0B8C65D75418190B9 CECBE9A83788DAD513F8C38DDD0B5AF7C80D37B3D94F028AD24F8D91B2D51270 BA29B2C656B4B07485874AABEAEFE3803538A97E67F373CF1827D3CB9414800B A8FD7F41C44386DC63F448C3CB23B38FDB3F912B2873987190D5583F98BD9647 5DA969ED8CD70F519574FA4D5BB135CCA2F35BDA8EBB5046F34AF380CA671C06 F8F50792A98F03787891F0C4B990C4B28430A84E974DFD7E7C2930C1BCE3B790 E1D778EA2205FA12287362EEF7407B775D572B1201BD953785BAAA9A2CCAF185 96A881404DB1B127A4CC4D57039BCBEC047F93BA057781D52CE47D44461416DE 7C29268E4A3D748FA8020754515E1294AE1633EFECC252295D7C727C7811FD86 3B0E6EA1543D5D447851FC879BC4C7BF111A718DA1291CEE474F6783E42CBDB5 B77297F69E0067FD63924BA0BA012DF6CB450F9CF9D6E6DA3EB69C458DB51251 5D641C8F3101E2D150D091D0A49D45721DBE3EC96E45FC214862CE3BF9A42BCB D000CAF791D1DD67DF467EF34E886803F6ADC9353DAB7F27CC036AA242306138 88C21B88DC1CCCF9E2C6CBBFF06C390FB10C614EDC8BE6D298D47313FC843742 144C46AAA978B4081C768729D37C5621FC3BF252F9D8969265EA05EA7DFF77B6 CED36225CE9203DAA2EF861CB47C8B6378894EBFF8DD79320E279B149C4DECA5 3C6085FE2392E172A382658FF53A07C0939403E0F24DE700BA7BF05013801497 A3BF442D1F7F32899606289CFC6CB7C49CF90C2CDA7C2655C5772FEDF1B689D5 FE900527A9CA7FA1898064D5AC7C061CE674AEAA2B7F80863A59445E53EFC12D 424871C25935F9495E2C689D5E6E35825C99CB7AFEF7E2B44548D613C44FBF24 4D0CEAACF6C88B32E2AA802EFB63EA5F0BD3251BB1F2451A8093AEF3499BE201 95BE702C36C1DBB2F7A971FA7D9E664017A69F99996D6F2E382E3F3C4AD98223 F622451C8F730F228F06EC3DB7B57F4BC5C5EAA096CDD45E4D5F41937224BA62 9924B3C31E4912107D8B858DF3EB90F3B3228A6276EBE59D76135FAE191A1A5D 7B127B8C3190D7394E38E75B2505ED09C0A13ADF0223DA6C5472CCB0562A2E28 4AAFEC4520AC054A9195ECC3D89C25F5999AA9AC05CBE745A64231A360B7D0E7 749CEAD44D7E5BB1A8BEFBDBE14E5A448E30E2257ABFF3EF2C866733EE4B6059 7CCFF94CB3B10DD5968CDE879D876B32DB27E3CD4FB7A279B160E6DB0F65ABA5 59439283B8E93C325FB3982839F4BB76546D521A7B85CC83876B33A2D4460E9F 8426C12D1CDAB7A35B32994CC06C2C7E25ACFA96D2D3B4E5C4B759A66FD51522 4F7E256A4EA00DF4E4AB9B05D78B61D3072A14399CA8CF40E2A21546082F1E4D 98BFE87422C1AEBE75365E5F59FCB2A5E7F192BF26ADBD8CB8134551FE666464 8BD70D31E024310833EBACF4FB2649460490E1080775A61946331FB689EF8454 493AC5EE59B08255EB549865CA213B6B657F1A1C8CB539412A2FF00BCF5177D8 DB344FB229DD5FB22145C83A8CE2E423BEA443F58D926DFDCC056E9DBCDF5069 DBDF17FA86E5B6C2820A649F14AFDB79F97AB4DE59ED3B8F56854D38BAAB5B7E AE6C2BE9C091E9E2286A4F 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMMI8 %!PS-AdobeFont-1.0: CMMI8 003.002 %%Title: CMMI8 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMMI8. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI8 known{/CMMI8 findfont dup/UniqueID known{dup /UniqueID get 5087383 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI8 def /FontBBox {-24 -250 1110 750 }readonly def /UniqueID 5087383 def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMMI8.) readonly def /FullName (CMMI8) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 64 /partialdiff put dup 84 /T put dup 100 /d put dup 105 /i put dup 106 /j put dup 108 /l put dup 111 /o put dup 120 /x put dup 121 /y put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBA9B440A6DD72BF8 97084C906B05FAD969086ED21AF0AA1471613182B26117D7494DD9F9270EF3ED 8DA4D957225F75D060237B6DAAD5A0AE3E702B3D1C437835B93B8AF1F9E7D966 E739CF3AD5E256F90286A34069E5BB4122F94F18F3485658D0D25B938522A879 8215A417CA2CBD20F71C5C5FCDE21EEA7BB27876D93BA667868A419287FE59BC F538980597DBBA743DBBDBEBC61E3286DA7977833DC8BFC5E52FF5DF5EFD9A92 D070EB769E31E760A50FDE012DC0057835E8B9B046FCC83F1A0C40326AFB4E3A 0CC3BFA35FCC64E32854F32EB7DF10A19F95830136BBB8139DE1663B7FD790CE 464EA431AC109FCA0E03F3E0D355FAE20AC8774D6B1CE233C27680C77DDA7356 560A27C75993E8C980CD1E3B0683F7E8A05119B3AD567DAB4851B66E418687B7 F9B21B3BEF607918D5973421B68E65DFD8B6C8DFDCF1CAFE2637D365148EBCE3 FA4CC00052A2A522205EA3AE3461CEE02042E1A3F11467CB6C8C849B200CCE3D 0BC188EC7B934CBBC0AE2BF5DEA228181DBF0F774119F313516E7D97FF532621 9278F856C166CA6547504F34991D588A0631A5CD06363F3FEE9FA0772C783447 ECD0A200929CB58EBFB6B72008E4082B5D14AA560C24915B9463A92F38237886 C35CBB2D4DD6D0CA8C1D4EC46093041C6181C2F6586EE3E7D4E647A107B6DB23 DAD9AB5A0C2905455FE58075EFF6B48597078BFCCDD84812B98986F34987CE49 7EFB19814F2A58B0233A59331F6F8EB66401F04EE7B1ECAD9BC90A2BCEBE213D DDDB1F75C83609ED6A669A0CED58B2E269E76ECF73616D94F13CF827C9BF354A E82202988DCFE856786B8AE569AFF3105B55C72C58D310FFC0E10B2ABAC8DB06 40D5F72E54770E9DED1AF4616008595B8481E3D9AF4191CC9A5BFD9DDD01C9F1 FE7165D21E488DB40879E863D470CB31CA06E5B5F1F8C3CCE04B697CEB0F3557 ECAA358D2EC2B370519CE06138FA702314BA01F1F33881825EAE1230098BB3C9 59666983275CA4E8D9DB34979F86535577E79393A72F84B0F768FE8C92692907 15E9FE9894E98A0EBEA490CBC8C7E5A9F3E43B24C2C5A4BCD71DAAD3CC0B8B82 AC13933543E295C163F61C9FD18371CB514493F90BF7FB460C029B8DD2E2BF05 FD66B451DF277864DE1EE42100BF29E01A50258C2758F3EDE211BB3457B8243C 20BE72983FD6FA2581C5A953D94381E32E80D6D6095F2E93A5455C101BA71E8C E560D4694E4C167EFA25FB1E9D214AEA745CE34CAA5468FAEF8F6BDB6C6BE8F4 3D58836C26A2392E4C4DECE284A90DDB3858A16D6135FED655A600929DE71605 6CA32F6851A2A6F71A9DF3D5D657593BB729CBCA2F4B059365B7263DC08AB211 9C547096E6427F6AA53CB2EB87DF0AFE2ABCDBD15D7EF228D3396413B83C6B4A 79E41F9BA55A2688F62A10472675E5658F151F9FD6634EC94EC0682C17448024 CC1633077C07A93E4DA8749D974FB8F4332B5DECF97D749C10DB60D4C90ACBFA E65AE928C88BAE19234690EEABDB30BEDCEF2660D7464D5071058C30C572A2BC 7DEE5384BD7614A4BEC4C84E18CF7EC81C810256E8CE6520466C033E2A36D3D3 5D6074B3857415011D8D9D49A474D994571CDBB89AF92BEA879BEBAF67663F5C 17ACAE809C2231EDD0A76641BA52FA7B19A2798D54A4A9B62C42F9905851229F 2CEE0191C8AA5AC12BB0CE9E5E3E862683AB57DBB4AAD6AC0FA8BA4F408D41E0 755F72B82B7C18EC6B13995BF7AFD66AF4BA0EA7523DA8B75EE751744EBA9CA4 4E8BC1FB37734503A5B24FB9F2C2D07A47CFC477F02413D55BD7DC180B0344E8 50248801FA6BE26C97F397797F5F9DF762967E7CD92CCB8B2E587C92177619A4 BF8046CBC72C6E69DC78B8CB6B7381A290080EF59F5B9F29C1167B261C932E9D 010D2D14BB425D157F22BC0305770AECC5BC80000F8CCFB9930255A68F299ED9 D3B5B83A2CC00E3305EB281E1A7054734661B175C6CA0AF168790985F173DF03 A8693B677BAFE23C3CF833FF6463B136FC370E4F0C29E322DBEF637F62C33CD9 B0A8338FD67EC628E3BF2FCBF7CF0347D5CBA1DBE6DE878DD670176B85F69EF2 3C5CCA1BD2B8A385F113EF1CE522F5A6AE053B9C1E39408C9459DE3E7FE2C4ED 77F026B0081BB80D40185458139C16333EA27F43EF1204BFBF80BC5301B2A3AD B10F7EFBB4F5B7E04DA1167F68BB6D4049440B0F57385FF0A95E72760C6A12F8 1335BB31CB74081FBAA319180DC00113CF50CC5A41D2E751E055DA1429CD75BB 0060C21CED634FDA106C49A12B356129D010E29F2919301AA7F80222AF3905ED 672FF85C9897A70241E8DDB9A53034B6BB44E140D9E739848E7A782F24B98AC8 00DA09EBE4532787E5CF3ED815705F659D8E52DC2C2D4949374A3BF192BEEB99 1D9A90A4F3250BF8A1FD40D91F5B34AF2CC561FD02FED712500B24330D87DA9E 4AA46B6E34BCB40B1F73A1DDE07E002B9478E9651D2BF85E67585B6ED812BE03 A594874A235B1C1840C4BF4BA6D863583D8C12DB49EF7F8CC24DCBB6B21FBCA9 378F3E2DC406291AB324571F76E0805DF8826090F0E8B50599CA58D124653D16 16C782B01C91A6F3DA6346482E3163D28D95EA49866360147296838A3FD0CC53 920F91D895F839CB61FFD2FBA296CA4C6304EEE579782AE5FD33D0FA652BA7E2 CEC7C01DD0D3E0D56E6177EE5F609A396F7FC8EADABB465DBA7F384E215C4DCB E64F807A50A461545107F9C3F7D7CC7D33E6EBD6D9228B1DCBFEF160703E6129 0DCED8D45DD54E2A36E698A616E7906A50901E453BDB2A363EB77144E9EA6F2B 6BD927495EB0EBA5755165707CCFBF8759CE5856881117C7F3EF6D494EDDA7EF E499BCA56C86467AC573DA9C2724FCC74BEB331E736FB093DCB67DAD42296655 415D110F2729BD1D55E5C9CCE2E724116F45FB2E66AE0F790258851A5C808762 68B8A110BD326F8D3EC45004E7CC08DA42F6CB80A6B6E7C286F139534A275BCD 2F812993DD9C9A1AEB5E7E4BDB4805DFF3A7030263AB060C9B74F0C25C5B9005 965284884450CC2815DF28D5F9B0496DC7A3AA85E1E42741E1538797175C28D9 FD904699C771FB066397FFDEE8E8DD1ABBDF67E6BFEF95BB700A7C1BA91354C5 42EC3864F6E19B379E79A1CC3C786C0DA146C6B0B8E507ED58DBB1F12F613A98 0E1F8967991427A22ED323901C4B83336CD343212131E8B59C2F5D232702ACC5 7891BFD4EBA5D0FA35AEF9F3520CA82D121BF6885BBDAF15248A9E4649ADB94D 0735CC4D14E1D7275427D00C8E709579612F7F74DB6FC218C10C278CC63E2AE2 37EC996B10C0229D687F0DB5E38A8C4DAFB3DD8A9E7ED37186FEFC97790A1EA6 636A88FA9FB4D282234BAAD301A1F3AD33F252C5EEC49410562FC52809CEC466 A0F6D148E9AF19D6DA2337C8283FBFF6005C37AAEB0B7F7217A8DC6F949B9984 72DEF163E4D5ECE4288404448C96A7FF0AC76F732D50AD63A1D286C9180E80E7 C218B1F48E3034FCABA6BF262CEECC284AC29E9F3CA1CFC1639A681ED66C1FBA 666F073D45C84A286E05FF809D4764FE819B6A330E73695CCF2F448B4D4EB4B3 F63E94EC289807A2F9A1159CF328C002B467B19D6E9454CCE36FC19E0A214190 B251818DD456EF658B0398E275514B72D9C1DA5F806EABCF1DD56BC025D69FC8 A0C2FAAC1892B64D2AF79EA2F57F103CA623E440307600D50E783FAA998EBD40 51D23A0CEFF8D8649B48B982DC38D613F882DCCAE5F51233A641B3CFD783F830 D984F116DEA3ED8F0D3369AE629A006BAD4523F8E3C7C6B39A6C972508B67AE9 32613F28CCFFC4BBC86CF31A0C25C786554F7A1F3DE97F5CFD1A941F775067A4 784385E2D02EE1FF886701B1E87D966D3F500E15591A5012E645837FE2DBE3E6 A3D375C6CA0ADBF96B33EC3FCFFFD888D7344B31D40427B8A8BED0FEC6FBE038 1FB5F0714C4B5A0E607E215B5B7F76ACF0FEAA4C9790EB7E13C0E3933B7C63FE 5B934EA34F4B741C3667BF1735C685CECA63507E6FB9EB06AA010311F12AC1AB 4CE3FE8D1EA1EDB3C700BEBA516FC71D740B1CA1A60D4578003973CC3EE21DB1 58FB1CF7E2EAEB2A4A6C742EBC3575EE6378531C6EFA6E6986E68B8E25CEEA67 A59623FC1ED2ADDA9D72DBA627D179E47DC7F5551E07EA4D54ADB6CC8109D340 7279F288E552EFD79C17DA3431E53EED66D16F24BF86468C2FE7EFF421560500 12FB048D6CE2F370BE4E560F8B4AA12362ACFEBC839351C1D5100C625B14CFDC 747B66082D4AD5474A63EA0054E9C3E6295AF6B133348487B0471395857F4B73 4BF8337DCE2FE2E1A4EAD7E7BEDC822BDDCE42B79B308C11897C98E3ADE253CD 09CEEEC0CB1DB66AB072E36E1E04911F40B535B0FD85982C21B8A587D65C38D2 DBC5A07A0A26DFFF7460F10781069490AC1B611CF7312A14B4AA6005A4582C5D 336BCC30EB47749193BE8D457A43F54204B070DF5AC2057B6437E23705C7FE8F 7BB150560F7044BE3E48EFDDA539FEEFB0D2A7856CD4E405FCE0F5EB190D91AE 578E2EDEB9ECA218573BB1A8EF116043A27DD17A4047BCCC7C5F3C563A910778 45ABCA32C7347E6180ACC86F9D665FF025DD8AF514FC3724B5C3510F3C37E0AC 5101D1667C6ED4E8F37F06CC2BDF66CB5A9FB7C52CAD26344FD1557571336A1E 1E340EBA149B4EB99016D1A411FB874914AAB2A415CE3F5FDFBBF5AFD7959B9F CB127BDC68D2A2F3F07FF3D4FF32046C0371CD2E68A6471E46B08413FC3C7A80 A107EEE57979DB387B2206D2810DB310B7232B2DAA385256C8A58964B512003F A0C24ED21809E2576229627278118107B9C32345C1EE8C0CFB452CA362379369 31320DEB5371037AFAD093B61E8AC7A6DCF7D49C7F8EC32DC0ECEAFD7E892810 039570D2956289B15E078C2545911BF535F72F7DAC619BBDEEFA855BBAA81704 18F7D351B0936357085A32157AD8E27438A58B2397D69264E748B0B8D01B33F4 D04DC59326A7DED39E247A1C1A1AE49382BDBDE9478A1CB48F88BDF14A268B40 A40B9FBFC4C87FD3DF1EB2464C3C14E36CA41E09EE0A9B75FEB0769F9ECEB1BA EBF73B818427FACDBC33BB95B9654F31C59A766E931C698A8608F15290FCDBD3 5C535D9036A19CB7B55BF54E96F9B2206DC71624E2E55FE632FDFDEC8757AEA3 1D83D190ABED5E7A7AAE2F41FCEBC7C18626BF58F9E9F02FBAE0C8AA85E9DB21 A3D8907522DCBAE4923C6A2A09FD2F08FE32215C544AB577B337D929E625E704 E041C2381AFCFEA37F3133B6CA20093EFD457C772E428325E56C9CBCC447EF9A 05A8C3F28017DD4FFACC51B38E4896C5044266EAB4EB7C13FE855E790DCF8A17 B61B1D30DD866BC57397EF6297C4891451FD6A5C6AD6D7446F58F56A68650908 224D9F4C31C6906FD29BB51DC947465B808438E6260325752808963C808A4AAD 60422ADD62CAF315F6AE92FACEC55D5B682089AC0BC051CE1E2C06A3874736CF 0DB5F7C8F178479E4F11665402781D80397C75456F5CDF0A4F382A19EC6AD64F 71A9275264800E178F212269154DD8352167C57EBC0A38BE794AAD1601C8E541 7E1AB8E969A76E1EB4092644958FEA2AD29635E70C4DFE2EB0D9B3E1644FAAD9 B27AD5466EFAC724718962B62E7B8C32F412B69DFFEB792587D571FB5C591D95 4CD441662CD1B07595E245FA537FA9EB5A20A97E5C9251EED22C9961B48B25ED 85BB7524F635F9CBA3714C6D60A6BF920C45A64F4C366C1F9D22F53084997C9A EFE2D79FBE3347111F5093E271DB7E3770B35D253DAF93653F6A23FA145AD775 AF11E188EA0428137D9A14542E3EDA6F7B2E5AA86C9F3D3649A85ED2F020C696 01A339FE6D7E42BC548C8F92A4E3809C67A986C99418772403D16D0E8662595A 1F37563671D6DA0F36CAC99DAA8FEA215DF7D45E61314915A30A22FCA86A50D5 2FF2EF08E240F9FAC030D92BDFBE40F1972DF413E6B452024CD11792BFDAA2D7 C82716528AD4B3D637BB43E748336DCC86A952BE96F1EA423E31340FCACDC1EB 02EE932F58734AF3A5B2279361B63F1D824EE3BA9F4D2EC7B33A300A1CE8CA43 24616444176DB8099D85AC68329B1F85E4B5B16F3B396FE2AE7774F3065D0203 AA140DC128D6F935C44733EF585F89E8639A2096A225A2E5E49D447D8AF9FD44 CF6C1BAD5C5E5262AECC5543EC8199B00B72BE32A0F110F64A1D0D5CCEF38FD1 155D6198E9A343702F8ECF5052333272CAC2FE016681E12745CBE14E1065EFD5 407DA3686080989F6F6D650A9F1EB3A813B070C30C0D3B4A1E9C206E2E4DFD51 D8DCBE9AECF956640A2E79F1B4FD0EB8E0449AE1B8FFEBC43275743B4D7F6605 0673B61EB3189E74F51F3780A91E6A5C6464C8CF7D563D9958D46F39B1A12087 6BBD4898BA9ABA468AE1F24115891FD3CBC2195F75958E26DF8BF1B93F7B521A C12112237AB23A8E5A7B7D0DC4C53692B35F3CD813EB463C0BD3A6486B0476C6 3B36DA71FE512E5745D097FD4AF5D056E434DEE2AF926B2EE79F7FC4FEFD4130 BB4B4BE01E5C720325A4884507CB51CBA4FFB615B78A4182444F0ECBE4161A58 E86FE1DA2E39C2BECBCF1F1D7B9B776A26078FC252128FA8108CB83F673CFD37 CCDA493234FB93E1550EF8D2DC049ED95B00A8A57834B024B277D3DF062E748C B61F183F2D72AD075474F8165528CE75E4F40B38B0FAAE45751C1907F8D31619 E88EAB02EEED415F3EE3BC5BECC6AF565D34E0BA2958FF337A2B06012DD1858E C53DE52C108BD5AAB76C882198C72CDCC958D68EA8FD26F76F04EC1A08B2AC3F A6D0E8724D2656555DBC0C8C42A3E22ACA7E1BC8E9F897D9AB692E0FB9EC32EC 59E31CCA4516A3C3BFD5411BAC3DEDCE374D48681CE7D67DEAB93F5B5C5290AC FEB29C5EA2C98095692873D36C7DA24847B66F31E4CA4C7AE5C79D7CE4F0532B 78620582E3731A2A6533A03E7155B33E7CD142FE79F72721862EDB24959B9783 F834CB616FFCB2A23497BA6D99AE34DC459A2F7B3E4DA2B54BED118ADCD92178 66C40F4E60F6E1327D5DBCA645A2A7C770807E6D7E47E1265C753F8793BD2D1E BDCD749CC24D4AF9315A93F01180A0F9A7F420DA1B87664DA5FD967131273271 9DCC45C3D57EB9B8AF14771E8E751D88B98D2FFDC72F5011D402EC34FD010ACF D3B0660304725191D64FEE106253FCB3470F1A16EB7B45C1489D3534BF94F740 C2781DAFA5E8A9E7B25A85BD7935DF3ADDE08C960E283D8FC3976FDB4085DBB4 B6B35FB239C28C785B18BE4FC98F3A5F410F562DB5FCA04E8074E4E790F4265E F88117B3D0833AFAE6E8B8A71D7731BA6F14FD6F217EDA3F8CC687A494FC3914 B84FDC37C8C335AB1E7E0BEC7FB6B7A595C50CF8F0080C8D461BCB8B579A5155 F963B6587873FA31C3A6572740C63EFBE58A2EBB723B7517D2A243F6CB08A038 54F4DF0F6692022B2EE8C6F6B73735ED3166BAC58D9216A06EA6FC7B63B20031 D0F0F99D83D9030B413C2360DD2C553E34BD67851B743C3FDA676AD63C5BD759 9131358C6BCDF05FCC048F4EBB9005899ACDD8E9EC9BB8C5A08E83485047D263 0ED69B4D1869A38068FDA03524022A1D32FA2AE0BF7785FCA8F089152A57EB8D 5467C28AD44E890380CEA0B0E0CD0F6427F2C3BC1A5257BF03D902BE94A449C5 EB8F33DD607BB4E0A1A7A24431E1DC2F03596EB2039CC1A9D524E10B374E34A6 4DFE6694F9E158DD6678BCB0B56BFF435FC4F5EC442E14391B45178DDA235B7A 07AB6EA76230B60456344BDB08C929F9453553452C97E016C26C11B68186024C D1AF6C638EF54E26AA88856FAF1FA9A0DC5A9EFB7130EE72EB3313510EDB1DF4 8D8E512036A986387D8E96689E912149A342974F559E7CA4621E84351914EACF 7810F41CC0BDCAD6165182C7040F052C34D073FFEE489549EFEF83111310B3E5 F67EA5449D3D81DF1FFD64AE0F1A760922FC629FDCC6AB0DA66CC29665BE386A 4DC43CFEF3C5904356B7B2EC0AF36BB4FF6A994C8158790674A8EFF54A36B7AD 8C8B833C1D1FDFEBD7D39122BA602A67ECD2EDE9D35C2628EF1FE34B2CDDE154 2247242DB2541C5FD49EB8348536B83A67E718DF66A627D7C7622F22B5D3A3FA 5149B224F82B72E4F2A1B22BD6FA7018B45A404E66E2C6B96476A39E5D330AB2 ED04E2A7FE38D3A88B439E804F390F4B7893506FDFC1A72EBAA9FD2DD8062C0D 7B70D35F81B399600C625B80C26720158167C6BA509BEDB43F4F975523B11AED 08A83792DBC25C25CD0A6D542E0D2A5EDA3D82FC347F0D248F1EEDAC6885BAF5 A165AF8C3DCA336C8E8535D6527B7033778D8FEEC243E24AC9444E1A9AC5A3D1 D40A01D9054D7A926B8A4D2A969C3D78A926C661313B9C6E70AFD02F5553BE02 62D5937D92C8AB019F4BBEF19CFACC27A2AD9A75ED83788F5534E25E82C5D706 9A218A40BC614FE296C88C5B95DED6CE47EA8D3AFAE851FCC2CF058EB58F9472 1A335CAC988E0A96F40506C63A7DB373F5CEE9F9CC6C1C67082ECB10F4C7FE2D 2D08E52630ED1E6028766BFA243C4E6488D2D3CC32B3C38DB2AD22F43680C96C 7A1E53E7E07E28764032E577726F4726CBD05DF94FA36BA7FD1ACCA468BF7CB0 24E2BCA2F35816D9D9C70075D1E32D7C57FA86A9C3A9A27E599B2BD899BF012C 56609704F7EB773A1E37F7965447EC0E1D3C6167728AD714BB3F536EEBD43770 BA775AC0BF2D0B02C33F995744C8952197A226E1FD945492CDCF8FE08CB7F16C 99613D8514DE3236A58267271D633C14C9CB6B753D4820FC512ED296F97E9171 070073A303FD083BED750F56ACD909E60B80304964ECEA03C6B30CB79EAD5F94 FF12D08902EE2A3FFDFA48E69AD2F432DA259026B41CB4271866A204EF7B7CA0 C841570C9D3C6992798BB2083372FD93FA65A46BEDAC870F8E5B3DC48694EE6B 3AF242B963E467F08020B0A9796B3620EED5B88625CAF34E6F1B9A5958F5A63D 48024E4131B910A5ACE5E3A896C325AB7AF41765EFFD05EFE85EA0FBB4C95B38 9E4B9D0C739FC8F79C8EDD52B8FC8ADE2D2D6253C0EBA90CAE69E0DF2271B356 C3D5DA27D5A6876614DDD6267E24BF3EAF74920BAFB83AD59FBD32D895384299 1A3EDDF718898C8AEBBBB4A449A2F796A2EB7E6658E72D72DA5C2E5B34CD35D6 4AE50883FB9938A019EDAF9E414550B7DC1A0D1F362F6F9E82F68E3993AD0B93 D1AB0D190C98FC309DA66626D199DFF3FCCB12DDFA4558CE9A6B76C5D7545270 5092E7651FA3018F48A4AB8E47441555EAD23BD05A7C964D7A47129D39FB1F93 C6D0FCC37EC9691D0389728BCB168EEC6563A8241A5346B4A23B96A8AED28E62 35E6F66948DBB1B5F42F762102C336FF302811525317C437A104441FE6941923 C7A18B59AE95A32694578245C1D6A28929466ADEE8B5AECFBDEFF0F62355CA3F 5C3F39039EAFF922CB7CDD5FF9C831994D5D71E8946CEBC521C1D425C48AFA71 5AC1BFE0D5124C605130E0E96C2241E05429E88B15B8D41ECDE4958701BD5EEF 76A1A2EC6CE4E1854958F6A6383830277427C040B733832E83613D6F073AA373 91C88153ACB6BD548DF0600D41FA33DF9A6DF6B44634B221D89DC294D3168557 8793E5293AE21BF0B073D92881CA864CE3DFCD8F407BE13FA0D8C8B03CC23057 3CCE282D8347F510370FD0A0D0127C5AE333D221BBFAC2316068AB06F331BC68 6EE721084AAEB8A4C8481799E094A90EE934A36BB2B487E9A2E09B68A1E22356 1A6BD11CF9210AD619C8B832B3D5053780AB3462AF0767C1C24429BD86A4ECFB F18587A169569DECF8F2709E1050E430195DDE54DD854A4CA80862152538F2B6 70E905F27D420A6FC03DD3C2FC6AE3EA1735E92FDB49102BF4F51741E4EAB88B 3DB8BEA8FFBE5D0D5E28F5CB4627D156931BA71013ABF49972336A8D3E6BA7CF 2E1D1C7D60ABEA5DDE3BAB021400B11190B884426D4AE9B7EBB12971EE898CCA 2790A684CC6701872E682C6770118EE4DA8816B705DE1F8B1E28678E5B808E05 2DDE01611451292C4C52901669660347CF6D115C71E6B930C823119576A3F368 EA764DDCAA0A9E8A1734CED4946E9C0D6B1ACA28E629732B6BF4BEB800F30C8F 970F7D7830AB415A3AB6D26723AA356959D49461846564C7EBECD9FA81542BDF 24A52C2572219181FF5D3B1A604C1751661306A469392E33314717615FA05047 E58CCC3D2FABE65A13B02549A77EC304EEB76CB42AB79B6563B1E223AD039B08 C8ACCA350442C7CE851700D4628DAD9DA37B5C7C46C7474E39A8161E6DBDD038 5349232D1A3BF7772040CB9017615D88C8B0730DD11E24B5FDF853A1863DF0A3 C2CDAEC6760BFAC2A0722EA777ED2795EC03BF880AE798655F03CB8408944CCE C4B4407FDB48BB310DE62EEACD0342B2CDE45CACA8900E06E0675AFF1F0B2CD0 D8848A178B34E2BE3E178C8A9A50952497DC01D2467664D5313E6468E9FF848E 3D76122235C2D314A33E4F6A8C6461301777A2E3903FEFC7B60CC1444FF3D7F2 7E157EDA914D6698D50089E15C23857A3AAF8F4EF644B14AA47CECD1F0AC61FA 3BB4A45C76226C78 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMEX10 %!PS-AdobeFont-1.0: CMEX10 003.002 %%Title: CMEX10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMEX10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMEX10 known{/CMEX10 findfont dup/UniqueID known{dup /UniqueID get 5092766 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMEX10 def /FontBBox {-24 -2960 1454 772 }readonly def /UniqueID 5092766 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMEX10.) readonly def /FullName (CMEX10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /parenleftbig put dup 1 /parenrightbig put dup 26 /braceleftbigg put dup 80 /summationtext put dup 88 /summationdisplay put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23E7BC2A6E71BCF95FF3DA948 1A27320759222BD7BC7C1A533E90058824F06942F0234C68671083E0E4708398 D246C94F9C16DAB6563651BA33D86273FD2DB3C50C106F3CA95B1C79778D0BEB B99D9CFB38E41BDCB4261A86A23E2CDEE4837D9B6F0E85ACEAA984C344A63709 EA35B61F08821338D363D172BD185A3658F43052AE1E61D879C99DED7F6D726E FAFEBD881BDDEA91FB09DB75675FC74AA2BEA8771027C7A51BF849F8E765B870 8F7CC0871F301ADEF9B71EC3C607B2F51325AA5B3DD74A2C5426E7B329FAE84E 94A159C8C9C35E27A0FC93FB98A4D616750DAD50068A5F0EB96B8228946E5CC6 B69E93D262C92E3BC7161313156E380A2ABE27BE400A23DF95E65A4F76B3FFE4 CF3CD141B006C487EBC73A5A101466D4388FB2CF1D9439D0714720BB58537B7D B3EE1F04AE117222CA5F0E5942F7A875D55D91D63958B1A02405D9DE08109B8C 7104F2D109EF7074852DFD74CBE02E0F3704F2BACA14E05EB1D0D9021EFAC23F 76C2389F8EA237D2E2AB6AFA83A725E16AECCAF025E05F1B1B5699D761F62A46 EC6F31B0FE4769BD0D66821592ADBAEFA9EB454CF1402FE870F5F96D09980C1B 8B6D2FE88BE56032C1959E6C3DC319B6A7353F3AC629CE5BCB947B4B235426E9 4769302817AEC1ADF50E50265AB488017634AF824D44D3C8423FC7CAD97F6D6E 6B34313637687FBDE3BDF6FC951CB41277D8EF49D14767B59656D214C9724DC4 0523EF896F4E48434FCC5D8423F07194C54D48C62AC29001B10C9C8B514B24C5 CEB60FF68D36749711E108DBB52738760FCF6571D5B04E58F24CC0247834B412 D0F6F8D7F1573F23E3E399D5A3A3A37FCFFEAFA044A5694D2458EFF2BC1F7650 8FB0A27C505A20C16776EDF94BEF9DF702F3C64DBC1939BEC0399B6AB283F832 DD8FB358F701CC075C596FA7B0ED7A9304DC73274C8169337D55124CB748CE26 A635B2704D8F65E23CC0FDA3C57ED451F8FDE7B6FBFCE2746F5AEA11B065A6DC C3D200D962A034DD6757991BA62D8DC0408F49083D48799B6097B61343365A5B 30FB02E9CDFB5104FB751BE8A268EE55C1208DD8B29D5635014EDE9D0D94BB64 ED5643B3049027925BF2FD7EFCB631E01269B731AE12AA6226B2656F035C7E92 959C4A21BE40D7C138C8FF28C9FD4B768CF25F08859AE84FEE6EA18C033B3659 D9EE250BA5FF2568E8BF7684A93BED7852251D1ADE5DB815AF3AAC36D1A500C9 41D1BF3A1926828CD1F9E501ABE441A07B1B96612CF0728AD5FECF7480421F46 0B18E06D2FF1A5B1183459C59517976474698BCE18A728515CD489A83C001AFA 47BDA929F60D0FABCD8786AE16EE18615C37D18703571936A365D334BACA9BA3 08E2523132887B5EE95ABCE8581C78C3E858DBF35ADD56A1F6C2489AFA73D1B2 379C5064DAFD30FDA84581FDE268B470636EE35F21648955513714F6EAA08AF0 249C937721DB0E93D95C4DDDFB0948051953F39C6D2D811D3FFDC25F786E072B 2A8A1F4830F9CFC34666A1D3F13268980E9A26682CAB64817318A1E266F3D2D2 DE4EBB3EDAF0E7B526C838CBD7F37E74A35B1C3EB96DA4099DE689A53970D4CB 9AB355E93EB294B07DD09356C338BB4A61C147BEDC152E58DC92FA69846E4829 551A5330006793CD88523F7B3AF7B4475C531C67A4B66A603597EE72C4ADA491 BF13706F341125CABF37FADA554FDA0BA5534C7AC35F1829E250C885D9A9983C 5D1FE8CE24458A8B13E5C7EA22BF1608AFA96B83C700889A2A6C9C4052DCB892 6CAEEAA9E7D7F3E215019719B36A5DAFCCF2396FA0C04AD99A7C23772A7BAA64 D1FABE8E476EAE9FC1A3E08CD6D1DDC6E087934E676BDFD1528652B6B9A50A35 2029466364300AF4CA3C5883F6293A7104617D0858B3E43D43752F814654A938 A44C33410BA0E5EA7BF55D4F1D57E27921DB05C059DE29BAC1BFC9B607D2C5CB 1DDC47793984FBB18BD99E1DF7776B563A55E15DF024D6D8E6ADF62F16F602A6 7DDE1C68637672AA9C7A1250161502ADDDC1B4F6011A9BD5605B73AEDC37CE4E 4467C838B7692C4D541EF87DB41123F9DCCFFA971553A5D9B0E7EC539A28750C 8554383585CD8B93DF731A301D85BA9ADC95B4A3A237794C30230A82300B6756 AE5A46A090958109C5565EF60B0B16D6C0A16A56644B05D3371DABBB67ED9BB8 9BD3983575D371419C7568B2556649402AFB9843106729E4EA87B3F9038218A1 F820B098A1271E330708432567297CCDA332B555A40C62BAEB16330175D28AA6 13AE6939CEFA2334E3E890B66A73277F0B63B1FA59F856ABECC5FC0A50571F5B 0747FA554F5FC72A51E215304B2E44701A13E41D91397B204C66AAB3D101004C 7FEF2D87DA558EA057BD492CD6EF93601CB63F78426B502CDC5C8E9EF4FF3692 376601B1FAADD801602668370B5ACEFFDBACA8F8B3F4E850D07A20F6F47440FC FD39504F0FDFCA35AF2ED0DA8BAB63AD42EA8CDA912CE17F5E62192DDD912333 3E9FA0884117F07221642490044A72E359D5F25D9591A8FAD568A3DEE435C354 11995C0EFCFEA21735DF44A30F79F747510E28767A4266461D1394F81344F6DB 1FA8D0B0D9E5F52FBB663C8F1E91192E5608FFEAA178B93F8298F70510A65BEE 12ECB5D675311B5B3B19205476512D92B1D16262720484049370A76F78D9BDC3 02EB96AC1E5B3CB078D2F219988FD0F36B043ABBF347B22D36CF541A8F80F791 8E4F92D900B7E7B64DFD500882EFBBF23565FA470103B2E0D2D14E3E4D7827D1 BAA0F84713A8CDE5904FFF2794850871DEADDDC53B77A502F5CA98B0744BB656 2FC40ED2AEBCC5CACE2301E983E6C18CF16AFB9FD8CA49DE51B22F4259D43076 DDC1BD4974CDF2E733EAB6334B1D5614288CC81FDCC722CEE193635D1088FB29 F80AD5CB96394AE89D920DF8E1F271585AF019190F17DB51FEC9064B54C3A53E 3FD33C3B553FC79F743BEC9674743BF0A821051261DE4527A2BEF4A04E293E97 02B181EC5F5EED3E26060F2C9EF6852B7433CA1BC1690C30424B03C522A087EE 92016EBDAC4B787133B4A22BFEF0B6CA564C6EB910E1DBF983CB4CFC3A1F8A26 45329CED7F5A8704ACE9D4233583365A5A97342A053EF403F0567E9D0A62EBCD 84B5D7145BBB11D31046BC2CF5B450CC68B85DA0E78EF8902F8D37DAAA9D4242 455288C0D73748F9BFEB1B1769D6FB84B94993D5F7C2B9CBDF75AEF2C930F277 210B3CCB8A0299F50AFE2548A4B8DF5ABB52F098ECDD56FCB8D3A406EFD95088 92D7EC39FDC7EB1824ECA24D0CBC6EC6F4C6A7F9590D593B269D2CC0BFBD961C AA8BB4296B4E4411B54367A341A5EDA97288DAC370A015FDE6D7FB0A4CECEFBD 1A67DF3A3703E922BEF2C414FDDA42482EB35D5DBB206B44C76C412A435A0842 6845EAD204BDF87065CE2C99B05D2D4080D5D11CFC3316967472C7DA44CC1F9D 51B83B4BE9B882D6E9ECB482F9855D024ABFBA502CCD624E0F88164A6F13CED4 85F20DC01BB15C7D78B1C79FD9FF71F4B043F59DB5C297768115542BC7C8A99E ACE39A268D32122541FB441FF1364FCBA2B7627F12C49ED038BC044B6D9D533B A72D35317A5AB8D91A9AC56CA90D1DAE9F967605C63BC9F406FB3D5BAEB4B38F 4934EE3D2F5FE434B45CF5C2D0E5E417EC279DCEC4F16504EE40E837B11620B7 7526AFF23381ED3E9A92DA4DBF4EA2BE4FE444B9A74AB60EFC818E20DD8B852B DF8CB659C0A3956D0DA61F49A9DD467726E57E9B32EFF540D551A67213D40273 AEAA6E319D92B4B406377D36DAB85662C755D76ADF5795C52D54ECCF0DE81E30 B84F951233A0A400CB063911837F0AACF44AD2441A7CE08818D64705E1ACF7E0 F59AEFC5DD812981C5508385274817056B2CDCCA4C9F3103C92838917EBFEC94 21D5737AC634B23B6F7F63B166D60C6BAA8F33AF44379C5A7337E737190EB3EE 14272B905D08C01EA118964D3444A03676FF3B62E7626168FA1DC6220699780A 0BD5776DDFA26BF0BB335B3C978CDD5CF1A419D4B5C562B3974FECFCF0118199 E547EB287CD92E32E881F344420FA3CD97333BFEF5D7E1BA31FD20622E5B4F95 692DD0ACAF01D413B21C8608FA87B470191C3CC5AD333263C955B4ADF4370FCE D6667FC93495003F4B6AEE4F83603D55F19EFBF56F955FC9CC01E494804952CD D426FE706C13D41F87C5C668D8B6BE50AE0370E07F52AC0534ECAB1C19851099 FC0BB1EC2A649795A62299F73CA606EDFB1D28183DC63ADF67294553115E8C57 7CB603CC491A6065802B925E6DFBF42917EE6E44C714228AE452851D61BF70AC 844B5D800EF029357FD659B8A648445CED0ECAE1474E443124F4B3644F54C556 A330D92EABEC7F607C6B13FACF69CA928F835056BD1A8ADA20EFE6BD5CF4A1A0 8B9E415E4A5FC6F209EF05ABF2E0C55F6E3060D1C72967E1E68791499F303C8B 3960C5A1F2DF6306710DFA98C8D0815A06B5590374554DCCDBDC4C295B3BA6B8 8BE3200CD4421A521C06BE39D4CA495BC63F3F982CAE3C82AD38DCB537E617D3 34BD96EFDA7C6A0F6D97A6BC9F084645390E194E7A11399FCE4EEB9A965909BA 6EC69D34DBA081BB3F18BD1ADB1AE1B7FBF96E4C546498667690857EB6931841 46C427A5B7C7D99FF889582C4AD11A7D267B301C5A5AAD9DA99D5BFD438238DA 62DEB899FF0F7B7997F781315B2CC328BE3572A3903A33EC901AC6BCC7F152A9 8A6865C6CB17189A4EEB699006A5F9D4482D53A76E88438E444F9302C79F0DC4 B3033D29D303B38F5959F020337EE6619DC8A8C3912101B02CF8AD113BF4BC29 8C6B9D25AF6B6A787F222C05964475B49B6751E3A3A6EBBEA03677D5B136B9DC 6D9AC20193BFB0759E89831C9E2AF68BD45ECC81175DFE80DC0879069ADFA8E5 24CF3C84121CD9739A28BACB9891945FA4E72EC07136682E18FCA81938FA6A3B 8CEFBAED60121530E33C1C0E698B5923D6AFC4E907A99B1367C3D435CAEDEF5F 878237453B8DB2FE53073CF3319FD096343F42D68F097759D051AEE17E4FCFC9 86E17099799DE82A38F22D870BF7AB90890E3B5264976700BAE594C8563A218C C985D9A5A7D7BD959F7E4E66286833C86E89203ECECD6FC4C6FE1F04010218FA A5714881C4C846E85F13BD68AC250CD0E488DBF60BB10B2CD7AE2E30F9C21DFA 0E84F76B4E996AA1C5C056E64BAC85622C160B56DEFD4DEF86887C1201F7C20C 076D4A27BA69572BE9C89FF3A9D3BAA5CAE0A6F2187AD01ED497798A305E3BD8 422DBFBF45E3F4AD35240B07285128B59FA9E83D9F6A2E620CAF6DB05129D930 44CB241CFF84E776315114C3AB61FBC0A8368D9154CC5066E2B162E89DA51165 F9CC075F2524F9A8624D2B56ABE64AF93B9F0407CC770C1F2C76CCDC06345D03 7B173C2FAA201D8E1F6C0315987A7A13902F4AA5ADF081C2B0A01C77E4F7A3E7 6A4AAEDDC577E855D69D38AF6A1D271B02AB496D94D81996FB078FBED17F833D C6C0BCE141BCDE277D530951DD6574B9CB3CF0370D74211E9AC00C7CD3A67842 0B4B72ED517E4906409DEA7993D0B8E92D418139960EBC86BE63A1B1D417C451 8BA13C230DAE1EC4E466F23351D410D9FC4A7BBD477D5FA07659B71CE9921B1B 6755C67AB3D4988064004CF75948879D16174E8097C91F7544352474C2D9A1F8 A1813BC6F4BA13E952678F5707F19B4799ADB3BD186DF650821DF58CF3C78D67 84E4E1DF8DACEC50D15647C3DBBC3C4355E602D3A03171FE1CB36FEB940211EE 0A5300841DD7B7CF91C02B3FC5D89C691156BFF8A38C6C72789DF260B868AAA1 895046E405661D97FA9A0048AF114A89E3ADAEBCE541753E4FFCD902391B5372 6A97E32F0257FA9FA1DC15BD3140EC7F0CA5A68AABCEDBE73C38B35FDF195F96 0F9DB0F592C188D72D73512F4DD92D2371D1A59254BC477CA084E68184AEAB6C 266BB21DC3AAF874DE999AD2A17C79621AE322612EE4B6D5BDAC511418EDE90A AE75066AF19662C4AD855E4200A5D67BEE4ADA9A399192C74D35E59B15FB61E7 BB167282D32D538029ED22CC5C9860C1F6B7BA7F33D5CF108D4BEEFAE7B37E67 39391F9934DE17956303532ABB011540645DB8420749C9B9A019C3CE86ACD566 1EE8D8D5E0D8D0DEAB33B5413EF10D4EE650F82417002E436E0B3B628A657F84 074098C2E9F897D9AB692E0FB9F268E6728F94A79CF4D6B0A07C8DFDC1D67FD5 EDD5863EA8949D180B1596D0009D662FC429449D76BF13D83F0D0CF165982443 E9CC288CF7C5F2E17EB7F3736D1FB814196CCEAB8C833720E3733BF594E1B536 BC0063080BC751F9DA1741522B2967D07DDDA169E7D3417B4A39EFAC15EA5E8E DE3473CC9DF991FAD2A971F44B09635085DB02D692F149F144F3DCDB69B72C53 A2AF34C65DF0D5F35E82102E67B733750646EC03A4FF47138F7998607BD93AB2 B63A0B82E8E225FFAD5DC468077FBE8C8C8E5B4BB10A8FE836B07367D742BD6B D36DF5304B9DF363120504C279453452EB177FBCDAA6F6FB78A24848F4A1D94D 1E49F6C46CB36796F3F4C9739346381F28AF085C5EBDB2A02DC0570C7A21E097 77522D4947B51182431BCBF3E55CCDDE93A916AA40CEB577277FA512380816DF 9111C56F36341381D62368E70462577D0C135BB3CB4462B269AA8E0F03245BFA D01DB8E23F2DFD5DAA88FCAFDD51D48E562EC649DB1FFDA0FD8CC8C48E6A9207 260ABE35733D75630053CC74A07E5AF6FE87BD5FEA69CB6AA20122276AD92853 6B225BC9E3350D1B1362E04C7795D473F1266852B02C83D02D938C55D8F0C671 7A9205F8CD058304DFA034D99A6BC16C582F02484A089602D42DF30D7A5716C1 D42A4CE56C19E40C01DC7DED931FA13679CFD2700B3826A1E6539AAC12293DA8 664DE251C5D1761BB45FE364CE3F7F7E9B67F86EB31D9626CCACE4DCE03EF3C1 0D2FD1B12B5774510D46C5C5CBF0A34847418B9A1DF0C67789422D0EC2D49576 9DDE72D63A4A98613461A6F730A05336C691583F96C3CAD2AF7C4BFD3AEB3814 D909858B6598FE19397006C8C4D549AA1635968F47144E7861A2BCE8AB4CA7F0 4D253949AA0127559FAE3161C810A8CE22A3079602E747C9398F9C8B2A868F23 D77D7AD6B980FEB038E0557E58E1D7AE471036CBB96B83595D9C96A4895971CD C2A810651A045F876A1F5AE470BEF39F856808B1F8D736030A722E1576BDB3B4 4DF06F73D38D313C8A0D3504EFBC774750C9F6E687ABCB1927FA1BB3882AABC1 2306A030CEBB259AECAA646C6497712F6C1E9DB7E1365A60EEC5AEDD5147A77B 1E3A10D73C477876D54FEE853D953EE75F7EDFB287550B93CFA8250D1FE2FE7D D34441F1224F3DB1D355188819EBB98A94DB193B9CA23803869DD10776647BF5 5BB42031AC44A7339DC036AD0292AB9B732E6FB79BEE852A103C3788BB0F4B72 EF37BB62356F9B2DF7F5899A26F1FE0A3D6469C1034B8AB14F52555EBF6DC592 3F24D6DB395A3A182ED4B8ECEE8254661C19CC942F236CA40BAABE818EC312D8 7F5762C210FCE8A3CB9A23A24D0A751A09F4FCFB72DD0FB3AAE0575CF97D126E 1669203BE1C8F8FF626F49E8AFA7B29EF26618C6D8336D4471314D5D009BEC8C D914E74D0BE7D7C3A2511C0DDEB6FE04360D54FB3283AD67D9DCDE211FAFD19C 449E201F2913232DDAFB2043F674EA73C9F043EB73CC9A96289B3CF819DB3E56 5FE403D8C387C99979ED9F8EB2F17F82F882A6C6866883E7DC484AFFD0640191 71740152A7D8635D54A211D8F0B67EB8E1CFEBC8966982A571CA7C0E485D10CA E1AEE2598502CBDC203D4AD2FB7E0DD0875905D457CCA12E167D505A2E68C38F 1E154B9C81D75FD18ECC21D8CAE580902CEADD1795AD4C00FA38E04A1EAC4234 C0F06B1D0F1598F06227F699C3717C46D28F58C1DB6FBD0542DD8B0CEC4597E8 599D6727E51999A84A0CCE1DE1460E88013A138FABC23A54368C126CBE298921 16D82F36D4795B16E4DD238F5CB9FF28CEDF912E8C48A34CD981AAA4E0464F52 F3D139F7D9B6C0EF9ED0CA8017E0D7913E12FAD2AF1AAF7A644E5B1A78B450B3 CAC52770E2B7EF1CE5C51EEA47FB55489764EA2325104FEA20572CB5E368DDA0 7AA6F0843F780DC38BA41D13A70DC22569007C4004752D0EE7440B02BA430A9A E0B812EF44897CA80B7FB7C0EFE2C5AB8BC5D273408787A2F034305AD28F2845 D2E6B8CCD164E3BC97630D674AC5510E1ADF05269C1CDA02BB37DB5A65A13AB7 1B7AFEA1514027F0CC5EA914F047BB2D39B5F2F22612D3BBD40796059B006935 EB6045E09C1428294D16CBCC38979590DF5BCBAC81B5D2D1A74D58DFEC7581DF 7D89DADDA294D61DE09B42F0106888F344F9120512C10070320F0EF25438CE04 77E898DFFC996E6509C652FF250E52D7E657BC9F7F5F790A8FDA7E8AE2AFFA62 17154D124FF88A9637DFDFC89427D8ED505D572FE6CFED274E49771D67331CD9 10DEEFD194100D32105FB6F73961F12C19C7B31EAAC94EC8813C441BD498A626 2AA116EAECB66901C3A6062F7A3BC58AA41EF15FCBE5EB99948587F5197A82E5 9B27DE46B6D699BFB2D98291EEE42293A42651937B86ABA5BEC625142DD821B9 390F1B28F734240CAB92AAA1CA1E29DDFE708F1AB076C4B8AB7D0E935700BEBD 7599B635C2136B3C07DDA0BCA6A5F9F2135219588FAD82DB7480B3D1F7F036FF 762D887B63ED807199B24E46CE48DADDC3FA6B16CD8E02FC3AB291851D973D08 D956FDFC97EDC383A879C016E0AD7C7140D96E5F87A5DE378708E065E0053655 B03A4F22B7B727790CA5A8300B80DFD9DA1598C32D2F69C1DAF0E64B7F9B25B0 CA366EF55E55F932F28A0E560F89FE968C7C45B8C6A5771FE29D0E08915F5FFC 9C0CAF8FE31FA41BF24C1B42A9B4B93C105869AFAD80768BE70BFB6B393D2037 41AA3D91DE6D886A61ABB8B947FAC633CCAE0B0079ACF8012FCCA4B8B49AC2BB 3D1BABF5DB299BC7492F4A894B29202A42FE12F69ECE67DF46DBBA6FC13197CA F71772B500C2373BFCCF074D7DD658E85B1F04B84C5921AA538F1E2E8E636DC8 9FA72CF14BDCC7C6EC562F449D1AC53387471D6132D6624D 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMSY10 %!PS-AdobeFont-1.0: CMSY10 003.002 %%Title: CMSY10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSY10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSY10 known{/CMSY10 findfont dup/UniqueID known{dup /UniqueID get 5096651 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSY10 def /FontBBox {-29 -960 1116 775 }readonly def /UniqueID 5096651 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSY10.) readonly def /FullName (CMSY10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /minus put dup 15 /bullet put dup 17 /equivalence put dup 20 /lessequal put dup 33 /arrowright put dup 41 /arrowdblright put dup 43 /arrowdbldown put dup 48 /prime put dup 55 /mapsto put dup 114 /nabla put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CD06DFE1BE899059C588357426D7A0 7B684C079A47D271426064AD18CB9750D8A986D1D67C1B2AEEF8CE785CC19C81 DE96489F740045C5E342F02DA1C9F9F3C167651E646F1A67CF379789E311EF91 511D0F605B045B279357D6FC8537C233E7AEE6A4FDBE73E75A39EB206D20A6F6 1021961B748D419EBEEB028B592124E174CA595C108E12725B9875544955CFFD 028B698EF742BC8C19F979E35B8E99CADDDDC89CC6C59733F2A24BC3AF36AD86 1319147A4A219ECB92D0D9F6228B51A97C29547000FCC8A581BE543D73F1FED4 3D08C53693138003C01E1D216B185179E1856E2A05AA6C66AABB68B7E4409021 91AA9D8E4C5FBBDA55F1BB6BC679EABA06BE9795DB920A6343CE934B04D75DF2 E0C30B8FD2E475FE0D66D4AA65821864C7DD6AC9939A04094EEA832EAD33DB7A 11EE8D595FB0E543D0E80D31D584B97879B3C7B4A85CC6358A41342D70AD0B97 C14123421FE8A7D131FB0D03900B392FDA0ABAFC25E946D2251F150EC595E857 D17AE424DB76B431366086F377B2A0EEFD3909E3FA35E51886FC318989C1EF20 B6F5990F1D39C22127F0A47BC8461F3AFDF87D9BDA4B6C1D1CFD7513F1E3C3D3 93BEF764AA832316343F9FE869A720E4AA87AE76FA87A833BBC5892DE05B867F 10FA225E233BCFA9BB51F46A6DF22ADCEACC01C3CD1F54C9AEFA25E92EFAC00D 7E2BA427C25483BA42A199F4D2E43DFCE79A7156F7417ACF78E41FCA91E6C9EF B933450D851B73A6AB6AEA7EE4C710CB5C14270D1674FA334686653793FCB31B 491E870D3C2BC654D2C1DE463EC9BA29D7371AA1078800EF93D3F66263A2EBBB F5723697BF7448BD0D2E301544BECF497FD475B85DFEF52AF4F8F8BE445CABE6 019318806D10C5952157FF8F8286C1EE701545C8F60EFA854EAE66835A2046A6 915D395F1E0366EFE0C0391583FE001FF16D82A2E2DA5F57754A2C6F69306E36 356ECF8EFC3F1188AD6FCD2427E0580C97A5B69B4E0E09B85EEDE142F5ADD2F0 5DE51D6DB72B127412A0D57106C19CA493048A4F815129ABE767D51715B1515D 9C21067CB5BC88741B7298C83EAE36A866DFA87D8981F179B1C31292F56BBB64 3C430779468AAF07C8A8B4934E1E775FE3F35186BD1FA6EE3689C1C750678AF1 FBF9B23195A124C5C991FE670AC0C86FD39D2B07B9A319E74EFD498B45820252 720ECDF7294F7B0B137CEB86D33BFCEB8606985A3260FD669E461C8BE94216C5 D434FD8854F44EE66E5A289A9F9E32BC36AF645D53F96652602BAED418C8D726 BD04A1B4617551FE4DEF54083D414F7DCE004E6BB2DC9C2EF7CE232B254BA2C5 7DCBD36C2072ED46FF711F121A701E2284BF1B718B3164382B8F453D68FA0377 DFE106503B8401D4DB87F5402A3AC9A442FA060B0610A9524D530C7157C26B56 AC970FCC1D5655FFFFA39246E6420CF97D08ADFB7B05822679BD40C638DDF0E7 A97BFE8918B611A145AC965C203F1428812F9D340AF499B3A915B22BE798594E 0F520109FC81E452180AE45B170FF999C5FC2761C6CECD8742A5A6FC97F16743 AD4EFCC6572A6D3F3E4E330C5CB2FF6FEA48A5B64DD3DBE943BD9918D4A18E18 CBCF598AEFBB6AB3CD2CBC9BFD6099272F6543F3E532E0E21E614BD2880B1023 0AC234CB705827BF016DB84E00E8C255FDEFA0101A842929540B7B4AA8A089BD 5EFF05B72356B6BC3727817823B5CDBB1B963103000D7F2A4E2A1472FC3E614B 5CBCB6D6D784023173DEFEBFA8F9ED87EC1A0A9EE98CA59CFC964CF943DC683F E9E00DA718C4425A705A69D99988EC6F152525C790912C2E46A2381A569424AB 54DF4798BC2D7E7A361E7991641D4B756CE2A7FF4A2848927092C59C2C4B8809 E13AB84FB6B111E680D7FB9F2FFC2C5C66B0B501E4447C2E46C10E2F6124476F A140C404CFE2DC9E0199BF61E035CEB481D438139A9630934E541D261FFD2906 4CAD99E20655FA746AFB81EDBB5601F5FD6B1D6832A01D585E2C55053F6A7378 4DAACCAC7608DBDADAAE732D66B3E7F87E79756337C1A961E53A4651BE7C77F4 038B89C87F650C54A2A90EB7F1D525BB353F33318551EE8D84A6A83C718EA5A4 B2AC0F7306B1E095819B87015A90CA3ED739B09061782C28CDB36BA4BD5E5308 5CBB70414E4112193DAC4A1FA30996327230D1E021F3CD8115E12D239D93FFDC B645910EB29E40D830E7BAF2DB255FD7C4E776557BB38157917D993EAC245837 A3B515147043574157B8342D829C7228CCEA843ABC89D1785A9672A5923FC4CD 2F3FF27E6FCACF84E2D3136CA2C0FD3EF1EE7354CD04C38B5FB874553646ED2D CEDF7E362EADD04B18051F20A8FB0DE18E152385B9D05F98A3A7EF177824E246 455ABE69E2F700EB78185CCFC07E3B4C6FA301112528D977367D30D0D5D59EDE FAEB706DDC970A9E296236C725B2B55B09B9C336B8E23CBA5FB8692D56F33B03 16294E5FC7FAA42E96395A57CE51CA8DDD77442F142E2E576B778373FB31C81C 16840BB422CA827E30A81829648BDF1CA36700EA32AD888D097C1FE0A05B2D9F 483AEE40269DF09AF0D1AD3DF80C45DDC59C2A03FBB661C79B87853737C6D352 67626B657321B16198DBD6DB98A092F17878AE4698121E1006E53D6F9B0A3BE2 3FB68828EF854A0CDBAA68B37ABCA6AD4A3D809AAF0BAB1697A81FE59C98C472 1E33CD70A75A22C249DD11D76C2575ED3370A25892A16D2FD569CDA70C130770 93F493C7D47D6F9A5424A7A542BAD726BFC3AB225DCEBBE6AC4BE006F8C7C0EA 051424B08305BF2D951AB2986AAFEA04E078CA79B399585BFF0F1ADCED02E15B 8765EB6BF6A8E4D0901EFF2C3AA104924EAD9637A35D877E0C51A3C37DA78CD4 8643C8CE6DCDDE3F116A6C2390F948E5371BEB5AD2E87B41C5F01FB5C196C436 6E256A88D082E3F46E4EFFBF605B2EFF1E9D9AD5EE4DDC323A137CD9451EDEE0 06F7D82898D71FAF2362C0FCF1F726F97F820305B7CE20728CA08C63575083A7 84BA28B7DE2B916432475510E274C12FFD1660A717F51DACFDF0A102D85224E0 D6DB607BB72569ABB8A7BC6A10354CBBC01732EFE35B72062DF269CB25EA3DE6 DC603B04C90C5912D2C38D7A5ACDCDD3F6F116D884F0D8C528F69D5D47BA20DB 0A9E585C7D8CC3C324FE8A1DF150279F7E8FB43BDB720E624E5E9918032C02CD 8020636AE5C38DA2484B7F4B34163E0D0A561B43B80E97746DC05C871AB620EC C5D47101ECED4A7E25F291184BEF8B80024AA7BB456C1B83A907652B331DEA34 754226C39C6889EBEEFDAD081E01EF8FE47751987667836FDE4C8BB8A3FD4406 1E643B4EA37BD370734D1A2DB17C2F4B74B4ED75098B433601F75A88C9A37A05 CCB157EF6E32023BFA33973F3E655A4D58289136996FCFA61EEABD70791B6523 1FF5DE71AB8A17038923118A5EED8D59C4C58D246FFA9BB26472346B40C8741F 153D19CAFF20DD2A86C6DB89154A630FB1761929FC3F0448EE2F089C1C953E02 905BA8DE75D101A982A611056C4B237596C10951DD98BAB838B742D3CF7DE718 617DB72E5268583223E37E029D1C8FD3F1D21690151F76B76C52C725CA135CA2 8666553E863CE188BFC9B99AF56AC2DB5BFEBEB12FB563D00244EB89E478657A 98AF2E1223C1ABC25A4500E8119B86EB3C26B8A2F3505A3E5610F89B7C34E278 53FA0A54A7F46D84A35EFEC36AE660A9E3C37EE3864106702DE5AF6C45ABF64B 888A4A51323138CE77DB935576FE6B4824B6942DF80625098CE1B5B32B234F1D 052A9D6039697118A9D793793775D8729D8574A2E74D7109C7B7E23BC5E2E87A CA8E019203952A4892544E1AD3D4EDD22971611358AB230E9A2ABDF00A288501 A01B67C42B33F6B78C39562DB50F4663B922D9BE0D8A150311AE44B83C1F129F 07337323E9A23211EE58E16043E127C6F9574019179F5635648A011266677B56 B5D0201A4E1470B952A1579B57AB2329CD4C615395023C653F784D36B5EE3672 10D191F29EA508CE84763CA4CE7C2C5229E38E241255A5CABCD6C7CBAED901A2 CA53B5E24111921CDDF83578D33D463D70EDACA0E470D8F592303FB6BFD68B4D 3F3BE2D7C5EC8BBF10C90111A33E205F2649B56E8443F6FAA6C721C66575AE12 D4C40F1F46CF9E9DA675AB5D5840D938780CD9E4AD6736ECBEB6A4397613586F 849B51048AC5F9405E03E14540A5E5582F61CDCDB57EDDF95A8C6705F433EE16 648F098C03DED8A2AD94AE3DE202D629B9422ABB031318D48F2C85F9DBFA17BE 84708AA3B6C9F81F4508F7A5CB7B6646AB8722ECF817877B77D473F577556DAA 2BA0ABACFCF5DEA7498C47328E873019A956FBB250FD9D8885D21D368FA70CBD 2709D2DA44EE7A9869963EAB48789541906DE49FAE785ECE1F18A22C7E7ED204 9768896B78E9EB7A2BD6EEC1B26083940656ECD689D92942CC8AF05CBF82AED0 B45A7DF4DD7AA6526FB597322560B9ED3087A65B5EEF1371C328A021411BFE3B D9B5088B2F1AAE381FFED52D2D1E02CD0DA78683E3B06171CBE94BE9760005D7 135893D7CC2DB097F6AC664D9594CF1C650F84DA80D2EDE04802DBA33CE3DAFE EB7A37E8AEFA4FDA6252FF21E8673DD98E67124D5DBC7BACF361E57077B71939 C1D1FB923E4E35C075CD1BCBE0E80DAEA1320D55B43EAB45D9B26C366B278782 7519FDC482D98839BF0DF2E7C3A56A1C1A3FC0E57A75CA414F6536C1FE8EB7A0 4ADFEE3BEDA0F53BE8CF5F64230784A797133E8CD46BCCB3BF38BCE38A73CCE2 9E073ADE792F7128231DDD1F63E6156ADB2609C200837C2E8A2D93D2A7BC9171 050C709A71E44E32B1B03C92EB5CF1D3BAB1C38E027DC4ED9AED633D98CD7486 3F773ACF8AE332631CF2ABE6D606607593FE862ADE31803964E3F4DC3CE3A271 C76BDD95C87CDB3B87BC26FC7A16D567EEC62E6FF0D471B4853DB8A94D4CACF8 843824F818083F10E88D52FC4253E8203292CB40F1414AE7E51DD7347007C342 CD70E8E9F2D2A13D71213B841DDEAAB208AD9EA644591C15DEB084165F9DF24B B91D3BBEEC2E34E38EF16A0C3F00700A7BDCBBFED2EC0D09601AD6538288DB50 3478B051B5E16B604A0341FE621A58718D960D699D3FAD284310DCF54EB13175 19A75A539EE98E804AEA24689D3540F0F12951A3C01FACCE9A7BAF4D0DAFA946 FF65A4D2A4C39969607272C6886F44E90ABE27CA3A1F12A29D9B32E60E8E34F0 17C5FE43D0E69A99A922D98909B2BBCD145E59A5E7F5426B3988F73B09A525F6 8BD4915663C1301323180E760BE81CB874B020FDA3AE63340E4261E4F3E4949B CC0966BDC4426190BE9F5D77F76A72AD925662E5FE1CEF9CCAB68F0BD33DA003 F11EB91AC4502FBD6AE48DA0F9D07C35B96B103E379B8A83A05FE728F1716194 1F650F75BEBADB2E3810388F3E2DC7B19F1BA9E32925F2FD9F19F4E8701F3E4E 4069125D7C401144740691E7A460021A47B1E27997FC1DDABEC5BD0EE0B20194 2D579C7D6727AA124083242BDA46D8E116E2751C5F298851A62B60AEBE82A929 9B9F2492BA35690D1EFD16215B8EF14E7A3803B93C28FA41D971B05B6AF3B593 E74AD1E68A5FCE12A86E63B78BFEA87D3949FD164F12277A4688BE96356791CB 8671C49365608F3EDECC109321AF92B4C29CAF073DA3A7D73E913D0D83FAC5EB BD884D4C686056404DAAAD6F82F94F803FA1FB0DD8908D1DF08FB87A8BB83027 04DE0CBB1C6FEB6B517FBD7CF065120079E608CE41893C2BC96A347826CCDFD5 C69E161217F2127A59F1A6F22037641613F191F22D5B4CDCBCC2EE5615623404 ABA7BE6C5FE475481615B2AC1A2412E54688DD21E44CC9AF5F16E634AFCA389C 4D740B7B51BB141BFAD1080E7C726C1606A28ED492E6BDE9F800EFACD1513909 84E98CEB6A0B7A2A6F3E1D1DCC3B2552795E0932673E59ECC56DDD37A1D52BA6 C3F0E905978AB568941A163F4CE3AAB5C5B16F86016EC47BA6F3F7AAAA77C3B6 09C8C3ABDB6D514A76ECD37C37AA88B5860630B3406B494F7725975596F84777 D9CF48686EC9C5DBCC1D78513F591C7C10AB9D153B3D41426B7BF668B0D04503 56BCB686258462C1DC61095724B9F3312316262FD7C1AEC6E54DE7E5A7BD8EFF 035299B8FD8A4A7B0F51404F4A760F4D8B4C0FB7A32FA4B2383AB6E9C78FDEDB FE6A5788D38A6701B123630C2A6D820A684166FBBC83DB17069494FBD411B333 CB37E2491C5BD035A33867A6D3A3D420CC31ACF43AA07182CAAE67E40EC63663 B678F71D4C6E0EC3A0AAF904CD3AA66E0DE5E3CDE049E94249B39A1C06E3CE9A F974B2484BB2CDA14282B9511E505B3C89F9C802218AE40D1A7541335C5736DD CD565D4B9F4CC78F3A393737EDB4FBD0DA299E21CCFEBA5478EEF013F0552A8B 0BB11FF46CCDB784E8BDCF730A16363E66572049E42C695886EAB42A9AD9094C B635DF4B5B9BD9B9AE8455DFA3EEFC77653190F9A8B1E93B7281C2A21EA7DDA9 33484745BDF7E3DD63C7AC66C286C9A5A698A5E4D7A91710B7FF943FB23609B6 4B442F83CB795788FAB5E9CF3F75D5487DA26170E4561C7941C910B088C3B86D F844B0F340CF82786A3FCF347048463EBD2006281A816627065DDA6CD4D3AC5E 2024BC96C7D896381BBB567951E7A1F29D4E95351298B000D29E5F3D0448CB5A CFDAE1BADE9403B90371C3A07D208948AFA022A69C519434B6813086ADF518D5 88E0B92072A44BA1B3EBB630A13B7AB90992E85B6D67361C8D96F3E0D826FF37 17B67E4B1EB7BADFD98D7F4FD17BECE740ADF13C141EBF0A91CB105DABB32FE0 55086D56A0D358841D15FD349E6B95512E4EDF4C430216FF85C2ABE995E4B40A A6044CC8820AD885C07E052B3F91C2E9A1D163BFFD210F7BE95B923E2500DB50 2075106DB541C267BD450B25B670CE80BCD068D4DBFF2D82634175B61FBD3BC3 406131F44C7D6F18D375D1F2270829DDF29DC14DBB58A30AC193245D18DE91F8 AB88AB548D8138605BB5A50073295534E314366E26665AE70482B890E4101D6B 60E4F3B37ABCA1346DAAE8FDB8DD9C832EFF3E73BA470E2BACE7B8515CB43388 C27AF99FF9322175CF8D4947E6B3846AFF5163E972156847F58A66660EC8A3A6 5FB47C9F637B4CBB4C73B6A080B0CF6FD1E9665E92032540570FFCC747C67C50 822811AADC404BC7ECD1673E8AA6C3A2F1D82F39430B58C29145E2F1B679C46E 94EDC711883F1E4EA84117A54757E8895A40401A26E1437B39A2F65CAADD6E02 D71FA8AF7453668DC613F326A3344F74AD7AC67569AF399385500ABDA5EDD3BA 343CC5EDD4B558467626850E752B9959FEF1454E53E7A3DCBC2255AD8F6AB4FE 894455118A61C58840CB68A925ACCAD75CEACE863D806916228F0614191A1CD5 DC9BAE256018615AA3725834519449B0A88B4F396654E74099C007930ADB1327 DD119BF799FE3B0B223E1EDA04FE2DA7A1C879143E1C33B6C6344F4BA033AD6F 8E88C33DEF1977796B454BAB2494C930F492A518E8198C708A75FFEF8C49C324 A718AB59B889DED521229E741FFE53F98EBE88B0405AD523254FD3FA4BBE96DA DA1C27C1C979A0DD4E61C3B1F4C4DE01E42F1C4435EECFC02D97994BC8AF5270 E7CB1458D76ED0229C5FFB4A23B8716018F9050970895D51722CDE8F2EA3D947 DFF374D84915D5C5D16463A6FFCD079D1ED416C4347BF831FF0C4ADFB61295DC 4D5785BB0852BF472CFC97EC174491CAF961AB90629F055E75DAA6D9898E8653 5BCF379816CAE46FEA62E7BE8E9B953466E51828172C4DBD0E1BBAD1CE28B5B1 02B3E36403BE80B49A47446A6677FCED438F01D60EB10F478C89528FA337D0D8 88D3FC123C076507ACDAF783A9A6E24ED73BF24B6E0F11C13E532DE5F70B1491 307A6D9A2F2BA5099C8A07762E70BDAA74BA5E2BAB260C1352107EB8A96523D9 4BA3082B99772D585329AB8645C3BBD11D72BA01F95CCF11C6DEBFDAAF7F5C4D 795F99DAE6A8D59462D759001BBEBB59AB0C322EFE02904D82B424649C2FA593 0E23281DECC5AA908E54244566055D418602EEDBE78843300158908F77C0AC75 9562065826D34C38C598D8626BFED7CB672F132E065E2C27932F709935988376 94901EBAEAEC410E2B36575A71EBB8954C3A90EEC264E6115950FC91D0D54999 323D8B4FF8129A8EEC3900A00CCB026E6943BE105BF5F504AB332FC17E568681 F423D1125A596766BE58ADC658888DB39BA74F67CE0E26C392220832FB036E93 7587E96684BFB78BD035F54AF71B2408241AAF548F996AD440155624B3EDDC79 2102EE58E1E27EAA0675F1F13297A4CAF514CB319E58D424A820B8F48984987C 4D6628C332DDD7ED2C5136C4B900E476A027DA8A21BE33F294796C095CB0228A 39EAE95B28082D1E297D286BC2F87B9B2B83DF28F5CAA71ED3A9ED5894F5AFE1 384B75CE4AA85B26B148355C1901BE27C27E1DF0F3E840A86EFF0F4541E8D966 4C36D8E5034E709A75A3CD338156E04B09C3FAA39B33D99DC44948178F985994 0D128A51073C0D1CA40DBBB806AB2A06427A2F8F5508962AAD0E94536EB597C5 B976115D1D3080D9460E352F0263ECE479716A1B3C82535D65347EA19A6309D1 5E421EE363BF519A43F111BAC52C4DB69F15E7EE6E62FD2B0F05D26C63889A2A 47322678FAF3EFCF317567ABF83497D030DAD6838571EBF907E0A30FEAA4B0C7 FB61FCE49B05E57A1DFEC3AC096D2FDDD5EADF19664F2E2A44409DBD2DCDDBFF AF29CF2F90C1B024E0168E5FD2A5165A9A2EBC4AA0030AD6F2EDBDD6F390AF39 E30A394F11A402799CC366C7E12F7FF720BB3BF3F9792871F6CDAACB77FA9920 82B87E68E1BED67F97FD59A28BF09B425AB6D88E0DE2E33CEB6E607AA0B881B4 EFD0DA63B8C23A8F699F125F9162306ECB6ACF46FB04D0FFF81307CC5BD6A857 27D36CD600BC1592ED313619B0303157409B881339DC5FE7FD0AF404593A47C8 826A13EBD763FF312D16180FB17F3D12B786FF4C7539F3996AD4EB68443A5B41 E9B4AAA632E72908426F2B3387B3B374DDAE23ADCA5F75F551B8CA6BE3789F76 06DDE32E381E368F424FDCBDCD178612EA1B394AF7FC20F263ECF6180F14E870 1A581A51849ACD04D70AACE1AD4E1BE1CC721E77E890F04667AA3FBB6915C2AD D25EBF771279B30E1DEB977C9EB6BDFD889EDA3BEA4170E261BC5BEBCBBFC297 D5130F1C5D4FE64BA7886C46C9CDD4B952BB5DCBD516724BD9F9CF4407BE190C F071B06C0F827168AF0C4FFC41A1871413A2A3872741CC9EE8AB3F2EE51E3DA1 2BBA8A6E5BE27F4BC3A56451C7EEE7E8BC267829734B9650659AFF9D73A9B013 D2364C79ACC5A8774CDA23B228D40F9734E80FEC07D5BF1CC1F6F8E4C67D6C62 D1625BA72D4B53BED264B610A4AC85CCFF9568B37F88D864C695203136F50F1E 691B8976CB4F36802F3ADB48FDAF39836123C450C5FEDE8BC7DBE12D886250CF 91F3989CD5C200C16AE54805972301A03F5A3B0AE12D916A27FDF96BA0637570 2856D1E97C845549C044CAAAB1317C2F4B566F58C5A81BED3FA20881A4CB35C4 F16F060B4F9726F6B9BD980E133C4CF1B68E6F3ADB117002087EDA3F5A4F2D3B 2BAED35D77AFE09DE79CB9B2E744C4A728C25E6F6963C4EB1605C1C78A2BB2F0 7D5593F661B75F403B03844580B08737F154EBF8FC0FDD33A903459E1EB62788 9B1B31438ED2118159FFBAB8DBCADE9733C8970D6B68E23B31C9B88C16389B97 63147B35E2171621737250BC8DA275B2BAD80F8E13FAFABB29DB926EC8CC9BFF E3B4AB0B9314C975316A9B0334CE3592A826EE821CFC6CD7DABF88B2076629D2 623C38C6B11A21B27B1069EDC444E13220979C5B42EC62C40DD06388EA283C4E 3A12196F9653441D5D99E7522DB99D12D02DC48B95CD635AB8A60BAA721B55A6 B96A9DA56881C881D5CF43F868017DD9E713E886D155629D7497076BF72F508A F34689015ACAB21701F220081BBF61A3C750920067BD8EC7FA67F4831D114AD7 058B5C3252873C9B7A4587236E2CEC125390B6143697EA12FD7557977FA8112D EA0577C1AECF467A931A3644864F6A6B6DBF458F5B3BAA8D68DD715D3A27FA16 CCC2CB3481C398B93AFA3DBFDB90D993010B03B715 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMTT10 %!PS-AdobeFont-1.0: CMTT10 003.002 %%Title: CMTT10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMTT10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMTT10 known{/CMTT10 findfont dup/UniqueID known{dup /UniqueID get 5000832 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMTT10 def /FontBBox {-4 -233 537 696 }readonly def /UniqueID 5000832 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMTT10.) readonly def /FullName (CMTT10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch true def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 34 /quotedbl put dup 35 /numbersign put dup 39 /quoteright put dup 40 /parenleft put dup 41 /parenright put dup 42 /asterisk put dup 43 /plus put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 58 /colon put dup 59 /semicolon put dup 60 /less put dup 61 /equal put dup 62 /greater put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 73 /I put dup 74 /J put dup 76 /L put dup 78 /N put dup 79 /O put dup 80 /P put dup 82 /R put dup 83 /S put dup 85 /U put dup 86 /V put dup 88 /X put dup 91 /bracketleft put dup 93 /bracketright put dup 94 /asciicircum put dup 95 /underscore put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put dup 123 /braceleft put dup 125 /braceright put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794DDF2E5ECEBA191DB82B3 7A69521B0C4D40495B5D9CE7A3AF33D17EE69979B82B715BAD8A5904C5DE0260 6C15950CCF6E188A0CDF841EB68E5A2F88253E382140F87C87E55C9EA93B8C89 14A36CDF630D6BE7CD36DBDCE22B21778E8648B97B7EC6742EB5114BDF0454B0 0EA7B1FE236C84C0E5308C871F67B973892890557AA12E00B2C20C71F516C397 3F3BBD14A1D0149CA064391056E45E9470FC7F6F556ABC82653B3C8049AB5CF4 BA83C8F2158C236B2FFD4208846013BAF4165E8BB8D334C8FF2E8D74AF5DAB2F D44788869B08399421AAA900ECC6A2D594641C121660D4B5F512938994C18DD0 FCD9B008F68F0351D21ED735B2740CB1E0C1CCD25EB548C35B844601D98828DB 556F71D07E081A593FF12DAF83676492A0FFE16E95717A07082B43A966C1EE8F 8A59E1255E1705C43A23CF29A5E4A6547C93F1680A870EE7BAD8CF74D838CD5E F806911D8FE4262ED8E7F5BC58B92C9C6D74F8AD45FBB021EC7E97393018B9DB B1B84E7B243ADB05ADD3F1DB3692ADC5D47FEC7DF93080669E63281F1576B673 125EDF08016664BE73364F65389F7C3B66623AD1754ECBEF9E5CE6948D933787 A5674279ACB2EBECD3B4E6361419AB32028A27670C9F3E18B746A10B00AF6D77 4EC00E3BE521C02A99AE5BAA98F793EB1228952BE67934B91472E01AF7B816BC 56D7F19F631A1927846D800C107B1E9CBFF9D2DD513B4A8CE2E0DFD77B1ED178 E43FA7052765E9FAF89989D490D8FEF6C536EC0D4AE27A74F474B98DA9E6B92F 15E063DB260571979A5DE2423920CE1F59F56EB11E00E3BB9D466A8263E1E385 2014BEFDA8D1EA3EDA04BE32AEE6CD15C5C010A1DF7F705A2C0C18E87C8DCCE9 05D9163181CBA56C0FAC8C06A2990554C8E759D076B01BBEADE3B5FB8B551390 6C8E4A2A1C6E7D9C708614626F3770C0AB7DD2027469C77975C27576065862AD 04E5E50CEBE907E3E991FA0C627302C0E207B4D5992BEBAB5853AD1C0D271728 C76F40A79392ACCA7358F948AC65DC823CFDA59E1FF69CEBB6B7EC3CF21669E4 70D999508F9C49E2D9F8818CA53C977D93E15FBBBAF75B1E84F0BA62BCC4BAFA 4EEC82D804C8A8C0210F3E5E258BB1F6921AF02BA9861BAD5C3D5FC8CEFABA8A A607E547B802096F7AEB09FBA99C83C9A494B94408DD607CA6561A6E6660C473 62CF8D35F31D052F6C6C8138A8E1430CBA7EA6973D6D510C1A06B3FBD79D9364 240C1A00272DA44B89A9FE8D5BF36DC1B5EBB4A78ADBE9C5EDB485F093D9517D 69E1AC9A8E6C9D7C324E3797CFEAD9A18E82E03F69B2CED7D5DDCD1A218BF2E2 ED2293AE999FE2A4B5213A10083EE0407BCF8007670B8C737EAB30311C868D84 121149ACB4A27F3ED6C0C181C98AAAF51B105F264B5672D7F745131ABAB5BEA4 0C9B43C0DD9116D6DC61F90BE72018F290D26D5E9D341055CAF09C9F45333CDB D45B7954271767F638EEC499F7B53C2CC5774EA7A7F024C4CABFB93D9CB1856A 0C671A4ECA7C62EA5242648A84E7F3AFB9547A0AFC29593CFCE6D8B873A78157 D337CABD291431C0A2CE1F37E0CD7340567AC206FF98E4B5A6410F70F750451C 550EFB54AA259A1B236CA9CB730D2CEF125EC65D959441F7CC9768F777B44844 CC9842A307C72B740680ACBBF6AA35FA7A94825069BF7696ED81A371A9E5475A 9D997F2DFAD339AADF797F7E03E654234455AC3D17702A420EE0A597BA31BDE4 FEB8DBA7C61D311CC90441A620164DC22DC2D373973EF84CC553453AB1B3337F 7B39983B8DFFB3A9425F119B45C1CD37A76F905777B3154CA6200792F1759D06 E017890F4041A385F2238E3C48B6C8EE6F5258463FDBFF7AC762F6C4363926D6 50F004D473B7B7F73CA686B559C2885F1AA761653C727A77D73431E9D110E76A 2E55C68CD50F43997C9B2FC4710F8C8540909829E215678E63BB8363C4B8AF05 9986102BB36580D9CA95CD216B7C321822CB41B2E0422CD077F3B55E0246FDB2 44D5976F67296B5B0BE4B06F6E43535C21164E6C5089C3E9BA2D6B30888C57DE 49DC8D9D46C0D5EDC47ACF2C03B72DE3B69512508539019B759280BABEA12BC9 385308A0395C4CD33182A10A5A229743379C2075D82D8BFCE4A66E1AA087A091 8F5372684FA5037D1B92D50CD9CB4F50AD4F8EE7D51F1C9E63C721CB5B9BD011 6F0A8DD4FDCD2B008F223A1036D90F0F3B252487DE7898F9AFBB3A9D9CD49E0C EF4ADAD5155A98D2125ED5A3D3907F67301649519419F33CD942E8DDEAC1BDA0 E90C431B198F646766A8FA9F8D1561B57E126EF604838C0C1966655CF31FB7EB C8CCC434FC1C96046D38203E1791EC824A3D7AED85C029288D4608CA7668A2BE 484C99639F121845B22EEFCE0A3B808261921AA042AE19E641769E91277BEC29 4594082CCB3058F90FAC4A700A8A827ACA00FCF574ABC8EB7DBCECD97F2B22C0 0AA19E8739B81AF8C6F621D69B8E6F29BAE233FBA655A0AF5BDFD7F5C6B9167C 6BC7AB693D45EF2AD999F5DA3CEFA39BA48A17EE6D9F2C4DAB91AE3F0044DC3F 5D5506CE4675AA928B0092D6F173644F91295216D8BBB14CDDE0AD524A4D545C 1B5E284A3BF0396664081CFB4F186A84A0D24D61E82F4767C1E55A0642720CF3 909FA1AB8EAB78030B59BEA067DEDBD2F1D0340E790AB2777DB18248521934A8 BB38A58B7F633DEA4291B0D5D13E9A882C974697CC6D3B49E030C94EA29B5506 CC29C44D01B4751B453A46A9F6BF3BF135AE87A4CE232AF57B66578310DE41E0 2A6AC422117F1963C4D7CC306BD25A6E724E51921779F22F029733122E23E2F0 CB340008813ABB104380C80A492B3FC6D0BB07CB8D8409E9576891EF6E5C9D08 EB8320DFA31BAFFBD336D0C2BBC3D3B2D30368B9860768FC080D30569C7F7811 0EBEDA2962476113625EEB555490B8CE4C5F99D74ED10F738C61854CFF8B41C6 9402E56BE8856144A1A05D0B05F4CB7EF728B2F4F5A439F18C3B68CEFA41E59A D8308ADC92EC1289DC84CF48D2CDEFF509A145BF945E1E00D552D329EBD2A7C4 21D58082CC8FA790E981F4AC8EAB99950678FD3A7DA3DF13778681B208DD71A0 7C3CBD0664B37C9EDC6B601D79A2C51FB54DAEE849F93209793849104E722D3F 52DFAF7047EEEDDFE744787A5801E4AC2C3D58EC5DDC15FCEE03990C53B0C57A FC54F125A04C8E4A0ADAA725808C587E7DAFB9F784FA2875689979D316DC22BD AA36B306A1ABCF907B63C6476737B746099973CAEA8C1E2C5C41F27E0F7DE8D7 F0D942E34E92F43FE902653D4D2EBB6F3B9F7928B1550A82AF234D45D028F429 067652BD3D391BF423AE72B9CB1E8D91E898161BE3A7849D456A861A2046711E E934DC59442AE7D81661CE8EF727D8D7DDC0270E937E40F896AEAE6171661431 C1025C53172F9D366834BA0054FBFD84503FBAE328B6FDEA180F8EA35B1DA937 5CC3B8F00C206908C2FFFFA6A7AC6915D15EA44BDCF29E2BFCFD4A849535F19B 0D307C696BE8205C7D84B9C77F02EF27D911056EDBB4080E4D3ED72788666CAD CD91B0ECE27A177DB23320A7FA9C31408B4D02D2A4B1CC6DDE1A6CAC3D8EC1EC 2226EC98E51046D1EC26FA20EE62D24747D83CF4941DCE5CCEEC0DBE387149CD E05B19FFCAFC0D117F9A3E60DCD4C815228D98EF95EB559AD0ACC0D50FFDF714 56C3C812EA5ADBB013BBD956A7C4CC0ED7D3E25D5C9AF5E626F18297F75D4957 F5B0B33379114B903FE98BCF35C3FF76FEE1D9AEB711F2962276531F7380EE3F E368720E0292A170A15C5539B1FC7BB954EE2624B504CB8C805B8D31AC38307F 0513606F09211AE64DAC447693B2A0AD15E9A64C34F5A911ECD0ABCA90E9791D 67C6BD202B0858EF96E7722305B8AC02B01AB1706CC6AE875A8DDD15EE349046 EAA65005E7866B506EDFB7A5A2AFD5C9E9DCC821A79EE9C1EA2C7BBA32A40BC7 CEC26DB1AC473C8C3960ACEC581B37D6569E8C8C42950BAB7930B65E1570E3F8 9A7FA719F1DCFDA45A3BF2AAB32C9A93BA3552608A61C623DE59BCB346E87EF5 9CF025A87803161221C5C1C6F6B3403712C76E9D755C7BD68D7F2DC03C14CDF0 C1BBED1D648B905B4B17037B7263C1EA7A7F06FAAC4E09E08483A8D714C19861 327CD9C32DDF850302DD6DDE24912D00C22ECDF3CDFB18FA831A41A7488EC203 F564CFE30D506F0829A96D35A7E09C3DCD107D589B627A15B55C5D6649126BEC 60B88C55ECCBB4E680265D9EAB4CE22965D3B1AF759B01ACB0D0E6C92B6B4EFD A81E6A648708979487FC591CF09631310D46891423F4EC159A73E30D8DD147A4 B0EACF6D45D18CD16CEB8176F03ABCB41F2234747B9733C8FAF34AE5D43D3BA5 0CE0FACFC9B087F84FB6C68678BC6E76022B1526D6E5B3A48EC1A110BD75F45F 1C4DC6D39F254976453F57DF873B7D635C80C42026DE020E5BAFE0DA0D54D1E1 DC634D2621BA184347E5252F645A6A1DB7657C48124186F0E4C644077457C24D 55753C651A9A7B6349867641464B515B821349C795A645420508673B93750D0C 7A3B33EB1F09782033742AE8F3A23FC02284E6C03818FADD1731361542E3FA3E 75B8D52B668C3E18A4AE967D0FC3157083D952AFB8144D549E69EAAC51C279C5 E5D88A0D9D53013DFFB4352A1598FF84DCDE6FA32FC377306B9B92C0F96EE149 8CD55E7B2445B86CCA7A547FA732D52D59025129FD8C6333AC0DF4F0CFF6287E F2036D5DBBB3B91B92F12FEBE0B61A313A4DB5A9CF0BB3DDB781A56FEBFFACCB 8CB9D1D3DBDBC4CB6AAE6769E470582403CB920630221B68BCB625CD4605FA8F D3D5B7A1A28D15E44B38E92E906C138E72C15B86F64C38E23BF0440052A8C914 54397F49DBED99D0AF7CEA3B0A05FF37C2D7EAE1412567E6776333237C31E3C0 49949EC8BFD6E0F6446CE2D4DCD2C1524A288818CC5D159BF8463A847AE4A2B9 CC8C58F822804B81B13BF4F2DEB6229C4F51F093075581791D02C36A13B855A0 34900AA7CD4F1A797652656FE3A8425A38F421C4CC0ACA1CDD44FA6B31219276 1CDE1CD63D6A58CE705CB56CCA1260F9B86E989019071563A9B4C274A87558CA 6EF1660D574EDA276801F0057740E2C3B80D253D697736484D892CE1AB128B8A DECD69712F5E70E895FBAA927E8194D792A04AB6CE205E04E38A433BBB793FB4 E8BBC4279D58A223C6673D909D6AFECD246E66A52F4CB35E5931D24C828489BD 4ECAF621A220D8ECF702BEB01C4FC7510197D3F6D15321EC87175ADBA6434ECD 2B5A306E91375CAD22CD94301763E4A8B981472890422C5488FCD523C9CB17DC ED22FBF12D5F7525D0D6BCFE8CE85B0DFB1D6F989C267FFBA0A996D309E4A934 3DB54A9D29C88B9D55D7300DA3D46419256C5A07A2A529A8DE8BD1727281F5FE 97033D861E0531B14E811378EC1AF1CC7EE9BA2B07D935843D3053F673979F8C FAFD59D555B56CE338F606747238B22BD62C42BB7238FEA335678D474A643570 A9E7B4970E8C541CE9DBC7BF70ED7BA33639D6744A18379455029E934C95E2EF 639C4848CE9A0879B51649FAB023A71782444B451F92A34CB8A124270CCF86D4 D18EEF5C1D2B2A29012613851C49F50702D63BACF95EE2AB4D72B375E0A62615 E0991E130A67ECBA9E05329B740708F1CB148724C3A6E5E3AEC1F88EBCA398D2 1CA8827C977D72734310233176D1AE26C55CF2CEACA62223315C28FCF6305C7E A22414D4739A059F552F1F9372CCCA5FED4F9AC987942848EB498900269511F3 F408CBEA0659B954F5F1B18AE4FB270213646F9B28AE4439D2BA2D3E0AAAA780 5E530E4EFC8A060EB979E12191044509DA0C14397AFF949E12DC970658D5EAF5 4EA963F5BC1407A32F3837CA6A24B7F3D60EB8E6222B702E25ED903F9D21AE50 664A095009BDEAF4B78DAF94E5A55D48366CABF07791A1684B2F54EA69070844 4F031AF8DF416C2D3679F8BA038B0DC9DD0400CA6B34667BCBBC07E62C1668A8 35A8C57C9048A7227E672E89681B54D662079A189A9E96A3CA96D8DD10189B04 1DA49BA2729F1CA585B1BD5C467295285D52E47CA904235A1A3E48EFAE9EB6F6 01374125CE89D53C276858668CF45D2F092DDCAA52418E0BB94C2B8266B4D88A 5D911507BB1DDA3D8F6E7C14A91CA11AE799EC42E993098E18CADA70BD2A1D82 2C39326C6E3F9E84CD9758B9AE43D79BF99E6A0CD713E95B3D9B7DB90D127DE0 DAFEBF850CAAACBD860B5DEF2082F1ADA64B44B193C4A1417BE221FDCA36456C BE5934C8CE3ED55AE3A11697C2D682B7D0F72D48976451D205783BE25DBD2507 39C14FFB4BB828DFD187104F38A7F11D5F0698C11E8C1D4F107CACE573FDC4B1 C56FDAE47024D6FD16A2FEABB434CA320300FC4B6C1B6CA08F76C60B7C08A665 99F404DBA8A2A1EB18EF6750E4EC186E31561A3F080BA6562967546715859481 7BA782940F5C5D06626D6F6A412CA7C13820EC7C1DF23E15E5829F698CF617BE D940523E4EE4ADECEC48C24297DBAD528BA1DCE7AC335A1D15D55415B108EFC8 6D45030D27B3EA63B2B4CD771DBE66AE0218ABB1153D4B7482289D1313CEF184 5C960B1E3C3C953912CC6F4521D1E15636C1545EEE457EFB87B88C9E43CC2F38 6BC4BC96969F4FF28ABB06F4454C01CEF1B6DC538F1E832FC1666D977E5A881B F72F1B4C7DD4BE167A5535F1163A0706F9A0B26400178DF8A128FB5EBE6A7B81 E478AD183EC06622B591337B9F1872AAEA356F4FC67EE767B34CB5A4D90702D9 39FB846947F4096FB3DCF16EC81455164783BA0B5D723060DAFF411B68307E81 7BEA1D9A47A5AA3D648E618C83C60F060029E6EC4D46B045FA7415BAB2AD0AA5 ED9C729C24136F6AF61E6409C0B5CA760B16225641E268A68CFB8260BBEAFC77 6626EBD97195E77CAB425CFB0096D805D9EE699E41680D095AE9FA10122A7882 2F00F495C9EB2102DF0D3E61833BC0A2E468C5CF7AB430FDB7C0BE3DF2C0D230 1580BAA25D65F599378D873165482A1FBB224AEA89C6BCCFBDBA42AE1C5DCF41 06969F585CD3B737D1388D6359F5468D88FCD2279BDB270F6A858FB7D2ABDEFE 5EE8FB79FA437F8F50237B92C307B73B0DCB808D07A9C3255CB9B3B17039CE5A 288103D05D132863FB522A02CEE3839EF9AF7F07D99732F0B8B384745369FB3E 7901166478F4A16076A1504C5E98D17408494E270BBF4470ED12B4332422679F 759F1D93984D7E506D16950DB6C2682FE1379EFFA6F6C95DD71F6E55BE3EF6AF E0CB25388EEB436E6527806FC75484133F6E561DEB979D5C1FFEFDAF2A6D964E 03BAE0BD593C2992AD84569C81050F7A793C5263E50C2F50B98C4CC703EAE17A 6AEDAACE312DAFAF5278D125B6EFC5587484F61DAFF46B87B7C9B1EEDECA4859 314A9A9E2248467DE1E54D90DD671660B9040B3E0DD982260822177EFD757266 74A16C83A7FB168016A320D3DF3BD7726F1F4EC90EE5DFE810C96B099FD4368D 906AE4699049EFD37E8EF058D4B97BF71106445AADD4FC6E90615A0066823A36 673B8DE32322BBE861AE251226B4385AB28702831270DBD25D666FBB0AD7B96E A44E891EA1EAF0F87013AFC982E33D67A28E96E0C9CB99B9E4192536830D9901 931A8CAFA41289633B20BA3BD7AA3414B6DA8D57CCF2FBE39920CC06361F075B CC40335DB9A0071CFF77F6B7BB47F3100DBDC9C4A58C2B81EC99E8E966AF3390 E3FBCC28BA1D79961C8A1584266454DF772FBA99664D74D4A89FC82FFEDFCFE1 4C9E4A04291E803D142E37E7ACA66AB279378F2F192FFB2B5BBAD18B95F03136 2CB594A3D6D3F8576B90A6C4DAD6D6C8EE07AF682F925F01D0B26CBA347C03BE F3B0585CF4539FDC66915E22117078CC94D621F31DCB3E021998A5D6EE94CA4B E214D07517283D56973D8E4367392BF6C1150DEBF459D141AE0941C1C8C5CFBE E735D796E365A1B0F60BB4CF2801EAFE4889EE5F338D3C4885368281B3C95CCE 251C28A90D318A8A0384439B38D63B94757252062EA44E88509FDD2E75FAAB71 7329622828B2785C1A8B26351BC7448C1719C88FE99BCB73F7DEA427FBFCDF4F 00EE079B0C712F7D2C8DF98D4830A9D8C8B70A8C5D54BC1DF433517EE593A104 F3E083BFE49E9CFC4269A86B58AAAC141930A2B4193F74FACC1EFAFD38D3EDD8 A6672E3068F4E5FDC99AAA254345C99C06076420E55715665046450EF164C524 F4DCCDE02254E23815458E7F703D2377C26B73B78B9ED3E42F346F6CD79F7F36 55235A7018C0F600C8828A06AA35100F143FF18F738D2A61D1555F907D04E5F6 3A71729A13D3193A46D67488EEF8E05B5BEF2538E8633B7DD321E56DF4B1C765 0630C432BAC0E607C1EE5D3872008F9AC757992A6A028625EC7A119C50104A35 4F85E83600D55508E00BB0FE0C1257769C8BEA7D15C90C0727C76CC3E25AF16A 8C64BB2C7917D7CF37BA170E3CFBF0C0DE305E7AD2C9148073A860D205AE370E 3B7357956F55F7CAC4E40CE6E055A2B64148A3F5692642D746ECEC4B91C16CA8 E4C21D45FC95F4483FED80420E4BCD787F6C1979B0A1EFF044237CAB3726CD9E 420F208782A53B7D8887ACF95A52459709268F2A54025572FCD9F64D2A2A0346 421240850599926BFB60AEC2B30D2A6340553EFC411C645BA159C95E15300FE1 68FE00B0D3A2166DAC0742506AAC676750DCEED099E66D428930A8484AD31483 A950F4DE855DE567BF2AC786339C0FB95A5D28230945D137313CB5E063045965 0661A7B4AB8AE780497DC8EF0FD5AF6AFF139138F7CCC727AC0E8448119DBDD2 C720AB4267EB6D070EE770BEE07695968FCB1C0AC1B004ABF61B57863F0A8729 064C520E121A74EF9C325E5820D3C9EF826C2CABEFDFA6B483FC48B08D9412BA CBAD386EDB21C4A95C9C7B67C77541254A176F1640E8ADC084E63A7C581ECFD9 8FC24F3941A673793E796424C57DA924DD4DA22B4C5CDCE1293AC2AF0AAFAD8D 61BAF62228110A25DCF84924B838AE79C6E811307D610C020BA519893DED5A5D 31264D4A4093F1961492282910DA2DF652D790FE993BE653A80FE9B5F693D51A 4284D3E3644E8526E4E1CCF471E6884E7BF0A68C0E3F5C7E6F5C409DD08B896F 570395F5A21DBE11C81C2A54E19CC16DD42E88EDF7CE00FD4E655EC0AE8DDE5E 9E03CAE74D6724924C46B9C92E95304933BD4F17216CB98D914372BBAE3F7446 9988218F3F16B015A4D5B0AFDC36732A2D6D8EC2BC018E6C9DCB08CD8DA62984 A54B642D102C7D8DD4975DC00FBB35A841198134DFA827D69C4E4F110168355C 2007E89333D8D04FD91C66F7C244FFF3AB52E138982648D5C9FB29924822B0AE 7E3BA41EB7AD90518763B64B0B422DF1DF7B826EE04BDD3E54A6FC00F6B8BDB2 6AC2151777B6E8367F7A181E2FCCE68A48279449CE771D390C64E74996C322B8 682FB988983C9CA5D46574ECAE4815FFF3C4E84F0842D9A4B790985DA5E5B2F4 3DE15E0C346C6F74FBCA5445D5B474718761B7572E6234174576C575DCCC8242 9BC82DAFEEF86EB672ACE7C9B102ED3F5E1479C3146D6E5E6B6D057BB8D4E525 E1F8DF173BD8CA05566BD41BAC278FE141F6B0A0413AF3A9129FDD04F9A01494 6F8E70ABF019931044DE2254C933A427206C24C4F502E4EB602448DC91B35EF7 3B4C6F230A971044D26B5B948B3CBEC356E1C861FB3EA5159DDCCD4FFE26D2A5 AFF6DE0E55A0E666860414F5C0003FED045DC360F683E8548BBD4B0DA093DFC6 E1C6BF64113599051CDFB0158C60C1489AC419F5D956AF11A279BA06F821A266 D5EE0CEF64ECE203CD1F49C8E3925D9104EF4DB658C52D3A7CED5734080B57E1 325DD4309B3605D85C945732EBB9401320A06D98730EA441AF34985C393937FA D79C39BC0C9811E15FB43222A5EAA0C8F43F3661ABF8578944454B3274F16E3F D14867122B33F45E02D31006EF5692A68771D1404671122FD14F82C2433987A2 E1880308C25C7AC82EFA06F9FE5A0ADC08552CA631FAF547BC139B8EEC22BEE2 E8519DB34C4BF9FEADDDA529CA2DD666CCE173D79A11B8617198991D85FD582D B252A1D404FFB4CF05F7F838DBB97F2F5CC631171A4C626FE0007AF4A42C0A08 C4DFD137847B0D3E2B9FC5DA3C3829017AE5245B27DC79268040E83CFD092505 6EF16E2C6DA9D1EB53E4281498CE1BC740EC90A076CE1F2548ECD85EEDC8225C 9D624061D260B3C5CBCDD213E110AD6030E0E8ED8D7CF8C91BA3AA42AD197F25 C960AF4A66DAF334E5CD42ACE11622D5BA9DDA1FE929BDF6223F82F41BC20540 ABE3A9C7DE2A87AE67437CA23ECCA1877A49ACDB394CBBC16BD5130CDA26F8B6 F0422F3340502646EC7947F60559A5EFE662A1D5457D030C8C10412E9C1BB27D 84D30511647BFC36D07E89110A8E63EF9EB946CA46A78387CA94ED884CB9CDAD 690F8976A676F136065F812EFB4132ADFA39345AFBB8A773FBC6684B01D529CD 9F6D67390AF2E314BC8E0ABDFEAD9C04ACFB19DCA7A80458B859941FDE12AE51 2A7F5D32C24F96CCCAF13DD4617C9AB7B9C640F11115560CE32871107C06E2EC 0A27430C118BC3D230A59807F397A19BFFBA4607E981939CA029306E7E1E45E8 3B33DF300964B1953631F3643CE50696D6E8D78666DBF0256831E7AD6AFB646F 54CEC7E41241D6C0E4B05B62AE3E95821D3D4AE8F908EF485539C0183FA3C558 8A14412A264B827C6050DCCE777B796B66811250645EF4A3399C28320DCC5BCA AE4445040D47EC1058185A455AE06BB400E61E6AE63363CAA8916C93CCAF12CB C1C77E65C047DDEB9E0891A62B5B79F3441B6C85A6EDB666D1D3C7A17E484FF0 67E5F473AF65045928E89D218F19B59CBEA526B223E36E496B7913A32D4586AF 0DAD0C06D8BFA26EA833F863C61448640C05FD6FB724A936C781C2424C38ADC6 F11F01149E17871685427D64B9989BFA4BEC30136B8BBA284FC6E4F61E641EDE 7B07C21A7F7345AC28E7ABFF85A8D31B77A65FECDC7D5CB2568DA90DF32CA1BD 3E9343FDD79A78736BB95F792EC1E9400691C69D14C85DC0C4D371F5EAF31397 542F255DC1B76FD7B49B65098E3917546CCA99648AC7971810F446E92F625A65 55C04D0A86611A64FCEE987DC83E6CEEAA8F5C8003F946FEB8079533623C3149 33B064B599102D9C0E6C440D1AD07D3EF224DC1C8326CA737FA1492D6F943597 E77EB7E556C9FB8054E4F39B02881558697DF477C7DE21DBEB0A83FC660BEF73 A72724D57119A0D31F915614CBC0CB81FBCCD1A9ECF76361EB2E21B2292EA2E6 3D33E8B69018303580D19F414B9B10560A1DD026C8E2A782C2C7CAEFEC28D9C6 88301FF86330567A872D6C1620DF970DD6EF9EB1FE36096C1666D0126713294E 134186B2C95305C8EB145A8814F85C7F02FA6344BEB622299DA9DC600CF97DF9 995D65B7732E33A32076D5A5F45A13EC2AF4F22EE135E43BA7824684D1A06BCF B8646A7569FDA0ABA1B2A2B5ABDBD022CDEC785017801EA8A37274B1884E21A6 4F50AA7D53ACA81175B9E2B614F0DF884246C5964D283C3175BBD2028E3EEDC3 8CF8A212564BC01D0C3136BE079C298DD8A8484B6860E5366B41AECE43B3123D D85C43B9093F3160D6C89254EC2ACA9644972D6ABE11D2F44E3BAD47A6C02CD7 5485B164FB15D842F36D467769CCD87C6A3314E11C96F41FE6A9E4490F738606 7027C5D14B0EBFB0FBD5205F0780132A53E1CBB9F7C6772EE545787B9C983B39 8A866C1A7A63F7878F2C02D5C6890214ED92669FEB487472C1E287C15CEB4C15 1D9F4D1C8118DA030056E2EDE3DB3906B8E5ECC10969FCAD2DBB8ADF42D24694 39E54E7B011274B1BEE37C540C40D1FE15AA65A9FD118363038FA175BB75F0F7 014422497A045408E3E43D1375E270B707D5EFCF27192DBC1E00925DABE99F55 39C25BA0FD9615C41725CA103B0F2C238F14DF9A1391E7F56EF9CFF6A26DFED9 BC31044B3BBD9B3A53FBC1BB209AD4AB360514AB4F83982C60D462F6E7A97B90 152A0CAFFF242C3EAECC7CB304DAB0E98C2221999332627F3C2537A8AB9D83C4 9D5C3A3DFF9696AAD8CEA5B77B50F95ADF3624BFB4D8C865AADBB1FAF64E4A1E 29D58A1E1A387217908AB3F987B31B6B7BB613EDE95198DA0E0BD82DE795B2FA 0AF5ED11CB50720DCBB5A85F009A3623E6FA4A51496DFA23A0C3B536ADEF242A 3FCD3DF147CDA37D1BFFD860D6DF3003AD79F1C64A497102171E5B9AA25581FC 15B0F1DE3E169127D38F092D9180EA6038C8399161814BC82044C8C6D3E82FC8 61C0D9ED982C8D43BD4F5AD7A946BD10FACF4C422F7FB19C0898307E6B9B7D68 4FE91E69F73F393EC72EE598CB963AA015EC3D2686DABCB7A7E4EB1DC437E16D 2F7E1B3C1B81BFB4B8065B95C80C6EEB34D90A33DAA61C829F3A4C86225F1093 44798230DC9C2DDD6C792DB715F9E797732EA64EB43FF9B4B232BC5A1866CC81 9069C4C75CD68BA4C7861206701BA0422CCD31CBC22362248A64A053B1817E4D 549726397EB0D74B5460FC139AD518EF406BE539B0FA4581782A2451F1FEA914 03666B9C3ACFFF2031905B7DDE5427912CF1AF824E0009B50F858F92444CDAC0 D21454ECA87C8C279156EC895FBFCE00E45142010E8C207FB86DEB783DCF16A0 3A124E04E76E77B63B997B273B41FCA49D57A9DBCBE32046CE148D6FFFE8C7C1 937BCECA239F9082CE2EDBF266F48EFF663CA4004369CD7B707A1AA9730EE2DF 952255B88814FC8603CD1B117756DD64FB69A67A6BD63CFA09AA6DD64A6EB5BB 27D2891A521AE74362CAAB45A2B76BA707E9E2D0E87912E0EC2468A923B07224 00E266499B8F32E1120377A22AAE8B912C16F0BAC529D3182850951F5ABC150D B466539914A9CE8F8C8A1D0890CFAF3ED2CF3369028084F9C5BFA6214BF52063 547CF760EEBE9F1EBA0D351936E950C9AC902066EF5310BBCB2167099155B421 F8D1C6194A5C09BBDA3E1B23BC07C5B7845F0E8B5C8516276430D068F2CDC5D7 B2DE80C7FCE565977053EE669381276E2F337D199D0FB5B1081F647CED0B09FA A73520B1DAA3C2D8AAFB79134D3FC0A29EA1D7CFCAD8181076DB7E09C216C845 B69E03EB2A081EA61199DDD47DC6C00AF051D3596B9DE57497D38814C289F95F 9773268A91AEEF2741F3A7860636B5FC60568DE213B0FB8C4887B96DBA039EA8 E86E4714F107005FB62AD3C3AE3CDAA9D6FB3F74C6902EF2FFFE0CFED4BDE9DD C595BDB505DA394D3799D47751D32FCD35C66F58A8BF6876331514714331A580 0EB0DCA45B497E5121781418F1836722CEAF7D085C3238211AC44F8D6BC8CC98 3208AABCAA76914CE492916CBFE5FC385AB77FD76AB55FC5FB483282D5589D21 ED0855C4147425B50E15C51066CAF759D09540E58519569F92D398EB2C2A0CC9 FCBA1E1C9571342814AC8BC193988570DF18D32BA0B6A431B1AAA1371EE50CBF CD8952D8C7C8EBF539164F2A4C3129B9A8177C2BAC8C469EF10851F559E1BADA A74E981EBD3733170943709164C396A00017ADFF72B9D3D36F83EF347ACDA07F 15BBFE80063100516B97E001C9953229B2D7F7D6054BABDDD01FC86C934E0CD6 B7DCC76C405AD38C182223180D0475C50D78B6BFFC9CB1FC93734DB601978087 69631EAB95163F79CEFA0348B1E5F8E3DC3FC98B00B0AD18D760457D0BD1E283 EABAB1C747C362C15A5B75CAC0F20C2CC04AB85AE24DB561BD32ACB244FB0BF4 8C9D16DE47DEF15F772E36B0B88724B4DFDF571AAB053552D1C1C882A0C5528A 715C8C38EFFC215E6BB690CA64E04D3100E650C89539B2AF8D12E3ED145B85B6 356503C723FD43BD5B2F213CBC6925519F28B2937063124410CE1DCE79F78EE2 0D982360F73DA5BB8BAB6D0F1BD62B1689912D0091A3CEE65B4A485CD07CA7C6 ACB18832D46405195A99875799807C375396083E3E103584BE7D3A6F47EDC1BC 6E43B6B21C5D7917AF0F34E2C5279A4A360EBDA3A6997D8E571517B127FA8E6C 6A79D4E8BFF1F2838ABFC8B3636DA922E43E98DA4A81AC09E0B4316FD98F370D 56B3A65C05AC2489E041046EC4F94B5216216F6447EA9D994EB6BF8FD6799D17 B8E9EC3CD2DE0D9404563C3C946B46E0622DC20A9A732E9F2E84CCB8E70118A2 7D87C62AF0E09B7759116FC40A3BC733F00B191ADF963C4137F153386C876645 C6A81477896053B89A28470C875DC8BAE8C2D786CB4E75B9CE2D1D2450AD83CA D40E6F45E491E8215174357A391BF59B39A875CC4AC619027104F7D45E85741E 3B1ACE53994C1A611678FB92A8A32F408C25335F0369DA9B079FA7CA8D661BC9 0296C3B0DDCEE0DFAF39905557F9ED6234C5CF9BA6ED35B0D31279A46441ED6B 44B112EB91AE768B70C86E3E4B73019A480B3D1DF585573E0504DD55DA384C29 5209B3E9C87BA04E65EAE856C4083627FE711C766B56BE58B5DD0617553533CB F75926E7193024CE51C6F458ACFE5818F9F4DB155E1606AEA0CD032CC0FEE6F5 031776071BF25B7A327C2791E6A162076EF2D14A56B251EFC07C9C415E358AC2 8F260F553C78C04A884764E380CE610E6D9D19C8B5C0429E63DA4C617238FB87 DEEF54CEEF05A4C7D30679EEBEDF4B8CB343E2E01287E9B5552EDD59265DD0C8 17E19BC5FE7B254C611D2270083D2389F458428942F216D020D7E63B479AC428 6AB7F4D1D08124905CF4156BF3F8EB9444DF72FEEC276E97169079598C78727F 70DA9A2AAF8FB08C782CA3B4844C53EE2FF617BC75B420DC864836FE23AB3C92 EA639EA0E733A16B661C387341AE41A9F56420B9BE7709B7F2C9DBB16D8FB5EC 74D15AD2920FF9CA1AD1887D15718A299D3B15EBA5808CDB5CBF741CFA9D1CA3 B4E0595F777F5B98C9E8BA47F50E8BF0E552339B0DBC283BEAFBFF1E9B72F33F 5494067D26BE26B5537AA994C9BB98030B77C2E713D439153D5F0DA31EC2C1ED 780E6FEA73425EF4C419CCFA007636F49BB5F492025579BB466CFF033D099235 994504E67071A30228B2806892860F2842EAAEE3AFC6492F9B147C2DAFCA5EEF D466495AE6468041A5539DCA6D77F005D897D94425BFBF9C64CD2956EA55D67A 4ED0CC019B3A412FC22A48C6FD879DB02170FBC7958041150326872A4633DA59 857EDB55B898272BEDEB8D11BA06D0A52CCE95787CBCDC6966B0A239B60D1DFF F2A348793657C4A2DB6AF2C25518AF6F89718298CFE8877246AE2E62C0873AA7 B5A4DDF1469578C42136730D97EDC47069579D7B058E42B87C14221EFB3A7E1B 7FB25BDBF0CA9724B22D118E3BA3E36BAE61D5687B59D5B66230DCEFB7D6EA6F 32EB636A21D03D6AFFC203C26C03E6CE4BF387E97460C0D086DB158CBC6FD142 80129297C9AFAE2F2449EFC669CA1256A825BC5C938A30CC2560B06BAA6E065B FE8B6E6FE9E41D093162D296FA69DE0CD793B03FCD43080F586CE4A34C9B86B9 23DF2AACB6666D101B4E117C63F27262935999E900D21B1ADC7472D4735EE108 314C61FE878038B16451E095203A803E07D48EBF859CC87314D507240755098C 9A326AA33BCE683635E6469393397FEA92670713FCF0A5D8C55C0C142E93C383 DE978F08ADDE44BCB7ED4CA587A3DBC7F8370D8DE0874A33E05E49A815619A4F 6948F3962A73231BE88D77D4E31B069ACBE004AE63FFD4B8DCE6F4F58552C4D1 CB5B66C68A20ABB24B91403260964D5446D9D2AC1691D2C24CA1D1E5A96E72CB E031B6194BDB7C16F51276B1FA9782F5CB127E60EFE336813FEB9784DE797D98 66495280DC234FA02A6699A2F0B35A4FD91CDA9B150C50BAF713CE1CC0F881D1 0485D619B724F9B88CDE5FA2B78EFA611BD0CBBED19F70B49F792B392D13C1FC 7A650740296C044373E83EB6B61B7B87EE357D017DC7C6873A78663C1388691B 162A699575FEA631A100AB5B3302654177995CEB9F9E72E9D52B53F74C1F47E8 294AC99B1F4246488D7AA628E1486667205D4B0972FC7EFCCB1D6198DD667C11 C5C7B267078A6B02AFC74BA614A6DB3A6E923B262785B3E9E03F815D1719C407 87A38DE8CB571A6CAF52ADCCC75DBE8D16089A5DED42B54C305A0EE263209FBB E9A829AB32B6E7D8ED0DD0153AAC3C6ACF22042BD3CF54BA91E31B3E195034A5 30FEC6454E0C6CE6E0671C3C8A1E79C97CF694C339F25210A4861862F5D5EBCD F09262E855D85AD9F94A3F5F2F8D480E3A02EEE144F59E0B781601C15A1565D1 87982EF22489D25341E94B167315444EEBE6CF83FC0F362DBA1BE00F482CBAEF B2E33B0D26586AB2F2DE7983CE4685DE87AA1FE98E948D7D89D517499497F1E6 349228605A389377E53946F173E1C58A786564AB5178D8BBC195DDC0E9E9E91C 1A4CD11C5CEDB8BB39BC01E9DCD960E81C05298184126443300119327C8EC819 6F882C86598B513F432DE2A35C88C2416096036B7F4EB9BB15F2702782178523 5410C8FE0D809F422E3C45C1B31F1731770224A3A1598CE12D66DBD31FFFE546 617B766C9044EE21F6C153B9E60E5F0C3461AA9764DA72884091B76498E2ED1E 82AE6E46DCA8A80A54094B5DBBBCF000D7F276667C026DC68504DE754FF1DAF6 3CA2C5A1CCDCE0C31D9795D4C4362B89344BC55F00FA968CD67A5201032A742C 5A7DEA6B1957BC7E0315F470FA81DB404B48AFD35E7DE4075D2B298A3952066B 5355B9DC748F2A67101A95DA02AA0BAFCF511263B3A7502F101E615DCCECBE0F B165151716FCD960FC0F944487569FC1C42A627C0D2CF586779C22F2BEEDA7D6 0F22CB4581CB5976651765313E9BE1A03958E23D44E5E25F6400B5D49AD52A33 FB7123C8B30C41041BF49CCE2962B158CBC8E05CB776B79E270497C44D0C5D34 527296C128095364F2279D039AAC3DD89C8C25125B6469BAEA307F45FF9E67B5 EA9453F0E28E0D5DE2BC0DF8EE3BDEDF95A66AFE8A66ECAEDDCCE93B00BC85A3 70F109A6ECAD8D2841F7297DD7E2997DF38680F92AC43BD7E5E4526130517285 2796FD91435201B6A25D80C8B8EE8CF9B080ED6E2D55F0027B42AA97E46F8C31 6CAF62C213EC8EA0617796AC9346630F09B67F3834BA03736DCA4ACCFDDF20F5 9F6604FE23333B98CFA17C8993A64F8BD3B439EB26931D637423BD235578367D A760EA7C79C147DA7D87CB3B9076FA94FCC9046AC87BAE918DD4C6626C23540D A360CEBA26746A531F545EFDC49EB0BA8C8248B476BBF061C709BCF34580CF2D 7FB75BEECB67B75D0A2502DBAF68F48A40D4A573B86DC657826A2DE363E44CAC 31080A9DE270F9E8D6575A70FD48A30B539A55941E830E7EF870703810E8E0F9 A0B6CBA5B100B9EF6CE50206CC1EF871EADF23F8F14AA72CB4D38EFD79CA7074 A59A1E75A38351EA287561F844E52164D879B332725692FC73F44F3A91DFA008 F9481B38CDC31FCCF9C0A3E961EE6A759CF53626C1BA57E05706841A05CF5D6A 4A35DE7E2BC822F2000C809EDED51D940BF58A2EC19E8552DE4A6859D3A68957 523B6FD761A8D8216A0D60FC7356A18CE7911547E47572824A69525B0761AA32 CD50ED1133F5698EB001C1D83DE63DD9D65A147C74880C06A260EA85F3513BB2 19CA52BB5A16D698C4DFF6823AD87686B05A37C698E38AA3D4FF72CFB25E4AC2 12BA6BEC6B0A3C96BC8A51C9B42FCA4AB7B3B540329F2A67E6029E8A5F497808 F4D837F8DCA3AEDC7F139DD94826FE02E30CA85A285B1B8A35B879F25F8D79CC B775EF40B5B55B26E7B1E5581489EC0C4C593505DDBEC9D461A492BCD4E13A5E 4435197EC20A7AFC1F901E3ECBC8942DBB53CBEF2C4CF0F6B183C0AB984C67BC 9CADD944FC90473C17BBA154E6FF3816A265441716182FA5242AE354FB5C68C4 B3EA3C66B92448DC6443DFC39E16018B3DED95493DD21AB8CC01DDF7FC425BF3 D26B0B87DC9C186BBBAE7B2BC7A53775FDDDB04154DD1C2716EF8AF60BEAF591 8935F7606718D62683B49F40EBBECCF80AC645CD1A5BB38321C5F1ACCB883079 1CC07DFFA4B24E1B26F47D14531E62E40917796A1ED0241C2C906EEEE110301F E3048C3B0D60A46C88FAF197952B82AE092CF3AFAEB0243F16E3D4F90F91ABAC 2A482D36DE1D4CBB20C3613685DC4335D0448CAAC1B3AA50891F0979873E046C B69A42240D58DECC0E83CAE1E305B7BDF24D54C32D7524FB471433A8BAEE5602 94B203FEC93C2A55B8A67BEA797C1D8D96904730AA8AE8C0380CBFA4A8877CB8 35D8357BF940C00A06E9E281D02F89171AF8AA1E6C71BDAA927CA616E93790F9 381001B727B2F1D3B38C9FFE77FB4B1A61A58B81E44D69FDEAB5E49C28CB7752 B88AE676FDC3CD988E74B6BABBFF2801244B096C7F91DB83A7E2772804B39EC9 09993D475E462054271022371B924AC363F3C4F7ADF5A66ADB49E0869879A3FC 52E70BEEB14391B94FF37D8AE738764796C7D299EB3425EB5F7B929DEA608735 CD2A532A8B3A133500EBA5274A7DA2A3B420672156BBD06AC76BF99F43039DE0 AB6DA02F82F4D380F7AB4C07E6475B234D37235F8DF3B461F3E5CDE9141E8517 C9BA60318EF9BB6DD95E8A5DC1235946CD1E91DBA458B0E2A0A2EBDB380A575E A19E695EF6EFE793464277AD9424C2D2E61E0ACE62429195CDE064F591CD74E9 A9F2D26AC582E80F76AF4A9FC11014265EFD9206DD144BC2879772A0AE213688 833D410D65843885271A3CD2F50EB101A6928B67C472C223988AD467BCF2279D 0D12479302C10B42E54A6082EE611CEBDA043F02EC3606B23D9C9D71AA20EB61 0260A9999197E2979EB909133689EE15AA010A47B3FCA216EF1C8D513601A168 3CCCA91A3BF25712FA8BE6F2C64385906282E489BD279214D12F3088C1ED2C9C C3C876E5C8191CD7338F2CAA7F1DCA426DB4BC12DEAB8C08CC50E539628896E9 562DE33E4AB8DFBB4513660AF765DD060D2ECC57DEA5865CB698B831AACA7433 7BABCA28E0568383938F37C1C685A238F59BF6D1D4BF38D676EA0A1E2D1F318C 039B9B3DFBA030484B8990EA065F2D21151140B595784B858EA590C6A76EBAA8 A582B7E529FF0856B9D0551EAD1D5E5C5F47775AB88D0375842ED40F78AC382D 90E46B73A43603BF215BB07595D5CE9FB5B7EF49C57096C1A14619176C9340C8 0CB6D210375DF886649159DFC1232E5D0B674E0DD11B726A4E03408DE048603F C81F3091876B9F67024122F11B35BECA5DD9BECA754DDC5E53F1AD60236F5D56 38141E9AB69F495A3D0E6287F22F8B7E700FB8F7B9CBC1AFA94F1052E0821B3B F6B8B51313517A477B0C5D8A4B4F8858272D5F36F0E28AC12FF88308D8145F4A 5C78595FB842745A214D16A4D8D3A907B67D4C63B81742DA1A815466197FE8BF 4C796A88C71AF4EC2788CC02C5631771966CED43CC99DE37F9286A5FD52F1B2F F2B7CB8865CD5F6E5BA686EB82956BE3D5DC5ADBB5003D21C633D8462EA9E0C2 44BE9AE9003A02B22642C7C06BC3F81B55452FAA8FB98D5E19E765E3A5F98EE3 08062904AB5ED914E9773C2FA304D40F19EEDAC959A9EC8EED512D802E2B672E F4F5E54997D6E4F870263A9F4CE254E4F12806414FCCC36FFEBA3517DA5454EC 86ACEBFD70A6CD51D405D145669DBBEC49E3D156C99809F5F2632167119AA848 2DA383F709F5C3895E3C2BA5C8C343321359E42BCC5E138800B93BC2C8379600 61CE3CA86706C0441AA13FE5581DAF51CFA9B939CB20B2B84E7CCE117A8CC2AB 3A7F74EDC11B621D02BAEBE97D5FA4AA9B5246AFAB690F82F3203008E75EA74F C5FF0EEDE193C54EC4BDD398B6F41DAA0D68C2D492CBAE9531EF73A82AE38AAD DA131512CD1ED67305B67F40D43F8A0826413081AFAF5088582B00637519A6BE E77140F3BAF54C4A7911FEB6544D02FF2BABE7B0812DA51DE8BEEEDCB2A8910F 40093ECC15C8551048740B89F5473FB822E45AF068A0FEE5AEDAF1885A380974 349D44AAD335EC0C9966949BCEF8D80C49D687089CF68463B3405C35640E0B74 E47748B721DD6B46B0242526F88F7F7EACCBBB7DAE46D838C6BC5316B45B7611 9097680E1580EE0FE85870E956AD9052498A85BB203C1319DE348F65DFED1B0F C9D0FB5AF2B73C96BA17130187DE862D3299C46DB506A8DB7E2A20A147759BBB 495C5DC7384DDDC306C2EA4C9382B01B605B481BB6DB2971FBCEC2611886EDED 0B4E02ED372B910F994437A86E5B1C3A0FE68C0384B569540366D2F8C12EC481 34DE699C052BC36007527CF1F175E9F668E1EF5A5EB8C33F1092513522C66B25 A67075DA10A630D4F5A72E3D34EBDA94862B9672FFE25821B0A3D33C45919F1F C16B546184EC15986148EFA8F7B4BCDFF22BD1FC884E32841E6BE1FA3E01B649 004FD4FF2CACBBF5DB76D131E84F6872C6AA5091092C9D21A5BC1E9BACE4A515 379938793CA3214547FE3A1A100E644AC839D52FBD8D70FD3999D4E19F88567F 3115FA165F1F85E3E21FCEEF9A6AF5357DC763582AB6BF653176A7FEF3F0DDD2 225A434AB69DB202C6F5A7E7F0BE86223C74EF3962EE040F39FB99173FE4EE90 2D1C633CBADBEFA68BB42356EE52920E20D0A1F84DC9AC6DC21F5F133848C36D 920D383FCDCC8B8143099B45A029BC950724AE0E17EED53A0A6EB66318E6E536 5AFB13162AB94137C9CCEE1445406B8FA980412AC4275F6D36E6138B59C8D659 3BB7F07896A49CA85AFD5192E10DCF5EA55CDCE32AFB81529D29FCD0641EFDBA 41675358CF1920597C901B5348DE527E09DBC98E5E4E9E66F67A3ED3AB908309 DFD566F8A83AE4612F4FB35619C864EF5C04C86A734B9CDC7004CD6A8DDFF9A0 963983DDD7CEAAFBF6919D7FFD1E7D87053B6B56EB009417026E72AA335222D5 6E68375ECD66BA8E02ED2A5A892FDB02427477AE7E54A83B737BA12F45152DB0 D1D09C20A9C8D8EAD4B6B2D037699AB564456FEE5083AE7F547CC0F761BF1F3A 1D50209C1DE32E19378456A6F8129E8B991535FF990F51A6EEC07CF8F6037133 79B443056B99BCCB834BD5F6BB1C4785A9BC8B40F16783F50552667B944881CF 58ADB587BD50EA71160820227443E419EE5ADBF15AFF4B2DBF5BD8503AF3DF3D D85545F6387E331E218D5FC739CEC432602FAF2C2D850622282BAB2826F3BE8A 19AB6398FF028E2D811EA2CAF5A7BDF962E9C253625537144F1CAF45AEBFC175 77E7E481037278BB7A322CFB5829D70789198D979FEBC1661F45016F9D757B16 7AE2A4F85D18F6962AE0843300C986F0338467564F14EDB565214B0D648B9D81 EB8B6FCF908FFF7093D83B3902F056E2F53180108E04BAB903A27E1B28010822 DF04FFF3FB045A56C07074913181DCA4EC210D1F79ED94ACAC35F1E06E97AB30 4BA95438C10B3A3E24BAD38F0702B1CF4B847D53941E133ED5E097E8413BCD3D 59F2FFCA10B69AFB0B7A700C67B83D8DEBE8F98DAFE8DD9E0B1844B18A80F9EC E57888A17FA2D088B6D0BAC45F0E8F14785F7D40AB57BB3B6AE052BE58530EB5 DACDC2774D73D35D61FA5E1BD95C4A235E5D09BCA6D286A91062BA2630169FCA 92322BA73CA2E23B39D8A81A2D683323561FF99B001F61728AB2B5C096CA68E3 71407DB6C304859C58369CED876307ECF0FBAD76CD1AB49D22002CAC8806F28F 4191E774D9E909231CCB8DB08C08426B1FBFE5E7F1CBE8A5BD446B0E86E2D333 93827D3DDF1059C35D26335C16B850649B02F7C9CA1304C60963AF495D36E560 F6FDD19E21B71EB1965F10919AAAD32D64D78C09D21CAF966CF6149CEB2FBD04 EB97429B970D31AE7D064D2F31C41B579C98B413F0629F86E27E95ABA2AFA1A7 C9058953473BCA3BEF437A27D757E273842322294EC47CB0AAAC1BB8E037D749 DC6DEA0E4085D8F670844111B2C9ECBA71E5DB0DCDA63CA16272B68F777AF4F5 89869E886C89811C77DA90012822C38A9856D7DB1D59712F3845BC3B38BA82D5 6776217689908C28E82677FA55F692848ABBDC5038C91C742FA1CBD8F9DE2A48 89D9F60688A989170F650D7A0FFF44D7E0559C82FAB7F29FA0ADADA5A4CCE6CC E9D7C89DD3F0B32849A3398C87A57FF29E73503575F613FC90D087673F1CC730 4001675E56F865D364D20006FCC12D03C1FDB3AD04A099A4E43284465A2FE408 A929305924DBBF0CF8088D0CB779A0C58CF53E69F83E7840DEBCEB2E3B87AA75 16D4DFEA00E32B8FE0E131207D0C37AB3CB29431EB81BC1195061135D2A78F33 E42AF31A2AF987B57394C33EB93E4F85B7E39D07169B1C44E137F8C6258FA610 86ABFBBF7F742BD98A8524CDC94FD49B9B3805E460F89F5A76878CE38002E667 BD535A42C875D55AD9D34D6382E0D8077E3C95D16DFBBE5F0118B1C7D5BBC619 6104C2B8819122DAD16B315974479F9BBC61E85381266617E59821D5EB1C6D7F 5708BE5BC7D30BD640E74AD5A32D65F1F7E4A2C8D9C82CE6E864E8568B3B1B01 5A9A8CAE68B2B952D76C7297AD3EFA79155DCFD7AB0ED01FCC33E46BB81131B8 1A305E85B81662E33E7E2D2E8A32024118BDD7423A5D13087589A2C667E98FDE B7B05D2FD20B16284AF87902E6F082F37380B0537D7F655C025B6BE85A7277CA 704451563024BE7A599D38B265B4F25BF7120624DA2245EBEF0ABA8FEFBF9CDC 6B1780E9FCA506B45C0C38B24045BD6EB7E8BA647207271329F1266555DCC327 CDC99CE770846ED3B44C80E532A7DD8EF580F858C37E6374FABC1D381DC6ED55 AF0CB607C87E6CE868A444322577006F0B1D4E606077E1017848E81D07B77500 1B538327F4D5198BA22A42C660E44AA88EC5394947E2C33DD529A5EDE61310EB 1AEF49D2ED1F2395D400747C4698E7BBEC82788289DD84408EEC483038A74669 E886E52A336ECE5A83B2C4F1FCF06C5044FB4423002474AC0613E0BCD8336D72 F097C34EC78AFE061373D24363D9C250956F25A2DD72787172CE978D8BD16B73 32E3C189C341524F74AF104B3D8681F29124D46F07D1F3626D132DCFB3545BD8 9FA692FB2BA419A753EC439014451CE65FE340F2EC2762D3E0ED7804D7A66A46 90837935988366E1600402FB0934576A47922A2A48E2B4929777CE274B060772 112A25AF16F62F6F699BB91E219C2323CC3E5A5F788D28BE804A01854FADB939 5BFFC70286880E9FB7426514369AA4330699195027E4D747B0A97A7C1599BD2D 2BE3A1A0A9C76A2794635511E04FBEF250DC8DA16B99897BE6464FF978B6DF8E AE8EC09BE1A646E6BFCA49746E378F82F013B8DB47E3FD215BF3B2FB61FF4E19 920E5A321FA2F1C799BDC53E92804F0FD6BF0DC137A1E8100A601FDAC3079810 E513248875F9D6144A91579A69AD04218758F11D0D9206FFB1C3A431EC78FAEB 1EC47BE0914DFA4DC2D47866D20F8D2C176C4B3093A9EEB87D8D754CF70FFFE7 BA90A5355F1F6625421D3E0639A6CB758F27AA2254F8B04907C7A9D65C883380 358E64CCD2D4BE890255F0A1ECAD7BD81C9FCDBD75BE2C0BA3C3B1053E0537C9 2A5766A8EF419C429F6235558183489F877948CA4CF92F1B766DE38D06A3AB68 E263D0F1394A7F88657571302B6A99840670D02D9840EF0CF3B533F4874B1A58 5EFD948F4DEBD7E89A53FB9086B0A681510A98B415B120A17787E2BD7C53C5FA DA07AC27E7A5FD69B120D47FBD1DDD34BE4B05737283FAF6307566C1A15A2C55 9EEDA346EA7B2DACDB8033E97187A1B3472D1B2728295C9E2606185FC1BFC0A9 E4A06966CA0435C6A82D97D140E444C2EB1096D0EF7609A4BADBBF71734D5EEA F30C7F106B1DFEBED8260CDA67F8A28F9F528E29226169A5977DD9F6156D0A8E C0D4C5481E39A819F2789B90311C7BA9C4061BF079E83719D273C17D12680207 42EF7525345EB2729D6E357418B809A055800D7CD67B9128F856219CEBB934E3 E858F67696E2B03DD337FFFE88FC04D95D98AA1C8D19B3293C7FE4EE17773D70 BE19425753177C0070E2666B26CB4A13797E4018997B3A11DC47919A0B65792C 9F0464B90B9D60986DACD4D91DA171F5794056D75C92F38C05BCBD144A4DCCC3 91C030527F7531E1BACBFDBC6AA56399CBE70AE1E210A61122F6F80F862379AF F092B25A3FD039A9BB59854BADF0A8D3594D66E0BF 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMSY8 %!PS-AdobeFont-1.0: CMSY8 003.002 %%Title: CMSY8 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSY8. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSY8 known{/CMSY8 findfont dup/UniqueID known{dup /UniqueID get 5096649 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSY8 def /FontBBox {-30 -955 1185 779 }readonly def /UniqueID 5096649 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSY8.) readonly def /FullName (CMSY8) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 48 /prime put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CD06DFE1BE899059C588357426D7A0 7B684C079A47D271426064AD18CB9750D8A986D1D67C1B2AEEF8CE785CC19C81 DE96489F740045C5E342F02DA1C9F9F3C167651E646F1A67CF379789E311EF91 511D0F605B045B279357D6FC8537C233E7AEE6A4FDBE73E75A39EB206D20A6F6 1021961B748D419EBEEB028B592124E174CA595C108E12725B9875544955CFFD 028B698EF742BC8C19F979E35B8E99CADDDDC89CC6C59733F2A24BC3AF36AD86 1319147A4A219ECB92D0D9F6228B51A97C29547000FCC8A4D80B73E7B6CB7548 0E1D77FFC695988391DC44AEED8CC947B3D7E198B9620E2238DB3A2819182F03 14498B8CDFBA48926DA721920B221FB33BC21A8456AF10891403501D0F6415F0 7E041AFFE109F640E54FC1A365674711EFF94E752652A4C8DA62CDB1149DB899 2C4A4BD77A06E81E93C5698C05DD02F74A0756082738BDB53003B483752AE498 DD718AEA8F3FB5A6B7E2D2AE8F309065F3D556F9A34AB90C88833A54295E0982 209C466A301BA3372AABEE20D862C6DC6B6FAC1463C8CBA8AD766ED1B4C9D712 2BECB4E6ABF558D8AB5281C35726BB8D046982C0DDAE17BFFC9394125E4E84C0 B283977D31460B8EED4346CCB09F64DA0ACB640C6DBF32F2DC30D54668C1CC12 24C7280593088E9958C047125C323E9C842801346A9CE5F50413D69F6DE99471 65D2E387765E92EA4C43F17B467DF6E266D92551009C0E52E7219AE9F5E2E8D2 88852086FF3600BFB50AF3EAF8C009D8D5F084B510F792385F328F7EFA8C38AD CDAB2EEDFBC6AA45F6DD7364C2F02DD2BE6C79C8361E83D4267CEC2407689864 B57B5D967FC80AB3BE8CA43955FB0FD3081D438437559AD24A7ADD484C1E4A77 B00BDCB0D1B121FEE983412E1EA5489BDCE5DCB4A7310135956B230C0DE7BBED 516369A92BC41FAC8D73490984942D930DC193BF0C774C1AEF627B969EE4B001 11381AC57815D7581E2372A1DB740B09F4A7FB4318B765DA4E7B44E8805CEF85 44EC3B10613FE7B397BF91B69A5CB2E9086D1E7A1FAE0A9ABF2A237A2D29ABFF E392A18AEACBF28274E775D3FBAED4F46B982B9DA4602E24094EDCCBC9D6FC0F 67C60376879245606C0B9C9A678E8917516BE1CF097B1C75C9F0DDAD6899F08F 81FB7A198D45FE060CD2A550D9B8D58B882B969D7BC3EC018A1FE92BDB262835 26516FF97AC387EA525FF987E5EB1EAAE4EA5866C9CC043D183763C530F7D7A1 2070E4044507C4E5611FCC117FBE4396E0B24F672CD53D5FDFA56D561FB86D40 90A52A7C7F29A119DFFB694A8C445367746A49CA5FA83163BE448EB19625DF26 609A8C8672631A10411036CAA3D6C2F822A4B2505DCBE8E1CE6916AE515E78CE E8C894B134BF811671D17C19248853131DFFAEDB24B15FF17EAC194662460642 48D23515AD434C68DF56753806FE96DB3A29F9D4980E0B6EAED7383F9FAD2584 8F85679D6D1933677ADF5D31FE6E43DABF137E834A1DEA632D36EA5728625159 8F33348893C9D1C510501628E4A9A80587DF6E179FAF68B158406A3EBCD726E2 AC17F2DF8B3607072824D2E5A6479F7BADE32E603E54E7A83BB2DFDEDB0D80CD 1F1BDD4F6C9025CC3A8A3685DF10A8183FA80CE0F0FE2BFF2500F76B1037AE41 56D2D7FB468C3CA7549E3599A2AACF66302572F1B35BC8EF7C23F6FC4B720228 1D673D903111CE378AAE83480B4DEB7EA84BB35F4F7BE997DD4FFF5A9B5E7650 3C7365BA0965B242DC369D03215651184024A08EC284F1798B0726152884B4D8 46411B3BC8F5CB53A70AD53BD7B1AF23528849B56CF2F75609FE715878CF6448 38579380688B47AE3D374B0DB6ECA5B8284414090123D47F3F9DF389E023F431 6B4C0DDEE4190DEEF4CA772742012754DA9A44A8F550FADA6D8FB0C512D5BA2C BB7DF71B1DA41FB6936BA71B710CC6A80751E43436F0F5888F51AB370DD4A088 40F402661E08732C960705C7E0D29B8DA1A8A3E119409E51EE575E9655F47568 023977917C8EC610BEBDB9C1F4EBC192084D63EAA00EC87B53E86620BB5AE51A 579B0F8E1972CE1DA02832FC75184F45409DD9D413402C2FA27BCB0AE6DB4CE1 5AFB114E23232DE07C4674969A1FC94D152C6D3A611F029ACF4D949A2C0755D0 31C7DACDBB4DFCFAF7E87295CCF5D4AE28D87ABC3533D87EEF1507B9FF9063F7 F007DF03734A20BC3A198B049000C92D2849C62DDAA719FC28EB372793E20128 D786670E08948808BA45C4F6AA0DD8A8357CCC47228A760C5C7864853BD9C9A4 285E446CB72C5C9D3F03FAB000810DC5674061FA116153040743E846506CFA67 FA8770E785D7DBC7293F37389A0859CC22275B23C44B57B92A033A7BD194340A D6BAC6E103402F8396A5394C617CB2A27D9500921D5DA06115EC81715EA8E360 4A95DCE8689CBE268B8E6C8B806CFB0ECBF634250243C9E1AFFACAD65311FA4C 1DB0988203537E5EF12B86FB454D06CF05E4F4FC4143D62920E99304245B6ABC 82E21192BE94F5E980DB21E07FEDF0EB0CAF4ABDFC20EF08A2A44A7940E2862E 08FABA516152DBA899D6CA561EB08C7C8298DD511084E5230CEBF28AB1D84C85 B5BAF4616C28FE05AFA4BABB3BA03F8CEEF3F3EB0D3034BD3D8D06629B8E9EBD 72484057E71C9EB4DFC7C2CE7749271AC926C2419D618FB0B60FD6F81F0F2C04 E529CC74DCC9E4AF32D935D7CA65FBD0842A7BAF162D08F782E65DF3AD9EFE69 198AFA9208B22BC21BC4ECABB9BFFBA84C8421B74748E1EAAACEB59E566838F2 C439579D6C75074F94493F7D5C8942D881AAE6302C37A61003AF77684EE99AD7 EB5EEEF050C52E75E4E842F8174470FA60CB213BB6F257EEB26CC55D1202931B B981DE2535A87CF37BFF912220C117EE166CCAE58BBF624170FFBC0716726B36 304D698F2CA131675F7B1199E6581B8C812C4FAF75814282477BE2B7EBCBA7C2 FA6356B2876F89698C6C2493989E9EB252DE03BB374622A7C88B8EE9FEB4851E 02F85CF70CDCA7BED5EC94E81170FB557C3BFC6F32CD70B506E56A2CC5451592 130C6F570C679577C44D60A811DCEFB3535D855259B1021AC168DB76DD38B459 F1813E3DB20AD9275D58880CE94058490ABBBB0D8DD16D4A65F680B30057F15D 07FF54D779CC978E90A850A2D8D79961EE276BB26B594C16F56557435671A3D8 ADD3DD0BC4BC73B0652B9DA8462FE614A14A11ADB2214EC4910823FB4CEC8938 24354C5C62547EE5710FB5ECD93AA45DEA7411F6CA8D5B5FA222685E622AD73C 1BD5DFD1C8F253352D6C7D14FF2FACF07CA5EB11392C6A33E9CABFD99F743BED 55E8DEF49E07B9444171D1780C698E5B65B540F41F845AC188DC7C0C8B5BA5F3 546BEAAA4F29F0DF30D5AC12A60862742623100074457BF2D820DCAAB340C1DF 22FF26992DC02F276B40A7C528C84B72CD189A4088C90070486C49A1014FDDA3 5093FC12DAF309FBC063653E6A33E14EB51B081126AB5BCB8016E975060B796D 6CBFDFE6CB9E191F12E309254BDD6660E3227012F5DADE246B02B6D8127F1EE2 248F48DC5ABBD229748444420C868450602120664984FE3A8B2373232CE5CA15 E67172CAF7EA99F73A66AE33B1EDE5E8351DB02497CE3338930147873D4E46B5 E918F5592A21789FA9F46232BE693DFC33240E2649D6AC1940B101D806089436 F0CE230BF6D0363510378822891DBD3EEF3365430E74FB6C994BB40C8EEDA593 CEDAFEBC3B87C7C04F52FBD7D557A77B44855CDBEC8A8D26F44D66446B5662AD 15B6B79D13BD262D79BF51C09F8F690A61C7F11EC2E05F6BEDA273648E9E1EBC 3D5F1D6ED486797F753064ADDA8494405556D43D395B1487EDE877CCC1EAE954 1AEE2513DDA94897B733609E8179DFE1975590568202EF20D58A89B34874CC3A A5579473AC65E0EE61545AEF578ADE10BE3FB3E2CDC96678F613E4DEF7BC1B38 8A551C93438A0540E292F65F1FA73D9AB30A5F545284085E4930A570C1807995 7108AA8194607304488616DD4AB189F8EDC5F4507AEFD7847817A8ECFFDD2DD5 DE95E04EAF2774F8AF661827229F01E769A32734097C457EB6FF056D90C46C5E 9F936AA6BF2EE8244BBEDB8862E56423F5845BB10C8809730B011D650EA18945 83C320A3F4ED095A5EF91929FC877ECC28A1C2CE74A53245E629BF46C6534983 307B1C94EB35CECDEE86551F0C308F66690E591C5D9D8FE14F534CF3F5DB6D32 39D7C799F392C4E65759B7BF61F4D8312E3B26C31466206A367A0DD7A90D25E2 805D36ED5CE0A4BEBCAC0A348FADD2D2AAD670E28BE6E33F627B4A9F35078B1D 6688084C4C18840673EF9B3526172EE14EF64E97C8B006C27DF6EF73BA6E6459 3608F10EB1EC4B824DD5360B42AFF2084788B165747AABFB2C9C0EBBA9C6246C 08F28143809315D6268E386F09BBAC54C34213438B56C386B34AA457D149CC39 A3C163F56E3C2E637C63A79CF7F2DE969EF3AAFF75F3F20499A9ACA61279D545 866FFE57D25998244F448AAB042B141952BD653007A889B1A716A4042CBBB827 C1ED5E3C616C22D5FCB39D3B3539F9B71D50D25ECD2E5D953C7A5194C867DDB1 75CE10B2C3A20E8CDE15AAE9F549D034838DC066CA649C31EE365D46450AF18B 893748D055DD88C72391FD92DDF0AA1A1316051BC756F87BC9A425019B2FA7BD CA9F35E89E2229B3021DD24C9DF0DC3217F44DCF510116DDC9E92EFDA3E0A892 491C8961CA484BA29B8CACD2FED2E246FA7414F892AF7B9F08698FDEC82D2E4D 8C6ED1FD9E0BA2645663E7E97B0F780033D025F2EF3B364574C03F04FFC4E09A 3D4182BBFCCCD8CA54A92434E2208803ED36F931D31C7498B7FCEE4B78AECF11 B27123A10F031F9CBA36066680E4748E346D18FD0EFA395D1A9227530618ADD9 64D96C50A0172F712CB427E8F7170F8A1691FB95B247A271499F0E63676BD64B 167438333A3BD9CD9641AC637E0ADB17F1E394DF34AF5A2BD02030DD087BBA02 E1209338B74075744A9A9966039AB6D223F385E06FF359257913E6C01BF32F5B A3640C7CA41A6C51F296E50DC1CD1D68491CE5D75E0ABDD4C5C4A97C8BE2BA35 D91AF9F8F38E7AB8C1778B06A212D0416E6137087329AAA2679C51D014CC4DEF 0F1543E2FD97621E552E19B29AA1368CB5046C188BA59B1E1875B25FB269DD2D C0678A42CD310702465694F2BF302AEBC43F714F7C657505132DDA71CD23D17D 628BF3400EB5DDFCE2850F31B40C5913394649AA4241CF646F3939916C2077AD C11F8C3E478586AA7931E327333FCD8A2EB31DF4B47AA2F31B999556602DD998 5848143C0CBD0B5187DF08E675550F2384D48C2954EA7D16AD2B94DF97C194D2 302CC47BF968CB1F6C9641A87525D5C6972ACCA1D4A4B4DA8EC54BEA6E7312B3 2737754A9FCBED3BA5F8220B751506BB0A5BB5CF706AFCC04BFD713A3BE3C842 9FFDBAA0CA5691D0FCE76134841A169970903843163DE68FF09649E99945DB64 491FD6D8B2DF237DBAF550D1B74263B3BF1EF6211F40D4DF2DEC46E4DE557088 5D458A7CDC6F34B8C3F5C76582C8B7D24A333AAE0B43CA67436F8ECAD7C50B12 35BAAD521033D8024E4DFCF01580AEC63BD5F8ADB778F822AC4FF0DA608EB7CC 1A52A51B9F38FFADC0D2F4D8394C5D598123B483AE5AC1215F24F2492EBAA134 3C58AD4E3B493AABDF753EBF1F04058C6981C353D6788C2D3294165B667D3765 7883A8493F5D772F789F73979B254BB9397FDE4F8B76CA6FFF312F4B012949F4 3EDCF1AC60FFF2681549DFF430B498405E79CB407DADFCEDCAB1E2FAD3B0F4C7 B575A33EAFF9F67D37F50BB06D06834EA683862991C5BE340D4A7F8D131E733D 289F72977870F9958102F5D835739F0F5A642E7194E8AF7FDA2937E5C0712CE4 EE15CB475725030CE0F238C32775D3EC95CE3D0886046E3EEAE322F59D423E83 DE88DDAB5CE0F70537487EBA5A16A9306BA7DDCA14A85A9F83B3BC3600DC9421 BDADA2704A5A24F7174A3A486ACE68739EC5960038CB44D969A594E97AE1F42C 42C1B7E3A456B3CDFC7683537B337AA8777F18CA45B22C8BEB18877DC624496B 9E8EF9F386B7FE4D94ABD5CE3B5786E76FE04A35909C472C04654A4405932EE6 A4A3E0F6DB088603FDD82F0EFCB85A962002A662D1AD0647A2F484B59075A1FA 9F4327D542ED7962620B998ECC3A95CE736089593461CED9B5AAAB05C2DA3820 5AF29B32904E1EEC357C8E282189C6D8F562DB11291091E6897E24CD8F8E2A34 67F35D261E01336152E69831B0CC6B03FF1AC7EA22B745F513A25FE10F70E74A 3FD71FE1EC9999BEDE7CFA6A97EA2DF621711BE950FF8960965685BAAEA71FA6 36F165573A0A6A92DAEE41A9B0C97BF03419FF6BA1F44524D00FD671EACC4233 9A857680DFD27B9F1E7A760058C8277B3761DB9969241D1824A7DADF70BBFC38 89C6DB9091E3BFCB36851CB9662B365A4B7384BDBA1D385902D1E5DABA72A159 63790096B927EA49299AE03E41C7F593F3B995D1155E91C62D5F68845ED3C797 7798B56858F96C2FE2E37D812873B7801767082A6D6B60602CEB94B7F6D7A142 72814734DC584A18D1FFEA7333D4C7E2DFE5B91E9AD92EB52533CA52FA888980 C79FEEDF0FAFB3B20B497F9AB668BDAFA364B405916526D5C48E57DC30BC35B9 BF684FDFAD199D9A28541327F3899AD505FBBBBB22F419E22E0149EE5FDD2B43 AF442E2724EC16934C307FA731F90AD1C76B74569B78CDEA7C19808233C6364B D049F3F50A68D3EC5F29F2B96BC58C44AF90FE13F244B7129F14B5DAC3F3F310 B330E67CA4EB76F895DAC8025F11EC7630EEB4826B5721348FA38F28B2AEEB1C 5F7CA413C486C94B1DD96988F07F7A08D3635E28624878E55D4FFBEB5E183CB5 93014D8A272EBCF3A09133603CFFEF43A6FF059BCE525706D3795884FB495748 C8AFB50DB464459A5C36D7CD087631BC09C693A11BDF1C6011D9864FE66EE8C0 4824A42E97D16E017C0BB73732D4537E2A5BB283B3568950E5681364DBC1D6DA 058A122862A44ED85029A7B39F2FA7C362D859D0B429E056891339626AE6091D 74F6110CA32F8F3E9507216997E6AD1A2F1FFBE8B407C9880DE230E234F6FD41 A291851178BEAE5DB9DEB22E3443807E2BCEF12A4AE8C490AA9E3D2918329F47 42314CD258A0760DE5FDAC4AF7209CEB530B8508B278952A3638CA8491C3B493 516F461610DBAF32E923ACB834B15E2D169A10F2609EC0ACDF7BDBC777DD2C19 2DB330FD557D3B06B78824D6AB237D8F2D57A7ED35F02CFA9290ED6893B41657 A2485524A3F1642FF5808FDB77015D9467EDAC4A6BBE8A175833B1225A5554F7 2C60207F7A2632A4023255E8EF1F38C1B8216C9B03319B60BEC9799E5378683F 46E698FA75F2DFD40F17C603F3335F1EC70DBA1449C7A33EDDD46CC3DE4A6557 EE67BF349AA8680FDBF415DC527129288B5879500180F75DF80394EC7CF11BC8 9EE9A4ABD64DE3076A2963F83FA333F19FF74F79ECF36A87A31D6F125FD2415B 3F6A6FC33C179F54CA164835F3C3DB62AF444BDF27AFF23098C7212477F688B8 6F48D9AD080D544D57FEDD33D3D9AED9346CBB644C97C951D4AEEB2BF6F0CB18 E2517BA7ADCFD00FE44E290E731D53E5C0D762FCBA08004562DCE6A5EF2FBB74 B3053CBED3B6E896B1C3356DD9E8FCB69691AAF6BEBA0424D62B9F266D560B40 89E20A9F35AD4A7F65A7183761ABBEE0F7EF26ED3565A25516A3A5A57143979A 1EEED8CD52A69E4E1AE4795F3EE0CA21B9F4D166783A9AF54B08B6C56703932A 310197E328C6E6A6BADAA11D66A952964F31FD690082FA02D1E2A4512A9F2742 33B203FB770A3A1C7490ED630D0FAEB3066429D0237E18818EC368D0DA72EB08 1951C70139EB0DD59EB53AF5039A7618C77F6CED9F0A066FED6FEE0C0E328351 BA39746C1224A29D191D8B86491E0A306ABA070CAA2756C3A33990EB6DDF34E8 06EAAFF94AE6686EEB06A17D6D020D1F4E59428D533DB0EDA6434E6E1A478D5C 2A0D08CB39DA7D5F5200199FFFE3F41729478D4F63AE01FC0BF3B378FF6402D1 CCF1BE5F191BAEAEC7FE400C9980E103D8776EC196E741AFE11D249E0C277263 80FBD329524C55943E25631F113FA0FABF7158AD9EA1231126A1CCB9E7F5CE1E 7335D0D645722B10E7EBABCA0A03F27ACE58927E0B902E5E91AC31280B9143C2 8B4A98BAEB5D8BF44ABB947DEDBFF8F1969651766DF77EB0184783B3D2AC1997 BA1109BDFE6FB08172926B58DB8DC803F40AF91B9FF17EE60E28F8400A01654C 6CB9C8CAF71A8C386A6F2F7E7613C70EF1BA0AFE58322C952018779DFC4D5C71 F3012F1020D93A14754E46AABDEB27955CAAD66F8326D26D2E1399F347DE645A 732942AC89 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMR10 %!PS-AdobeFont-1.0: CMR10 003.002 %%Title: CMR10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMR10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR10 known{/CMR10 findfont dup/UniqueID known{dup /UniqueID get 5000793 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR10 def /FontBBox {-40 -250 1009 750 }readonly def /UniqueID 5000793 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR10.) readonly def /FullName (CMR10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 12 /fi put dup 33 /exclam put dup 39 /quoteright put dup 40 /parenleft put dup 41 /parenright put dup 43 /plus put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 48 /zero put dup 49 /one put dup 50 /two put dup 54 /six put dup 58 /colon put dup 59 /semicolon put dup 61 /equal put dup 67 /C put dup 69 /E put dup 78 /N put dup 83 /S put dup 84 /T put dup 91 /bracketleft put dup 93 /bracketright put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9B8591E5F01442D8 569672CF86B91C3F79C5DDC97C190EE0082814A5B5A2A5E77C790F087E729079 24A5AC880DDED58334DD5E8DC6A0B2BD4F04B17334A74BF8FF5D88B7B678A04A 2255C050CB39A389106B0C672A1912AFA86A49EFD02E61E6509E50EE35E67944 8FC63D91C3D2794B49A0C2993832BC4CDC8F7BD7575AD61BCDF42E2E421AA93E 3FF9E4FAD980256D8B377043A07FC75D6169338028692CCA8CD1FE92FD60AD26 D57B7519B80A8F8DCE9CEE5CDF720AF268D3C14099498A843D76E3B6C0328F24 D36EFE7F5C4E5B5C612786200C8DE3A41EE5F1FFAF4097653CFCDC8F4FD32E0B 03EDB3E413283B9EFB0AC33B055617005BC9B0057FD68C52D1B0E67F0C571685 767F2AA85ADE4E0104A1C777733D5E318A22A9944336E5B98D965E50D31F357A 8B6EA5A0EA98E1B027CE68C2EDB149EDDD04ED74A1B3D206D471A0C11C11449B DE190BBFEBC08C9E1B7513B43DA3134D6B11A2516E6E86B67F68C970A320D05E 94FEC57FB347606DF89989C33482BD09D011C55AA920319E7B26A205D3D0F004 22466F09C0482A164CFB27EF6ED2B040ECCC3DCAF345B5A73676F193D43123B7 72FD6CFC5E37930E61EBD5A6307E4DE70194E6384EC0D79DB6AD86D3B319A31C 8B0589D0FE28241D8ACE280D0530EE99C80723E560BB72AE9D53F4713181F491 344B06D3027BA4E9E94D4305BE1D817197C54C8FF56CD6964165F6448ECC8A8A 64B48B4F0FD69299A137589E2491A283509B21A3A5772F75B7602A9F60AE559B 07A58436D04222C73EAEA72DE9A5A441F88D27C11F4F91255EFE280E91A4ACAC 1E98A4E5E6C57B9AE86FD218C3CD8F24A4104156A80F13821384E529783C52C8 78B94AB3A0096090867ED32E8A30980E737922037F75F062BD83BF4F5929BC51 CC22AEE2DBBAAA001CFFBFF41D258424FAD888FFF1BEAB796A44E3126159E120 7E4025C676CF94888A1971AEF8B6764B3AF4A92D36FAF6FC56FD049710EE3782 BC2CD84FE2473F133BE03C1346B875463F126DCAB15C7A9BCC9A727D23611462 4E8D2BFD2466600285D79518712B8681ABCD69608E6AA9578F7BD771EC36E01A 5A17BC17E375020ECA59B43790ABEB9DF5F4FBBEF807E5699EFEAC563E1ACC5D EFA336E75DE6D8248E9381BB110884FDC89C2F9A41EBBC9A8A1F98E6A41F68BE EE30E25CA148C1EFF42DFF8C214A6537AB11F260B8C329A4947B5FC8DC9C5622 4DF7BF4FBFB00380D47BABB03BC30627AA74103E553F55278F538EDD8C1E64CE 0F1398CA0AB5A86630139B4A7E8FC02804CAFF3830114640AE50D2FDA3B561B5 C63AD7EE3347804CBB40FB1E77A6C89735DD870351C3A1811591AB493251B904 314F65791963C0412377C1D02362C5E9655F1C3D4803CD379A8EF24C48218C2E DF1165840462BF37DDE1B8D5FF09FA2C3B261E2F1A65ECFBE5D4EAD43B52C029 EEB3948CB8A252CBAF545C8FA1C31E920E23A12DD7222CEF2D2A513BD758EA13 DA33BF5FBF1D734653EB83DA2D374A5B9A0CE316F24EE375D6DF6BDA49954C2E DB25A88821193636119D469BA66E5DAA9C92520FD4F84426A4E54273FA469084 7517817A6EE3E21176D333825E88046F50B3CF6938AF9BA79A2F51398239EB91 1A2D07F7FCD948427FF62F40FF95E39FE1A1AA8451411563FD5388472251C155 69BDE9283B41900B21EB1190D06E6B13B7794FED020D2C1BDD205AE77B084BCE EF628249398B496DE85B406FC2E1939EF00DFC84C07E26CF72EC401BAAE756E5 7F6673216E7560D1C2A723CB405EE5CA474A07F61B81F8836482F73DC9516D67 CE0CB770EAD755B6B356198B4B97EBB29C63456953270CCC8D5650C1D006E69D 38DE2DFEAB27DAD50A817F0D645D30AF5B75A7B53CBD3D2B8D87BD0A7E525AF3 22F7ADDFCE31716914C2318260C2E2B4664893921B68C5A93334A361D94A759C 0D7B146D6FD94F0442D672BDA0F6432E18F3C5DFA37ADA378D95B75F413C9ED1 BB5C606A3EC7DFB3F796F59B0478C13FD1900381EFE0BB5242D5B5D34D03AF1D 4BDC93EAF8020E26CA23C8B0E7DDEBBC6762A557067A4CE05A524188A8F02E2F 3625DA38DFCF381727887F5646A3995A8A38A5FB1E5D5EBB395FDD0B7C8E71AD B48EEDB62AB2CE99D121435EFBBFCEEA69AE9ED8238B60CC7288DE33C766CDFE 15B767B4AE2E6CE0965E77272AC9F86023DA620548CFAC85BC751C44218A29C9 849F1C2DCBDFAD895B54E51A569952ED50F82DC8A19F367E7E44643854EFD6B3 FCAEB04E55E4661C82D31E2932611748480EF61FB2FBFB0CFB940BEA81AFCD84 4C6A6332D7A600170E38A8EAFCD4F93DC153C43175434C86BC747348FAC61B76 1FEC9027C1A193E55C80F1F20B5317AA0A05AAA36AE235F6E49F06E570FEE798 84857D7552EA92EF3EFAD52DE39C2F8F43C59E3A957B7B926FC95FC4B60186DF 7F3523EE2AB74E294C8C4BCD8B4975E84849E0FBDA6C0B0F24A636DFA578B122 CF97BC5089E21E9F5298D1C9F30CB8BAFF6A3A11BB4D9A0A5CF2B18D055C44CA 4FD4D8FE1AF3630907DE7E585AA811F9CD11FB2C8FC791851D651009FA5DF20B 3C33FD2FF848A9E3F5652BD294965A332DD3F246C91B0ADA34017FF2451D1394 F9C3C95AAC6EC8062BE98E8914D51DA6A164AD13938693D446044859D03A949D F9AC5DF4A000CDA98BB516D762CB9F6D44B5268FD0C26E88BC4A760C0F75A140 DEBDECA4F511128B7D2805872160C55236F0A0FA7637FF0D4E94AC079CD3C8A7 D03A5A56F26B0438B577C46011A10532FEBCAD14FBD6032E224F45691A726886 56F305231EB2FCDF59C8BBFCB5DBD2D093A0E84D62AC93A2312CA69295E937C4 8DBA1802B85F54B5E7E6D6216A918F911FF705D3B5CF055F1D873B96283A0B53 59344D910CD396D883F6F7836BA65FAB4393A773A8F6BC298069E5BA38210EED 49C9D920F718E3FCE692527DC7CCE6963BF744F2C91BC5952564196D60574E86 87A0FAB21F2DB2BD5A51D7FBD8FC19946D24E5A228462C4772F978E650ADCE3B 8D66B9C21279C531CA1C3A8ECE3420BB65837287A7222CC3673A2A5F8BBFDB60 C719CD073EF9A23675198462C7C87B24CC92D6AEE5C25AC63855CC3281494342 D28F3D2FDE0C183486769A4FD5B0143193D31FCB2C2A14E487BBD96D0BADBB64 D1B56021C363A795BF10E2DB448261C363A54A4AC1182B470C457AA82DF3F5D1 F4B329806141EBD53CAE309319B94133D7EBDC2D0453A905ADD207364371E178 0A95C2686E3B34C4A978BFC0EE968C39ABA00889BC5149162C2B54483D44FD3B 5CFF41F611C7E03B94945F414560E874D7CF27FFD0630890D7D7EA66CBD15448 229059E1C436BB33D69552B5367AB5D53591C4678D0C704DD3EA23F5D9E8A7AC 17D003C19E333E726FFFA2961F33C70F429085F7BFE3E2510F59B78F58B19CB4 01B48E184BAD9020FECCE3AF52048A056981DAEA02AE78197E65855DDB170616 F54278395D9EA50DC83761AE759F9CDEF9E1948E7002414FC05286ED793E6662 3347F2A9AF8917493D7305B92CF93E8E9185F70015F5594084298A6C2F9FD3C0 689F262AC9FEDC9B89577ECDE92F08D3142209FBCE7B5C0A840CC767BCA56C20 4E4E545E2BE4D21C53855CEE4CD0AB35D1A604C0FFFF77DBAE4289752276559F A05FEE65F45ECAF44E95E23FAB6052195C7948AF0B1126482D4E02D72BF8AB03 DE0F1A632F7672AD9DDE70EDC82AA993678A82BEAD0BC2649C4707FD8509810D 364B5C6FE0E10772E95288C622C2F06C634F4DF8C7FD1432BC9310D5F24FEE3F 7AB324863D6DABAA1576E70643CA79EF4D7DF4105093D66CEE0F3B87D2164A7F 26EA05F5C4645B22D3E1BFD2219657712C168FD90DE801FB0F32759E80DEC1E1 43CEEB19FED12D757205043FC98FEC62D6A8D8B97BC083B4A0E985AF7850D6FD 8716B9957C1C35A0675BC53DF672C425C79F43FDABAEE7D63F092CF271C9A9D7 C41F40C4189510987887942E60A412B3EEC84C9A6E1AC7D54D528F5604B72C08 94B7882621A5BF1F325B92FF96B80878CC550D1AE4D8196E41CB1251856609A5 C4D3BD05A922D0D45E039D9450DEF8490A3E924E41434194910BF60BA1B08BE1 B41824345627745541A4F1703E956328F6227D11C74946B38CFB096139979E56 4E723B889B44C6D78673868C89912F8B4F0B4B485F1587A637B630F92E6072D5 7F3B44EA6FD96BBD4FC28A6C1D90805E3BE3E42A7BC9C880762966C55BC04E01 204D083AE976FAE6F37C94F27E68F8C0F28D52B17F6C0FD7C9150701FD78F8CE B8E8DC9260E3974005EB5CA728171F482D765016C94D4ADFE4A42EF42212BC56 7E4EEEE8B0D2A7856CD4E44F55C0BAB762F92CB8D64C17022D4BF3A47C12F5E6 279FC23101FEE93753653CE8CEDC3B75C9CCB29BF1D4554C6120DE8EE750FCBB E38B5D915206974962E320362E59B3F21B3AB1875703191043D03284D4467346 CFF2F98CEB4845B73ED8E003E0DC94251B73E13A9B51A3F1430BCF6A21EB9B7A 65E17FA411F53BE6432F1506232B8159E008FA257F884A4A01AC53BE91754D78 BF14A5B0FBFB9C31BF4908355F8A762052968DF526D118708CCB0B7CB5BEE285 6DAB6CD2E3934178E60BECB11AAB5478623CF6C50C92F8BB5D1A583609028FA7 B8A53B791BDC9EF76A124F3F7641857E4BEA0837CB36176EC9A522EA7F41B8D3 63C37D1145367BD300F17B54522A834BBB74DE12BF9EB26ACE6F24A046D58F89 4D4B7DF74875F1A0C1C9D97BE0849593D7B398EB4B00BEBC8C8D1497B6EF831A A35380FFB7F1AFA4D888AA52C9482E8B1755CC209905F98F40D95B44D4DCBCB6 67423D1BC2F3560FF0A8B4F0CAC352A4EE2C1D946E45AAEC8A6AD40303F3382C DF0756BFA3B1ED64C169E56ED1C760F2FF0E24DC5C9F41306EF8D2628153D30A 5DCB0791126BEFD4947D7EF08301FE015F2B0008DFFCBF9F2D4D859FD43EC7D9 C5BE237E9BF6665B7B1BEBB362F0C0C3A8D86010B9C97FA741C97C2E0513386C 9C26C235B14DD2A58BFDAC7B5F63DB4DA6D5D37D0098175A9071590E1DF66A3D B8173A047C29D7D35557F06132CC920B5460B8AFC11D23D09A4E45D089F5EB51 963FA1A6256E359D485107FD143B2BF21FDE9DA5744BC2615E86C31C89470CF0 D06C6397D9FCCB316EA9989430240759D2C4945D941F159FC02327F34B042BAB B5C3A47C78E8C1A6FBCD396B1A51CC4B020B8AD401841EDABACECDB482D6EC5B 72D2BFEB4556720FADD49D07307C8B22ACB7E310CA4151A85C71EEF70E8D15DE B3B00F26E0E166C14647A65ADA228A3D1C89025BE059306565DB1B1EFC37D358 8C1EB024254AFD049BA977BD4C2C605050E17940A89D0D4C5D963E792320F5DB 3706682E03D25D9E02487247819551465092CC22B6B56E93F3AB528038FEC3F0 668F866707A19B0463BE706EC729D2EE1653AAC7E29BD25BFB3241D4792F5152 ED415B4E7FA92C2EE5A22E27E8B75542C492E56D811C192E95542A6FE0BFE5A5 69273C2ABED4300D491B92D2AECDD278404CB84B1BB1BD7AFEC858215837D118 C0E928BE7E07CFEEB51A6D21375B772B8248C994564014015232A0DA4BEA1754 3274F407FED0837A236371F1A32056240F2015B1E7F4B2CA72C6B58610A66F13 407CFFBA5E0A2893C1F572D50F51286E9133B5A84239C9493B0574E77D281D01 11D00683354A000C9700EAFBC1FD104EA19DFCB87470190E7E2CE26E3A6FD0FF 2620B87B82AC8686B6206B530F17E9348BC7D04B948348802CE53A312443DB87 4DBBA5313A6A2A8DAB8A1CC9A594FF8C299281C0A261C8CB2226B732FBEEDE40 2C6ACC74A1A61379E2E1CD5548CD908268A32FA83D8504C442EA0E183ADBF7FF 9FD09C037AB03516ECCA93FF048235BD11A25DB07F164512A079C5392AC7F889 CE96AE5C8D9580BCAFCC087C35E76EED1A671E87C12E3045E15A687134736DF8 DA984772AFD189D68571A2ED7256F1E204230E41D3D9DD876F938951714A3973 0CA9310489F8E807C1C7A4E51AEA5BC030610A5D7263FF7E0F9FDE3E5E37A362 5B919000BD94D978583B942EB79CF2BEAC33FEBC9A67272EB10865BA8FB75FD7 9D280AB59F91B96C16C982DE848D76D8FA8620DFD7C80B7DEAE7264350D6FB3A EF04794DA3305844A7CF718F6D1A4A3AFF6826173A076A1372ABFC54ED3AC6C2 09C9287FC830556CA694E21CA5342ECA7B10C90AFC4783D841D7B1E34FA3DB7A 2B706F3E21B0FBAB23E7257962FC3BC309CEA2C7239A9D6B44CC96825115ABD2 AF9A2566D2F3382C01569FBDB94C8D664A5DA0F7DC3DD140CA77C743D7BC1420 324ECF9E4780280EB119885E96A6C619CE3C0C8E1E264E2DEB137E5DC8149786 486D65667ECF47B1A1E20E9E6E4FC8323E0BC8E61BDD3BCDFC6575C69C03E31A EFFC290472CBBD049DE3F840AEE37A2486034240F80E75D8A79E0762377DF660 52B12EAA16D678990B11A9BFBC03C1D4FCDA9FD4FFBB3E88352438102F10B7C5 9F04C013B6575B5E948FAB58EA691984A0E54E6B9F3F505FFFEF74D06FA1CDF3 4B8A95904C8A2763AA8AF5B71D00F5DE09DC1CDF87A08B6D181453063E14C12D B7BB3775A6E2A901636273D9EEB833EA8CF20FD83AE899E28DADE10EEEC20BD7 BD93085A4B1AC80AC1AE8280C14767F1A487BD066007A0D050317BD081131A14 6EA0898ED59E46DA7B6254BDCCBC660686E2EDA0E77A705A653733BB5C5497D0 B130359F866CF293FB6EF0C2AC5BAA2DB0DED045E2DED3A2612D078333260359 16CF0CCB272D34767EA069E0F0B0D42327A18529D72E890EDA6195C2688438ED E9ACDBEED41E81CA8EB5E43C2B09CE266EFCA03F2D7FF57F12B06F9E54FCC6A6 546676F6FFC5B8B7D3F0982B6FF0D21D949309F0C0B175CC1D0976F8C55C6AED 6E821C39041E22D91AB30922F2B2EC2746BC7DAB484991542FBC82D87B487507 559AB466F73EE23C2D3194DC5CE4C9AE66D3164613AC5CBB3DB501B64DA7C91B C7ED2EE9027FC0906820B35D4F2CF66C4F9CE4A884B7C07155BCA884ECA5EB3A ABB83F84DB1F5639599DC7D3F51241AB5D95C3BCB7AB1EC90B4BC989F74FB354 04B2D7366A34D335A47B8C00C05CB423482BF6C7970A95545424A08AFF9A035B 7F83F52B65A9799CE76E303B85664B624C65E9CA58184C7BE2BB9D9C86A4DE5A 8165EE3DA2E652B5022EE7893896BABD88931DE1D538F615787645DF5ACBBA0B A8E5B899A37321AA7D4B283AC9234978C2DD81813A1EE5DB6EC170DAC1B6EF02 94892635B498765C07A38D2E9DB0B7581B11056C28278F89B0E60998379C07EB C0EAEDC32AA69B8B836F92A61AFD35688315B2C3F860632FC13E4BDFB63214BC 41CC6859EAB3AC3034449213CAB99FA1D216563419CD6D6CE4E1B56F33E6C654 7AA9DCB5B05FC068DF02AC32408C8010AD004F6CCA9887830927F8CBCD49CDB5 18CAC1EAFF815FF2F6F527F936948201565003022C6C7390B4E3C2B219FB4F76 9F12BD25CA7B3B61D1A2F8DFEE795D04D5428B42FB66E0C254AF7B7A10CEF7FD E5ADA5E217BE24851180E9A1700FBA66C7D2B0D7BFDE4F4EED1D24B821A40947 5620363657F6D048E651A689822CF815E72FC8AE9D835BE31D1DD8B54C9A717F 4DC319B4B59AE073936EA40B070524C7E71D5A7B64436DA107749746B516E29F E3BBCB8F8C473E706670E11E5B221716F315FF097CD1841D0069FA69EA1898FF 9F9EC2518C77806A19730C97F54BEAD604548D553D4A6EDB247853225E24E7E9 89D71F6BC94DB986467E755CCC99069B313F5745B02B4BB608A39F0A0A732B87 7EA2DED68219754BF1FBCA350327572D769C962EF9242132D93A5C8E9725D8D3 AAAEC15ED0F43F9A1290E91C463895BD12E8A831DAD661EF23CB9AD2C26CFB26 71B72D15270CD8CB1D59CA2D9DE884C96BB923B1EC8208BD7DCEAB0FC2293629 2AA1F72C6B470701C381E335C2364CFCEBACDD20CA36182CA7E70AFF5B14B02B 75CBD0738E35DAD8E60CB3DA4DDED557FF9ED386DA52D10615E700751C842FBC 85D89C0E713F556814E051C6CEFE7E83C2F379B88A801DDA565BE73013DD56D9 44D97798564787AE6D5A6A9FB777EEB850C7481B4A353EB9279731512C9B95D3 2ACA3A0D44585E55AFD968135F6492A9381FA2D126CF50373AB7D47B509AE6F5 C4B100BE8334ABE2268DAFB7983BF339540A8D8280F3576CDCD4F21408AA7D92 BBB218043ADCAB60ADF6385516C2A5A9BFC5C3845124E0954EC5C627FA7C65AE AC1A283A5A9670ED2A2073826941E9AAD904A05CDB5B692AF725B6B9102574E2 461D2FAE65B7321C0093A2A34996C214331F7A91B4F74898E2FAD14576F81B1D 688DD9ADCABD51FF07C966B61B0118F09E24354A9F75277B03026CA1C783CF92 76255E2A560768B3A8764F0BBACFC2BCEBF870EC12EF096A2BE42692EA401E2A 3A12BA99AA66F8BEC315412BA9A17E6574742A624447122C877F80740924F346 0E22CA288DC767537CFC7236CB28E31AC2C563B89563D0A57F798CB843680E9A 26A03BAD01DA05792528BDD89944986C15BEF8D3E84C08B3CFD68AD25993B6A3 903A215F9BAE352E428CA0E862EBFCED059D65F3C47D22B2B8E48E975078FB8F A0222FE0783C319F0463EB6F83D2CEC9E7FE518742FBB3645667801FD1489387 E9A74C5A4CF0EE88F29A7BBB02DF84B8931F065F6E7F05D1DDFC21A73DDC800C 45740A543AB3F5D165D628AF8BF489558F0A3BECCC768AB03B0EEBFE3C03DBD8 E4C46401D0D22929F73EAA9B199BC796F1D495E8913877434B12D4D9E1E324F8 D27A46C3059A2B778E20748DB63FAB2BE8C34865E095A972E08B9067C58466A0 EE1F3A790C500E9379DA096E1F56D87595343D1C24BC1455EEF858219E77800E 047CA409DA46AAACBD1D1541E27EEB978D28D2D5B5321EE18DD2A0B15E53BCB8 E3E01067B304D63A92F67E852DB3FA36EEA39B8FF07CEC6D1BB14B7C5287E326 1C3CE14538C0AFAD1CA8F2CA6227B6F53604DECA2A7D3E40E41727528710CBC6 8181C0B41F8F9F578737056C820F9CF2C450238719BFD6D18C4B0DAFAB5A0054 5DAA9952EAE86EB7E2DC73C347153B9B9135A79D2898CBF02F6539F9BF11DA75 BD2522D53162BA21E584BE4744B479B26D01D8ED2B2B70E658F0C51E9765AB5B BB8E5737199C9877FAAA0D6E5613A6C69F92676D92FBF5A285A98E8C22895679 06FE61337CAD44686AFE62DE08DB4D90FD4145E934F4F263CD7C1A67E0FC85EC A02F4530B7CBC274729C142A06D14003C671AF4B2C85ABD5992D71C1B58B5FE8 506C3DEA7C4573EE57FD97DA8E17FB00EC0907718327815B85F9ADC17E2EB3B8 24A70DA042C6219A92394209C1CF51386CA5BBB19E8D3727ED4B961BF0490888 293CCEB93839EB03A684528FD6D2338146CFA3E3B89695B5862C96EA12435613 31C2D9EE7B65B82582E9BC568943DE1A68599E2F3EF62EA528B388FB2C260A3E ADCB9E7DAB19B7A27F2BE09900B60B0E04DDFC2696150AE062E40D2CF10D2FA4 39CD2633CCA612F30DA12ABDF5C63C5B1602823BBFC0C03B7A421A87ACAE06F6 D85863CEC1B6C58407445E5E0141EF31F9380E49E0AB4F3D91D7F3661947A42F 6158331EBD1301F1248952EE492C514A0B90B1D23ECA43B8BD3AC6E7E197D854 1D72B9E701B6BB94936F23D3C8E3378EC476B2556B6F07D6249C251302BCDA11 FC4491EA792C554CDB77B0F15E91CAAFF428EFC9D45441BEBB7146F32CEFB3EF 5F39D2A1916E2D98432F919E838EA2A15E01B8FF64E319A23D2D54576AA6A6ED BF223FDD04A29FDD1974C3B53D46AFFC089F09753B205B671B33DB5052A2B001 CE2E619AC8FC742FFBA113F9A621155E00FD80D1A2E5CD343CDD769E5A747F71 88D38C041E142ACD0BDDBDEE2652210EB2073CEB06E181CE91108DC564A9F80B 8C75C2AE539CE59D1CDB91051D144BC34162F7CCE36BA1D9813A4CBAE6C4120B B6737851AA44975855AB164C26097D02670865A694D7633AD08CE8621F9FE14A 7427E3446604C8E759FB78D89E2167E977EB07C9D2755E36BD9F0B332CE0C9F1 17EFA96421E973DD1A12AEACDADAB618C611D52CC5CA99FF089F92AECBF52475 D4689DAC81BA1D62282EC6CB377AF95B79602F210CC8365FDAE48F51F51F7358 CF4B001D53B2A84B76011BE67BEEA5B03DDF69EA964480B5E84069E3BBBC8665 0D224E65F7A54E14EA3D65C1F5D0200EAD1CB9EC3F8EE4254EEB30B3D6E9149E 638845279D7EC24044C77E79B6D697D9F3685203505A9DA356DFC53B2681F83E 2A26792FE879ACA15E10B5ACD3A6EA610B3C1575900CC6F06936381F3C36CBB7 6C09DD0000A2C573E9E1CB91C30CC0943C63DBFA02AF4CF6DF30D6963BF76222 3E4062B37BD16AF156121D80184FD9AE5D6E19CEC3FAD4A8CE8C44E74E60AB39 15E2BAAB56D5937DAAC07758960D67C9F8E56A53FE23A79F1E9D70E5B3AD026A D77998713EFB3A226AE4E251F1FA45FC6AF407519A5526F787B5B077659E7B1C 5857451CE3425622B497B2B014E28D06053F4B9E2BB6A48F652EF1C3AFCBE929 C27AD5EC79D7E78828DC4D88E35AF3A9652BE728E2D62416107B1E59084B5E42 24C54F177EA0EBC1EADF963DE8859D54F0501120CE6E1DA5631FF4252DF9FF17 D3256B046F7E559C2BF1DDB1B84E30B7F299551C644D2ADC18E8DD28F8639655 E4257CD68DE5EAB7A508E489571C79B7A90F5A01B3A2480DA075AA921CAC2244 282B2EA5B6FD6C9E31E85D0F43A51CDB95994F56D69D6A87933C66F9E112781D 53309A853CA59756493606D0FCE52A5DD69DA0038FF602E7D0B6383FF3CC13D6 1584D9DA998FF7BABF94BB8F0D1059CB229D153ECA53F33E2D2633CC89B945C7 6DB2DF41674FCE08A600643BF3A7E2540484871DC86204092B72885BD3AA590B F047D37F90DAD169E1AFE4B76A28306EB1C400EF674407F3CAAC967EB83E49A5 9F89C2E8E855AE3D7C09AF01A444F5939E4E65630EE03681A62471A1C035932B 6545FA5379327897FA9A2049428812234F0873050F420D81E09BD9F0AB92BFB5 004B54A8639F469743285625B22B592EDC30A9DEAFCEBB0621A8ADE75F29900A 7936427AC8F7B54DAB148DBC58A0291D3CBCBDE7879F8086743CF176A9C55F64 C5656151AA2EF9FE7CF81EE3DAC352EA6C6770DE50F0832779A98901BFA4BACA 9C38641762055015CA964AD6F4FAEE9F0BE4E84DA542E7E9C739E243668C568A DF52F10FD3856029C572F27E821A6ABEEB389E2DF0543C847B7123CB5B0D733E 9B775D9FFDA2F3217D0EA07724C70395805AFA6648411B5DEBA841C1B87BFA35 809232DF039C6EB817AE6E239813383277BAB3820273858FBC0B31DCB01D1535 DD82C80647C281276116F95A17A9025C1FE808C6FB887E7963423A3E7ED00AF9 8514E4E9108CF2724F58E6BE85B499601338E90B3D5D20A302B51CBA126BB12C 2D7ADBEBAADFE8AEC4EE037456B8F6FB087058385A412461C54BAD35E5AEF00E 0F30F028423642D5FFD10D3350638CA56E8567807D2D78227CEEC465B62DB868 4594048E58A0B6776501D8038DCB25CC0CDF3B37EC98F4A6F7EC124889A87EF6 941DB495609FC011796807773B81B526E4127F4DDC89D5EBED1884053A2318E1 8FFEEFFB019AFA7AC2BB0A5145D3C6A04675B5DDBF2BC6D6DF57620E486F2DD6 4D12C7D9BB51DE06150C7C7A825D08B61B3FA5F9F36FBB0CFA78A119DCAE9E81 8843EB82B221FFB3FA07304C6D18906F6444290CEB82632679BD051AD117B4E2 4F835FCB8686EAE2D427207650B43B5209851D49C4EEBD2192E029D762C18F03 0B9604360926456C665D50235149BCB3434053B20B8B21D7C0F62525A8C90170 9D29B307515BA68D3264DF6331D2236FCD97E10A2E18ED2539FB148AC5342A93 3216B19754C8A9D037D8F55FF50AE69CBCA4FCCB0888D5C385C2970FCFCD3DAD 65D8BBF620D38D020557C277B91824D544A070C12F7BD6D494163D37FC9D79F0 E9A6BDD099F4C0586B85CEFDE6721F319F7B9A2C1606E86149C67CBA95E27F55 31BAE0A55FEF7201488F8154F7CAB9D1E853980310DF012CF0E616AE144543E0 08D4146C96E982428FE49209D4DD0BC9A905CABF94E9A4932187514010FC280E AB2918A5C10E7124812A7E89352C6EC6CB5CCCF2728650C15C9634732B6E2735 EA785C29F83A3FC20784FE25B5105E8B53CDF0189B2678AE4B61BEF3AFE45E1B 148DF656D1A2D1CBD1EEF61720BDA045FCBA9106EB8F55D8A0AD7648A90C4C14 938D128A681D486479C0DF8E725AD86E9B8CFE955EECCB9596C15B0F4F86C117 C39E5B91555287511654291B867159148D2292810C92D618F041B9A030F72E3E 13CB35A190298585D7CE34CF62899915AB8E64DDBA7858BC87F5EDA8F7B90D15 74C517DE1D459F1848273447F713B84C0CFA0A32E8E4C631970B337A45E1ABFC 855AA23235A6C5D235F5A7A3EF0C74C8FCD4F291E0BB1A9D790295101D91B913 1131B948B356A66213F5F2D68A9D3E66F45798C045FB8FF1EC26FDF46D205592 5A24EFB90FAE5304C4552103C30AE5B6135C03146D3974335B72377DBACAF45F BB3B6B73E80D6FC4269F968A43473424BB8368D4E254AC01A60818FB04732346 4E515CD755D9AB215BE167083176AA58469BAEB34AD187AC76C93D002C55D791 6411DD77E4991BB835F6B28FE9A97D71661108F505BC5C82878A54C5D365954B 94BE86049FBC0AB6B40E0DC9D47C2DBF3D2D01D934F63678A2AD79B3A0F106CC F9D48D0D102D79E10A1CAB45DEE8BF98271E6F678C38CD9CC41AB230678B1FF7 7A7E28642B05C5913F4342D0B05283E6285F6A730A19CE7005B14B6D1D5B0598 B754916D698E9F1436C21753942E542BAC657979B6C1D41CA90A40B698A0C76F 9B854AD9695DC71E628E20B2651958B2131FEC72541983D11F502BA8ACA81F16 C4F277D182F526603C93C1C8C0582026EBE446926AC1C6060693A22BBF5986D0 F78BBF060C451CDB31BD2BECADD211D2AF8B91042D9FA49A8B7AB096856B93AB A7E9DD2D54F25B95E2D25F4059D7BBBDE74244E78DC67DC6E1A6F9D240C00206 05BC68E384BEB3A689B8A16D6565132406FBDC9FA922683C2C62DFFAB1EE156B 15E30EE3898BB904DF8FF6A303896A823C3529050A4306C559A6F0C436B31271 9094010CC2F6880D2F3989B35753A90EB2794BDF890C4FB1612ECC330229E324 4956AB492FCEC4B4C4015818A0EAA0D20C23ECDFCBD3616E099C2219938E3237 C54DB423E1C003A4483BC8446F5E8FA57110948F1B88378A8EF5A6D7F270DDE2 3F1D3EB37422163E3E25C1CE771B3B902CAB3DBEABAA2246EA0EFCD9440C03B6 A3625B29A9B428C81876ED67DE4ED2BCEE0FA11A8B73211127BDA0F71F4D491C 6D221625F1593CCA9BE2C296C73CF3C5FD36AF010A819F5090CE897D2784E64B 17483D270631736F9C55C86D08CA2EB09AFA9EECE3FED44155B8B119D897177C 4B9AB3A9954D231C56C28714AC078D7C2FC918D29A54006CF7D393D12C9B053B 53ED652B51B5D71CF07922F924736A2E3607F67F294FBB8D86C90BBA3E29DA4B A092F265120C5E44A554B307D43127C112FB80CA297C92F3D2C81314503CFFFC E5CC1F7E6F115A780ADBA3CB6C552799C3F784F4730E2D181AED25B1F4BC7653 4765C84D887284E2250CB869406250C6AADEF0D7ED0F066ADE2BE2779E0E94DB 8723B02ECED6446800D2D24E9220E52CBFE53465DF5C113CD1CBBCEA384B4BF9 BC804FC482C5019077D707FD77519FC298EDDCFBC8D2962FCD737A08B7994D25 93B76335451F57BAC2F8B65C3D9F3505BD06D3E4DE2E97C43288BC2179BC7BE4 E404033535A28C503531A6BBA56471A75D1AE0E251D20C31F9B9CE5A87D249B1 F26E7A97F3A789F3410959A73C78F73055744E1ECE9236F4A50C7F533B4C5A2F 4A2E4367B5FBAB3E07632ADF7D40CE7FE1632FC0391892709A2CDAD364A3B32B 748D6B529435B3AFF83C13AF40E46FCF677FE583CEBF95C0CB5B38DA1FD2D01D 8A38FC02A190B9CE0A448530008D563DC444B8D8988C9CA700FA256B57318242 D71D7FAB1CC8878DBC730FFEFC5192CCC5D520146645582701E3C4CB265A9AC3 5427C244A142B9ADED31D6417E2ACDFBFCFD0D1F4241870033A958813F0E7EB0 C5C3ADDF11038BB6764471D8673C36841EDF528ED610339570D086745047A9BA E482F9F84DBD706866EC0E75ABF93D86C1A0DA6BA56B7ABED9A8FAF07920D3FB 5E2369490F9D08BCAB2A2D1D70BF6FAB334EAA310F8D7DD75DD1A4999B77F74C 6F7EA8624C034C3473A99BF8A19D12FCF037769278958B7972BDC79A2A595F7F DB682F9FA00342F01418277586FB4872AB57C235B4243945F3C419EC8BD159E1 56EB70415B0E90A7EE82E9608FE78642F58F32DE7E3C444C0374454A860E9372 526B4441A41ADF39611FA650BF2F56CF68284C19685BCA80D3CF6909DB1B82B3 0675B6B0E7CF408A7C9FFB5D292C68DDA4E18A343DD3345B5579320E4A2607A8 092345607A9337FC20CFB52090FF2B2766C0FFBE6FC64BA5AFAC569DC58E82AD F04ED5C22642D9E7F3B5942209B028C6B1A867AC2CB4418E24051D62144104CB 9D89638B8C636803889A571FC4434DCA211DB9E2E07420B00AE3B4A63F44E2A8 0E3052C2747D86FFC1D5524A35EA15707C9848065B574A4453A5D609C8038CD5 2FF069A7F1AE17C086996D4585927D8D587E75236E9F39FECB621512BA9CC355 2C69B370CA823EAE004E76100C2CE00EC61E35AE94C4D54F8D894A9FB4737E8A 6A56CC968CCB0B1330F8F4FD97C1716559374490DE01A5B523688C82C84FC676 0AC7C37942C38167DCBD7A2B5E523E563FF55DFE652C8A695C63A075B2B53CEE B62D06CB2313F61F6F78905BFBFDAA7A580C6E5F99844DED9BA9F7C3A08D1D56 F0FD1E274D1C8678BD3CE55CF892B8E426CEBA43363943944CA2F346E8F3A67B D2C828B29FED2749139BF00258E195D5A704FA6946A4EA69097E6AFF2D99CC78 AE248FA405B1B9E04B0027B2BE39F0FC6D591659E922B0465175068E5D7057B6 DAFBC5590F7AA48F83C2C79288DA1B16C5C183187E245D71E6E35864DAB650C3 791DFE5B6BA279C0D6B58ECBE820070E8911FD02E79157D22354BCCE95DD48C9 48AD142BF9498BE4BF7CFA3459060A9690658E996EFAB20C054B59DFFF237071 DC8C6D5E482BFD2606E6C789B63F37BAA672428191A93E7A2506818AAC39D318 D06D60497C8645184C9A9CB1BE260AA4E10E797A09D5206E1605B4EB9066D5B1 00B497F8E6E8FEB1113E96DB879112F64081C28168D384AAF9B25868FEFBDE1E BB24DD89F10687E5605B9F6173AA90DE4917B1AD6AA99BA32FA4E176E9569190 C03FBB54D9A9273A140FCB99FFC817507E5775B9CE63B02FF7136519DBCC3FB3 71CC41C930DC4CA925799B1BEA87B75B281584255B14F6024BEA46F338D0D5BE 5CA5E459731D124B50DEA7A1F4B773A9C8D17F94D50D90BDD0509256FC8C304A 193ACC55D2E85B39FD795923AA6248D26A14DDD3799BB20E6A4ED6562823BB6C A7ACDCEBFE00F01816D2412A38617B96E4818D4B83A2FCCAFDCC863933A54322 0EEC49165953675AC6A9319C9E601B2E05E9710D368150110D5F777ECDECEE2E A4484C1B44237210AF4DC3570FD5C0F8C3B194E3A09928D3798ED8ABBB3FAD01 3DB4E2809A7D7A3CE5DC5F3D857D2B0E7F9FB780FAF08179C55F2700F2CDCBC8 B7B9E0BC57B48D3C090181618BB63337BA0CDD33CF6392DF8B5B286020179372 0B06BB92054A7E2A421B62A59D7F866BC986CA5199CE9D11E70A16E27305B74A 6D7E7FFB477E5A0015C57ECCA71F649EB3C250BF04C42934BB1A34F0625E63D0 84925FA7E0910F6F9D81133B61AD59FA3A751B5E3093D9824F72E1999AAA1AEA 7D1C7F360D8247A10D0F54A60C13469DC105CDDCBAF905C131A5C82C9A3C043A ED6C1E58B51BB8C32421A2E6A5578A676CFA698AAD45B6B63B56DFECE87AE197 7051DD315DDA6C89BC394555FD48923639FACE16627B19178080636627D6996C 2E17F718FDC590D27CF36333F1120F2042739A201FB0A1DDA4B13F655D685965 44D4E315E9ECAC0C76C115252370940BD4A823B4C8FE46EA5A756855241BCEDF AF2A77E3534B598C0468E0C7FC056A8D9C0CB1D511B95E69257AD0C05ADD87C9 92F1D8DCB0F9F971B71057ECD8A6C7E05989D9A7504592466DD5A5EF011D9DF7 A4F6BCBDA2FA7B2E20B12498DEDE65AC77FD67289DAAF80C0F5E0BFFB97C5F96 C6153C208EE5252FE8FDE9B92F333FAB59FB9C3CCA72B6CDA8169B1F24599F47 811E23B44BE74626F27BDD9D2D8AAEFBBC9525B7E470B1777E99E6D7A33A8EEE FF17CD27F604946B8CC47A82852C0734CE5306D6800D4E4E059D187128846736 7C706FB936AC2AB2DDF285827157A7347318507A70FFBBC7C058EAD5E5D7D2E6 7661E2E28B89CFB8CCAD2819EED61F219538D81850425EDC37BF833B3C951E73 F72D1D9105036BD73FA498403C0E1251544E93161588DD053B987319A284DFD0 F0EDE39CFACA6D870D057F72B0791AA4A12C72F4493AD822FEAFBB7A593B78C8 23AD55281C98DE6DBA9991A104591A68040B0E7E4B11FE4CCE31CB1FF872F1A9 2843EC5D45804368E12CED705AFE1C80902736E0CD1EDBE63BF100B08ED5A3CC 3576273543574390D61D10F5F8489A550BA47305CD0B983299EC58754E940785 3E1154055BC236BC6F213556410C8CC4CE0FA0AD6AD0E873D0A07A00919B843D 4931086C6D4EED2B5395BAF25AAA67C8CD86573FEFD625B0C313802354AAAEF3 ED1F8F77704001E5A511E0ADACA8E4DAF7D662A1F04D538F3A6FA1C3EC413C6E 6D32A8A63C6A4A24A808A99E8A22A7D79F78D35ACA893E28956F10BF9B499693 90349C6B8D6E7DCB4483BEBB641837590E9C7B0C5C0FEBF3674C7171C0F25804 DF74304711AC39448EF3C5E60A5065BE9DF74F5F20E3BC10C304704174F31EFB C3DD98DC658BCE14351B388A07E8F6575E5572D98996907BB150EFD7693AFE84 246AB182DE6E8D11BEDCFA7E8F53ADF5AED42462BFFF62B5769FE24D6766CEEA CD2599CF56F169CEC01ADAEB37218E6023640718A20A5A5DBB2EBB9604814FF3 924B27276E9F1817749F074DA036A16C4FCE381C05FF6AAC620372183565FD74 5232C90163A59C330D468F8716AE97DB7419612DD74D255CD4EC90AC4C28D0D0 54E83B378CB68440403FF8D56CE8DE3B2CA53488E42BA0C2B44238EF4E70E3B8 C2352A4F9347E409451FA40A6B018F59C17698E7084F76E7F0A360DF864CD193 8E8CA2D10CCE91570A8D88066DDDC70B941C3BDF26E0C270289ADF70CCE038AA 033E5914FFE1D32DD26B8D9F9FE53BA44BBD9D01F556C4C6EC38BDF3ABA14196 CE0A5240E89DAC1B2A6A89A6FB5D69783565FBD6DBE337B88B3B3B7A5817DC3F 2C8C655D2F905306F581555117F8F26065B9FC1FC837C357266BDD79F52482CE AFC2A9D283DD8987E387AD50C27D1BE98600E2D41D47E3656692C6E9C7E41883 56FAE26457794DAB01C39EB27861A1954BE68D004F90CC39B9B51881D7E97C0D BEC297073D217144959152D99F05A414ABC4DA8BFF796561DD2B117A5F39CD74 8F5AFF3820B67010CEAF1CC3E73728A55039E4075CD61E75EAF57099F083F12F 2D3369B0CCE6D585EE29E4345CE4407F04F2C54B9F0E5C8F0B47ACEA115563CE 66C3CB5BCF252E495A9E04E5FECE2F54EA79383C7F0A13CB07F9B1576736EECF B800434406157C4FCCD34FD0CE354A264417108C214F404A7DE0D46166F7F0B0 ED7A8308CDCB7AED60FC5755DC67CA209F8065B8FFD17DE34780428560EBF8C2 0CF6DFA37B244B73CD451B742A96FE59EEEB9EA022C679DE3DB21FD7ADE6EE86 1AE632EE90A4DB6CE531FCDEE281ED134CBA472D5454ED6F905F576799B4D98D 98C0128C7F3EAF8CFEF5ECE623BFEE001C4D7FD4B6919B6D934DF3A430435679 9135505A41117E296ECBDBA905FC1DC00840C37BA67356A87BAA03EE4765FFA6 808BB06DC14D79DCD1E3BE1625D59F2762F133BD5680DE197B90E7769D298836 E8283560CA65590E69F166475E3C0106BA30CC99DB9B5D635C12D8DA69C04B00 CEBA55FD41A1F39A9F9C5DA4E556DC7CCC39BA8E26C3AA4DEB0F6D75934E6FAD D4AD28EE6E937BBCCD99EEB3B9BD3773D16631AD3BC39343A409CCBCA1444E5B F3434C8FA2C067B32DA4FA8805678DDEC27CCCA2DDBC8A4B47513E1F8CDC8737 43E9120630BCEBBC970AF3B678506BA072E92ADCE1D641FF5959D4453831DC79 2E788677FF96EBA7D389762FD4F22C94FB589285EEDB257A6A40FAFAAF0CBBEB D32613B6CEC7A57803520DA0CA0BF8AE4DD15900F21DA2E3A0696CA42F516EAD 2B51BFBF651CB2E7BF712B531CADAC332C4B17D6FBDE6999F2321A121216E7B4 DBF26A4005F35D58453EC5539404B062AB4FCDC5741761440B9B245C4AFA09D4 2A8BBE145169BF51D4AA85B16B8641CE397D2C2665A8E99569B6450C9A109414 0AFEA7586F86D1AAB13DA11BB68610F39758EE17CFE044B1A2B837255BBE9325 90EE47EBF1E33AEEF1430FD4648DFD2414F9BE14C94E66C62AF53ED9DBDDEA53 32FC447317C0595B66ECC71D29258D67824E1532CBB7125E99D177EFFDF8F081 5D785366F7BE6F772CDE73D0699714D9771A9514E85303F5B688297002362493 86C6436A6B27894C705012067DAC22C3B427F6D952CA0AC898F1E02C5EAE0822 E6D6CADB0F6B0EC22571B485EEEF7F5B52BB80ACA5520B4A8FE10A01A0A54FBD 99A77D2E90663333095255D678F605BDD75FACE1B84BA378D59708209F3CD9E0 2A36CE1B9A8736D0741CBDBBB6CBA2FCB8F91051AAC314F385EB2E48DC881AAD D9914F454481010267FDE81EC51124773F9A0DF680E43B61AC0514BC0519FBD5 ACCF318E239BC4AC0D60672A349E2E473843AB5778970B6E564B605AB953D291 F4D26B3EB86802F3125AD6030E1DB7D5D06AED6CDA1B030F181A87804426CD48 9052D28F2D1F23FB0DBA878583E86AB1F2DEA844D5A357E984FA5172F2183C62 231D80AB4D26F57EC4D89980A40C0D7AB80F9C624E32C57A17C6F22AAB0A7D02 A6ACFD8E0DF49A95DBE43542A4E5957BCA0EE326B9A02E9FAB641F0665D842EB B96553B7635F98E6CD771ECA35846D00C335E569A0D801DDAED01F8A960CA845 41FB24B3A0E6D0D4509B04850DDDFB9FDFC65A3484FED245FB3BCF2E56180FF3 BF9B7929748090CFEFFEFD17344EBB6B9C01641033E84BFC5CC95842B014AA64 EAA85E174749BACE1D9466FCD9DC11959608FBA14E60108264854510C3E7717A 9CE6675E8F8653515494CC5D07AF10F473DB787C5AE09AED81F69E072DFA62E8 01FAC339BDC547690FAF7F415B3CCDE7066C3CD602161F27AFE25DDC16669AB5 EC4FC48E55268EF9DF6D102FD93BB77D6232FCA0B5F839C93C2CFB8AA01098BC EC2FA4F9774EC37F3999E5DB45E59918831B07E73BA5F669B06224C6B8DBB491 A4DDA844A8C83A5F64A9480BA8CFE5C9838CDB6F5747EAD40B1FD3130DE381FF 6C2F8CDC55F4BB9E3FA4ED24E1FBBDB7A8D6AB855AA06FFB278BC408EBA81EC2 312D9195938D41930334B5F384536CE79363259249F83C6EB8E7D84DE0038C21 6B998F0E9BECD6D87C4153B05090478904AC148DF321A5DABE62FFABA2F8AA2A 80FEBBEE5C72A3542F5FB12BB30F416FA47122D32F4823A65A904A9C336BB3C4 366F1DA125757426D0F448C4A1187F65B8374CFF4D622B20B389B04F2DAD8E66 F678F3C6A06BB3B9027B3F1793C2C5B526023119B6A5E14F45C8C6056F902BB2 B02EDAD0F05CD7C388A3430ABAE99C6836F1115E73D34B6E3EB970054003BC3C 76A2D0CE9EC7EC911D3F6A052F048B4760A6C2E6BB95F0E29FEBA4809B68FA1F AD242C14ED97E51BFF75CEF1290B8BD36C8BD5987A7E8EA46379CBA8121A4218 4E4AAB1EA4469C23E86672E966BBCB8C446EABCEF960A149F92E0C232DB1992A 21290E5EF450E86CCC4BFBD9D91C43CD47C2735AA6FDE68672554A6F3B21A161 2C9B092A06615A23AB5635D6ABFF6A90882BCB469B6C680714819EBE9CBFB1FF 6C93C00A5D4DA647D6BF58EEBBC53EE1E295119BFB86553EE1236B3FECE0A530 F9E6FE2B4727750367540044ED27281115E50934CE1378BF3F84B139B52E91BF A22D36D08F90A9F0B0F92D738CF9320B370F42A861AD9B6A640795C1103950BD 2245E1DD02428BC9F4E451FD797247427B1F58D557E991D02937EB6E58958C7D 07181245ABCFD04C5C2DBD6E9A3511775796344C11B3F63DDB6E211C4DE08C40 C4D088572B04A7DC1D1FDF251EA54A1BA9C1CE86851AC46D42A549E392CDB30C 924ACBDC0DDC50FF442EA1675DB0DB541E82EC7E4CA034E9A9251753D895648B 252D6A52E41668836BF0204F9B2EDCCC22601882DE8CAC1635198E4107BB36C3 FDA7E61A7B503B27062AE3ADDCE021A7C845419E27429E2E8B0D255FEE4AB364 6551DE5DC3DA48D162742CF549FD4B7C8761DED217592AE04C599D22C699001A 300B25EEECAA8B9C9D066F720B8363DF255E1401BCFF22D117488910478B9E62 C2E47C3AA762EA6099DAF64D5D5D1561BEA0463E098DA8335311094C0F43FC6C 745E5C8BAADB3908F25A1CB30298CC2B5269B106096DC82B6047EF6D7A0BB4AE 4A3C0F8185A37528BC76ADFCC7EFB1BEB29AFB4A440915316E781760647BEFAB 6039E4DC3BB7B5D55E2AAB2597E8BEC101B5CC917F7D473FA525FEE9208B7B10 42F4BFD577C2FBA7DB4DEB4A63C0E1E61862718024358BF0461471AA1378667E 930F26FED5F0A8E2D7D42B7C91C663AB1D1F17DE0837C0145E0F570A0D0B51B6 6111909CC97C8CF428B02BE3D12B7F2954F8D5491D4467ACF08D24E282ECDEA5 EBC9DE866B03C377C4025888821B76911303747836FB4241C96141728FAEED3C 03DF1132826C8C94E359D9A660E3225585491B7BACCD78E213A6CC9BC8292883 A83D2E0E784489FA249F1E9E8D0C7495F2899E211EB0C4455202D0C3613B17F9 4147C29DC468D325FC66F82EC4B07DC93A41407331E4A9F04BD7870F18B35886 ACAA4C3B67240D5CD30353AE24880D91891EAD3CECD92CE78C4E97B03CE8BAFB 88390FBEA3240C05C5CA4641C50E325401DA2B8B23AA4118FAB90A64C156BF9E 4A70E9AD0060937D00950D549F38F2559148D363409D38EDA7CA9193438E7BC4 292F4BD963E623202BE8DCE9CA60381019AD4B8B1816D8763B4195EA08588B10 5503E83D5F7830A1E95414416F0BFC4AE831C26FC8E77AE8E21E9FD588489D64 2C10DF8ECD8EDF4FE88CF2EB2FAD3A9EC4ECC766F34D4E94EB4BDBE9FEB34397 523A910E305B854C0195BB457A787578EE6A24588446552C305F0464A32B6FB4 2A29462B61829EB902236D182A68BB91A344520D03AE06C8555C6D991AEDE312 8004CAAC43A94DF0C72D684B7CA9D962CBCC08A17D0213888F1A502D69EB1411 6C058F8A477C5B3448BBDB743F849C2B4BA4C70CC796DCDC656C4DA70A5A48B7 AD603AE9DC3B1FE6607E10C7653DC5B076D9AAE360260F5D982756FB387B54AF 39C95774D205E868AC718C6F419FEF924D46A55766F041B7BCBF09180DB66D58 D699D67D780FB105B201447AA90EE38454D2C4CFBCBD26E7D4A2832368CF6908 D338E4847A408CFEE3994637D2B0EC3434373517A513ECBF5777A3EBDDEBC3C8 653F03F4513FB161FDCEDE6E21643123800383D8737093B90E59925931855AE3 E359E9F549D2E8600E282C1D1BDC69BCEE1910AE376BE81C27358B568DD2DE42 15069EDF333BF939FF12D8AF60CB69FE51734F0122A3A5197E69B3F6E8E77757 50DFF8C8AD810F5510D71A0134904A7451418A937413A976121D906EFBBA08D0 1F9CBF59C9E5952FD026E095ED2717FE7A1234EEC42498CE4FEAFCE75FC66676 6E6D6936894585C9628CAE7BE79E1A6525E67445CB0AEE86B26F61B02214A978 5C082BDB8EC3281E 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMR8 %!PS-AdobeFont-1.0: CMR8 003.002 %%Title: CMR8 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMR8. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR8 known{/CMR8 findfont dup/UniqueID known{dup /UniqueID get 5000791 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR8 def /FontBBox {-36 -250 1070 750 }readonly def /UniqueID 5000791 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR8.) readonly def /FullName (CMR8) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 40 /parenleft put dup 41 /parenright put dup 43 /plus put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9928A7C95D3A6E9B 8E92F84CA0AA44461D2F4FA0F8B81C6F5B7BE98C9712BE166610465CF689DFAF 27C875C029C0116DE61C21DA0092D029E7DBEDFDDEE3D67E6936623AB53FA2AF 18BEDDD7AC19A19CADB6ED6CA7A26E6044BE414FFF59C0B98D5819A6B881F9AB 7AD0D03BDD5CD309C67811D5CF0B93F6FDC9AE64F74ED4E81F2E18D880BD842A DAFD0BDF06300201C6946087FC0B999447BC370200BFB8CA420B668B32EBC242 6DB1546A7164CF55B332FE9D239B65F532B69EF9F4F93828A44C8F5C526126F8 B7A369114CA68D4F98638121F4E17F351723D9F1A902FCF087F94AFD23876517 2D15B482AF2D68C3F31FFA864E031596E597882578AC7FB0DAE2A713B065B374 3E2E72519ED6D50CBCA40A7275A7109A4F3ED8A4566AD8832890D3D1F4899850 9B757442B7EA355175CD5D6D8B4152ED2D7EEB4CE30F174FF672140354046A45 7098EC45B9DF3DF5CF7B417E201DA88308CEF4CED8E8903AF24FB8DD0187352D 25738519ECBC70304F8F620CC45D2586619205DA3955696FAFFE2082402B3502 CB682F410DE5FFE80A4DA3D3BCF02E35BD577D0DE55E7B8A33B7A2FD5136B5DD A0BCB61F8E7F4363C21F890CF287304DDB8FCE7FE207C0D160B81E7EA662BED2 DFF8C444E19C91E72254257CD87240A70F1A964FA54ED9ECF27E27A57DACC3DE EABB92C085030870C6CF5C40B6E47F5C0AEB30E84A73ECDABB2D754EF6EA28BB 16EBD6636BC288E62F4A38BFB55F5F4DD20FDD77D767F6CB52F9513E8EB75413 07F1877B2C01278675177499E4E8EB09F2657821613F5C7643FC064293EC6E9E B519FFAEEA36B19C9D1302CF91FCBF87FCB57C5F995CB6712BB3D8681EB6F05B B2A4195A3C73CB4ABCCFB958EAC533BD89560D2790CDE1444C0F2E4EF27A529C F01052964E56F6D76A190E5FF45934BB711A3406284AF130D4DC0D8112BB3752 762CA0200CA262359D4F54C0CCFA9A50DE18C7DB14419E2990ADDC4A54B94978 D9174CA39434022FA77FB30179EF805E2189C35919F5EBE215EE2A00B4407826 CE56329C5586D8B414770BA5D45513C3AF1931D632FCE69B4CA504944E03362C 74A1177C6398A61A12DAA0F156543E2A8E9969C4308B7ACC21A5ECAC8F172541 1B1316A88C0C163E574FFD3CD22FF08488662FCF2F9344BC25D02146F36CA6F9 E2D0130C654B7485EEA9A110A33AA0C769121F81821E9A2BD062FAC158359D44 3F9D9947200EF1EDDD5860F10438B162A69683957300C75AF7546C70C97AB2EE 37EAAF0089E2623F787F252569B06C665FDB45EC9681C0774ACFBA76B98C4E89 7EB12AA5F8798FFC110B49C25E3A483ABE83B0BCC6DF0578403ADC369E013762 C9D08FC94D949BAE636ACA9F36F4E3F02296775A062077B011A705B6F1784D36 A926622CB3847533D7ACB24A4EBABB14593B5D8E1DAE2BFEF8A51835C8D4E76D 7543C126A4271C59A5881A5AF89331694F84489CA66725995DC3070F306EA447 CF30F63CD476A46D528EC1FFBFB8EACFA2BEEDCF54C92CE2BD26DEA5827186BD 3A4D1709415CEE7D51D671357B4A5D11E835F63521B9824EE5282E58F05A8ACC FD249461181A38C2F47BAC4E79BE368D64F886AA493C61CBCB2ED401C8AFBA61 59CA6F6216D941A92AC52ACB3D7ECC28D6A58EF4CC70BA6DE23E80937AB38E89 6F05FDD15B954C0826636267EDAF9F2BB466BF79D2E10EED9B04297E6BC93069 79581ADD1A9D9FAE9306F46AC95B98C60A2E53D60CF1AA4069BE301E17E25070 F98DD67BD8642B1D07571A32766072E48BF27E1576FFEED300D7313A358A823B 49C8F135961B7E259095C9BB67F996CE0B90E95344F203922F47E11753F70D38 2ECB615403490310CEE6C03AFA97DA2F47ED47125D110FA69725BA0018F6A40B 29A307FDB3E52322A77A0102E6F57654CF1E96A134D13860D83AFA0A41112D3F 2247A09ACF7D06713BE443FA27C7E7220E875965D53030FE7D2D62EFD2F1DB87 5FB091FEAF599BA8C5167525899E578AB341BFE2BC4E53A047093168AE189237 EA55F055514EFA939DAE9E859CB5FBCF37D99484F44FE5AA5FA386B28BB642F5 5DBAF059A50FE96C7C6D834531D64F1F2E99AB2E96EE74D149178B1C0618495E 293973D9A03E1790654B67C0882376ABEC17D74785B3737D81644F28B3BC6FFF F92FE29126995A07E0BC5EF3A4B93789A103C428943E045B8D1A5063AE71E806 568D48072E53DEA85253B01DF0BB7367A6BE4DD7BE514AD74E3F77C825ABA405 64DAFA25EAFF8F63344B5F6B523629776CEB090B546469F6A6008DE43072DD3C DEF51F62731037D1FBD0C038A1E9B669849EB3BEBA281624F13D20B61917A109 A0A7871A73F7BAA18077360B38A4625C5DB9AB9E43BDEEB856FD0E2D3AA2E075 267B978B9EB47F2369302E87DBD5D5B422830BEC32411FE75D584C58650EFB1D 136FEB92B94BF8939FD63AFB7349C7511E5E46AA7324F8B1FFCA9C2A9E9720C0 A720918E8E860F137567D386AC29870FD990BD69465B3A3D2A0ECF2753578AD7 80DC87EBB319EB5AFE0B6F6FF8616EA30C51425FE3ECBC5F8D0B0BEFDEF32FA7 D168B4E85C804B7326A0942CFDE732B1171C643452B7099B31649CA2C38B62FB 46EBDF7180004C549B53F88021D029452C2B37D8C565BCDB0B11541039A13C0A E45D4B68C7907B8BF08C6F41F564B62BB554235D50330E78DD02795516D969C9 66119D718798120442CB7EB9877FF84EC69DAE25F8559DCE3BD8042959F695F8 2F99845B1B5680DDCF181D806CC4903E077D1FF5E60918EB34C0B1E028422B71 CA63EFBF3F4F3CD813CE831EB54265A555BDD35AD7D723F9CFBDAB29C54F8AFF 2D35C6A3299E0A2DB470C7B141B1E3E10DABB7873AE302926BA8743278FAA8C0 DC6174501D6A289CF980A3F55F2DD5C3A514E7E7F13133C35D2697D64C25130C DB78FC997968D6B3BC929E8A31B6D212C5128E4412632BC52B3A1049F7F2F61B C74AE9A6AD19B9E2E240617E2882F7D29ED3A4279439107AF9AEBEE47CE85DE5 CE9595A96A118ACF1EB1F5929930321AF7732E351E18C6AD378508E37B4C327B 0E06AAE21278AFA9255AFE5C022034DA2968D260879B4B38E7EE2E11A593DC3F CE71ABA050C004473324CAB6F3C50E85DEDA3E9A27388D8FD3A8F6E42A79670E F7549CFAD4CCB337A6E0BAA4846ABCA059F1E1933CF11DC0FFBFF550CC4A1B47 CF7BCE0875FA747AA854534960F757884505A5AEE0330179A9547A4AE3E68479 7A457DE83326DC30B67F27CFD4AB697601CEE352F72F0966B3CEE3EA24683BEF 6D23AD51B8432C3F0DD0D0F80791E1091F38988B7A54E466A9AC7810DE8B7893 6B0AA6356597891D56190A7660BC7F657BC559E0525D41EC228078F2FBF89C6C 72D666DAD838CBF0861FBF0A1D4ECC069AA49DFBAE5C56B781A1D5D79DAAC256 13E3F9B928A2394FC71691E4355642764459714412D6F8EF803FC5F7353822DE 6CCBB8FBE5AA1F2C7F4D384039D85E7728527DF9FE0239E2CF8BCB7411C000B7 1FE660AE6A2A19229E5E8776CC83EFF3C27403935756463EB4721C51FE0B1197 86C2F17842A0FB639F28083DFD4F1E86D7D3BEFA922514ABF489C5CCE93D6F72 D2EAAE14F6CBA2BE4BBE7D7EA8EA19DB3A87350D4A52064137C3D15A5B05B03B 70B1DA7328D10713B83974C390C3270AF5A9A47C0BFBFABB9F31063B0CCFBB10 0F236C74446688198EFF039110F6FF42FA9F82D463AD3958B5FD205BDF85DE20 FE3F0C7AEEF350AEE6DBC1DE2E2DA4F4599956F59D6F121F7086DC120416E180 52DBBC4E56C09746938698860F30007091E1CC0351B43990E47208ED495310F5 7BA9C6AB3CA10A3F1B318FD47C1CE3B9FF1304321F9623E32D315AA9CE64B35B F841E6C62B5B2488A311C94937879E5E0E170FA77AF0AC75C5E6E9F3E8F825AA 09C1702682E14FDFA72D27901C5BDE009B1E52E8C4511C6F6336251BD45261F7 401CA3DAE7C4B0CAEB91B9954BF4A97C48ECE7FAD401351D59DDAE9DA94E2335 74A2B880E4749D3D7026CB5299F16C204B6E00A20A6619C34922C7D3FB50F127 3157CFC08DCC5164C8023CD1B6C3556C73CB8E4ADA845339CA9BABA1457ECEE6 ECB9849DF1F0FEBC89E5F97C92978A500196520839CEBA6C0FD2E3D27BB4B4F0 93CB2BB565F4627C6DB62DD0E084E627D69B5DEF42EF094381B62C0D67EFD197 301B132420F51A41561E6106870147E0D597078435BE3819ACF0DE28AD779847 F3D2CF667DA06955D53E0204CEA2935E9E984E76963D3079EC092031E2A10E61 1227E5EE6770DD4D745A52655369EBA06A19BD7D95BBA271E488241199D1008E 36EA99F8DFD2A9F87B06B070158B466AA4C6EA3BA77DB0F853F0BF9A304EA291 34069714368E0B94DFCBA3BE5EDB6C8204DFA7EAF5C3406F60A7056407D1BF6C CB85C1F432F97D821F5518BBA79AF8453A568FB2C2D025A70CEC75F46C545011 ACE3A99B2582793BA1DC655230AE2EFD24DE20A01D4A441AFFAB7771F223FA6B 9169849E727E494247F67D6E1EA9DCA06A082FE2094BD548AD7F08B565145634 E7ED832FEC1378306DDC796303392ADB0CBA130B63B38ED57B7828B47732853A 893E8836FE19CCF27002AE92C2B2CACFDF8A42F1B8066E033B965D2E9157FDF8 E1264B40813C1A4CE424274AA3528A4F09B3B53DD4D23789A68B3D17BC1398AE 0ADA2C2168427A49846DE0216908C2FFFEF4F13C1ECA12AD341E238EE46E6DC2 B71B54C52659632911F901660261E493AE2483D64E119D9924489779B62BC9FB A052E822FD8D83178E09ADC825DF0DA07FCE7AD68EEB29FAA275A13691B4A5A5 B0BC0499CD6307610CD6209583C1152C559A2760823F8DC0B9B990BFFE7B7E9F 3969B968AFEAADB9FC0F1410EBBAA0DB979CF153F0B8C978405F8E6F2B6406D7 AAFBF4A655A15DD6D1E9A7EAE10EF89264659B09283F50B734236885FC09FBE5 98D780012FA77FCB19F15BDC522CC7312546C0730EF5225DEA8C22A3BC6554EF 4FE73B9AEB5C2F7DBD474221760E5F539A064AC450591BCF3499E3968F2CBD6B F15BA2B37080A4129B66D4C2188524F025414F14DB3F96049A8B0E5EB2BBE7A1 AD64A988FE875FE4FE5186BB4F5DDA16983CB052D474B7D72F3E8965663EB50E 015C72407C3437142D3D7DBC055FA627139488DBC5A0F98D805C2143D99F491A 167E07AF60EC9F17C36289368D740B632CB919A0E74C412B76CE7A5906D5200F 9E79CEB9C65ADA3A0F23E8947E834AE7A329A9F0AA7A6BF545B1D7B4666C6522 CFF268634EA06DB3A82D91A4C0A9B227E79961212881A54A6762C335DE7E0831 130C45D94394D21C049B9D189ED955438C2151514F17BFC67E431DD9A8349202 2F616AEC1C7B19F63D5000EB4771370924BD4B9053FE78B5E4A244B9A149D66D A8BF3B398396D2233E92E4A5FDC70FAADEADAFD255193D688842DBA865CF6154 C9348D590F3FEB135D4B7BD4D76A52CB140888247CAFAB25ED51F4D187041CA0 ABD956F83A5661CEC171B52AF92F9ADE27973B560C802E1E0FF51C4003D1289A CDD09F8EDA8AFDFF666D35418CEADF3B0BE298F0D1E5C8E024D6A2017A7E71F3 3A9FEC9930F1118101E040339F9D41379170928DDF5B5875212B271DC843F612 E0C21C67263186E3D6929160464D4D5C8928E14D0845762C36FFBDE548188E20 3B6BAFE5EECA0385142F01216FB8A90C43A472C1D4447FE5C7C78CC088FC72E7 3FAFA062C338BDE8A430FDF1951B107D8D73FF9376FACDE5900BA362C66F8C1D 947F9545C5C13A53E4479B1C1A50472C05E8F8C266C6D4F4EB08E97B3B1BA972 26973B844545089C5732322BCC9A5A8FC972FA0D7DB8BD85D2F515ADE65DA479 0224F7EA2276CFED0B75B2C23AE7377F86F1F6F205D6FE19377D87E782143697 984E731F83CA888199CEB425643C259D4FB8B58DD69A96085198306494BB497E FE7C9954EF35B679BBE3847A9C73507874F71FC97665E2A58BA41407A1745247 44A79B588D969D11CE4B863CDA655DAA53CEA5C3C263B345E782006CE9831D49 603D2D95DE9E370D617F5928BA416C362BB2B4DEF16A5D44BD24B34257765F3B 6223B3F9B54DAED69A90C7050AB97B06693D253C6894CBD7B497DA449F1D9B7C D91B421891EC0724F59C82B9CB288DC42F2D2D7A7F22EE3D910E15953D7766AE 276DABED3820390BAF2700C4653E1C77FE63DB71A66D93ED293E25B8412A1EFF 809554BF04ED0DE83F7F190883ED793803CAD2C34A66524D3A580ACDF3C13B22 08F18905E7A4A16DA9ED2A112462FB9FFE481EC2069E484E8BBFC19D594153B7 3DED4C11762223B7586483B06BC164D824D1A6FCAE80A35DE0DB8B33396771DF 76DC5C05578EF1BE00A70BAF3D951A01C87328DB2B0DAD6E1B4C21F37D1BC0C5 A929BDE5EADF20DA60C4DE2E3C151005814F24824D33B95F700E09A0207EB602 3EF60DEB1622B91DB99A855A8F1DA96358F05CFCEDBDDDFC8446AE3391BEEC41 966E594E28D052DD5ADA49DFF65E79540EBE5329DFD86C23CC800F95221B9C18 CBBF941D2FA47EF1EF59A89DB5DD188E75EE94AD2A79E2221107E5992C00D531 2E00B544895A9204656867E3DE9D4CDB64B920B5CCA9A73E6514B36CABAE01BF 94C15603B86780190595560F792E5EF01650074EA4A9BBC6ED284B9AC2020641 DCBCEE0ED27FE58171DFE104EEE4202759E594159DF45113C00236127A46FB35 9EC705F21C0E456C1F0F924594C09AC64D4377C5FEEF764BA4A09ABA8D09DEB1 FC13B0CD202B2F04CF5D73DEAB65C36C2FA7C0DC236BEEF6D23BFFC9C493DC8E 1831F19EEF81EEDD976E43BAC6B5CED13F901DE59835FC75490EA528A72CEB77 24C38B258EC38B9E6B97F85CA8C10D8809BBE55A6FAA12456FCAC786942E123C 06D1E55F7ED04400088BEC968BC5081DC7A1B1B65166E7821679F76694F235FC 6854C8776AF855B83445D9FF919B1D80E98DE0741D06D6C5EEDB3E3EA6392530 F1BA817737D8162F7B3A36AC2A03190CDEC654383E31934C3E0A012B639532C6 26FEBE9B412F1C92D1943B7C18CEF510729D501349644C97F087F2F840074AE6 D8CD0FB2E620FFC908BFCD938B675A0A4A687F7FBE8F3DD06A62D7B6DE7DF3E2 49D367D60B10061EA86CD512F5A1BE8950D83C62695E130128E0037B62552D17 064319BBB9B1FAB9D79705E5D68AAE9B36EA14BF1A59A863BDB8DAD9AB5D7B8A E30E2B499F952D65877C8E38EDD7DB29F9579D09E629AC188DB6A6403AB4BA3A D358B3770D727A2B77D84B6C9EC17E29D88E3421F9B7D2D822EB78BB8BB50692 8C46DD6F9BBEF2E848A2B5669B200019802AD19661537A84D3514AEC5AA47445 2C791E01DCEDF18D9506367241255FFADEEA6183F51A9F42448A7DE413C08359 52DAD2A60FD606AFE14702BD3B0EC448720FE63438D020DEDFCDE3582FC31DF1 17B25FC152789D2F17FD60B8209D292D2152DCF8D28B5ADC04F6659BBB746CDF 145163361823CA343763AA951C640B5D4A99B7787105A1609EDD6A596EFC3F6F 2FC33D0D499DBE56C6668E137715D435D6B683E0113647B2765AB0F3D98AC717 5B33C3EDDE18506E73B4E392B022F30480BD30F59B2E3A59D93017296C3156B4 B5722E1955777716388AA987B2665669716F866FE6BDAD5E74A523CC03915F26 9B7B231F5D9B1F61DF7CB01ED3F27070E36547B263855DF5B2E3ABD2ACC440B9 0826E1D4A8D8F7E785BB9897ADE39ACBE77199001D9B2F8D9D073F3D8C03708F 56A8327BB7FADCDF3FD7FCCB0D5B3F70EB519DF33B0E56080F43D6A5ACE30573 3BF769E7130389A2C40AFA431E0F19E04A1F924851863BD746CD5878DA767B47 6E854D4252488B338255936D1A6A0DE230C4C2CE83CD2FB6E093D7E20AF1C9D0 89E0E11F72CA84A07EB8B31116463D2D0836EEAF639A9FEDF9C702CE30BA5CDA 8FA344DC36677990CA18502EA30994EA77958709BF2E6C3E62D4026AFAFE49DB AA9268F3FFE67B519B46C8D467B18309AF41A25A8102607D3E0FFBD426E3022F 108D363A9255B1494C820C4E930076827DAE91E24AD85CC6251722856894A1B9 4E30A94A2E39F1D602AD93DE20BD7BE909FDBD62F05E82D85B3C99A8DE33BEBE 7200B1E9A3EDC07190170C233BF5D77D9E573A54E8C194DB8ECBEB6DB59E17CD 8C6FF412274287D0864A49EEE26FF26867936056D5BAB1B2ABC782868C9B3018 99BAF9E0BAF95B6576BBF95A3EC17638C5BCBA1CD9616A5871828A7E97338CB4 E09FA58668D8A88523CF7076FBF64EA9B5AF831A237FB7E879B60E448B8604BF 902A19121FA9096BED548AFC734080CE22D6D29719B34783BC6BFB157F9E09A7 7A41874881968DAD3A4CD9C66E1E3FE0783F2FF8B4486BCED8F45C12C68BB199 0AA5FFBF62453B10B6B5A9F30C4E88416A8D86ED5669305FFBCBC4C58B3FED6A 5B9258D8C9502660339F07B8BD16B630757EFD1147418D3C3D6E8C1C4B175019 2B34CB1DD5DE4BC7CEC1FBD83C17E84218C08D10D0CE1ECE507DE60B7DDCED47 3EB4326591833D161601B7D6DC005FE5B137C0B30BE823BF404B8B6CE2B43B49 BD21F101C2DF5E93DEC539DF9B7787B82B85B5C82BE60EFA6247DCE78606D615 8C8284478FB098129A3B76B481CC37AB27C47534A4C46A1FC110FF3234D8E390 C0A1D5A2AA153D77B035F32A94C5559C27A1E0836BC606C31602151B7C336860 BBEB44467AE20836593420A0A1FBCCC4F30432EED848BCD95AB12C314054C3F7 680788366B249AA7E3DD9C4A95FC062873F62E69307C468261517838B4EAA65C EC9F42579BD25566E2F30045F745E9AA66EBC29E2C8F03288217CB1BC027BC9D 8AE6DCAEC7F0C42CC2C9A76A82A8D737D0692D36A2FFAFEAE0421C16358173BE 6242857DD5BD6899B2080BE789ED47112B20F3B3F7E4A30C133EA451F3383E53 4EF6C936DFD22056C5E80871E215DAB53F8E6BFE01BBFF255203BD75B65986E1 F4FFE8551BAE95964C0535EFCAFFFD2495F11D13310D113CB4E27D2088C6C49D FF20FE6229B3E27A479F210571DD305059F92B0F79A79B643F9C95F9A167BA72 91B745346C9F2DA7F880EEE9E25896BDECD31F30F87927EA9BE02FF7AA0DC451 9E6AD409F547EC45D6AEBF7B02B652B8482B5F978A27AFD8D2030ACD75782124 FD0BD8B728A8A546944798503BC317EE7E574B862576F548CF203FDEDE8223AD 9EA2DE5272C543AEE8E59D4E5D593964ADB4A85DBFB34DCD56C5F96FE1D48D7D F8F9F954093F1AA7461630D08D05D2B2C41D3BCEAAAC99FDA9A6F02D8066F1D7 32CB4229033BA2ECBE95DA59D3F587FD64583A10834B7E0739F6C8B01581977A D63474A85D79AC6902FDB1872D3EB891C4CDE565FA0BEF4B0176229A930CC25C 771694859A764DDF231B5E6EDBCDED345283A3014D23749BBF607811DE16FECC 59C1277C17F45ACA74B009C3830BD417CB1DD2888ECA7E2610021A3043884C00 5E2EAF886E5DA9A80E4D029E79D655ED7D6130F4C0F16C 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMMI10 %!PS-AdobeFont-1.0: CMMI10 003.002 %%Title: CMMI10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMMI10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI10 known{/CMMI10 findfont dup/UniqueID known{dup /UniqueID get 5087385 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI10 def /FontBBox {-32 -250 1048 750 }readonly def /UniqueID 5087385 def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMMI10.) readonly def /FullName (CMMI10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 58 /period put dup 59 /comma put dup 62 /greater put dup 64 /partialdiff put dup 65 /A put dup 66 /B put dup 70 /F put dup 85 /U put dup 88 /X put dup 89 /Y put dup 90 /Z put dup 100 /d put dup 106 /j put dup 116 /t put dup 117 /u put dup 120 /x put dup 121 /y put dup 122 /z put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBC7878DFBD546AC2 1EF6CC527FEEA044B7C8E686367E920F575AD585387358FFF41BCB212922791C 7B0BD3BED7C6D8F3D9D52D0F181CD4D164E75851D04F64309D810A0DEA1E257B 0D7633CEFE93FEF9D2FB7901453A46F8ACA007358D904E0189AE7B7221545085 EDD3D5A3CEACD6023861F13C8A345A68115425E94B8FDCCEC1255454EC3E7A37 404F6C00A3BCCF851B929D4FE66B6D8FD1C0C80130541609759F18EF07BCD133 78CBC4A0D8A796A2574260C6A952CA73D9EB5C28356F5C90D1A59DC788762BFF A1B6F0614958D09751C0DB2309406F6B4489125B31C5DD365B2F140CB5E42CEE 88BE11C7176E6BBC90D24E40956279FBDC9D89A6C4A1F4D27EC57F496602FBC4 C854143903A53EF1188D117C49F8B6F2498B4698C25F2C5E8D8BD833206F88FC BD5B495EB993A26B6055BD0BBA2B3DDFD462C39E022D4A1760C845EA448DED88 98C44BAAB85CD0423E00154C4741240EB3A2290B67144A4C80C88BE3D59AD760 E553DAC4E8BA00B06398B1D0DFE96FB89449D4AE18CE8B27AFE75D2B84EFDB44 143FD887F8FB364D000651912E40B0BAEDDA5AD57A3BC0E411E1AD908C77DCE3 981985F98E258A9BB3A1B845FC4A21BCC54559E51BC0E6C22F0C38540F8C9490 88A0E23EA504FA79F8960CC9D58611C519D3ACDC63FB2FBCAE6674357D7F2285 4BCC9F54D3DA421D744D3A341DA3B494BB526C0734E1A8FC71501745399F7683 FD17EC3044419A88C3979FD2ABA5B0130907B145A8462AAF0A9B511D2C8A7C7F 347FF6AC057E6512902BFD2918E2CD31DE615F5D643764E900B60287670AE18F FDE15545D8BC69591A8CBBB275AFFC9B14BD68DF0AAB32268FB84844D4DBC7BB C591C1AC5102C50A9C7BAAA848DA88B0519F0F5F0813BF055CF0E3C86F633A04 B779D2E8E656DB1E09A66A85FE21CA8BA5523F472A229E83F2C4E91ABA46C733 F3C7B5775B06C97782BC225C46385BEBDC61572458EFC5CF4190AB7A9C1C92DA 29F84BAACF552089195966E3AD9E57CC914D20B6962BE80429A16D4DF1ECAA66 36C4343FADF0B2B48F12E2EB8443C4AA29D00949255F3968617F98B8ABD4CC12 048B838EE243A21AC808BD295195E4AE9027005F52258BFCA915C8D9AED9A2C0 80814F79CF943FBE3594C530A22A92E11BE80FCEC1684C4F56712D5846B0749C 9B54A979B315222F209DEE72583B03093EC38F7C5B9F9BCB21DBE8EDDAE9BE8B 75ACE6B12A31083AC8348EC84D1D29D2297A266284B7E9734E207DAF59A25F4E 4AA38509E993C5394FED76E6A2F25462685C4C86C6E8CFC9863338EC1428BDFC 74616BB1BC8948B0ED4C87C15B4405F3A7796F9DB3798FFFE8BD0A94E834817B D5E9812E308D0CC920470A6F2CD088FCB80462BF7CB3F039A7DF3DAF5B2B5355 E083A385CD2EAF0FC181E40E96DD7E9AB9EF5C7E6866A13B8A54718E950FE097 EF0951A357114F18CE9933D28B3A77AA71E3CE884661F13284BCED5D5FD1A86D 543E588FF473DC2CF9A4DC312500135F29C2D0174B32018C8DBD40EF9A232883 710A1F2AB2CD11312300ACDF789A9B7B93D2035D81D1C84984D92D78A53A00C6 EDA94B24BBAC1AD17774A4E07E6F74ABD90415965616AD540C8ECD8C3A44EE4F 7F4F6BB6238C5062D63FA59B7BF08BE93FAEA70A2AB08FBEAAF7DBF56B95FD93 03CA406543BA6C9527D0DF01F5108D31A51778A5EB1C93F27B72B46146A353A2 01CACBC829603B9989A87CF64528682CCBA0562A8165B185C58A5C6BB72F5E89 500ACCAAB8ECEFBB2640E99EAEEC4EA979AA793D013D61D8ACF8784FF8D9398F F6A252A709324FB39509F0B3A4E725E82F53543383C6765BE556CC897C758208 AA3AD37B0406E4A79F8F0A6C1983FC73E71CD858C0DB66ED66D5D992978614EE 1EA91EBE191E082EBA1FC040AF19A2202575C2EBEB8058833E3520FA03D2F915 85C1ED337E457B9FEEB0C6EF2735EFDA6E0D05FA641BCF698AC6B97751E8306C 4DF00A39B8581FF53DB8F8525FDB196D85950906CCB59B8EF171349AA3B567B1 6A00819947A995FB383C3C1709C9A2C113B2E40BB832B7D4A0FBA0B16A2C455F 55809CC425C403E9668DC66BE45B71A81C332FD4DB279D22A2959962304A8F18 085893DAC61317D24A8F198FDAB95F3B86F0AFD35047B868A9A17037A2829A02 BAB042F75F349E197A7EED41984C2859754CAFD0251439921C248B463B516951 2E1322C80D73F9CBCAA63A585450275AC2492E4D3FB78E800F788254DB5E610D CF788DF5C70FF99892BCDF16133E34B24B77C8F097F546B87C603DDB8998B66E BACB68BA27462AF54AA405682EC96D701F0D474DECD5F95CA2102DF639EB169E D518162C2BAE45FF698B6DE15FC6E7DE48C336C40A670FD26952A6BAB09115E1 991F0073419F2CC2A1C08BE91096936AA0C37E4ED3CCCEE235476074B8FF1125 6BDE3701F85532D8BB64CCC927CC335281C95EA689706F0AC717DC2CF680C754 E5EFD7FA4BB8880B2B727A964C876D4A223069D4E6001771F0E23EAD2A4BBC80 E76675297B2EF05F52BF4E71B3EE2BE3048CF088C79540113C66AE98B2FD3CB1 B0741A215FD070882C52765009D7D711DAA2508F19AE7DDA15229A856AC49BC3 4DDF40814FF96500E4B9B02D412E94623C5FDCC76C0FB8E42DF56A904FE49D65 1DA7C53901B2EA71AB658A464D3ABDE27D9DB8D9E0B48F64E61A2495AD5D8DAB B5E72424AD017DF37964AF911BD7FA21A5EB4775DC8E95EF0C0EB856B00D89D7 8172A1DE8530767D317B8256103E53CFB877E10686A04F5A08F8DC58D843DEBA FD5F40597588663D103689F6EB3EB14D06E18C8078F2538B43E712DF491FC5C6 AF639256C8C6134B64D560D8476DEA6329D995E46CC4BC78841C59E73648B47E BFA7DE0846422F738454AE77E822A083405289247BD7C478BE4974F742CD6051 E99FBB1D1B3FBABFEE855174734EE45E87D0AADF32B1283B911162A9955847FD 38944D70584FAA6B1A7191C5C134B73F98EB632B69E2F0C0F94156787C34C8A3 7622A029D58F9626B74F8A8A1F3803E0BC20E0EADEB1E99B70F1BD9F980FB751 2A842843DE42EB142A84D5D3138629AE9EAF6F3479C423E8829C8816FA6EFA27 DCE5580E65AA9854B1C64163DC318420CD993C15BFD76A8BA1182860A6B03D6D 22B8CF43CFE6C8AB27C64842E239CAE707D3086BADDE1D7C94E3BC96319470D6 8D26915C575CFDD03271D6BB9DE86A0EB6EEA6E768B224A626C62A9AB48A6EDB 44F70BB5AF991CDF9736D65933E81CC57A78F623F33EC9AF535F2F25FA4EEC90 D50DB7E87F31E971A75A33A301CA6013EEC5A4E179D695B33DADF2C98364434A 42926776000B610E17524162253F6FA638D6581C18F99EA0BD1D2E24D2424ADF C05010D08192485153DD03930C7BF45237593E484F9851E6D464FA10FECA5D9E 0C8CCC97DE029030900CDBB491C5CF226DBF903CFE7735D939C3FDF3A20B70CE 66579B28B99313FEE914E295388C7BC8E055A2E54EA3A8206D3C8F4F7C0BA5E6 E519419FD8CE215F7B8E9BEC604A9E3FE272A0328A24E31997C8A91E0946BCF1 6943A97CBED2AB9FC636B49828BBB8B89E0BBC2653796431224895ABA5DAC41E 1854BD9764E86147FD7624F736F40DE3B7582EDDFD15C2BDE3F22B5A54D7DF10 B87A1301CE85CFC061689A890A321412A13314AE96DCD3EDA75035FDD8F4AB9B 897A2C68263A68457032C469987970648BA2D88B1C5375DFEAA35A917B8A952E EE670427942AEDB3CB599C5746180E392837D371E15D860620ABDB6AA7772C40 A5E346661673ACA530BE3D8E3FFB895E5DA3DC23B1B43C080C77F7E47847F0F3 F3AA5CA9E4BF75FC5EBD18D19F21A7DAA3B11CABC6E4070A15F7DBC8B05EB6AA A02EF1B078EB66D61D6AFE41DA9B36FE7EC9EF94D1EA26282A9871E2CACB3126 2AD49C2D9B50A6E47D8F2CCAD50992D1B430979A45FD9E76182A19964BB2A1F6 51779A2B258DC1DF4C2F3074621286831F3848AC152DDD2BA561E6586ADA88D3 598A2CE2CD048F027CE0008B828BD915887D7785341E8305DF2346ADB76BE99F 87B02173BDC334E9221C8DF54114A6B24C1C5340299512FA6C8C51AB4C8778CE 178CEF531C6D1B5FF0A1BE8EFF767F959BD4C345C52699A29A17B2A230842BF6 4B011217D6D24EDAC3F6D53482786F1CA33169B90ECD499407D37CE9B70DDF78 7B7547B32952535BA9ACD1E244447AE3FCED3AF28717083CF9590A09780984D6 AF0743C82AE4FB3E2BB2856A4153A3967A023FFC35382D6C22D84A924900B6A6 3DDD400E6D2418DA6C27F2FA34C075C902B89EBAE658B3C9A18EEE449DA5A379 337DE95CB7AB3F0970CF1A5D8FAD8090E495570FDFB2FBBA79244780D8035547 C5A55BB21A2270F724BF5D442CDC5BB9F09BE0CAE59B1C2270F0BDACE698F2C5 DE8F66BFB9634904B161F5BA2B1950048300D69BABD312D58D89C4ED527AF7BA 7DA2478EDC2CDEE3473DD8A8ED9D891CD1FC21F23013228BB3281B71FCE959BD 6F8E9059D682A7FCC5265A0620992D4FA8D78377EB34CE3ECA070EE3707239BC 98907DB0120CE42ABA32CF97127E28382BDDFD685674279F588D4F951216C355 821361790F64C2CC720DE97E8ECB57326C43EE47367628E05769E106868B54F4 C33C9951908DF6FC4F5ED2C7787BD8FA591BBB3E9C6C1DA94CC5E38D9B20C886 7D237572FF46DD896A4D6163408EA6CEFAC398EE041EAE29D577E75326CA17A6 B072D47A7B13EC441CE6DAA042ECD02134CBFA6809A435050413817193DAEB16 A5882C8AEA44BCF36E74E9ECCDFE7E19FF5A5DD7A94E5AB4F8702C3DA7F42325 23C808670A0490F5B373DADE40814FF9650241D3D69C91FBC5ECE728F827D9BF C928602E05477903449E079164CA39859C4BCA60C579F490AA455F82B5050BB3 969AFB478E0D4A257B3356EA3CD62051FCE6C6B1929CFF85BFDF166BEF658E10 3A55E007F38EBBB248B3F0B8ED1925106B499B762E45113AE1AC9DE09644C84B 9C08034B297314EE69BC32DB6E7D7FB9913CE5AC17E7335979E9DCCE2BAB3725 1976155551F9706A576FE0E3ADCCF72C87683291528ECB749CB0ED291966E239 B5E3630676BD409E08F85BC1AEC9A2D4135376284A96EA24431243BD6FE8B966 95F11A4BB53F392E0AEFEA623064FF8A7002367B0A515635CB2D2DDFB9B4A8D7 FE721754E81BBA548848A235B91AD4E4F7DB19CCE2F61D277FC00AB956EB93BE 44AB4970CA56BF59506C94ED160FB1E25D3DF2988A532BDB787BFB8539D22986 FDC378AC31444E63C4727FEE121A43751043849E6DCAC5B59D0FC703AAFBBFD4 E8B7C268F21615AD02CE9DABEFA27B5FE6A6441B619539CAB1F810F1263447AA 633F5DAF483752EF1A0421740E3A811D2D2898CBF53E7F686C9223FD7235F02D 6F90D2D48CC20AB87778DE3C6FB335E0F0EC20B5DC5B65223FE117526DE2C72F FE839DF93CB2A7D66CD900CB325F891E311BEC932F703FB4FEFA29DB8B9C88DD 375EC71B3D58C7BC59ADA91971A3BDA1ADEA629CE6CC92BD542CDDFAA7706FB2 6CDDE2DF07E56D6741916AE8E8744339816F3E6C38062747AA9FDA2A2678A6B7 EFEA870AA3A4D71B25EE3013EAB1DBA34401B867C7A41AE51E0421D41D3BB83C E120C8FEABA6E5DEC53A689C21426D4BBCB68CB37568761C360E6D4E3596FB7D F4DEC7918E58C0293D12D6DDA7E9DCDAAD7C939F55CD1BC4A228B31E9A904156 DA6B40B08E6ACE674618B768DD681C772A3E55FE096CF949CF3B0460ABDCD891 D17B37B355B29AB5137899C036F31DA026244FA25FB798FBE5105BDA29F46538 D3D3AC1001A7BCECE64DE94FFE6C354166A0F97256137BDFA07F6E22A3D1D2F4 9588DBAE95E895BC5E64DDCBBAA8D0A22C229B42CB717FC711E7E9DF793DF80B 9F14754585A3C7E17F37B32924B9F9870DA8635E3E18BD1DCD81EDF01834D9C6 B33F23C956C2FCBFA47D84422F583459D827D1E120B97694D12F1F54D02379C0 D288F7104F3FFCF4F76E3494F4ACBD1BE3A15543CC680924C78A473F8E311ADF 8FE00A04C6C393DE61AD3EDA5BC031E2353076A2489391B52632387CA28A7B93 FBB065A6EF3658AE80B1ADA47E9B2539E73A71FA75645F85ED8ECC257FB4CF26 B6C912DE9D0F9899E70BECCB934AD32CF49A093371A9F73DE6255EBC39DE1E7F 00D0CBDABD4D0383977E694890E71FBE5C376BE5F3A80C28987417504F515C50 909F3D31178BB9B1D085BE514F71B910A9085BD6122DDC72A150BFE266920E49 5661BCB4BAB51D6DEFE32B616963DBD989FCDD1637B294CE4E288655FBEFA1BF 7F25BBF8CF17C2D5FD161A7C2CC9CC7490D9BF15A1D35B3BFA43ADE256E88BDA BD490D92907C57BAC408A575EC84D6AEE070148C7C9A91C03B09FDBD792E8FF0 C0B886AAD2EDD86541E5E579359D40E3AC312ACD3D8FD49F71BD533DDF8859B1 BAF17F1884E331DD07CEEF93B71D492AEBAADF7A263450A7A72210CE630A0D37 BF024BDC09ACC882816B8C22C62AE38A3A8D0F6EBC2B1B2C0B8161A8B076DD5D 4B779C0788546BB4CF57332230D237856B00D79C28A7C01D11F44B7304F69075 94B97A745DA43D1BE561372CE611C345A843834E46AD9DDB16CABCD3FA33D6F1 F6B5C0497F5EE5400B305CDC16A7EC286AA4D45D0EEBB9DA06AC9C5294D68EC9 E4DC3CA2B92CE8FC0526184A86EDC7AB34D67E60AC12D9CA8FD300235EC968BA 92C6FBDA47572BC5600F25249F60AD287CBDAE980E747FCBE7EE5CD323E733F0 63553B494D3DDEB9CC1480B5C3BB79A28E419AA65B18CB297AB383419E890E2A CE6F98C9900CCB4675280A10CF060B8D220DDA1BE55DFA65715EABCC1AFAA271 B1F8732341613E17B231231A0D24D4D7FC198AE04D89A99C4536217769C6FBD9 5EE24A6302F97438F7C0E311C878F674B4477A5ADA3952CDE4055AC408B8174E 86F8FB797646DFFFE0ECA25D1BAB9A9F71F3926D3D85AA63E7A8C931D71E79E0 AF1EAC26FADE468F4FF7F3861D14C10E3BE1F9EAFD6D3A544E8108D5DAB5B180 3950C74818BC8AF4758A108F462EF1826647A49667F5E482038C54716856D9BC 35F29922846D2148F92F943E951D7438C73D6A60459A8003174036C64E1629CD 155D47FD04B03C023AD67CD5A70C98AB556EEAB8C48169706E5B352F6505D580 AC945171BFE62E81F8F500438AC3B64D857BA5BC54C2C4BBB237F8FA51296255 E66A92A61FE13FDE781D393557EB72CEBAD86511035F775FAC39A0479CCD400F 226709118F887F47CC2ECC8F79816D4A945B2845F50AFD62D8C9A9BBF4739496 9E644BC9F7B04803B7EE75A09EAE94365F6F374B4FCEB0B506C76297564B9B6B 8B812BC3A33929AA94692572B010E6210AEAA312BDFC88BF302244AB9D587A9B 919823FD01DE12438D960944D1977800FEB49E638C32E5B188B1CA033E0C37EE A142F746367888AA119535F0CCAF7EAA461B790EB089D2D6962E28A398439BB7 9C9943654D7A2D765B46BC0DD1F915327F369162E1BA1BA83110B93F442905E0 523BFF5E279508A98568CD5CFD18FABBE9D17265A90B8A9EE5C613CDB822F07B 115D4C174FB7945535F2F9C2875C9675143B8D98DEFD3898170FBCB19B4C29CE 1E6883E0F68B5D42751BD7AD09E3EB745F0A6338BA2148B769B5E1EB21109414 C1615EC1A1FEAD5831938F74E26E1F6BF51136E5C76F823D29D35078412923DB B3A32176ED7935058ED16528D28E50E37BBEB1D1554503645DD6809FA22A0DC3 112E7888A499450162B7373CC8855953B351E8873A4D7DCC40EEEE5A8A2D00E0 EDD8CFE7153824BF94833ABE10FA64768E457D5395519937705DAD2FFC5E71D4 521F01213B7DF82426867DE914CC9866E428F614F18078B4367187426E2260AA AD0175A7982D23DE6D5DAEF02D3A10A660A98C57950F040898242FDD3B01A1B2 14B4C59A1AD1EFBD8B1098FA6E732B8FC2FD756DF92005FC7C07606BEEA9FF38 C55FCD1665C53A6A2C65E8788F81762A635846B95F2114269B94BE57C9D9A3DD 19F22E5F64DB1BB15999C0C1E5D6DFD5B1A95ACED84E6A9B242B04468AC4C266 7D5F69923287EA7BF36920DC3FF68EBD020C4F86F0C32F0C6718BC495B984562 AD4EF1EDB2CF5B2742ECECF99FB3E1CA6AEB852903A89DCB2AFF4394B9889EE1 3C89534C58281EB6B1CB9AB299A0B715383DAEEB18EF290A82B6388A842F52A1 6CE0ACE227E04052F6D1C243A82E55325EB09381C8939608E81B521DF5045F5D A72207E33F6CB41281F53F8D0823990F58E24B047704B17CB9436F6AA4817F98 F063FE5C6D1119D0022E18759E5ECC3448A1368902DE3E9E049D14C0DFE8924B 675A3DC5B6B7EADE32EE6D34FEC64F1D2767BD0D84AC0650CF92C560A7A52E12 6A12A998CE39E0D00984934BB564E34E7D54E3B33AC419FF406DAD3CACCDD1BC BD7291FC73D5FF989F5D8035027A7BF1CF9B49BE967FE67B94D46737BF0F773F 428AC967ADC341898B0D787EABFEAF3F9CD88FE411E09739CDF949E3A8C1355B 6D317246D85492ADEE815E4F980916D6D37BB6588978E75596B20A786F12F8F9 59E8330A69B386CC7181C0365D19A3E76AF06A13064DD797F5C2B2056693B4E3 860BE12CC3CEF548C0A57A2DE33FDBC4D98D5C61C82F91CFDFFFC5C3B70E0B82 E39E5FCB6BF8BFDEEB8F2B0B484AC7A6EE60D8E7297DDDD6D82670B5502C647F 90CCECB768D346BAA085E92CEC6837BA913192A2F7B5BE0EC1ACA5F7874922C9 35C4D05761C051E6BB05646F1166EF917AF1B88F90624C71DE55E8F96F224DFA 7AA5069AA5B1C0A977A639893F48D1B973226C5293B320DB64EE12C045B18EF4 FCC0840D614E2212BB38E394A9287DD8BBE902A28E489FDE937214DFFFE4DC00 26295396E3ABD58ECCEEA5629F7D1EDDF14291628B33A39DA97E41796272DF83 EE95D6759772026675B2B3C6E949956F8159895F71FBF84FA330C812413553C2 0573928372F628D8EB3F4F4A8C3B278B403DCBF976498A5E69311B9634AEE86C C92481C5675A6D631C23AB2657C8BB8E27045EBA6824E406D04DE0D26C071F7F 7785D4B6BB447779F7465D7FD695D94098C9DFC7CCAC07E320A8BF10D242E59F AF06602C88A3C9CC9CA87DD13190DFE392129EB9EF33E57785E6091463C12E8C 4155C7F687E7274D6B0C17C8F1A4ACD5496D38D0364E2D88D0EE83BB27F5EEB9 9534C859C6EF013FF206EA6952708A5E17EDA3D56D4DCE604568E42AC980A745 15558086CF56F55822EEFE030DB26AAD68E4FFF5390DC3CFBA9D54C09A998098 D1016504E79FD0BA1B88BA127C69BCC20E3A3FCB6086395C22CD67938807E88C A91C1004CD9C0E9C2B1CC76A3280E1599ED49578989AF1902F1426A6BD25EB9F D291F01B5CDCA4213F92FEFC1C96C921D0DD2AEB98E3F89D749084258352AC13 32DD600DE8298CF31DB0133F553F672ED5E2D6E3347E1365DF169C1EDA77222F 5091D619B6C1F5F503D3E1598D5E92AB27A541ACEC5086A981F74BC0E83972F8 ABD98F22057DADE9C2B417D42D99BC9FE458E4BF00C90820BF971DD4C0F507E2 A80E38D57EF7CDE7741A4C55244CFF1E346B9A7611DF9B8BFAA8AE80C9C67106 02CA54916693B84530065C00DB0CBF61B041EAE8D9491D0C711DABD9A8FF0E9B 639C015BC92007BC8E167AD65BCE334146CCAB7D76D60C32DC302A9939B86757 A1634948931C0D8A487F814E86598B89737D4F82DEA279B448D8F41B81E0057D DCEDD94D7987649F8042128702D2F79FAF7A30D96471AD9ACB8A923B55BCB270 4C0D1D43E2C5C67E16EB40D9703A0779B40DF9E1A85B469F45E0A134EEFE35FA 7C745954C994EB8D0AAF86C17C9DF64CC8CF10FDCA540279C4FABD9A8463BF48 045A82BD6ABCF0319CEBBEA9BEEE0DE00C4DF18BAC2AFD031743B3FC55ADE9F7 F2E07DD1007C2AA1059FBFCFCD79947AE07431905C14BE1032909DAB8A6C675F B57B52C8518F41804E81AFB68D11656669C84DABCA90D191C86EF59670ECCBE4 0700CBE6F1DBA14BB809DC2E2813CA2D100FEB6B1B88EBD2CB2FF6C6AA367905 E7D12B82E32D8BBF1504553760C769EBFB71AF1DE4BF30F0249A07AEF27B3987 3A2A182E8913143B221B701D254E42C92AF4C44883075C6398FB9EC0828F8810 2B51650E7AD21A4D71B14D44A16B9AF5ED5E974F48376EF5A0B7BBD253C56C47 37623A7CB03373D21D0A6F18A855AC914C4B899680AC15FF90EFA0490860C173 7B3C9AEBA7502352D1B65311B8343D3A13102A8441BBC91ACFCD14C3C59874FE A4E761822080800FF541832D9E1D10290130520A9EE264BB22FDD4EE62EA0896 640F17627B9240C13DD4C7762E6AB27EFF2CB916570AE831DA6A74DFE047B78D 5E565B1EB21B754E6FE47C7B4564A56AC0CE60E1BF06B9C1A15715D4DB5B94B4 DF27921B8A8C957C97F86B15CD747208215130D0E7B289978A1E195A1B9C4E8D 0D4B2F957359EB72E41396DCFAC11A7C29F2D8CC9CC3DA2E81C159B70E1134CB 9BD8BCFB608822E0B42B1CB7AB44AB86EED8380E7F3588AC50708E6F227E7A79 36908B39C5A92FF8E978F7A9662020816C6A0AE7B774947A0A1330C6BA67FDD3 A9AA4FB86FA6FBCBFCA13443B2F253164C0113B4A4EDEF2C78E371D7E30C5A9D 4DD812EDF0657C84AB0E733380EFAAA8A77C343B645717B045A5D7AA2FDA85B9 97848190384DD2761B4790A8F5100E73458A59816D98ABFEEC598A61306630E1 29778EF4028E5FDF844B027D6B72287D6DED20EC012F233C485513E8E602B45A A1FBBBACE51FABD76FD8DDD168EFB6EDAC2DF896E19484475DFAB060193C1F8B D19AACE579461F57D91C78B1A6D6C1AFF3BBCBEAF3AF36281E57EF7C54540475 516BE4118C554686B28C08255E448AF4CEC422A18981190894E191159A6FF040 4BA7580F27674FFA1469C84CF51B3F30ECF9F4407B090DE03644C0DEE0D8FCC6 0BADD66A88A1BDEE67E11377406F7743C3386C87E53EBD6DB4225C153476640F BD4A34533112D8260A10D2074F3C8983840B27A9A2FFECE7F8A61726B0050F83 F2EE483A53A88C8D0C26AE56232E937E2C022F34F397242F7B5F5297DEB95139 BC255DBC4AB23D0E4FD20E965473E92766DE7CA318DAE6B46FB99D9C9C0A4EE9 9D5BD1A404B8B45B2DAF63A26D7A1D91647369C82D3E7E60487E00E7EF9A3996 C2066BEFC7BCB387F5829204E61908D9416F6D30AF0966E98C65E4D312E14D9B 288A2F2637AD581CCBEDAF17570536D80A08E5BFDDEC7FBA1E2317E4010BA140 68B38BCB90E4F2B677B222AC963FFA793DFDC8B3D71802B3083FC1A23C9AFECF 471238CD31224DC21BE5C71C954C063B0CE5DCE44B02FCBE2EE96E2C5529ED44 6F5B51301895C8DA4C591F014BBA46A6A2DC6B758FADBDAA4CBF33CDF8D75843 A8E23FCDF67804D2F2242620DEF418996FDD456B907EB6A629810A699F6A8452 FEB739A59FD8CADFB9E4E8BB2CFE214B00A17CDBF35EDDE99D61985D07C0C078 6A360B7851621E19CDB579171BD134E3FE2DEFE4E28738C4E0C079199E324416 1D7F78ABB111E555B93BFC0448FDC2D0AF1E6B581F3241C308E08A0412AAD162 56C60005002C4E3FBAD89EF2D925849945C29F825A7F07C997F274ECD099B984 A21AD8B5B6BB50B115468A652AD4A86D002B82091D81AA533BD232CF7DF473E6 10135CC291D80E2813E55E83E7C3E9AF15FB330FC5B9C2256459CFF2ECFD4B1A 5B43E43214424F5A2DE6F572C0E85359F07B486953821893060D976248253EBF 9C8D9ED25248D83AB26B137DF4D9E1BC648818646C3B1CDBAA8C628D774EDEE5 435A168193DDD9EBB8569F7A8C12C453928E5DB7B48BD20D8B494CAAD47BF148 00590CD54BDB052B8263FF4F7E35DE7E4F870A6359E50B1B9B0A3C4615FE0963 DCF92331F54DD537064BAEE5B19748590758D6AE89F86F928A2B3802F3FB3045 3CDC57F4A44A51F3C6830CA661B192141D3D07291BBD82226A57DC2C2FA91B89 13A752518880717D2E39F8B32C7B95255FCF5539BCB77B3C1F90D7D81237EF3A DA33A74E38C40171098584466F2C516378056CFEBE7BBB1EDFF2204AB35FC33D B485B44B22A9A52C846425B7B15B29D490C1EADDCFA987F7CF2F3C651FD97DAF D28BF4781DD674B502F312EC1A84BB87F2F56475AAFB06D7ECA835855EEC3200 8173BA120F020CB7E428834D9B67B81349C35D56287ECD199CE6FBBDC6AA72F9 B9FBCDA8C1FC69099C1DA9564C5933EA8E084B697D7663A1A31EC26C24FD9D1D 97E64E92D19AD95B6D5C3ADD720A4CA087A39BDCFC0EC6A8B9705530FE6C7D5A 148015CF1FC586E516B3AE2669259ED21EDAC7C2C3CF816B44080F32C8793C7A E960AC01D6E438D7F8553237A5B12D12ADCC3D3CE24E814067F32C59CC4ED299 85D964126BB0D9798D2F5C2A32E5B2219423E9369F8C515B70F1345DDA3F55C9 9E67D52EDEE4A8922B7189042C5CEA9E10298AD9210F37B428EF6E0D5F7CFFF6 F0E147940DA630DFDEB6A3281B2876CC7D795D4B388DB4ED2DBF268305FC8AC3 E18D116A2CA4BD2865BA81FCE3C6629CE20DB95DA8DD007344E1B254C5F051A9 3FAD7828B5B03439106FD8EB241BAA86ED635F165DC37A29D446EADC66FCF407 7282B2CBF215A4E517DBE7D1977AB6647E22A482CAC8367B967712CC780631E3 60AA6DBA1EF7E1123EFD7C07E70608797841928AE9E2FD9FD387159C8137CF58 E6BBFF0139BDA13C3BB47B93B604738F3CC7E68F2C3147BA5FE2EF8AF5B4EF4F E26B7430254A3A7DF2050F924F5A473CC29799407711161F9EDF7933231AFE8B 14A8F421900FBF59EAC1263CBF664AE47B68A5D29578C086C1945A8F62C3CEE9 D9F96961E6BF8B00694531E46B03DC189C2EEA810CB57683A928C8076A554B49 EF350156B27CE4ED0560807CAC169927006085C574F816D693411AB517B3C48D 5B8C40218843B2DEF35E828F212C7CCE933A7FED344913E493CD84867FE401E7 9D4527B9501EB0F0BB6B5702C11E89B34DC3004FADABF8508837834E2A010B3D E6E63E2CE9FACF7B227A18B4CD07F02D72DFF00E6A600E9D700A1A8F2C96D13C CBDAF562710DE591C11825B619270DC01998C586DA0D59A0630B28CD3D99C89D 209C427F1F597E0786EF96A15D9D5769CD251E39F4CE80F80CE77DF2A604A720 7D3366A16A3CB171AAD207D0A5D2114066FB9CA8814A4A647B334D2B3A568AEA B1CF90D50E72CB35DF9DD7BD88C1AF3F8EE900228F7024B2C7969BD459721428 FD47B6CFE4057F475CD8B8DD596F454D77CB350D6E26ECA49988832D54A53D71 4804B0EF4505C649D10B433AC2779DE4F1205D6B78DF06A7472A8134D2829987 C0F44A1D5497AB4B7894C8B64BF80CDECD7B7E9AEDF893060185882A74F91D07 C53F80E860BF9DFED93C634511E7D8F3F7BEB3A8D0B5CC2C20B3DED13D92 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMTI12 %!PS-AdobeFont-1.0: CMTI12 003.002 %%Title: CMTI12 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMTI12. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMTI12 known{/CMTI12 findfont dup/UniqueID known{dup /UniqueID get 5000829 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMTI12 def /FontBBox {-36 -251 1103 750 }readonly def /UniqueID 5000829 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMTI12.) readonly def /FullName (CMTI12) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 97 /a put dup 101 /e put dup 112 /p put dup 116 /t put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE32340DC6F28AF40857E4451976E7 5182433CF9F333A38BD841C0D4E68BF9E012EB32A8FFB76B5816306B5EDF7C99 8B3A16D9B4BC056662E32C7CD0123DFAEB734C7532E64BBFBF5A60336E646716 EFB852C877F440D329172C71F1E5D59CE9473C26B8AEF7AD68EF0727B6EC2E0C 02CE8D8B07183838330C0284BD419CBDAE42B141D3D4BE492473F240CEED931D 46E9F999C5CB3235E2C6DAAA2C0169E1991BEAEA0D704BF49CEA3E98E8C2361A 4B60D020D325E4C2450F3BCF59223103D20DB6943DE1B57C5E0311AE44B83C3E 4FBCDB0B74ABB18FDD877252FD3501E05E597A77D142BED9940318B98D508672 4ECF79C43A857674E4DCF2556325CA8CC1C432E54543F706987376A084BF512F 0E4C517917FB1D607C83E479DD094240C3F309A57561CDF8496722F1D3EBF6FA 45CD3D7D810E2C07D39BFE08C0A25FD568DD37C2D182E5D30A7B2855BAD24559 D455B29B1F723BE1C4F827D72B1156DC2C1EEA76C9B27733FBB23ED36F61919B 4A6E8253C8C05F3D4BDC64B99B8494F7C37E9C19DB6A9CA8E9B0F9E7E3346EE0 EF416016CEE932E53A26599DD8CD09D77DF591A9D532AAD3E321CDCB28636809 E61D9EC969F2E27190A475407B90211902429778103D18665A681B0DD51F6E92 58D1288E2AB3FAEF05854938FEFFD3B4F376AAD303ECD28B23649E5D4C3CB85A 5C9CDCD1853BBF3282BCB5CF57720C6CF7AE468048D7AE5BCD2F15DEC1B33B5F 9917BF69BB64261CF101BB47A09E47D6508250374D00ACEC3E3FE8C5330AD9DB 9D9F60CC170F2FD6DEA12DA24CEA846E25ED6683A213E4FFD0BA239894C920B0 EFF562ED994A7A46F8EE2AF98F88317E513A06AB82A629979AAD3ACE316E7074 01EAD920A9E1D54E8FBD623773429C58A2964B498990E8420E5F7A45B3D4342C 1AC109FA67D4BF33C9D1E0E2973BB8B2495DDF5A7F8E306A0C712BD7A7FC98C7 44B26D102D3CD44A320FE89CBA6B3AB39627DA4679A5BB7C27276B34ED66260F DEB659189A797BC41D05323454CA4600A6D840CA3C1DC31BB7FEE8DE367B8177 3F1546C9EA98FA9F7CD61F177CEC2950526D54A6E7A0038F2B20609E7BE31EFB 51FDB6829852937071FEAAA3A0E51E625D7FBF2F7C224467C7DB77F7AFE006A5 418CF691841AB7A9923506845BFE066769A01A51EA48840E898FC6FF0ED9C2A6 1DB61E8840029ED92A129D38CAFAD4084B17679A84A262D2F9376363D4B5E46B 1C94302E5CD24CBE93A27319A8F79138414B2E94CE6F78C6F06B544D5862C2C6 297EFE524BBEF0CC2C32F63CDCE433E19B52BF0C2C7064E3ACD429E2466BB85A ED82C6EDC8AF5D75855B43A61504128F75C2DAF7F5C4405BE36C136CB809DF31 A40E0DEE80C10F6E6442CDCEDEF8DD0C01FB2C035A1D136693D366552862A421 81A290080EB8A3C5160FC2CD760A69F8254E8B0EC8E7280EC33802EC2668C149 73CADCFBD4E56A1E7A9CDA3F6A50E00AA536B02B4BBF4CE60B7A791098C3E434 B5A7F17D6E461FEE23C6C8C148C54D14345DECB7A619E56268131F65F86C51B0 E45860D46A1A798134AB3283BC8B73D9B39EC5D0C1241A85AA46B02E51DE6433 60BEAC76351AB35D8DBFD60C6F12F8B32E08C671E0269174E1E142E687B1C558 5668FDA480255261DC29288FF5ED56B50DD8512BD4948F31F14C71CB4F8FEFEC DD8E4F4EBE9C28312640334BE454634EF26B5FD02A93210D487AA4F3AF284479 303995AD31F4A6DD2C2DCDED3380D50EA1D8743A3C6561CBF4DE91634374DE87 FED0CF17C73B49060648AC6AF2921D19FFE1B7C7E76AA84600078A0160160D5B BFAA2007AE70640698BBBFEBFA5C11F351610023F563840413AF6934156D93B6 551069D681492EE73D480D648503801A921E37868B4ABBB013B628772DAC3683 3E44C318352E7700094ED0FF624AE560D2A783343B266FB925AE0D990B65F8E4 7A9725F23F0A08EFA08F81616A5D51E5EC31CD1BA229A89AB63ED782A6D716C7 1F00BA66A3158CDEAE3399653D7A29193760AD92F65C066A4DF35F91BDE771B1 74E17E4879428B5692343AA963A349064693B52F14B09C5F4B329C4AF4078998 D3F6C1046538F989C8AE84AE032A112C3E657907EE7A844B14C6A0FA8C9A1CD9 797E195186C478057525CBCCAA0FFB09F67F97E69BC402F6199B6900D9F285E6 47D359B1728728770C95B1A85E22D2132FDE7075F8FA1123F62504E53AB106D7 99B33689D55D0BC0C552745C5129CEF9F874850240FA6BF5F4779E35BF15A8F9 F425ED40480C60FE3ED85173E620320A462092834C0BCF6EFF9F1D5912CEB941 9C18D8EED5CA36CF2C7D3965BB0929EDBF7FC997A9CFE79A9FA9C54A11E1F421 7F3FA4ABB80A3C60E9165DBFB0EA765BD21846FD1260F1AA4644CBE05CEC736E 638311023F9F51F4C0166733A32BC1F615C8D9256E44BE8C2FFEC45B7B612FCB 21C52DB57E87EC8E166498AA8A4528B7C612E3BB8117D6BAF5CA8F9D038C1430 B7EA8699F31ACDC03774AEDDF6B73233944A1A89ECBAED2EFBD30DDF42821846 AF828EC54BEA6E7312B3255A7F55783C5D4AF1D9780A9670C9C7E02A50535A13 6D957F895D53E4E18A4B4263695DF2BD9626E717D5C3B80E908E59EF5D093798 7215550A5613AB86D67C1F89C95FBB0E6ACCAAB397479D483AEE4607E111EF34 2FD92DC7F991B6AE84BC7CB982D819A17022ECFEFFB981A6F678655A6278825F 0EFB5733C5F46529EF1FBB01C6BA7413BA9211251C0A70A470F735A96F6E0D45 DB1342D6B97ABC234790D346C74927F5C910F71918D615CA907984F0229E3F54 4F5F75AFF784C7A470DDCFFC308ADF6EF43979DD3B54C6A8DF3B53DB783B81E3 9C57413C3A317419C190F207720743084DC20288C1AD08B8B0FD4ED805FBA8B5 BB874DCE4AE93AE3B8A117612787DA6C8C7512191BC36F6D8AA38F39099474AE CD570CB5570BBA932C9C7A63DD386CABF1956FF87C266BF145ED5D27547234BD 943841047FE9A41C24B82FD3D3EA49A56C56840B1B359FB2A3F28E10AB09AECA 2FE2520DEE9B5542591E72ACE610DA4BF31C6E204574DC78033008F019519B2F E45C99F1B938D212602E824CA1CA020211420C77FF545DF586702451B0923EDA CA15BFF98CF2F0A56404591E57F7C89CAC6D22E0FEF9094770CF003801E5CC08 110B272A50805F89C0BB5C2966B9385C26F4A5008AAD97A29408A5116BE613CD 5ED9F85D2BCDE96FCF3121D5EE1D455A4CB03BF2AC33493FEEBEB955EF737F7A EABF96C137DD84B3EA39C61CE95B5967405CEF17D9CF1BDD1199346F95E77CB8 5FA2D38D858DAEF10D0DD660211C8C4C69EF58B60DEDE48DF76300EAB8F0A547 6DBC87BEE8DD4EDFE3020BA56F362503AFA62D8C13BB270C3884560E227AFABB 5D810B2B092531A679485FCFFB88BA8313646B644A35C413053DECCD4B371450 18F54701F610E52E727AE8D25A8093B60093FAF775B6414F66F43F517488B4A4 00AA4F672A34A73531218601904A7F50A045E80CD804D028EAFF506EDA1ED998 ECF16435C6CA8E203F2A813506F4B8CDAC0A3D69F4B704AB80F170EC87B7C732 AEFCBA3BF4050A9CFADB87F7AD4B53BECE197C10A2E84571A640328B90E9A294 73F6CDDE4F4AF9F1F3A257BD130454CF95D390ECA95FC4221D5041E71D65FC21 8323BA5A3335E2E905E33D5BA56BBBC9CC30D25764A066D013B116E693C56762 4F683F112A572C2C04ED041CF7BB4FAB0D899B3F2679B431E8993A650184CB4B 1B391B39929AF803F868245A69C964B560A274B07DFCB88A6508082DD6092E38 80D9187A146B60B225CA22F593AA6B4B7EE1EE41A0D375C4FA69EC6C8E02B54F B855D385C973A7223DE22465D039D213315C35F0D079E8CD030F62993495B2EB A0F9BA98565F89D2E09BB60D90B0CFFFF1F0845810ED27CC8F1088F74D48A30D 7FA0728498E78A381B0169B7678520EB5769522BB5838212D32C8C1ED5635753 EAA3C14E6640BC34D43EC162711996E0CABBBDE0932FCB6B2838C22C0E42DCE7 1BC85E372F24C1145655D59CCD50EA6E1A673CB0342BB744A43EA1B9104CF736 324E367D82ED67E01B0608294A91386045C1564E4E417E1A62EFBC148C0B4A56 73A98AE2F2433164740B839F851F9C38124B3C01CD976128DF6A06FEFE14B960 4573E748370D70F9FBFDBF875584852E70264766FA5CE893F74D0D5884889178 078CB149821A743D797E9577A7D27E7ED607349CB2CC6968A7CE402DF9A55069 4A985B517B714C603F993944CC64083DE3D5F969F9C5913C297E8493D310CA42 795C94740A5E5D3415CE7B4A5AA11A940D93992329D8B00213244405BBE73958 37CD65B6AEBCCB2263B937F671FFF3C6314D400983E5AEB6A34709D854FDD0AA 3D27A62BB23E253E6E2CA994294009B857B5F1FFB66E772A0BF9D83F4F72B89F 51B125AC9E495343C9D84A4BB4759DA4D2ADA38A195C7905CE288FD8634ED996 9068F0DC8DD08F3D3A1288A271E7F7EC4AF76EF6A78C47BAD95FA14A3AB690E1 19A13639774593D77FC1610D7F1E25A31AF94C5354B35500B8E57B0F65AC82C2 2A519581B587F5E3C941734A4269842D38F74E89C2AADB8ADB3D16542B0485BF BD4F1EDB4064E96A330D735F73789614C8D606DC553A0A2409CF4C595AE51505 CF203817971BD7F9B3346C036A18FECA44CE1C2042BA4E7FFA3FFEB6371A06F9 30082F47FE87B207E13A68BCA122968AD74CF6A12EF6767988F0EB0CB64981C9 30D9717F6C7D07F4B37CFDD68EE4480C0CA305AFA4BD21DFE131D6715E839973 E1271BF576F70C2F8C6827B3EF02CCA123EA46A02B2722E06078C3D9B3743CDE 45B43B561743264277D0D1FCACDDA80E5C6185E90F82D1DA4DC076B6BE49D2BE F03EF513F1861CF66D2B7F8D52C7A5C21DF1276B72CC1CDAAB5A16D20722A95F 8B1EB6E6B605D3878831204A0EFC95CB3C5B588D4F0A540D466D13B8468ECDC1 DB08D36E7FA19709A67A0FA08421053EEC9068ED464D29BB1BEDD0BA88882707 9F41334C3BD3F995321711B6ABDE3C12A8907F930F7AF490D774A05398ED03D6 789D91B4DACEA3D8EE11C2CD850A6EF4128B60EDE9BD37710F43836EF6D53FD2 D8123F81EC6F01A93A8B36FAE49692E7276F7CDCCB09F332ECE359E3E7DB2364 A60B192438FD158B18CB3EB40FD28F74A740367F02D5CB6B53959A0D11BDF388 9AAEE02F0E96AE2F802FF08BF778F26DBBAC8F5AA04CF3AEB180235BFDE493DA 4D0B13E0B61696A8ACE4FF7A09956A1896B2875E5B2BDBA09DA08B9589957E85 51084D76A00FB728E286CCFD2F53088158005599835B18F6F5AAAA6051270AF2 59F7BF641B0AF4E79F4491725189B89E57CD10B442B8EF89345D04EE3E18EC98 217D81FFB1B473B9562605F7B0AC3FA8CFB798A988E5FF20F068A6B2399C71B8 2E3C19E58601B0AD3872170B0AE8FA33F3A50EC5E67EC22C00D3DDDCD7B592E1 0D1CF31DAA48D10F7C6A56CA052A5AE914EE08CEE011FFF20D00B46A7738C434 D70F1040C611168D2C1851DBA89DA526428E6D5DDA244AA267AE3559B0C7DC8F AAE1687F823CE628AAD59999E74DFFACCF7D3412B466F6C3A315D8AA3350FB18 9EBE417717C42F3201D19E1870A2A3424E96F1A9734F32E85DF220E08C4DDF8A AE6F3491A3C805578924F36C146CBAF1D38C8C18D18E5A9B38236BD3E6B9E5BA 595F66A2A8DE9F52C9DFE00ABA5B99806A87D2EA39EF2C3A8D94FBFCB0CB5345 9AC36328B89AA13E4BBFAD70314009B0A2588847B7092C9EB938DD069CFA3679 73D9CF01F9756B931B34E70F4A5F1C41FC577515A5CDC49FE2C9A13D62E7E612 2AA5969248241BEAEEA5CAD34154EF5F9153D85ACD6FBD6B7F2834BC65C77E27 5ED803220949B14126BFAAC7728CAE16EF205F408232C5D7B83AFDB9C2191997 38005204EF424640DE1163B577274FB455EC0383BC6CC17F35112AB638743DEF 9954A5B2DF6A50DAA8662967E8E2208A9D1E3506309A9EC4C001CF91896E79A1 F3F6FE998DDF7C7971707CF7DF7415F6D42EE28620C0A225A1B9E389F397F972 552E566F748613EA1FD417CAA7B90A2BEC1AB07F44BB8AB6ED829F2D7F4DD597 989617E6BEF5E701498823382DEFC2D5FD078DF888DDCA99E62890AC0E5BE8BE 0CB662B561A49D2221847151D203457C797A904BCB5A1D68A51EEA20A167047C 36FF0FDD999E46C857864D1CE7568CE9518230418124EE5E51FD96C0FD8EB7BC 2A49F49AD72BB71F849B112147271000A77F41CF476AD687E6BC3DFDDE0CDE1D ABE816BF31348D25FE0A11FE7F5559BEDFC24A14F91BB73BE7F5FA95DA24D705 3DA96E8D05B84A1E5BFB0F15D7D4638CE4C63B74404128CF56A016180EAA054B 85FEE6937681557D0B5BC3C560947D456F48D7F4CB7A5EED52B103281B152E3F ADCE8B98497B74B05096AABA261D2A2EF56572904ACE2866C6A081C926BAC3E0 DE02EBB63FA29197B3812809F08A9E3D5ECFFF751E60F7082749F57352040E06 CAF9290336395684E85FA2446FBF1D0223F74B0D3464B06975010B83D0975181 3DB6C0E2967CFBDAFBD555018305184953487AFAE112D36E696DB8A18F3E3A74 C8B123F16D077DBBC85A226A26D406F622858EB7F1646BC0093A7C9711A1DCD2 6302B0611AC20A3870195D8BBA4E8E4F2CC73030B2354308CF8C06D68DD7FA14 87CE9D6FC7A8A356AA2DC356231B4993655A0FF55AF67090E2947C2B7FB9E96C EAAF52A01ABA6D69B738D6E3D4B2CF1E037D991EB5943BB0E6AB3868138CBF20 A112805F4CC00C65A4BE86D7492C23E34CC0BEEFAA0403E2AC21FD33D7A7FD09 9DCAC0BE550881647B322FE5806735FD993F5ED7C62173AB29095F67A626B9F3 20829E4788786C978B4BC9BAB9B3A750F130F9D4AFDA6EA3A7DF09D7615951D1 0C783A653F0BBFC23902019BA276A6D7944F1A34C1EC7E2710091C0B94CC3938 01C50C5E4A9C19F47D69074023F574D7A7302565EF9920A8E2A5076E6E3DDD2F 409CF1AB8BCE348FE63A136E03A520DDACA32571675AEB94D761B7B625AF1626 8BA9ED761E12A52C511890DAF1F790857C3C9FD3FD033A8330CD8E19266FE888 76AB1F3B3C8BA1FFCF3A6CA570290FC1640B6C4231D8346BD346E647D138B2B7 F7861E2C7C7C4431E3E91E318BA1DF8338AD4EB4AC104EBE7AAD8F5A09E6AB3A 48B9EB51A85277B221E3A22AAF38219B681918DBBB2F77FA8AA27F310159C763 A6E66D93879B592289B919B425FD7A367B7820FF430100E1EAE0877F84326FCF 5F1DD99964BC6BEB63528D2B218CCE41024EA2CE703959071A65EDE99127EFB8 0CC01566E5E52DB32D01512383A7711C7770AE17A71E5D95629642AA79CD5F01 D37FC89696F25C2EE4DD70DBDECEFA4FA2CD5D2F8ACE75937D2B1FEC7A31A893 16D314D800AFD3EA28068983A2ED3A7C75A5570F30A2824A47D6A789AC554C3C A78C2DE9771B86F73C66EF8E1D0FD046DD4F19A31EEAEE04D5F38B73C623F326 F146C7164C9B18B5EED2113363092ADE0ABF0D7BD4C10BE9766F81C34878B236 1A0FD6D8AB4BC7E3C01F1C880C3A9186E4006210D22EB64CD7690FDA750EAE7E C87A9D29128D49082578ECC0BC977D91E9CBB1ECC0D3527DC0ACAB39402015F1 B067FC5E7705586D97E81F8911FC2BC8E7C077384AAD4DDDEDBEF65CA4B75F6E 39E41528CF53CADA928537D557B518BB740593A6E4D0100ACBF126FF20888342 A0D3D7C201C4CDE8CBF59A1BA4F924E4EBC3E02883D5FDF2C8249AD8117332E1 BB52D2F621115C0F98037857E9DE1FF64F0674457A70FBA6B2EA4A39CCCCACFB 7222423B2A0F00BBD793D80729F4DADC600746F71F311137EC1D91D932FEA8A7 10106CC7EE6133A18BC4FB8CF81B49505AB2A72BC3F9A63F488D0B55BA6A85E1 184C28376918431D1E90D75AE565E857D692570D2C43C4097138FBC4E3F27BA6 A0A2C9660B2330091ECD3EDF09E4DF014126EAFCDB7692A35BF0D1535FB840E4 0A333CC4E6B305401207108F3D4D7AC63BE03D71F312E8D9A5997B8F5FFC3508 8B04BCF02926F780D3E585224F4307BAB2669EF27D600942CF42547522F2BDAF 93C8E62D55C0887BC094821830140DD379D48F47276E3870AF7D80FEEF80698D ABA900AE48F014A83FC21D6D7E0CA310B6618FCCDCA3DA9C95B654067CEDF915 E70BBFDD0DBA1536A7C11A8EB21FE5F32D9D3E7A7676554F7E11F2F56F62040A 237BCAF62FF785DDBF3D6CA141BDBC55EF7E7AB6367782847CDF067751D6BD74 A60180C2A01A763626F481534D5460A3FD2BA1B2015CBA0E3B73895A45C1CA06 1FF000A851796E3D53FC35DE0555B6C8AD4847D99214ED40C473342573371DE6 CA2B20E0A536F8931723E55F626667DE978A30A99359ADA70884903752A70AF5 072C772DA4323B86403D5EA1D8E1AD0A8D3E3DFA2BC71A068FAF41FCC982AB98 425F30ACEFB01B5EA9F5766DDACBA955D9ADAD433AD921549C82D32B76D83C4E 4EA7094E7F5F183945CE60D07C1E4DFF0CDB8769C0842D480A8D4DBE1F6E37D2 4938505582EC16061C67E88F1A462DBD2F6EAF14F6B3476388C18ACB53681CDD 1D3EB76ADEA7B1193674C526DA91C9C610E991ABA7E3E3DAB349BAA0ABA21666 61C6B6C11A1BA93ABE8582CC07B2F4FA83929E68684B6D9F974101680F0C8B80 EB001C7D593869C6037DE58EA58626E3C1044F2AA328596309D3E2D2E0018D9F 3EEC627FC715ADB9045AB813AA9C17C361415F42B63A70B33A3B0F45D49BF24D 3EBB4C525FF20305D3025E2A02D06D5C82EBADD202D655D6279A2850D9A305D3 C52846763EDFBB12CC8823F83E1F6DE9E213B194E1E4A91089C23353C0B80268 33ECCB5CA0948EE41B34DD84BD08BDEA791AEBC3D974AD10FE2733A6B0491E92 B6DB9EFD340F45018112E88018B6F8802C93693C96D6A5E4D39FE00489B2EDB7 69887222112868BACB662B4EE95EFFC4E7EFCE544D962D5CB583FCBEC14ECF7E C89CDB3CA17518BA1A47C14B0058D1E263F0490C77C023137BD9CAF2F665CC0B F11D096A0C782F64222375CCED4DED47501A09929CEC9C07B285F99CA6EB8C14 9E071566F6161099AD5ABFE7D9CB39B2170E1B7A2E94907F4F6B39E076DCEF6D CD3A0F2CEA9DD0DCD938D4F10780DDB0D060A203FB1FC726E5DFC7B5C358 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMMI12 %!PS-AdobeFont-1.0: CMMI12 003.002 %%Title: CMMI12 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMMI12. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI12 known{/CMMI12 findfont dup/UniqueID known{dup /UniqueID get 5087386 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI12 def /FontBBox {-31 -250 1026 750 }readonly def /UniqueID 5087386 def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMMI12.) readonly def /FullName (CMMI12) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 58 /period put dup 59 /comma put dup 64 /partialdiff put dup 65 /A put dup 70 /F put dup 73 /I put dup 79 /O put dup 84 /T put dup 85 /U put dup 98 /b put dup 100 /d put dup 102 /f put dup 105 /i put dup 106 /j put dup 109 /m put dup 110 /n put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBFE3573BF464E2BE 882A715BE109B49A15C32F62CF5C10257E5EA12C24F72137EB63297C28625AC3 2274038691582D6D75FE8F895A0813982793297E49CC9B54053BA2ABD429156A 7FFCD7B19DAA44E2107720921B74185AE507AC33141819511A6AC20BC20FB541 0B5AAEC5743673E9E39C1976D5E6EB4E4D8E2B31BEA302E5AF1B2FBCEC6D9E69 987970648B9276232093695D55A806D87648B1749CB537E78BB08AA83A5001F7 609CD1D17FFA1043EB3807AF0B596AF38C91A9675E2A53196FEF45849C95F7DC 182A5EC0EC4435A8A4B6E1CDBF9A5AF457564EA72BF85228EB6FD244F2511F5A CA9B71A65D53CC06EF5F7EC3A85106139A4D312378BC22183C09A229577B793A 1B7422611C03E84BF809F46C62CE52D3AE29CE01C32B202ACDAA5B72733EB0AE C31D7EF7BA88D2D14F85313F7A8B9B7A5B124B03AB923744D336C969E5CE304D 3AD977A46664479EDEFB69F113024E761C05FA48A54072DF9E12C2F352ACB3E6 D04F6EEFFDE209E7FA3DA22E5B1D1409461F4286B7F4F8251B44E5CB7805762E E129FF4A06A7458F3191926B1CAF70E32C6571AD2DC07C34FF62840896F4D200 761B1A7FA356526D1E3AB4C542AF13623BAEB9F61B1BEEF79A9205B1FEFDAE24 8799D516A9ACC30BC0139C63C9A0523E9D5439213B67D490C96F902958779B8F 68BD8E9FDDCE8A3A2E35877DB6C94B7612382ED8F218EB1157D2ADD090A2448D 10B99FBC9211C5629ED1C61C74FE93041E5AA03EA4AC3FFDA00C2B6E719CFAA4 262FE17F66804A6B54D3669836EE4367D2A2991580C5564463C973CA0DA38AC6 922716E13B4A807B50304B8826CEFEAA47C305FC07EB2AF25FA7945797237B16 56CDE17AB0834F5C97E0CC5741B061C6FF3A8DD1A79B9A173B66A6A750538E26 32FBC92E75BA15CFFE22A7302F47908547007402569158F62C29BA2956534FEA 7DACF1E507AC309DAE8C325F2A6023D2FBD81EF42146BFCE6A16A6310A650460 7B07BB7647C8760FADDF0DBBCD3DA6CC4645D1732DB3A22D8B76E1D2D48E4D4A 46F4BEB80CE65F3517283A1AE08391FD1C10ED452133706BC6725AABC80107FD 754A8BA47B0281D479F052CE26A723EFFACB79B213041A536542AB334769A2BF 88505D82C498ABDD5A73EB539530F47CAC52825D16A969C8BB56D4A7F2830B8F CB63B92B576E7BD922A4B25E634751F8A3B7C4EBAFCB373EDC8B8281B1D1371A 7844E9AD990CFF09F0D7ED73A5CF873D2D5C9E8A9923CFA31E1A4B4CCCC40760 8B3AC8FC3C88BC08BD7407725281BB879A1A822D94997826418F1B89D303F2C0 BE7A0102E6F529630CBF1BC5BF3E4578C164A3DDE45E62A957EF3FB7F0FBBA6B CA1E79A1ED195B6A11CFB345B663C5E72FA55D80476F604F6C4257B51686AE25 8F7D159FE605DDA0AC74BAA5034F29FFFD403070013C6E2D8EF6A0990D91173B D5A3AEB98B64E412991505C3CB7C2CDE13C091FEB3DFBCAF30C4C19511102300 135BD5D444BB55692013F52056908DFAB2ABFACE81A58423ACEC59344CEF7D4A C5A3EFFFFF70759BC3E593D878281225060B97D1BEE6B26EED90571FEAFA1812 1115C0EEC892F5DE6FDD68321A0B3F10A2D771B79BD85476AF6018472A499A86 07D64CFF4550866AFE590C471C80EB12CB3A989A60BC7BED39097C12D9286E39 14C7952C4C64820B4DE44A1827B7B0B535244E93FDB80036D6332F90F95B472D 7031E7E3819E881BD0313CFA112EB3AAE943C99C47635CCA7E34DC0306C04E5D 2E9F60FF037EB11602BE74E8E6B711392E866E3E55D988F7C856417A2B9C186D 639819B4786D039B77F8578EF63C088FF28BD08D8353031445C8498A8F445BC3 D08923D32AC04BF3CAFEFCCC1E77EA894F4E846F47EF62D6841B8D8576FEAE8F 90044626869D04D61D64D56E8C51AF8C18D6CC3FEF3B6C4F7D56FE3260354948 10104F69B117FB8269292579A7D52FED688C663B643D8D99F13956612271073E 1A337AED059B7A93819A28CDF01569CBEB51069D22ADAE25C47355560F402B2E 8C9900DA82B79C64497C8494F42FABE5AC41791C2010D98FB7E593C744F250DC D837DB0EAA4F75D0016970F3AE8359878A08CF9A697A06C5EA945819151265B9 1A12122B98F79185DF852257BB4798E7DC03712EA6ED34F6E6AE1476788DBC33 9229FADB8D581BE1A63F596698DBD6DB98A092F67197A4FD4A50B648F2691875 EE2495D6BB310078F516785A0CEC7EB6E8305FDBAEB1D15690409FE32DD9CFAE DBD3866FB63EBCAAB73E3E4BE5D7F3AA44793938AAF3F8341683F0790F1D46A3 60CE083F9BEDDA22E0639A92393960F86602216FA51E2754BC2F4CD0BDECE3D8 FFAB7E0E49613DD4956C9A10AEA798BDA1F756C755BEC12147ADECAB0FB73B7D 203A11D84DD2AB5AA98FD38C1C2573570FD49A4924A94A106D2A7D850E793608 FB135853E8C4204441CDBE697FD0CB330B1C3596F32D2BCBF263237EAB362D09 DA6F531B40384DC91F30674760CA7B64BA1968F6A7FC9EBEF431A1AFC5E76D7F 2D44DCB7F61C7F6B16196B3E8B47343F572DBA8B8B21B43E35BB6B2DD5C7982D 244FD4304D254D6CCB5E8CF70E77F50812F41A988EEB3B26BF0F6F69BBA18077 31134B5A5823D10FEF6201D045AEE7A24E0F25376E9FC66340C56C05F6CD810B 724D85CC4BB8D789834A447CBBA159565D08BA5793D8599035BB5063271518E8 F6C50E7DCE71B1D186270DDC860C6DC0CD506010EB5B1FDF6BE47A9A18CC15D7 D657E58BED9EECAD5CE5D49F63139A39BC52C6584BB2C3264D51BD584B40F8EA AFCD8B83F548594386EB2B05CE803105E84931DC6E7A1398073D48E130E0D907 CD0F1ECC3254EDF5D4DDBF44415DC9BA66C673820CDB0FDF033D59BE2B5EFCEF 01FF9D33EDC88F8D522E07F1689D024DBCD09A16A63519E1764C8630FF36058D CFC07027E0ECDA01E0E85B166C613B22F587B4D355EB018BA93E92A36007B4DA 287FF5A91F7D8A0EDF5554ACCF45AC8066E88865C5692E63EB99CAC81367B605 8E6C19EB98EBFE0D2D161B447B9A70CDD1122C7B78A413369016E6D8481E2AE9 9AA97B5DD0ACC9B0820F7742CEB2F46F89F3E2092621969A88DC0156B4F941A1 6BF1546D4B136657C47B082A8A35FE96016BAF3D9679B8C32EDDD6AE6DF3BFB5 7854074FA019707FC22BFA82299E72ADF9A980AE29A8E2434277E58B01F6B03C 192E1E25DADD49F6E3F69799AE62B56E00B60A031BF8721DB8B2CB6D4A4C15CA AB1FDE010AB7DC0DDED977389B101B8E53A949222FAA126656E02817DD32B0D4 A49516CEC2B97EA7C78FD66229B044EB92F502384BCC6CCDFFF995EABE3BB7A9 50D5D1AED861E7D3BA8D333026C673C5762712E763E59261426044583D789C67 A606B96F97663F92BF104CE02FBFDFC521EC0D6670B7D4F85A229F51426DE912 3B729C4A535FB7C88D0A5E78074751B58885DD6BDD2DD9E9C83F105E8CF63DDF CA7DB39D0319CA7CC2E73F42747F007574DE25AE1538B4D493D22D0D5F0F80C6 5F6FA3937C8391DE2F0116F81DB2DB0EF751EC838A7F85F163A6F48804E84B96 8D715EF25B7E2A5CAECC558D80F421052A1D698F3B8452AC27E30A4E6226E3CE 084C8A83ADA0818A110923CF7AC7AD4CB92AE4ABBE0A9EC1FF935FD02774C1F7 92A278E513012AD17722A23C55EF82E18F8847B5CCE47F4FE3EC508BA563F7B2 AE56C94285A18DED4D432FB0CEFC05A20BC17DDF9FF919C724810A8ED7358A27 97EC93C1A13C443A91947FE1F6F528EA7B628917FA7E554A1D7B31ED46C5ABCF 92BA57961C8876DB4041305EBB029B03D8351D5E2819FF87E97ED214D8F1CEF5 7F7668DDE223721C0B810F4A4AC81CA4EAC86EAE546E1B15D91E626FB9A31824 5BFF17C4E79FD56ADBF6DBF01BAF6453A81EBDCB38A5FC0FD0FF0646B3B0D199 13E2E59A1B5CAB6DE5329BE389BA0E2A2AB55CA40B711ED746C24F1E48892E76 6DACF7DA163CDC90CF076763008E7A899870CDED5A80758E6177BE6B93B07EB1 5800A3BF7B9AAC3FA825CE594EF5B7546B181375FA8F37608DF17856D2F8EBD5 6030A9E6F6BEAF224AD2AEF76D03B023E2FCB922CB8E3C6816AABB61FE6E4F83 F21B4935102C860ECA03DBEFCA461F0E5B93E5A8D18440BCF7D1D6252A24CB6E A64FDAC8B67C4888519AA368D9C4A8C08C7155DF5BACD75C5196C571C3C456C4 7CE8D90215FA6EE8CDD72C48740F7F5930EC3632DB63A9C8D2DA125088C0F05A 9FC83D16B7F53163F4EB6FF372C6C3115F1E68EB35967D11126EDEDF0BF80817 E68A698183B3EB0A207DB43786E1B9D289359D75AD5E465328CAA90E712C2962 AE2A466173F2FF30EB535A6054BB0B875DC8552C16B49DF17CF84D98D35497BD F55E273FCBB0C735899529A69990E09149FBD2DDE64B7FA8D50AE83925DF03C8 0B63EA158FBABB12A028803DA4B9DD6C48C0FEC469C4E730729F4BB420D5B003 1918B4AE9CF35CFD31E8E62A44C0484E3D00143BF1D330235E821E5CFEAB4D31 7CB4604DB1F310457FCF9075A3527279644D908DE847CCD00B6F50DBDEF91D3E 38238CAF550FDCABA2C3A46237218DCC5A09AFAF69997E1EBDA7EFE6FC99ECC8 5D4AFD5EE35FE2346BE79B499EC8EC436868154A947D13BC02C780EBA4B9E64F 3026F1BF5DC1F8D64FEA1281EA40B4BC355638A3A59BD9055BCBB232FA45EA0B B405131B64F105814019BC55466EE78E9E9ABB62DB30EA452F7EFD7196C76A85 15B2CFCD89922CADC0F392B0C54A231F3999AEFB53C24EB0C63B0C8A1A1ABB6B AAB2F93E5ECC7AB90EADA320E918106BAAFC1F8C425C617639984629018BA674 6FF4F338AC43E23BC3740542911C058D43A49A11CB3A0CC8E3088BB5BA6048D6 CC2AD250DE956BFBE83BB24C945C20D9C22E7105983F284EF478F9B68BFB0322 EEB7D62802CBAAEFF1C2332159DCC7243EA40CE15C734EA905E04C476B178B82 A08ABCB0B86A7330C75E62EE7844C9E22DDB013ADDF20AFE08122EE1B930A81D 806A0F8CC584CB7FF5F56F9B35E5FF78FD93E7E4A40C64537464EAA275FE88F4 461FC6A467C8A69B9A9FBC10D44AC1B753D313A8E7D97F5FAEB60F82855658D1 4DCEE043C8FCDFD8A29DD091F3BA55874A458B2B8989F35055C72FC411382361 9AADC717E602B48D7C9521D3971A6F7EB19D539445DDE9EFBC5B58FA9E5E426C 172C45CDA24985FC4632287FC3B15849DEB56F5A061993AB10A6BC59868534E6 69888175053108B77E4978D971B4EC57224C0F93EEA4C15AE92254140A94704E ED5666FC06C5341F643F779CC88A9E81891565C63B6F7F6286E664F4E0A48690 356DC96F1B98026C563700772485B83BFA06435D4E0793EF822F423C93FBACA0 E5D889D2B76771C6F0EE997A5DB43C2F6921132890406E3C33F6F159B14C5D78 7C151BDFFDD02B697315F191B5490073EB418A4FF2A398C68D44F0CD1B87CF9C B52F12728B72F94D752D23151196A256908135C87991E508B8906CE2539DCA8A 31F86809C8C6C18A09F6129BD7CDC6B37E76B648788056851F22BD3E3B5772FF EC01D822B57FFDB3BAE624F05531292641FD6A7E3666152D18F6C653048DD7D7 98A942C840C4A0FA662F260B21C64214152BB86F03662A330109C5AC0A5EBA30 C6201F558858130703DF76AF4FBBEE069BDE45C0D9467077D85FFED4F9BA9C61 AED87D67CDCA453A6528AC5BA153E1039D9CCC556CEA5CBB542265FF54A1B208 E0E13740E7E7C26AA00AEE909F8F3ADC2726081A744D8EF6BB711BF5F611A900 76F91C26A338DA13A7160A9F42410CCEB3190000D963D036FDA05A29F598EF40 8FAE6F8E7E6F50C99C3304A573501C13A00023085F057DF331E3354CBE65D573 CAE73BF15B3B96B502E0AAF2B4A86237E98A997AAEFFF4227D5A26E8972C48E7 761F430733E6EF8AB2D903C17FAFBFA21C25F8A0AC157D397BF3CC1AE7598F0A 2BE4FB46B29443CE57F41FD5F91122E9D86F903E94D5B55E2BB95949C156D138 89883BEFD634311F9280C7F028DCA6408D3A682DF5B55B9F7ABF08F019190F60 D39E4F0E80F0594235B09A5320109638B938633A2C196E4ED2B43DCD8643C3CF C6123B076B7F73352F906D96FDE0FBF50CCCA432712C574D5857838BAC30B485 D25024EB254A7EFE57D1DF0892C275CDB3DF77602F0FED0FAEBC644BCACA04B8 B424DB125E487794CAB36E01B5E1A26F5E1E97A739AA36D77A12F5B45338EB39 AF36CEBDED55DCBFCF497FD475FC6BAB5530AD6153C6BD982564EE8712185F1F D5EA7ADF4104661168A01994C1FD773A50C8AD6A3E4D332E4D59521BB8BBC6C3 866EB4AC3EA4532477E6CBF6BBF0860031C3B916AA25E3492670EA67F55CF4FD 207C684A0DDB6F4AD21B2909CBA71BCE2E762012B0927BA72367A6AE0AF87F73 756C9BC85E4EDE35317E2CCCD138C02C7A8013AFDC1A48C3A4BB8EF257BDEEA7 60E012F54D12D31D18DC59D5E526F12567B8688B4B67E16B56713870300016BD A3B9DA87FDC865246AF8E94316799110D86B1DDADB8A673402D4226C519C058A 1D1E5A5778584FC28AF12819B1924060BC4F54B1054EA6AB0149E04B8C4302D4 A56D8A347EB5D3D2A0E12CF7E35059BDB53D9FF6BD25F6D9619BC4669CFC1048 C6C9978B8751B840F27D82A69075832BE59F55C1737CBB1220FB8FF691FDBDF3 03BD7D225A9372AC221C38245E48320E1CCF898D9EEDD678E5B8C65B7F588321 1A3953EEB9B39EA9A8CB72DB08C3E9234DFFF5FDF9DF804C021D57E97DA7622B 97F4CB6E0EB640E0DC9EA15C5193F92A3A7565F4C7A4C9CC327F7CD2C44900AE D9E76FFE62FC37FA376E77131B566AE67C3E09DA80F198BBB995EE8FA47EEDB8 4B467C6C7DB8AEA745CF8C56B8BE56534E9C56FCB2B7006426DFE93D728FA4CF 94F131C549814E54ECE7C914C5FE8E4961D3437CE7475D03534B62650F551D97 201C794AA877445DBEB11C85ADF6119B05360700F8CEDE4766E3A1D7A35CDDC7 9ABF7C619E3868A39D1852DBE1EEAF5D7898C78323873AC005542B68C43C5000 CC58F675EB595F87C879694751494676465891E8A897158B481F11A171CCBBD7 29603F00210CFD7FF31FE3D273933ECC34AFBCC4108D9B76D9ECE63EA06CF939 4799092A54A749DACB82C1424E9879672C8BC084C360014C9C1B6D5D65C68AED 66CE329C3AD712C0A36BE7EF03FDF339CAA2E0336D387A693B1DFAB5D5164E31 14755A158168962C9B399F8F1DF3FF5060D7464D5071058C30C572A2BC7DEE53 84BD7614A4BEC4C84E18CF7EC81C811724463BD46CECA5FB57B0F55EAE20CC74 6AD815D1897B037C197D2456797B992C20C70B663BF99FE28C513B4E221C8E12 49779F8C0AE8517048ADDF7CDF0D698E3EFE60071C4997B7F5EF12B6CB65390C 224F13FBB99FFC034C0710F05019899689B6D3350BBA65C7CE7C2AB03D81B9A5 5F3D65E4D462DAB189006669F7390A78A1B8908A4C913B15DB8827DFF15BB9A4 A6037DDB643103B937257A7DAB025F09D53FBBC2BCB6B0BCD8D56B2B2784E498 1F6CF8470DCC892AD0CFE11578718948BABF9C142709006B68486B326967A28D 41E878EF9CDFFA015BFD11310CB2305640182A131B96D73348B7ED8D31A29D7F 2D889D8EC4F6C7A55DD179594ABED611CE4DE790CDDCB68CC677A362B879F4A7 F4F84113A561F6D170454B0DC4DB2F973E21176E5B00D0774F0BDB3F0E22D753 FDC635611AC85411D57FCE2CC85BB5DAE17BC41F3C1E5CA1BE272ECDEC1C574E E68E33D269E90877555B1E9AF694D44B85295968D0CCDAC4B5EEFD6E6F284597 DC1016F2D7502E91FD71BA624C499BC62FE7B4734070F8C123A633E51596A0ED 00F273E0DD044A7DF055D633040BF5853FE171E3442C0A00DD938476920CF678 69A9DDF5A29AACE82231873F15E4EA92B37F9045EB711B4939EBC0785F347643 5792033AB924266D8734301BA52C5192F8B32AE780CC9D48C832833999E78819 CC4FEBEAAAD11210EA3D220AC1798A5781DFBE3E47C31D0B5A0B87147FFD44C2 0F4FEF9B7C06072E0398F740D8BBD3FB1B9920AE84C085461C1F5C08F4251173 001AC878E423340D008E73A1F49B6058DBD668C43C513C35AE8144FD672DF548 C439A883086F14F419820F312F3127097B59ECB9ED4D16EFFBCCFF0CF648981B B0F888C510C0CB3C45918E92417F6CC39A8288A88398390816BB3FAC62D2051C CCC0A389D730EAD6B05AD28D4311178DFBFE442372B08A31D416B78B71520456 64620D9D0A3FA3E8BA66A32F7839E4410B48557459EB0918274A879B02E0392E 5AF97B16F09D2B8A3B514BC1BB5467D359020C43A00570AAEBD3DBF637154F71 9A636A9700C081553E214361B2B57EDA19BBCCF098E1870D0846736F0649DCA8 FCCCB124E1FADDFAF3D5925CEF54EFE72CD0D2BDB735D18B4103C1DBDCD8EACB 15EA2822AC4D8AFF79F1746B14ACDB6FC83D45B9D3E972710DEF408694402960 947DA3B6BF54DA82FFEBC510725C300BA2FB19A603ECB41DC86E8ACD2DA44C5D 157E7B53ABA05461DA40B675F081053377364DEE80EF49C4B5909FE549B798B4 96C226DC16A18A9DE663612661F780459D9932AF482B5E2351E3BADBEFFD4B49 D5E120C8C3C96A3D38A88E5D4A9559465191677CFAF1B1BE5B9FD0D277D5AFB4 8E827DD0B979E7FA7FE01325199C2F208A02EE453F545DC69D66B1ED9262133F 9C47E58A0E5014E9C2670788FA0F0A5CB372B84435B4041597A8A5773046E924 6DB111C8DC2DF76A47C644BCF5AE4D4B413EB0AC2EC4684B0A43C27EEB591A20 FC3A54B30B97687A68132FE1D54AF1CF3B8106818B86D27EAC3EEBE036BF4834 ADAF2241CAEF0F022DD19B6BE121EAADD1CFB01AAD30B7D7F77919DD70DBF832 4DC9B2B6C25A3BE9D59E069AF3D840B66E2A469CA4E39672C362604E9BC5A64E D166531319D930E8AE76E353293D1012EA832CFF38AE62A7C42F405EBB4BE70A 441D370D79154801E7BC5E2DADABDA6E00AE7B6B014EAE43B1BD54CDFB491ACD D3A0CE095510B31BF32DDD3251C9A6072DA950BAF4F489B0195430221E57E37E 97AB17B4D2307FA2099979A3C21A143DB47B1FD59CFE37AF2133A00A362456F9 0039363E61AAF973165EC8BB073E0424A00A07109E81CE8E5CB28916BD6F045C 5D3456A4233D51BD214B178AED5690B862BBF3976782EE4BCF8376E6C2DCF469 EB5C1E9EB9C77EE6DA70378128C770A0DBB28EFC16DB6E164AAD58DCF3A67012 298FFD7786900E7C6DA838DA48A91FE7E9CD60F1E6A719845BE9A914353F9B57 45FD159FDC306C6083597291DDA7974D1F52F916817A1E2DF30285013FBFA39D F37DE225630BF0B5CC539DB392A7BC2B0D206B0B603771A27B121C5E833A8174 0469AFAFB39332B22F2C43C3AD99954E96E39B52434F606A9600CA3D2F073F1C 0990081A58F1CB3D1AE407859C2CB4A4DFD8AABC87C8602037DF1BD0C0AF018B 7EDFA7CD5C0299A4423C3ACC13EE69921BE10BE83D8AAB025DD3F0626D2BB121 ADB12910695BD5F08E090F2B8EB1E28C117BBFEFFE4306D1575EB81A29F5D2E5 9D07000F9EFE52A34CD120BFD980910C422AB50EED2B07E76A2E0D9DFBDC28DE B481D305165D6F1C34F50E447EE2FFB8BD7A93A9CA158E30606B839732AAFBC3 3A08DC0DEF7F0FA5AD73BDAF2A944A733AB802CECEE10FD7587135CADFA94D61 F01CABBF11E31A186CCF1DA7759610559D2BE1A42A0C938CA967CD6133096A5B E55C320E3682497FE8EFB32B0D6FB6CE4A20DD069469BAC1DD52793A4766305F 6A9E87E572958D8E7E1300DFB1A9D4AF6541DAF4C414ECF4D4DEBEECBB3CC2D3 BFD6AF65DB7C35DB9645617A7E3821A45F2C71B2408EE18911722C54C634A835 5AA673AA61555E002E2172CCF46C6A382C2C2E92C6642D848598EADEB940EC28 1B389CA587AD7AF8B3B4EE8664ED9740035DE66C8FFC3DF446C9FAF0EE7EE5F2 6DCC0AC3769FE4162625C96E3755B3035CAA737771E0EEC508D4454DD38CDE10 FC092C46092DF18ADE20A76F8C68755D48F1F5CDB970EFAEB0805B348A8F8C24 43902334481AC8C74E2053952BF5EFFBCC0EBC6F0B79F988CA18CEFACCCB3D08 BC7B436277D984277A328832DD0BB1AE6561789155C7718B7DC92CC5FF1EF5DF EC486EE6F7BCCB4E507207944DF6041CBEF6479B384F4007F11693D6E856D703 E44C646F4D144A9831197B601011B9918C0CC02A9E27689BD11D8271D1B2B27E FEF8A4075EC80638746A30BD2253D052BE3B626E1F1D2F67B2EEA617F249A0A8 CCC3B3D41F557C058FA947C10C366F69BAD3C4A731F1F1DBDCBDCD0D3F327112 F4639EEF25BF7D754C6FE71CCBA21374FE190DB63D2664D17A76B7582DD86737 CAFBC0B650029317CB7E15B9A00C0739F0135BA73D786643D1C379D6468E299E BF38E5196C03F099DFBC0CBF0302601B3687244EEB546BECC3E542CAF4D4158D 4090CE7325176E9A61EE30F5B47EC4E01F33AB5CED77BCEE865D58885B183177 FE07E8FC2F2D41E36873024B4932AA7E3B6195A0E43D13BDC8B524954E657782 E8573E93A65FB180A6A339DBD6BDC19FEE07DFD4F9B6EE5E28A30B980094DA28 8ADF8A78D0D9E3F9298E92D0396F53F264BAB670295BB2CE1C1FBEF593A07567 C94E219F24269B778C7D74930E943A1837F511C5BEC3E88AF09C8E66A6F2CC49 D92ACED9EBE6170E0A32839F64AC488153B1283AC48726D210154A30BB8ED88A B38E5BC3EBD2E3433B539FEE86D22AD262AEBCFA010182C3A5A261996C091402 D6400E234A9C647D2AEAAA2BC66CA6360436C452C3BA207613457AD2C1F51D13 98CF95A768FB0370072F012A7A540C0186F1882F11EE5CF9E35F66B118166C95 50243604BD371708F3B924FEBD556B4B38FEF76B6BB01BE30D5EC8EBD5FEF8DE 9B2B32960ED74B24658350B1EF3FAC68C7A96B332A74E0903F7F4243CE250330 C7CAEAEFDC5DECB24479E2CA1B695412BD1C81964B16647678B65CEF1049537B D7F6CDA8942F2F80649C10D8A954DC895319E19372F8A8F560B7C3A5EE4B63E8 0565D0F08B43D55963E541E4CEE6FF16F94A0FF62D032B60BDBAB4CCC6086081 CD0611D64505D3651E909C6828EAFA31F84E472B3670ABA58DAD62D1B2699B8A 4072CBE57FE87140D85D87E87FEB5605DCD3DBAD9FCD318789BE943F5A1C203B 1D0C4276FA4CFB91DC87ACE48E49C5EE01001486C28340FEC7A603BAFBED81C8 F0C864CAC3E4B3C640D397FA5B2262D29D155FBED9BA847794CB53C9D166ED96 428089CA7610DB3C4E0BCD9CFE89EC4B07F2F740F456E8EA13F6E6E9E654D996 D3BEA1DD13B5B0FD63C44182D5E70FE24EEDBDFDE754C6FBF0C3EED0A71C3FE3 B6C41251EFA2D417D2896B73C164C32D13311311EDA94E67C5BB9D19778EB744 45E7FCECE3A04D250895ADC7BF884CA7EC7D7A4139C72B3AE7FF35611217D714 4AAEA3515CCEFE982E67915D47CCCD084837B0A53C46A17762712980D859CB3D 3D5B999722DA70E44933439B8D3763990A4B30277BB69F1D90129EC2A558225A F37C31E7FDC1E23A84A73C01D0F271AD4B0E950054957B4B896A1041093CBE90 A815A5219D147A19020EA4CAF00CDCB320F302137CC297BE3ABDAB8BADFF46CD 54B3C9D1356A0E16228B048FC4D1D19BCCDF536BF5ED0E80A79878B4AF576613 8B7C516819F0B896D21B0033090C3EEA0AA24EA25022EBC73504BAE6901B9024 EAC1BC7F91866C4A2599551D4C52CE1428DB6857CCC9405423C115CF996050E1 9AE117BF7C99964864594E8AFA17A2216B4BA29DB7C474D1F990A9A22C8068C2 B949172B0652EBC1781951CDBA435A27E09C9B006CC7195D90042514E0E3DDB4 407369ABA6B6032D3CF033EC069F3DFD71AF78673880AD5851A87820EB7930C8 BE757FDDB83F0260EEE896322A9EDF3BD3FE02564EA1B7A6BF0D7228A2CA88F3 A953897419E2FFA3642568B6135E80C880F7FAF495FD72F4F64741C5809F1062 6778ED2352CDED76F786B31CAD56FF90F71BF25E382EF81A39E17E43E23AE03B C826DE9F40810CD362FB2925BAE501FE9DDA1A917FADC8BFCFE689965C728AD2 CD72747FCC1CD24258954397AEE76067F540C34D7A9EE64AE0C3AE4C3DA3640F 371094873F14C35C4E7D165F8AF1D7DA1BCD6C5A315386A33E55116FBC8640E1 0F3CB5F47650C47395A629798538909249BF51BE9BBE3B9F12CEEB2EB4364F09 B0B8E434A83F492F7194612C26F978D45CDD614715BBD7362D859BA7C9AFB3ED 641A48ED761AC6398D8DA857049E8076819E03E2C9DBD4315EDE9750F30E742A 1321252BB55981C0A52E47F876338A5C344BFA1DEF6254837FDAEF1C1324B1D9 2BA8F6995B00591F253461DED642A29B71EBE4B78B1F1E6C04D3CFB7B60E6583 1F97768B1425B3568BE5736E35BC3AAC5BA74D3DD9FE5CC8BBDAE6554113C0E1 96F214186487FF0972C760A6700EDABC20617C26742EAA71530F9C8AEC4A59C1 B8705125A6D031DF578A772EDE68AC3D3F1EF7D6B049909D4CB3E69641D3795A 031CCE8DD84F963A6B9E315455E269B62F6E67E9E32AB0CD0DB92F66B59C8E41 8B1F91D249E921BB93EBB469933EF7D8B39D21689B64B4C2B5A9CE488D97D0BF 8641166B17EBA8BCE9777B0A89C6699A0E5E1FFB0EC1998D547660B384737EEA 1A650129DE15AA4D9FC860DECC1A063F1B8AAF06C343C2A8C4B3A3E0637E1495 97DD8FFB9E97471D03949CD44AA4A94FAE29ACF3A7AF8361BCB31A1D572984C2 7845CF32648FB17256B98F0B6DFA719645CF2D8406BBD617443716E069A24ED9 FD2FC1FC8C4F06F9DE71CC933A73FDE92A982F9974B3860F53C6261E441363C6 0069F3287DA67DEA38888CCFBC6A72657128C1D5DC9537802F0CDC657367EB77 762F6B47A647240CE7028F53F021B3ED058B1F1EC43867CA595D47CAE140A118 57B079FEF65A70CF24D4310C3F223D8E4D43C2316FFD6D65ECA0C1D1B586E193 D27558527320A7432A691393605420FC9F99BCDC7A282AD684407D3AE72A28EB 744B5CF2961DB6CC92D2B767C29BAAA0667AD0EC83CE5C3668DFE4A2D72C7B84 EACE9E0E190CD549819511601E79B90A56FF4F02FD981CA74FB182380E87F7E8 D794A12D728F939FAD3222D6235C7D7B0AC653ED655353410B5F449DAC7BE1A5 13968F617E9C903CB474FC269966B1CC9B654888E8AA5CBEF493C072F88D9B44 23BEDBD3DF5D98F4AD027B8959FCD620C4A50FD804415C5DF53F61F8300135CF 5DCD081B3854D2EECB6F5D86EBCB80469B1DFDE690D39E05C2AE3ACA209EF686 634ABD135C7F6C7739779300A26EB95357820E89DE3A343DC4F3FE0A58463D66 ACEB794DF7184E2F8F37D89833CC305FB59899E0982C79774CAD6A68CC646E96 1D0B73BE290AF58962DAE47BA124E6257B79DB7D943FD2A0FD9D0BF1414AED96 91D6BFE4A4243B996FECCF346B38CCF38918BF6EB7892CBB8023B096D06E6078 141866B6C61D1438F76E24F51DA3C6A7067F32B1F30A9B327BC285E8CED0CA66 66279FE676465CC8775BA6FBFAE1FEB947688CAA3D5D0771555E784947A5EFFA 95F64EAE4D318639C694E057997CB1EC12EBFFE0627D65619EC0590EF18ECDC4 124856F1B8C72327C690BE46A04DFE8A535823284799138835E28EBC614D1544 3EB082412554FEB23967CEDED21B3061D4A76D778C8B0537CA6C5267710E6C43 86900CA9685EAA3DB229BD69D93B916B147DC3E3C670FFADB2D9A577F20644DF 02B0DFA81F5C35E7B0F64316DCF80CD2EF264A4F3C549B6BCCB32B1741CE3A91 75EFC47374CC9A0D308BBC2BB8F4F0A412A6E2002FA77E8537CE70FC97AAE067 EFABACEC50F5688E51B7BFA2828C2BFA18A6A18C8B8F25C50558E61A05E73082 A42FB21DFF03DCFEC2B885433F85A0401D62D0B8398615CB8366901637B5339B DED6AE8D941D8EE153EB45FF137CBDED7E3763BF964A0A6DC355199AB1114659 30FCF4F99BBF8C59FE7D425776814868C7487843C22E7C182DA7F5507656982C 91A871AE87A63D52848118CC24BA6DE03D0141659DD7532D8ABB1FF3B0DEC26F 9451BC697303FF42757B2C40D5FB876FCF6CDC988E514815ADE95F5C1AF7406D AAB1FC3DBF9C2850A1A11CB792CE4A32319DFD9E773FC6170A385C1A1DC9A270 4AB264BEF5B02AF0E5E38A87E0ED9998B74EE4210D1A5157A2D5DAE97D99C95D 36646286FA3AF89B2A869A84807F0C437CB0DBD1A4B003514565C011A0C0C4F1 18EE6297A25CBF43B9149D14B436D50C11BEB1A1ED35B741B8D60D7E4B9497BF 0BCB40DD765F7713204E57BF48C9374F287F2CDB5C39724D6E35D06EC47001D8 B71544730985C042BC67E886B092A7F296C4E8BED59254EAC5444DC10889F70D 21DA29BEDF1671BD5DD0BC9F451DDC73DBB28035C5DC4D7511917B10855219BF 9150E1D4B656B7FAFEA7DCBC36BDD7D3572B730D151A49E4F8413B43442D1A20 AF423A7C1FBFA25CCA760568B82FC3F252EBD82894922DAE2A2EA8A3D0330FEA 60663D00E162C6832FCD9785EC5BCE9A71C10FA6B86A23660A94B952681D6C79 C12AE57B39456D86070DE9A68595EF564B3B0869234881156919AC941693758D 41A2F88498F2E3BE88D1AC22D94BBCA2FD7D159B03084E5A19F8434817927D38 41D2E594050F30257D72B6E62CC45398BE4C9CF5AA6EA2BA95A57B5BD0A41D57 6459CB43449B7BABFA2E86ABD130BF457C926470B658DE067D79860234AD6B54 3CB95317A361A02F1E1790462A4B0B8F5300C8463E5928962512B0B12DF810E1 949AFE82C72102D95C038E045A262C38D6434BA752711A745DBD7FD212BB1BFD B2E11C170731125E91C3EB17EE1FA2FACC65FB2E24FB9B8168D1A4AAB0765D52 C74559DDC79A1EB68766136D02A3A37917279017F1B29582B7C72A9826E609BA 1C300327BE0B3DF6072BF7F973FA594567DA67BF5791DD66D144AC04CDC49704 9869CD33D9A16897A919155B80FB965910852D23C823B1B300EAC026D5B8C008 AA984B23F892BAF88BFFD368C804F7D96716ED31E4E699669339A05A80DDB9BE D3F32EE30AE8681D26CD82C53AFC1DB009694DA4E16C7902F29ECE9E8224CBD7 A8E1F43F3A611CAB85B59BE50BD992FD3EFDEFC80AFDECF80E009B4DBA9817B8 2B972418907E1BE63CEA9A40DDEB637C8CAA2FEE367E99FD904467526BA84CB9 B1803D2F6382FD21C0F961B430813640172E3C35444D249D1E6002C419CE2BA4 B3556BA222EB4BA93A3027C01CBFF3E41EB0845CB14445053C2B240D59BE6BA2 7B3B2C8E42C075E989FCA923AF2346E469D413FF9F13521BEB34FCEB69B2831C 120CAE1B4AC26292C652A63231DD4724DDEF95E4B5288683CA85895C930C18E8 E32539CA984F18017C7F4D164820647F8BCFD23D232693AB13340B75B762B3E2 52C2FAE0B5B90C3CBBC58492AC552930519AC945F967FB4F2C70049D71A56632 CC17892CD97994D4B8E88296604967EF539126111C5899AE52E97522753F10D3 984B9DBB9386684C89B6B2A33FAABE14DDC48FA769078F8C8B858EC9334D7375 4D3E21ED317BE334B8914C028C352B02BDD624921F329623E9533E8533561D0A 3014045B9A32D569B98362314F1AD1424442C90695A50F8EA3689D7AE393E86D 4815DF28E5C9442BBF520A299A3A6647BB1375D24D83D49E3A240F1737673D96 72A0C50FA68F9C3811B43CF3A3F652A41CEF6A615425CC9E 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMR17 %!PS-AdobeFont-1.0: CMR17 003.002 %%Title: CMR17 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMR17. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR17 known{/CMR17 findfont dup/UniqueID known{dup /UniqueID get 5000795 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR17 def /FontBBox {-33 -250 945 749 }readonly def /UniqueID 5000795 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR17.) readonly def /FullName (CMR17) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 11 /ff put dup 12 /fi put dup 14 /ffi put dup 34 /quotedblright put dup 40 /parenleft put dup 41 /parenright put dup 43 /plus put dup 45 /hyphen put dup 47 /slash put dup 48 /zero put dup 58 /colon put dup 61 /equal put dup 65 /A put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 72 /H put dup 73 /I put dup 74 /J put dup 76 /L put dup 77 /M put dup 79 /O put dup 80 /P put dup 82 /R put dup 83 /S put dup 87 /W put dup 92 /quotedblleft put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9D6295729076BD8E CBC0F4C1BE246922D2482233846A96D867B66D9CF25A1DB661141D36B8506E61 A022F9EF8BC1F2F674EDF1533E67A78CA29A612AA9268E113C5EB84DA56CEDFC D7A111403E6E2A8682DB04368889747E003A124395ECF0C7FC81218552EE7C6F 60BCFB4120893528670D0E8A4117EA5676915E3591AE5652D003EEF67818A41A 8882E102AEEEBECBD15DCF632ED246A6A58B6A7780DB6F1F9AE3FDAC8344585D E104F2BA2DF06D68945889A2A3B6C262FB53FC670BC5EB7C56887FBFB7AA7026 84115872CFB0652C6BB330447AFF8F0F665EFD6A41D6DB6877B08052F402448F CB21C26BDC900636C99CA347B79AA73AFCDE9762A992CA3DDF7279E5C50F453F 52098529850AFB1F501A442D6A02E0A2896F81C8AC735AF1E7EE47208B4CC944 649DF6802EEE813F1456205C6126D7D0B1821AB62DD65468F3A30575E491623E 0054E2E680E4402E1C8C538DA389B81603BE88D6DC287A076F92B224CD58A0AC 44B8D490197341808DEF243660971F444A560C747BC6F52707ED42A99736ECCF EBCB694A561C3A70A319D204CD40D402FBF937A00BBCBE85DD26C9E3F91B7D10 D85B9D314BC3AAD5A58B107F5F341BE2C53490924142566417D6BE03BB4977FA 6635EA58DEB9508E40B9FFAC75FF44C683680CF242FE210519C9BF92483B0A54 83F48341318BE16D2F8C988FE3DB2E7914581F579D5E323148A31E4ED03BC24B C990372DF5F3B0C5FA32EB2CA4FA0EA33316569133C87697BAA2292E685C26CC F8CD40A2366E60B47D47CC9D0FA29D2836011376A07F78BA7664DE96E775CF45 9BC91559A063073A4C2FAAD0893C517C5C46A1425D07EDCC2B57162E3A45103E FF26A2D2F98B194256A4B052AAFCC08965A50EECD7B9E8F35AFDF7B6568B3983 8030655E7C2BEC961A2F20539D617626E8454E3FE9EBD3EFCEF7F63498441DAE 16CB509BF239FBBE25EFEF07A3E16C9C71EB8D9DCB8403916FB40FD7F4E1A52F 72F2DFF94FD14D7D49FE775390C17C37C1BA0CAF35CF75D682B7833A83224158 D54CE962CFBAFB1B2CA50B60CBEB1F8F58DDB2F5470C355ED9632342D9382AE4 5D33BCA3A0A25EE9E5B39BE5370E7F20684C664EDB48E7973FEDAD9676F9EE8F 701CD4D8CC9B9EBC06E8C86EB88AD56E15CEBB8E1930E8F711CB6E01D5D14967 D7E6C1BDDDE2C4D00384EF4CB02877DECC27AD53FC981338977BA0CC0257CF7D B42E9BC91AF45D9722461EC3CD9DEAA8011FB855FE14B74BE0A102008EACA2B6 0E287BB4F466FBFDD6E65A5262B9322F95E20DAB875A10A84572D982E6FC7ACA 23C0C37E5EB47B8E69C07507B53CDD98CD1B6445E1699CF35B3DA3E0DC56BB76 F997C40E2ECE47DBDDB707EB527055960113F2DABC87FD9EC7D0AB36B400CE33 0D54D4F197B2830B43DF0AA802DFB2BF747A4C44B31FB708B2C8BBE1955A6A28 379C91AA4CC065A50098AEC0B837E180B76801865A43C74859DF18FE1DA1483B C17843BF1C7E1B11A8C6D8BB8CDB1D552FE6A1FD0A696A8F7405F2320F8621EA 17C1A32056C45A9ED35D2BD12D02D8B26489CAAEBF4EF33B66FF4BD9B46E4823 6395831A8F3366EEA0D0EA88D612DEBF63DA7FAA24DA979ACC1A52544BCAA007 6C39946BEA6076ACF45722B2B8E4D0823EA2D12B14A98367BB0433A21FBD9F94 18DF298C56F67ABC9DB1868D431A854DBEDF8E1F49E359A545C75A7AA1FA4D5A 50F1EE6B45FC68ABF65FFF257964E4E50D8B0C1FAF498DFC554073697C2F219D 4A68DA9E873B270B9C56F0DDBC9927ADAF9203FD684DE615F68C24ACFFB44690 89C0D5322049FA69E7FD00EFC9C9B2BD177B5B339907F81C31496662847BEC1E 56B5DCDF4FE618970F4268F475B2EF7E0F28CC986DDF098E59DDAD818649CC35 4080C0867A884B8177A6880F06F1E5CC130AB4243EF8DD8032FCF390765BAB1C 1F0C9728EEE261A09F8C1D7ABC7A6B1550551BE2A7D19D45B656650DB00B3A5E B3E1186043E173BB4DD5EFFB379654F88146382AE3F7196F099BDCD6D245FB6B AA2FA9B6CFBC9F0CD52798DDF2F13874BDE5B124DFFE0DD93E24C9DAEAE4C3BB 71A9A13AE2860F620B4EC789F95221015D9C510CB4AC775EF69DB9E32E59C896 1AF82C9F0DCDB4812A37761859A3D3BA0CA57F244489C78065346FFA78F5F7C8 0B2E8CBA9EE62FF5C27369D0BCD52857D40F1FB8F8A1441B83565A4150AB1945 0B54D6E49F66389E43096269EF5CDD39526A288C0CB81E324E75D326EC9A182F 2CD966368CE300B41873B08E17C3E6BB51804460D2562AF5A12339966F44CD09 114C6809AF246B5BA6937631842CB9417781A58944B6BA4FCF961465C208957C 81A662D560D0F81BD3CB53C06B6D979F04F6121CCFD5D52702CBF6C70C01EDBF 2040AAB9CB144321E68C4010E0E98CCA2603EB55DD62E881DB621C37EA4108D1 528ECC7A0121B57C6BB1E26F8AE7161ABA7E88256D2D6A8B7CDE2E730D137493 3FF628EF6030DD2330D747FABBA03B44CF600418C245C388F33EC5559E7313BC 4B530C4FC12530D38B27D6408548F25FC084DD0523B27D29D6518D3115AE7755 37162CFD4CF528214466FE525B13782F9C3CD78F3D6C7423E63A134C0A371F15 10F4ECE1D482C647B563D3D15586F80BD9DF7381BD53927825D5AEAF762E1CDC 3BD184F345029A95B3AD4D1B66E79AB4F0809418C0CFD4D503457A190D02F134 3F57FC04FF655AEEB783D6791E4EC300755861837D3D50649F6B7F60766211B3 8148F8E575E28D6C2DE75B15E722ABFC6DAADAE53D89FD295352781DCC2CFF6D 982F6DB778D6FCBF1B7BDCB53F3A23AE6EB499BBFA96E8BE04C3C8E5B660EF24 01EB842DAEBE979F2C2DB72AAB4D21627063B1D3C6CD40944E4CB81655698FBA A343766CB22E392E5DAE01DB33A00918D6DAA07F2F38B336A3C5DF3708865E75 0DE04D3AFBCA27A249E97377D5785B4E28EE0E93F7D353619C200DB967372ED2 153BF8BE945474266EB2FD30F80042A11B7E3586DE4AB1FBD4A741D36DE583E9 1CA25DA345520AA60634EC819E7EB493CDB128BBADEC3890F055455F060A1100 D5A41D7B180027E08AD6EE7E393DB9F83799544404FE397F557773BE6A130541 157C0EB37E036C94825B5090EF85F8B4E3DB72895D86687758C20EDEBD6D1079 196E9949DC6ED0113571C70B150B37E446E319EC54D44CC0CF6A14760953DF4A D0E1F33A54D240E236AB63B35BA8E071D77776BE5B9312245F2C6E4FDB4312A0 0D9CF723E7D9A3D8546C4739C00C301A89ABA60A02757AB1A0AC40B24CE6CF12 5850485B11E16646D7150795EABAEB08364A53161111F46A7BC3423A0D3BEB69 BF15726C1F8363914945DEEB29CB8766328318AF3B344FD6D77BBB92BD7FD161 93356493D4D8252AD125708D47C124E44232FB2BF7DD75F87889496DCDB75D03 F58A57D4122CFC194B75A9E9C4789C9A33C0435FB4ADA16AD4A6191928D1663D 05FB8152C0AA176FBA4755205F8A66713404787070757D3721ED6E6D55A59DF0 C92BA8F05EC7BE05D0A2E66DE85E75373483EA3BBEE0F0DFC7E2FA5FBAFAB118 058D095AA71FDFC8AF37E5A98406B64E58BF476C6926725D7EF3C2346CE3F662 1E5A4A18D966479A37070859014719456EA2C7F23E68E1AB2F25ED3A0C00A18C DD403506923BC983F89CCA125780DC76A411472E38173BC0DD4CDA7B43E13419 B5AB0B9A35E77C58BBA12AA4F5C7EBF8A29996B059E4FAE6809565570442AEE5 D56CBF4407E1CD9A4398B1F3ADFF023F64B230E3D29F526B62D964F5C8DF801F E94295AD85BD9E1C18E6327977260A871E921C0745CA06A263E335E344686E7D D6FE3ADB4EE0A7E462F3C00873C3E95D183CCEC71C0E5DC1D2FB310B28FC3611 67C23DE336C374F72368F4973052B48E39969305791C986E6EE35D0350571860 3A8ED849712CF21AEF444BA390644E8646CCA16559BA4642A5800827A0DDC453 7CA0818BC47DF6348A5209A2F0A10CA39840CE6346E89CA0E842BE8692DEF25C 4623A5A0E0B98708B9492E9F564324BB3872D6B953CA59E9F393C477E2AB85EC C557D333E88C111CF995FB79D9432DC94C2BDB3BFEE13C0D7D1BB920DAFA6158 8548447AFC65CD5515D5021E0ED7D213B0C08C35BB424AA91885CA023D7AF767 B83E619B15DFEF5588D2F0564296E14B5A6ACE03751E1016105C51BE76EA5ADB 4167BAED2A8899031FD7BA05C410ADA25ADD94A787EED1A7AE133B0568B1DBA5 44B41BE013782CFCA3D81E8E8210DD506ADFCE7DC7E792EFEF438221164A7D1B 5E7089F476240C5F94988F081943F24DBF7CC3D1E58CB89E1C0C1624682CC3D8 C95815ECC9183A4B3E353C7F920B7E64086E01672DAA7C8A81319BAA03C1FBB7 8E5E84CC5BAE0E107754794C755B7AF00953504094E1A9DF357D51B578259613 8D26F0BA26AAC459BBEEB90BCC98B865EDD26AA4DF533D6624EDAC762C446B6F CF9F86DD2D8989D4655775E662B93BF51805EE3CBA0AE2293D95F166E80973CC 82C53042D0249C598B0821E9E7F218BA6114EEC86C158F277934F2651490B723 7F0D0288560DA5BEBAFDDF243048E590871AD18B3B220EC56549004DF122AA03 BAAD6971D790BC644369FDBEE74A324083CFA9496C2A333774F06E35299242BC F4B26578907CC5AD1893613F2B8622CFBB7B55810162EEBFAAEAB2A6D69CB72B D7859C73843E665125FF450631F32E64F13A6207F368103C7A7318DBAF2560D0 F1CDD83C3E48CB30C62AF1E0896E1962C655D9ED98E1BB38477C1C60ECDB6B95 067D3A638AD43EE886338F7AD2D2A574CE6FD2E21F6FCB4220EFEC85ABF8272A 82081CE70E4390A74EC717F1DDD168F4A4A080A79EE2ECE0F98A96871DA4B52F 78441601AF47763C2219F5A167604C32F478D498835EF3A6167936994F7C7139 3019FF43C97E7978D3CDA641C1E391FEA572D308E759F28DDE2B40B5BC207A4B C5EB6A93EEE26782016F8B6534420BE4D790A2E1A65B6CDBE9468152230384FD 14E9AE84418A44F94E6825DD7D77D0BB5486DE26A692B3DA96C81FA4440C5D44 8E7F3CAA9B8DF38F87E09C4D78841F629F78F4E7CC8580CC44E59E5D9AE8B2DE C0682F793AE7AEC12A8AE688636197E8A08FEB70EFDB6203681A60223B9B0D39 2DA656E5E99B82130D4BE38D7AFE18568DD30B0CC3C73C1E2914ACE11A65334D A9F18135E7B86157122CD221C33C62012FFB16D2D2F3473A53BE3E7B9FD4303F 66ADF0B07155C7B9B002EA68C6AC7247EB3CE7D2670A60138049DAA964F86A05 22983EDA7242E6BEEB90DF61C937399B2CE1061DF1E551CEED4A80D86C2D4649 C9FF9A1F93E96773CD392478D5B70D5336A03A274E0A6EF44BE8CB2274324142 706BC2E340DC944339D647961FD7BF29944503B4AFCDC69A706AA6B0F6AB2CB5 D220A96ACC1EE5E7826F6F75F044224E5260D581AE761AD0C752A06AA03FD935 FAD65C9EDD4E5505396E331D45DE88F0D1A4303D766ABE0702C17E2A7F53C0EA 96A4DEC5A6B6186F5DBAAB05DD78E38AFE630465BEF0EC66ABA9C1C9232214A9 795D105C33CF069F6BE20B179F4CC9F484AB63ED25C1212C457DF62CA0D56E20 608572216F2D4C09010B03A8AA6D287C8F514BEEDC1C912552CC2489858BF4D3 084882CE4F4B6FB9EE27C0168671E6DA154018ABEAD013C88E1D3EC918371251 63D95BA0FE20212C20AD3F4DB614EE36B488A3F55D94C1EDFCA8E68E54A1EED4 7DD168DCCF07C3DDB5E2B499DB5635C5C5056A7438120DB4839427D07F96AB8E F842E285243E40259F6DF029E27779CCF3D3BD7206B2C341045A5A4AABACC2A5 91C6830FE05ACDCFDE99046F16F2AC183426ACA4A89FE5F09B7EB2F811BB5FB5 AF073BDA2886070B2327D582DCBA66B47E8948C3BE05E837BE4B81402A583403 74FF9E938F0E9DC3B1CB81B93DFD4070F9EBAED40BA570DE8F9A5C2C0A097311 22A6065139A6580E332473E9410D9F4C734794F79E41D0D437CEC7381919DF6F A24B170E2BC97A6396A4E3AC3D844AD6E2B8FCE1C6AE97DFC5319F49130C3D6F AF2541EB2384D5D4CCBEB976846EF8C2165DBF706112BDDDEC9A57D157F5996D 95229FD5C71B885D16B177BAB06B9DF5740A45C2A005778EE879193290419C0A A4A339029E37E685B8A05B111DDF94AC19B1D85C8E6026E57E3D3B373C08557A F96E6FE3916695ADFC1F0BF5D558565F42A71C61ACFEFC9026424397F0646642 7EDAA05794BCCD164A645860B57EAD53CB6899B18C6E9496EA4DAB0A0C272639 DEBC4FCBA94B3BF123F7771F602E7667C8F56E12429669F2219C7D8E294BE07B 71E88EA62F5616CAAB7C0198E6FF12A348E36B306FE2684A401399431B6A84CF B46EE4BAA0F4099E65E9AF3B70274EDD6B6524F4FA38C23F9CD5273EEDC8C6C3 E7312B6E0497C05AD3F3C246638F01387CC11DBCBD287ACF54D8E24759F51415 35ED64132EF4158F54AB9F4D567482B3057880490F805822F71E7E2C52F7BC38 8B1F803AC3731064B90E5E97AA3351D17E73DC2FE526CD6C91158636E395867D C1150FD3BD12493FFFB813AF0D08C8ED0B7418A2CF90BD5B783364358605D075 5DEA95A9299C0654EFB28E2FE8A41358A0DD124D0314A27558E42ED5F2D74BB7 056DE04D2CF13B9B804A3CBBA29BC155A3F18B8B48283194C33CE8291677E1EF 0721138F8E0409D49BB99F217607586D2DF00C29A25536E21924B4CF6702CF85 C02DFBFD2AA4DE3DBED1D2C02E21052A8D10F96629D0D18154923638FE0C48BD E2DEAF11663E20717EA77A5453686AAA39D6FF7919AF09B1AD956FDBF734F49E 262F3076F62E77BD45122B55A5913902D9F91C4246FC235BA9C0FA4A96994291 830638949BED423387DA2D455A3C9122484EFF27F5367D1D3DD27D207D973815 965E1CFF36F43C653ED406F65348671D9FFAF55BA3FC266D438AF473181B7801 164EA3F04FEC870743195B3F467DE36B3719BAD9BF15A18637A314C887D46673 445BA3C212749B0A33136FEE9FE2C9A13D62E7ACC96378D257FBE0EB06AD4D4E D41976AB92AC720DFD33B0677062C32E6F5C992A0324FD26E984B5341A58C190 D20EC3F1144697D514D9157340A6C9F82E62AD8CFDEE59F6FF86C6250CE33D6B BB82DDB4F65BEFC6F6D0E4044F7BF307CC346E2FFD191846E3CA288C6F91CB71 5FDE855FEC5E38816CC635C470BF15263A10A409F0BC4877F7E6D4C223E3564E E7BB5B320AAA5AAF4F32528F7413BFB97C70FF5E6843E1FE501472129BC9758D 7531BE576C75840CBC4CD3E6D9E5FF52559B68DE6E7827128BB2ED1BAD43F36E A0CB68C1A147A7093EB02062AC5492DB7EEE08B1BDB187E15339A66269E459BC 67495937B4317AF66A498923322B087ECF47B601C26E253D223A784DB2D204FD 0668BD403A73723848018B7C86B627B9AE0BD9038F567CD5F670CAFC5C4D86FC ECA211B713ACF8C1370191161CBB6C2592E8B9DBF3471133F2D9A60F15D72F9C 5E5539D59A6A7E124D9A38A6FF6EB7C71990716F88E1888295584F17D49144B2 B5775A4F712BAA9B0C6182559006C99277117E712D0EAE7E599E86D33CE2AC71 4B7F1F206A12F524DC97030DFE2CDAAC9ED69D15F816E3804FD3CFEA13347F0E 7BE0B89400AF0C9DB20905E27D47F0E21E67B0F468C846557A983C753D28D703 CCB29BB0939391BC57C2EBAA31C5741785DF54C112D7813F7271A5474438A7CC 380735F02D173F4C57FC6C5867652E35F4E7C1C6B44B38419F276FBD020EE4F2 8EE492DADDE9A7DC2F40FF95B86E299A68B7EE0B47644B357854C93EE113E859 C186C6C00B8E3D072C3235D22A809332835911126349C5E70F17A16A231FDAFC D4F28DF3EEA1AF6EFF5490E5C45D2E2FF381528AE3E23D323472F9DC585BFB14 DA87DE71AD3A047E789ABD9CA2FCF0D1166DD873BCE45FA83C7911A32AC994C4 B96D4043E6462ADCD1DABAC4BC89F49090A2614D86F2670CE5E07478F2350820 CFB768567B865A2666352C172D73E4F548916058530B1BA00B926DCD37633B2B DEA0413BDAA34142D2CC300BCBBB878978D995DC518CB551334B31801C22BAC7 13DE7CEEF020D644E8801995EF9CAC30822D4A4A5D0A0C32ACC142C11186C06D C35720722FFA2D6204884EE0A5128AE2D87AA79FE93CB17F0C876878A45BF10C E51D3713C58A8BB6D2318C6E6FB8AABF775329C5B926A3A57EA542767B8AC08F 01B948ADD35DB39E1614134F50CEA7E1B42F60D91F53DCF09F5B4173ED322D91 B0521B2B6EDBF229FE2A6A3931A0FB3CF27D2C8E92B955E7B98789B9F7E674C2 95E555E56C1199B54F031FBF0DB098B7766633731042C04F8418710D67571A04 AE364CEA1D0202026ED79C997261B5A8AA204464E2EB660A2356ACB22F230037 B51EA6CE80C618C1814F112ED17DCB47F7B942E4E90B4FD488DCFC7604024F59 69CA95E92C24DC8328C8EE71DD2BA57C2C280214C45FCA7CF2672811806D3C7C A4EAB7D45B0C20D27BF2346D046947C6BD7910FEEA26784BD01BA427CD799FEB 2D1D5359B5B7D1E6A649ADEE67C629A1511D420905D5209BBC68956B128592BA EB9CD2B81468FD7D03C7D6AEDE6032F2339116C178897EECB1EBE520F4A5C162 BDCC45EDABA96436879CF4047C169836CF4B7F9FEC5F4385A21280D38B8C7222 6A1EC7B3075E616F123B8EB9FF23EBB651E08462688BB67E79B2E55D97A8F7E0 0ACD51D5CF21B864F54B57C8880A77734B2AB2D83FC0C97DA39945551A96D223 D64762951E67281F09454A10BA72CDC151069364ED6038C376DEF11E5F468C32 DA47240A1EEA9EF0EC13A7007A8909560E5E338711226A2A3D32799492D7BB16 0EA789957121E840D8FBE4E2C20D0AF5265383718BA67F9F9B9132B580B42B4F AEB64D88D55E49DCD380AF47A8B0FAB88BD1E3E6039615973EACF56DB55CD353 930927CE0B1F8A9DC787274C599C5F4F03829844CA50B3F514577714FA4CA9C9 CB74EE4F889A5D4ACB8F9A31881965A830A9136C17F8DEA6A4E4194C14C65A82 78A48D915E598ED15788596EDA2AA5A2247DA0A4F632B2DACF2E61717BACABF8 82E34F7AB49E44412B4C6FC1E5ADE223B0AAC6A204A593C6E8155C10B9849D95 7C657386B15F9F3910411B98AD08720A08FC58DAF7A14A41944F86A0A1756C84 A0E90DA9A25B228A2968A3E83FC000436707972C4A7D7EE5D0CF2C20853E967C 4E7D41A808A39F8C65679C757428783457F8C7230F537FE0A9CB8BFF895CFDDA CC1D65D33C68FBAE30395C96B57D4A2EAA8BF1B098F624EEFBA04E6AEF75B5B3 76FAFC8B42654C07DEAB982B7B4AFD5CA9972B41DBE0ACD1FBB507A890757C19 E8BC5C2AE6A5D9F606AE2A8A976ACB8F6F8350AE6D4B668DB36EF8E0DFC11E71 ED65B2FDEFE29BDD8F779C9620560D6B4FF7D77871E5A1E416762CC7361A0688 5C3B68DB4DB8EC5108EDE095DEEB6AC4B8295CDB3B49F5D04B9FC428DEFDA593 5E0F48F2B157AB491FA20BE780993DB52141E49C861ECDB2186A68D48537C480 175FE3D2A443603D32C48513B2A096E21AEF0DE8147773015635567B9041ABFC 342B88C28325C1B28111C9E50ADFBF7DFE024426CF114A6B1C75C7E49C98A8BB C92922495B30C91F2F9A96509F9B4032960018BFC828D82FA1A041880D0B311E 9DAF2998DAB4C7911D6BA78F744F401D95B438061F10232271D39734C5BDAF09 5F0A1A3603650F3944882FC77027D8A3C0A06A4813A8F56FDB269A6F1DD5A06F 5D5F2354FD52383DC805D8814650C11EF344DD0FCA55A0753F14EAE102EF304F B9F18B37A8944CDEDB8CB0483D545C0DF249DDAAFE9AF37DD30B36B2606C3DB3 6039953E8628C4CA299C5F801DFA59F413865423344C4A3CA7BB8E816C7F3610 A88D322C1E4D0FFA194706195B587104E4358E42BFE7A3AE20307D3F4518F9AE CD9D7A97AAAD4D0594EECEC01FFFFE345F115DB647142AC36D7DDBF6CEC01BB5 D2DC225728AF9156CBD1430BB0B52902919A6CD1194293BE0A84AD8D0D3EBA77 DE23E7018B7188A13D4A8CCE8586C7BD120AC07F709355141E10F02C44112A3A 8AF4F7BC03F7EE8D47642CB4631DE0B2E60D76727D4D817209A75F580F02F803 0D7F43268B0AF4DD308222C00DD20C32C2AD8F80A7ADA2B6BBA3A1752AAF92BF BAC68A3A14D43DC20BA7629059E10DC1451CC7EABB1EBE7726488D9FE0C0356C B2192A2B4A550FCA39DA764D206FBFFED9AC26C0305810E9DBA97BB72D4FF773 F243256E7C3BF00F9AE4F48A88E2C09032211F68A17D13D9E3B50796C1AC2E8C EF00AA8D45AA9D02DE4E2C2F75E5044BFDC4A132C1C716599FA2C53800E8227A E1EEC0BEC6D46F94541762E6502AD4FC1F42EEB3AE4C6CD7E7038607EDD3F0EE 696FE9B5B2D996A7F11543239B11C5A877013A863EEE183EEBC22AF3352B0660 2BF5C042A411FEC7E96E527CC9FC425BBB1FBD1F071F9918C968E18B34E34386 5878359DF43C2090F7C77342796363A70C2391F9F9FB652A808DC3C5CB96FCD5 E5B266F97C9B7B2F3CD2A072C92C79628686DAF34C75F7F0776853F658834535 AE0204410A28399BBD6BDA3DB83DC36F77CF0819357BDB079704AA6D62417C3A 5C2E6F97BB95268C2FBC6332D307DDCCB56A17B1000782862A8BE0B46E6EA8DA AE170E656A579C940F03AA3FF75CC76B143048F05883665925A6FBBF5785C6ED 58BCD3D9A804204D5F329813DF06CEEEE414994C63CDC869291EA6A987AA76F9 A7531F818EC72B377818BD1FA59ED2F4C50F972CE706828ED3BC3007A05E28DC B5D0BBF189B8B1E36A00202D4900746B79C9ACC94ED71B319DB1B4EBE70362C4 991D3F7592E247806D83052588B12845D45E543C9261AE9F61C11373FFCA5363 0840F7DF9BBE494735DC0199A7F66C1553396BBB515EE8324FC39F35AC5F1F43 60B276765B2C6851C60E535D18985E6F697DB377575BD7277B9C57ECDA24441A A75A8D2C1EC513A652E7D24B01A43E314B67F63920FABCD703C0611B618FA04C 1B7BA9E6524D9472A16890813C518313AB8D484F7E9B6AA43C3F88E2842775F2 2D8D3CBAE4052E195AA628D4EFBD5B6E095B392D106E3134EA9EECB94B9D33F4 1276800542C43E1682B94DD87D84BC0388D13B71DC3EFD829F187BC735444661 9B4F47D50ED85934F963CC43590E4A661A20D8B4D1D5B28FCC99028F037EBBD5 5E623FD710DD72A87697A044C927E2D396C6027AA919EB41D7E8BC0B66A1C40D 6F3BF81CA211CA5B408AE86D7D15921BC720BBF09B794BAFBB2202AF348A1511 795E7B4669F5AD940A7775B8995D8982950CAA06F24E822FA0CE64ECAE480F89 14135A1A87DF87A18C1E99C630E0EC482578AD58739556A473291A1C6AA6DA81 B64E93954CD75E92CFAE29E4F308933E1F39C32EFF5744E4403EA2FC7C541C3D D0D7A3892FBC49D342CDB4DF615E2C0208A4A7725B96626F42C9CBF97BA112F8 FE5807ABB38F0193CC6E9E9EE2E490AA5E970DD5042C615368CB8BA6DAF5015C 5144EE7094D1B8BC168594CE11538645CA0160EF342A7B172E4B797D9B0870AD 5342F876585E036126F3D13C1EA06710ED4792810377D13CF8B3F549EC49C8E6 7EB67B92DFD2184A508B1021EF33CDC8E0862A68A429823D1BF7BEFF351F3375 A46F333B02EAC88BC8C2423A2D2247AD9FDF1343A93F0C906BCD7C9D88940984 0F2FD4C356FF663C22E1776BE36BBE88A38DD671AC83DF9DEC5B089B1E666C69 CE3CE704C8409C5595682E5F15A6D97060A057BAA7AF3F7F4A424A3AD73A7180 F19C71C49FB688ADCAFA1F8B9CFD6576ACF2CDF3065B5E399119C66F281C4C74 0FA675763307EC8260E3DD13C8582D9F47611762053229A0D9D3B2003D344B3F 58CA962189436A93723D1EDF1BED90460576B97C44D77C6CC1F9F743FB74EC19 2A5346E3652F3DCEF92E38102A55FE528C3105E697D5908F7886A2977C9D9E3A 1FC9E72754B7E5CC500549451D2D9958D5DA1B04CFD852064714EA92E3ADA300 BC795C22901EC687FCEAE45031FC05AE128519C2C8C582E13D3963FE37BFAF58 0C58B88D0F09A709E26BF380CCCED4A7AEA21BC02847BF54CB5EC024BD862690 C3B8C43B68D22C88EDAC14C565E0E3DC0B371824AC8183C2902159F5716E9CD4 9C0232975D5DB471BAE1A58199DB318C9189CEB7D3600AA4E2DF1419C1AEBDB9 187A4CA10934279B1A85DA12826275698B091914B803E61FCDE1894648ACBE69 E01704B1BEFEF036F361C1203018F35A2D3489BB3D90FFD13655F060C98BA6D0 90DA2129A0EFA6F3FAF6A57AB4F30E8762E7FB6209FB322876AB044D2A20B1F0 EEC78D38F9B707484F44947579D4009F2E735262F8FCD19D4145F8F4B576763A CD28E4FBA3CB5DCE63269397A917AB69B376B807791173BA8BC61091D70885A8 87B2C19E9BFBA1EB922EBC8D6FEC4C9611B33D1918608A35800981C8460F236E 0A756CA29721D678FB05C60E5E3FF76ED7683530DA344BDD786FA3B1F5C178B2 1616766DD0E2240146A27A80B0F50B0BC7B794487C3146C57170618B9E87B58C 208B3AC7C583BAB7D64368DBD780F776DE54F9E8EB32274CB45167D160BD85ED 40407A0758D8023B685D269386E87ECEE84B2D1C4522032927C0767B37CA2BA8 B8D09F574CD2B552FC02E8692A49250C3D418A0AEAEA8A6B74F9F58AB79F4F64 0E9DFBA96263F856EE786E333CE029E555F62D50203DB30C52502EA7C159908E 4E01883F690AED400262E21B5BD130D816CD8B3BD8D1188E4EC789B1B9B43CAF 93D513B000071752E0B0ABD3C33700832ADC802DD40EBE03F958C681428508B9 1064306F6CB71DD0F2A86AB0733D53B802F89A34779DC5EB5C02A288C470A1BD D19DFAD7DBB42317978A1DF5E6F1A0F92B998CA75FDF016DB0C037C3CEC7C9EB DBBE37131F526E5D461FF27FCF565E821976BE73BEA3263946FE5F3845AA6C4D 5A77A796DF0673F7ACEBD04E66871C219DA0186A5E79235F2A8D7DCD7FD878F3 D90EC5516DD6AB50DD3475C45EBBA3A0F3BB2A89917E5E56623F39077DC94047 CAFECD6E4677FA2128E9203D5EDB4FD908A00E9C467CA6802677D99C951B0D15 E6B5795ACFDBEA54CB99708F7DD1479BC8780AD28B96175E8F572E74AFA3CCC8 93B84061AC3497F5A53C93DCE1CD47938FCCF7CC055F84715AA8BEE73648AC47 D04CAEB4AE5EF9A5DBD399EFB1265C6D8186A8767CC522C55BBB84EEE917B9F1 E4CC11FD11F5752275420CF48534B7733B10ED90F876C740726499440F617DD5 16C26F3E4D2CBD60871FDB160BAD35E8756C8B7AB5B78156706A35A8E29BA4D4 77BCC26B5F4107DF0EE5D9D2E514A59FC77F8610E40E91DDAC2C68F0FEC75924 70D34D2C4FD58387A1678B9754D24E286B38C3506B25E7BE19EF29AC3343CE76 AFCDF93B1940C228C39FD53B6812556E8D5B2E5D67EE6B3381158C75096057AE CE6CD362C481C9BCBC75CFEEAFF76A4A24A319E2581A88D27307BC23B9D147C2 E19466268D8B4828066B540FC5ACDACDF6E95DA3998EF0FD262BA0CBB40223EA 71CC1914095A5653AE370DB1E97541FE06864484EBD568A5C225AB5A33B3751C 9827D3075E5BA2CE6099CA5A62B9F1A56771D66F0AD33E1DB0BAAAC958E89248 AB28EC584A78E26237D4A42A8AAF807B301E3421B8030F8EB744D736BE7E0F93 D525BBF993A6D46C2102AD11CCE3F7667E2E21874F7C51077B89A11B5F6FBE72 10318C951E6DB66C4FD2D784B44D2A21FC081484860E1B975F9EC7EF8D9B9B97 D9B610229EF646CE3479AEBE3C4AF64523F37F17DB6492AB5489DA1E518137E4 DC3B3484352579150EB9EA85659A77364C77C03746CF817600E75E86C003CB1B A8ECE0454C6743EC4A2254F41115A4B22D9D6E6A13E371AF2CA22F44C1EE2C20 7544C0C61C52A262218E80FF4D9AE6B7C03C4E03938D040393A2CB59B2DAFE81 50B405257F2105F92A071ADA1886ABD7B6F350590BE1B9C82714F4DFF4ED3EE3 F586BAF6C516651B3CA21AA3CAF075F7A297172ECA090A09DC05A7CED88D2C98 BDCC497930CFBCA201B3E4ECC02DE1279FA597AA9352D0A825657A3BAE4115FB 85CFA5DB55167A4C44501A81CCC91E7801D9455AE68C62A6FA427779F66D39DC FC6C0479C8F89AC68D5A3D56CAD6A0CE8765687666CC049EB8104B033A999B48 5409C1E1DBDC6E3E4F59C887857CE298049901F185E2AE3479B678CA0116F662 E18B60376DB962B6C582C00362E7F9574C3110EFF9C31EF55E2BDFF7AE4C3FA8 06FAFF322F50582AA92CD22E75D6B828D36CC7703F2D5CB16B61CAAF62E143F6 D8DEBFA770BD6E0A27B1D7209787F405AAD908CCEA46014C87B7EBA2DDFDF9C6 D0C0229FB63EE9F278CDC1F5EE6B81C80AF2AF97297746442D846A85F98F2A76 13E2A26AB4E17651B40D1F598C74550BDE28AE6974B28F7A5A1F773B66C370B6 EF23932EF963A4FEFA3E7CB8F77E3D366BEFB5ACB795888083E290BCE06C9B2A 197A58885364B2B4F3F84CEDDF6E362349E40E1DAA5D265546DCB9D5035226B8 D89F77D13A59D77A93D1CCF1E49CEA1ED01825F5D24A192BC4F644C5D0B0C899 3E3A9FB0B31023215EB2A0A72D4BC1A6BC4B6E738581930F0D58B8621F3B0E63 353C0B7C358E6873CF7ABAF4EDAB0B951FA27BF3183A31C5F020435F1A9E8DF0 D8BB29792935AB47FE2F08C0D8F2AFC219E1EC1FC1C481A9CA344110953469F3 CEFA695FF6E4F058740D5904EFEC72FC4CBC0E00AC6CADB9AF1489A7C4B98AD7 C9407E8017DB2EAE443FD7CED527384586298290C9E22F3A27BA64761408305E E86EBCA0BB020D8D5A52BCE30F91CA46E022F673155C2B447C1442652F6803E4 4C19986F5B09B4B198ECF55476FC5508BFB0B4E00B478CFC5B67116C1F48B738 A0607CD0ADD1DF3D3190EE92A37DC0E4C0D4659B3EEB0B40CD61A97B78FAF0CD 559DE768E4D2E081C36B4434C8BDE6259E40B4AD26C209FCB1BE5B9FD0D277D5 17F3A172F65E35CA9B038A0264231854F9EA7DAFF151FC8F9FDFABE40492085F 4A6F5D017AC3A2530421F52DBDB8E576E901764EDB94BA79F698FCEF237B1DE2 7F12CD8926740CBDDEB6AD1213E86D63EC22F9C5AC8803E7FF553C3D39D6FED3 B389D06300E34C1DF118A84C99B403C0BDD1EB169AA25E528D0133D720632859 3F61DD956244D9E73F873ADDD3917D3AD9E84F611D95C23614F27D39BFB3F6C1 34669169ABF9F68967EEADA83A7DC1CB26E1D6A30E306798CB07AFDE14287A32 406ADDBA129B77C0E397ECA874E7FBB010DC7BF67D88873442A99E396336A711 9A02D941DE0B1B2D516F6A33EBA74564313AAAC22C950A011821264E7AA91282 FE161DD254EBE2384972CBF41A2C4D85358A60B1E7A28C6CD142B8A9DB8AC235 F5B4A6BAC3080E6E1208C171CF2C007901176D364876706B4B11090013D6818C 64A889240B2E196C34F7D6EDFA6B5C034CA0D0197BF3C29EAF0C4C485470C840 45ECA51BD4D542CE5946CEA43546ED92F579A7989CEC3806B0F3B27D462C6DF0 C4D27DF6D10B852954B031143B6ADDC1AE8C5FB1E8DCC09156AD7322A64CA342 C22C99FBC817B551F92B05019352EC556D797E2E8E0F54EBF6FD011510BDC0A9 5D1A0D196A9B61DBE09367C9B9FA83272362CEBA85CE237000C5B04CDC70FBBC B7B690846DE439250DEDF2C5AFE0F45452883F92A5D4CFB3E8D025DA36FE9967 60901E3EDD6A3A26842C3CF3C200F8E26D4126FEF0BE7FD044B6FDA5301A4210 EBC0C61C6F06D861A440420CC6547065AD7AC2A88B0423E34349EDBC7BF22F24 971D11291837B8430ED0832A91674C3C9EDB461249DD8A6BC97987D839B6234F D83BA67FB0B4F8726A6A994AAABE4C3FAB3D77702E2DAF629B613168BDB3BED5 2648D7F11D06F144571BF9C64EE32B2A24FA0649201481CA93D04597E3F84720 793FAEC02BAA5A98AE68D39B1C4DCEFB4E1A33E2B05E7CEEBC36371F9C30B0ED E05BC2FEDD793BF956E206F39816D6023C21DBC6904AEE4B01758D6E27BCB8C1 D4917422E25003248C2F7C972F339AC919623FC048B5303C988E1640FEC46F1B B47ADE4C5282744C792611DB212686C54D8A060EB338090A4AF2C9D2C360D1BD B504118AD40C4F5D350F6C36E010C2729DE2A8D70659D86B5929935B38ABF55C 5E7A1E09253F8C075581E6548F36CADC777F60112ED86F383FF7CEEC7F5BE1AE C6F8D3D1B5B3642A79C72BE937CC93322BF1944F7168E3620F5799584866C59F 89120C179ED26B818D8652EC019D0797875ECB85912840279EFCE8C11C516213 2875D5B3C74ED5F9C3403902F5C0C26C7E0F833A1954DD4EF5A73E9B41B3593C BC1A35E95EB63D6CB5B3E637D56FBFFB06934E0500AF96A6FD3CDCC12C483956 B380A3240E710A7A4D84016BDC6DA8F0F9153206FBCCF31F0A075716B48AD8F3 7CC77A1F4A6DF0C2CDFC2394365F0F9F554AA4B067383633EBFCB666B970E372 56EE14FBC9A75A47A8A50F8348C2862E088990DE770B4F4ABC3D9946049CFE59 104B9676DAF98FF8D2B458FEFE53DCEEB15BDD36FC651E02DFDE356E82AD255C AB7D9CB06FE510D146A37A1EFB13588C3A7EEACFFDA994C6C67B259A1D8B165F C6C89D2FB896653CB30831CD67D24E5F2E15451D2078005ECA671BD5DB0D7938 C751B374C262F6BE5F96709D55C90DCDE5560D1119DBC68A2353DC680C37BE9A 6553584232B57ACBE02FC0A325EFC133C0B3E67E9198424C2E9A5A02BC2D7856 5340337B6E73D87B02E128FF3BFB54E839A72B51EC25CF9755C918485B08EBB0 F490B05AEAB9C75573760C981ED5BE118CA95F5BB9139B1176464B5690DBAB8D C8F8999F2CBF3E9FE8BD3A90CDEC8AD1652FB18847460B6F2E6658E7B1F69185 0F8F0C77BE35DA931702EEF75C9178AA55269FE315D58092F7B84D23D5AF806E E629EDC56302D4EA7DFD2204FA1B2B85383A8911DB5BFD29254BB318912C8751 8A8264AF228E4BB366FFDF1F479291E9C5D9B68138883A20FF0BD03BADDD9C93 687543FBE52494956F1043BF37D7EE2CEBED674A3D576DD3F341BD9609CD30F3 D638339C99792F93EF76003D6F1D46A6DDD5BA3E58CB7A3B4FBD09BE096868E0 CBA50C91281DE9CA2B978B466BD082405E94ECD8738873E25E2464FA21CE4D6D 18480C580FDB354255D91761BC79BE021FD90D6154780E94D9FE24A7863008D7 8AA2B3DF97CBB14F740F983CDE6C069F347CF8ACE0394A8D60DD395D14E5F495 9917C246FB63868793E4150FBFE13DF0B20C3E43FB3B6A444483B9AC3960DEA8 EB832757924F1CC5186E9698333F0CD90D50081EB202FEDF41D8D8F3F2B39A8C 0D3AE2287B61E13AF28BC299A4BAE2DDA0C464C4F62595BA6606AD06CFF47083 1F3D6705BD053F49613600A42444C59069CD648B835496CA68D72838B2ACDE98 BC7F2AD389465862712DBBEA504C3D1DA0257746AC6DEB195C70F1D14E564169 F88112ED3EF5CAA96B54D42E27A2EDC45A9A90292CA06E36E88EA9D273C7EFBD 405820C0F78CF11AF220B5BA29B5FD8805899FAAC765BBE3556EFE20AF1AB3EA 9985612C462017E8611A392928B0A3C509B1150ECBF843649C0EABEEB2D01052 8FCEEB2BA51B2D00F60CDCA6655C81B43875275EED61B3088BC9D7A2BE5A6B35 D3FE7874CB519DB9360320F9C3EC34DF927CB94C44AFC9FA95585BB4F29BC229 7DF2914CAC28EA483246BAE744B13AB9782F5A89863DA6723352CAE89ED50460 5D66F4B37B75F4725D2A05B5B1342F11710955851662D97254451BC3221FEE57 602107FB75C52970FB95BB929DCC3FE777527EC4EAF1AE95C38E2FB8341B4C81 9D29B82DB61DCA6DD78561B527E3F81576B795973E59BAE38181DC5C7AAD8155 D657A7EE7101BC5EC3CB7B066A3F6FF38BACD62B9821ED58BFFF7DC8D58A7464 F2E80397F5FF154AA211FF773AFC68DEB5C6EFA023FE8DAFA2C6F9CD839030BB CDAC92EE46BED6E1356FC72B9E260D629B7E8427F75D7B6F9C6592605A2060E1 7B021442C5DF92A1DF75874E7A7916F3767C30D6AD455ADF467EDFEFAB639B0C 97E7C694938D1EAC2B928E4BCCD3BB768DDBFF7B32FED820F7CD3B17E4C9028F F083EE91ED55319A47FB6868C2278C09B881A1AC3EF61D56F7D968E568380419 CB2362CA1D6BA3D3720AD5AD897E6ED2BFC34A9900B2867ABFE0DC4619B1D4CD EBF837C91A17EC9C92BC87D5602DF35A28DB9634506C237D5CD8E66D1A16646C B464BFC1CE717E65D2FAB2CD5360EABC9AF1CA5F838D0BCB954DCA882D87CDF0 0C1FABA0837A0DD1EAD10BA751F8006BFDD24CED4F588F5345E3F1512F4F1444 CFB28143372B2CB06EB1AB5C68126857EA0AA1D1D2F17FE68EEFB32E9746CF89 1AD080F3208ADE2E58BC0DABDC9CE612AAA393FEC64D5D221260BA9C635C9C40 7CFABA7684ABCC372E6CECAD2D699030556887E898BFC8B2CC318687E11AAAD2 47429B8EE27486100608D024BF73AB65451122EBE5B0D3017098DBE1A69D4444 DA7C15C45796B6C1CB157C71BF1AAEE0B6CF3E6A8A00AE7755DC74DE3380EE4D EE369411C751E525EC2956D102EBDFF8209542C86EBE3BB7034465CDC13B9256 5231E100BD7E11484C2BEBE9B05A125193A90564E037C250845E2645F4708155 DE4AC289CE0CF57E6EBBC0CC565A0C2C739E50DEED9D6EE3B7EACB75D24D1D40 929AF771FB7F3B2C644845C5C44F445B374A49D381B58A103E94A348511132C9 1AB535A20D3704285DE5E1B9022D2E470052F6B8ADB22B0B6A996D1A2D7A5AB1 7A43474A1ED25BBF5CF8FA43FDC054EC32DD4B2550B67FF789358F0DA54E3684 4B173A0B371E81B116EF8DDE070DFD66462A3B2F64ED2BCAB0B82703C151CC16 7810D570CA72410D16B2CD9C6E31A3D183E9A14331903C6B6788A6AFD7E41230 307623E28F43645A2049EE1DB9F56ACFDE9A20A329E56FBD40BBDF9597325435 8A40180D99299B7920BD97F19EB49BD169550820BC0B5DA36C1458B3F69670B7 8BD75D06FBF5D1324D911F937888BAC1AB25B7E6B076912C43505472F0D6AC42 61545D9BC2BCC4F454F5ECFF43DB351D36961C512EA79BA0B28D8035464E3C90 83ADBCEEEAFCB99227458267DD6262E1CEF38F9A0D10DA495169FC84997B93CD 8393C6F6B926FC97B8B2281BD9AF8E5FAC312671E47FD3550FAF09D65FFDE65A 01A750AE86938F2C43E124227BC82BCCFAA316B6EB8563E9D926F0DA8842926C 0A3D6B4069A7387E8F254A0D71BBF3B63D0B16974A85DE915DB84A09CA34829D 4DD06B49E7D5CC619BF27ECD0C161E0D2BB36F94116091404C3E68D9F275794C 68EF6FCE92A399A9D291E2D0C9F53CD63632D69E301D19FDBA7FEF1047245B69 4006301B7D8BACC78D23E237792ED921BA60E5FFFA1A79D09BC9D373F750C3C9 32D739758BBCD7602A4BD98D78823EDFBB7D193A26E4B8722EBBA704FA6BD554 B65FA27B6FE743830CE4EE4F71DFC299C5834683D68755779F3459CB6080F745 228EAC9B9396C5D1BA4A4F3DECCE36B091B5EAE7740AC36723995125B42F8579 1FD7E48F4E5EFE77E3A489C85B1AA72614B638397C5902F06447EECBA3C87576 913913A22922DA7C3657CC8F026B0CD58F947F8F1BCBCD169674897D2BEE55FA 5B222487944A1FC201C662A05B908873189AA73DC22D0583FC1DF3237B18D501 E51D2C2200BCFA0087C8AFBFABAF13D19190DAD13A7F29AB72B61F62C275A99B F4BD3CA128225B7FF4D12E014447385B104E5B67A5175FD3082E5DC44ACC491A 642F552F54DA746C7B80A8F60AB6004B43F103B7CDE85D0EE1CF1DAD53F67C2B A8AB5DD2BF3D211753EB221D0921399F85CED64401D11F689475DC39D29314BA F22F593B6F8B777EA528264A0F8101B680303AC313428AB7CED306AAFF36D7D8 A942D0A5D9C6D78A2EFB37428CB14D4FA98D320A5F356F0AC1F90AFBAC2D4A4F 99FA81FB0A2BC25ACAEA897C559DF5DBA424F869A15DBFAA411F81A1C5BAC13D 7C7CBDE5FA506757FF53AE93E6D72B924CC8CBE86A255E27618DBB4EE7798A8B 4EFEBDDA82352B9BA704086795E6F4B9394C7E15D850EF4D5DD3588FD5DC0E57 CF1CBDA2272D590CEA6A16E993261BF5CF60B61E2721C8299624EA91C46A6468 B0996DE7A2AEC58F1C70CDCCCE3C574C2A1BF30A30F77EBDC0649352DE76D16C CCBED3039DA7B7908F4891EF71B9E0EEC923A5EE3C0E4E3A438E77618317AE3C 4E98DAD678B2E2C1DAD107F92864C8D471BB28454914E3FE0443E7C1A900D3C9 5BF56C719A1AA8C2D1CA9CFD6CB14FCC8B2CAEE3AE09F43849AFAE4DA45A019C 2A28C0F70553F76209B497B0C09CE04A79973819641053AAF0A45042ED6B9363 723D1511001D499DA6C36FD33B97583F34B80B21BC6996B87C842FF804D22232 7632476691C693BF8410DC7696D421DA84EEAD543AA43CE43E8516F0988A3703 A11CEA2A7D435A8458905115D411706755FE331ED9603C205CBDCB4451EC5694 E18C8F5FD20E25889EF0E5EC591254AC0E80895EC6A8FD669D6785AC52939ACC 2511197E70D1C08DEE2A8D792EF36735E70D4AAF7D70EB084F8C6A7DF1E9F287 18F9AED63088C5663CCB12321EA6D2FA16A646913A8010E650A025CF2BB9407E DEE225E85995D0625BF9A60CC9D21639D2C9B44EF31AD3421B85F871784700C9 EBFCA6C7F8D4528D93696F97A7E4398C549702B46E1CD15D006835C91C9EC9CF 6E92AF539036ACF0AF7358752ED114D544B26168BCFCB49CA56FBEDFE9E020EC 6006DE9183D25DB101473DC8BEAE16D2D4F6EBF4D338CC0D213329FB5EFBC896 5BA06F738FBB2474648E3A06F1F91DCA148204423D9CD70F541A6A8BD897AC6B 60FDB7A3923412B506D2F6E0283E272A344434A5C28BC9C53505AFDE4C0F75E9 564AFB8BF8C9035E6FCE398A00AA98F600E569A9E906B115C0C51BD0EC73AE7D 51E83B72F89A25DCC5AD2902C13AB9624D613A62536B88F94AA2E1A8BA6EB5BB 743EDDD85A9C9E2255DF9778A9BB02B97865F2CEACF4063F1B86C74BC9A75E15 E34F6D223DC9A53052A23C1CBD20A889DAC547DB28ABF75A2021EAB3F2E87079 36CF4AB6864DDB79526520C63B4F5FE3A48ECD364C2EA07207164D97CBC4D9CF B32C521A206C23F238AF0D509EF4EBDA8BA8867047B4B730DCA81126C136C338 5D9D0B200154CA310B0D187D7133AFA8039577EDF1CEE93093D35DF734A6A329 9A2D63FD29D9A5D4849929BB2CBD48050424CBC2076635C2872B8CA1EAFCB3CD 85DCC2A8BAC2C0DD1EF15A7E16C3455491669446C91CB28A8B816857E6C2BF25 856E41C4E50DDC93C5B60E2203C050EB544A79E392E954CA292C82BBC20CA008 65892DFB9CAE9395244FC16B66A62FB6E6D9622B00ADAC959A3BB0AB7BEB9E89 C33526A56B85AE2A6DEF718D9CF8B15C1D62241B41C45D1D32F183E223535FA7 FFCA07860C7C0CFF42A4409031592949D1A05AE23C3E75549C17192B6D97086F A098183C68B118311E192127426814E1118719F230D83D859C094FC42049CBB7 C7382641E30761AD687A6049020456EE225BC34BE2B74939432D0A1BA04B7715 E0454B9B59913BAEE121D9DDB66457EBF3B9294CDCD9 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMBX12 %!PS-AdobeFont-1.0: CMBX12 003.002 %%Title: CMBX12 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMBX12. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMBX12 known{/CMBX12 findfont dup/UniqueID known{dup /UniqueID get 5000769 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMBX12 def /FontBBox {-53 -251 1139 750 }readonly def /UniqueID 5000769 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMBX12.) readonly def /FullName (CMBX12) readonly def /FamilyName (Computer Modern) readonly def /Weight (Bold) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 11 /ff put dup 12 /fi put dup 40 /parenleft put dup 41 /parenright put dup 43 /plus put dup 45 /hyphen put dup 47 /slash put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 73 /I put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 82 /R put dup 84 /T put dup 86 /V put dup 97 /a put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 121 /y put dup 122 /z put dup 123 /endash put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2D43A151FEE81296FBE 0CF37DF6A338C826464BA5198991445EC4BE80971DB687336AE8F74B516E333D 2D8AB74D362C559AAE6ACFAE49AEEF4F52E28C869222C1301D041E7A0BC1B608 1BF728EF9E98F3A12EB2714E7F16B14E055FE1FA0EEFB058860ACADEDA9D0E4C 42E3C6F1E4869471BFAA3760175F3FBD842755A9D7847EBF605F18293B42F557 FBE2715002669091BB033E1AAD657532F34F7C66E4F04D63ABB07E6CB9D9AEAE 78EDE8B79DD9BC87A1FF445EAA05B5572BB880E69F4DE1F82D7F0E9980AB0C18 22C448B0B1722D3CC33C56FF287CECB80658B3AF5E7675BE82CEFF3DAD5942EE A03C955FF979E41E54BCFB5316A9AB8945C403A73180D0961416EC9C92F49811 4B91BC4C788392994587517718521E416D469F69952149FF7F9224377EBA1065 4A727BF806A112A7B45B0A1BA1D5A23683960575368D9EAC8C04753BF7465AF7 95F25C258C63E4FDFFD0B412FD381946AA38C0B961652BCEC30322C47BF4755D 9F91880688AF066E32FFB22E1A52DE741307AD3ED830D6BAA1D1F562919666DC 5E8FD9862AC8600B0AE0BC7FC779252AAC57248744ACC8A8AAFA836BCF09B0DF 9253DFBB1CB77EA8A59D42D1B18FF25E9AED72FA62FEC3F126F030F5D7DED9C3 CF60FE890BA4A48E39E687BFFAEAB96AE542A6387F6624486037C8924002A511 BEE5FBFD780AC1D4BEC3FBC47A930BAD0280D444259528B6C565DE11DE36BB65 9BADC55C1EDA1A80458E98896D782DFB5C137897419602809F9BF8CA39F00C68 EFB9E076FB324C2963F23CBFED28B9EF70EAA4E4B903225D1F199A7162AB239A D92D71C18B1B682D04C6A48926275BCB16D413B2A0E953E1257E0B12D8B717CE 2EC84CFBC046A4338A69F454A469B12118E562B4F56C5FFB3CA5D357513E6FFE 947A564B229C7FD873057D5C7CDF03E958294A1003B37D8DF565A70A00A3734B 0138AE5277D383D10C2BD853EF806D3CCDC47739F0E374A3DF3B63638B949ED6 4EC25869DC1C0B1F4DBDFFCC97382841D8F10F3635C792139A1EC462FDBA379C BE0990CA2E70FE73137AFBBF30CA54954D7E7377CC50BDD780DDD4C7FDC77AD2 F3EB1169F14A0041F18160F43C24FAF556DB5D621709FBC544CE55424F7446D4 6AC07A51C8CD5161AB0AD5084A96FB35D77F1CA155147DEF8D7A590EA6939514 D4A226588295CE0007BA8A550895511C8D80BBE5CDFB8A50D249C3BDCA974415 F5557914A9B805782F399E4078DDB6264F1A49A9A5BA45E284A5196E9828EBA8 481D357B8D9E6ECA631A6204439FDFACE7D7E6A2392726107CB7D2517CD19A24 FBE592C119626DB221BBB635B6EB84845C16A9585282E34958B961F4A543AF9D 419B6A9105BF185FC767712D923437BE08A9C0EB92AB6792DBDC671029B6FCA6 7F717FCE379C0F3B51C6CF042A762ED04898FBB4B0105C3C4ADDDC18C51BAA3B 70A93666669547081D9246732CFF74C83EE90DA17F5B4F8BAF47FE4D81590988 2858C9B96071341FA0A0D23BDD4947FC9BC2297913CFBD4FD6CA4303AB3179AE 0203F1BD502065F90CE9BEA3B52DAFE4A29446082EA0E6B1D7AF1F31D0AD02CC 9A7FACE2CA86E5FE0F6A425B28A5940ECA306891CECDB3CFC7A5BBC76B5D9E8A C754379ADE80B4D72CE493010317BF21A0CF4A0A55C1246218839DCA3F4D626D 1F4161D38F54AD5142C1CEE95C61D8BB10FAD4B772F4955777AFDE8AE5A837C2 A2BBB11D0BF5DA2E63D0B75ED421DBA9C789B281B01846B65DC572BA69591969 21265DB722AE86BD8CAA3D887C975A617ACEDDFB7AAB341F47532AC0F354A530 7662C089DA3939588774FFA16FC4A52555DED6D6F51DE718BF5F345C23C90198 17B77CB8B5D53A5CE7A79F3E286B6A59F3F6178AC8BF15C0A15C1A8A95D03B60 30EBE53DE328CE085CD9A1D49C69AA299C5B58B24334A546F6E274C1B534DC8F 3289553F560C2F81E413ADB92FA0E7DD1C2F39D5FD268EBA97AB7335ECF28257 96B4EADB7D0778706CB41C7E9C882760E7670936774A1088FFB2011115FDADB3 B69EBD5108760762521C25C968C3E282DC3400001AC8FB1EA27FF643E3025950 1D617BB8BB321281708E496277E11DD3AE0023DA9F25AD06B39C7CF527FED27B 57397E88D3DF70EE4FCCEFC8A0927D6B05517E571B3E70ECC99F3CBA32CCD4DE B8BF22626B6C94FE65598A88AB90D238461EBD9A098DADEA4091AF1CDD7560EC 8E1B9BC2321686E1759E6B8A270C8CB4A254F7368039602EAEAB86ED21CDED91 8F2DB9889F46981C494C7EAF5E819B91C129F0740B8002B510014985E5791F59 B16879CC6521D8E9F1C4C1890AC85A78022BE614BEFF318AB2616F0C3F02405E BB425D1555472A2642BA7686E431DC3FB8A1688B76660D9957C3FDE8D58109AC 21B1234C9DDF3F0FAF93BCF7B2F88A001F23162E1A13E5E9118D51B485B70A91 D0CBC39CF44413FD8686D9030782DAB58064F5B987E0402AF5B264B17BD31BD4 FDF63951BECD73ACA6138854EF35B062D01F33073850D9C09A818828C581241F A625AB3638081DD0F00F946BE5450D38489CECEA4E66B4D85CC8AE0157E2AEE4 A22A9313829F24D573101D84CC1784D1CED7DFAD5DD966601370C6CCBB723082 A86BBAF0A5D867D0D2E3CA16E14E5109A29EF02649C47E12E88B3B397D65CACA DEB9940B92100744D686066F8250FF30E5F13D81428EE238A2E4E07ACE0F5C38 7D79D4A336D0D26AF9C2B84088ED8ECDF94A1E3FADB45AFDAB46CAD6FF950B0F 07AA2CDF82374DA76C56D29C80138841EB13F0D02ADD32F88B23E282ECC845F9 BB9AAECE9CDC644AC2D49577A92307A83A99434F6493156DF25DBF0FCF2EC21E 8C50A312C3D19E0609C0038554CF4FEF3ACEB7A833FD54B06EF0D617C2971C89 E4C06075B09B84A4F78A82152B9A9C540B1D881313C2C74F20ED064A9606EC2C B56D7BB4797F1EEF4A9B13579CCF311FA4A4DFA62D80FDB7F535CC6526D1AAE5 45C008EAF024B48C377522F74D939A475970533E645B1BFA81997549AFF26F67 2AAE6C2EFA357DB3B525276EF330905688777057F4E4CBF584520A534A8587E5 5A8360891E75A15205E8ADAC4A4E5A6E27D0C4A7D492216E4BC023AB027F37AF A8DC7579BA50204D5F45A51460C5BD8A5A7F87668CA6451137F2F59E117BBE28 5C40820882A5546FA76F0CF49F8A6EC445F0647CC3227C400F56E7E9B84A6975 E85E243CC1666DBAFF4E07EEAF3AF71BDACB30DAEA792F2B8504CAB071544F01 5D66243D529C479D276FE22F7E275D9E7FA9C6EECA18716B2F213916E32C1D94 6E32397B41AC6779543218E506569E3544803BBF9B404A983EBA62A494187B30 8D3DFA4E1237A2E5E08224A60492C09ADAD8775B7CDB830520829BA164209ACB BCDEB2D574CEBFB7AE4BE72DF4EB1945FEF2458761AD8DCC0D378AEB7DA002C6 9C14A665DAAA532B0ABA98D7BFB5A6151FF6703385AF7AE8FD315A492FCCDBCB B825707F9566B3B4943A3C61C3DEFDC31A843A2D67AB06891F3E110DD8C73D3B B5E4151B51D9F13905D7D94DB9ABBFCAF35F43B6EEE256B1A80ED6D1739D8D5E 8C767F6F0E8704C5345D028A2A6DAFD9BB7AA048B8B895FE9423A7ACE858BADD 595CB074A128DAFE08FDFFD6BDAC0114159A702FDCBF8013804B0CAEAD7AF38E FAF086A3248AD4FCA1401A85AE2F72E3E6956DC0996FE8ADB18F89B14A208A15 13F81AF73D0DB72F78C4DA634ADE3C73756CAE6AF2E149C26316DFD93370BE1A FB4A79F77A67C07CB0A53C78367F21661D4AFE9E27328E077B522B50FD9AE2E3 DA087BE481515B5DD7BF894A96A84A6C78874100505B7DDE1D22EFCE8D58B3AB 313AB5495F72E2CA4E6AE22C0CB854302B9990372F1661D9F0A517F90686F248 C5643008B3D29F7296E5C8FD4049886662EFDD4106E17C879F5D41CE84F87E89 F6A3117C968B95A35940CC29C43E1E0DEF51C1E46B676301F40D59615C3F73DD DE37B72FF7105DB84227DA5241583272AB1C3CD97AE11C1EE98FFDB5E5F44844 8FC41BEA5C54B26341AFF6830D9D0A5A2901B0653D8BD0746838194D240FF753 E99750D3383373F453723D86BE97B571B8B84D8696089B5CFDD53E6C562A2197 A8C4FB0CC690C27761A816B441029D3D306245052E0C41B53025D8CB7267CFE3 C17FDFE348E765326F91AEB700CC49162DF748171214252CBC821493DD01AA20 417D66DF47EBEFFF3E9BB2B0A2BE7D9B8C68BD570FC2EB0FA54CECC318F04C43 19598BDE93F2F13DC7847354C99059AB20593EE51E94F9D4E9241869D605AAF4 9D9B5FD88C3798A039A67993C5EC68B6326B132E647F67EACCA7F7AE7F718D85 12666E90D7C73EF210E344964A38228B236679A2B18F5E081234CAA2458F8D83 3F0CA308D19663CB12EB904076EF88E556407C33C9380A6A3D68A9EFE65387C1 A1BCD2D26DFD2AC0881EC30E81C0A4E76C244A2BD822EE88C4A60B480D107E68 90E419A1F512E865BA922A7830909BC2611A80931CB2E9344529586726614D94 3AC5200FB9FF68AD9686506C5EFA8788C0AD0251AFE7F95E84683380CDB421C5 B1A783B6D5F3A6BD1BC1C14B363DB01C87C0796DCDD5BECF41A1A9F43183CF6B 82C2AE49F0BFDC5DEF7729F2E638EE6EA9E4D059EB9BB1B992AD8C82D501A550 1BF73CBBFE740179B54E193E84A55DCD61B343C1852780FFB44248FC9426AC94 AA2B3FE20FBA30F6C4D1E0FF3EDCDD8C0F57CCB50CDB0EFE2E04A8927E239C1D 9B026C7929BB48461D4D695FFC766C8A0E545B1BCC2AA068D1865333108E7985 2D93F9B00EA0A90939D0D3840D59B6CC0CE2C147B2E1A9A4F14270FE3ACF51D5 99F7349106165AD627CBBB0ABA01ECC6D3A14C1DC1ED23A9DB9865BB4396C51A 31ECD001EAC94B33C34E29C5611148EF3E55DD61813470B8F3CE32564C749414 3C93C77EA5A3538A0B5AE3FC4DA32813B06772E0E48E25BB39F3F6FDCC077E86 F86FA50E18FD19EB2F37311CE87F18F3BC85CE7FD71CA92D5C3264E34E04A2E5 70C79D99F54D6C6D9D527AE45EBB48411221134587D2253E7C8ED7658EDCA34E 5E768DD14E0200470F73C44D006CE8CB35DE1CA3EC10ADC668B0662A7774C891 84EC95A31DD872F0728D9F65CA80940080E04630BE4DEC77A2C49E3913C39978 BF145F8832AF2C4385EBCDB15F9D32C22CBA0CF950877717D6F1591D7C0B8047 8C9BFCB16AF7124ED83137695F3D69228DB633053208C29E0ABA1B06A7FB3EE7 5625CB44927E2DA6E038A6E62DEBDA2D96A03177982D8FA33BAAF4426E05F4B7 9C1748B3FF7691F9888E7FF864A10B9DF761A41E6B5CFAD2BDD7E1C4924AC97B F4B352705316DD1A58637CC12D71C18A5CA691AB2AA8F171590EC24582B1123E 94D4DC587D8F99E18A711776BF4013C96446BFECFEE4C809EA94B169088024DE 0CBD20199A915AA406F0BD5F3D63D1467C49B4691AEBBB35ED6624F2D7BB74BC E80FD92B9FD04DD9C2BE9B6FD29EC7EC07FAB447511C61DD299C783BC09AE2A4 7B3CBCA6A20C6631D06D0B2E2482A50612BB7C29B7E7D0A205EB0E8436702581 596BC996ABD58CD8D5BAAE4B1478195CAFF98FE0141287296C4EFB8D2E7A8442 F0A3AA9F9264329982532295A176BA1867EF732BBAC49AF485D9D0F7130F617E 7F7DEEF935874D55A22240F8EDE4F247D5F73481373A392D40A8076BD91079E1 1CE5998BA13D48D56B49A92B4A18430E316405D2E2E391B496A1934671FF1785 AF42BA3B2D14B8E04014437FD194455C50289DFBA61B5C377BCBDADA48E82DEE 4E70EF5E9DC03064907BCB8BE4D59DE069FB0C0CB140DA54708E630767313F9F 744594AD8A499CFEF733E640A11FD74E46A749F9C7D18D49251BF85C6EB4668D 67598C31A8F90922FEAEAD4B83B6E7184567DC798E4BA1C4C9B3461A478D63CA 054F13B502DACB674EB49D6BB935E5EC82BF99FDA7D47C581AD7F940DF4FC6FA 6C6D25D647033AC69505F0CAC58DE99087F365531A6283CB89CB644688963C3B 8B2203A94294E58739EF23C7803630A1F9121D62BE1977DE2F41687C8CAF87FE CBD7AD3B98E0D95C8C6E1A7CCB0E09465AA874DC90A0F5DB2C5E7C130297FD39 EFE63B0350B5139D09E6864D22C3F1150B29196E40EEF9723E71158B7ECFB8E4 C426FEDCD439420B7F1C251FADA347C9A2C49738B5A17922E1EA93CA7B125B76 57449EAA9C1D591CAD327D0E98EF2D44D614EE9ED49DD31ACAC0B956620B6BA5 5BF6D08CA7541059D5ED2EF00AE2EE95488F5645BF6837D9241C0D3959B7580F C9ECB2BCF3E65C07D52EC9CFB21C11CD4C883E44C173214C900C44D2E1E43DD1 CE8DFE3DA93C38B548BC4EC46FF91F30CFB97525E1FD4E77686433B20BABF8D2 848C1CDF1BCF185CFD7A81D2D4BB826E837E2AF35CFC4F419F698DB0C43E9F9C B0FB628AC9A3CBE9B1FF4A067016E70333E78B32AB2D89C483834B31F5808FDB 77492E099F1504DABCA5722C7860CDCEDB2DDEB512FFCC7D287F4945FD711F28 87BC3D36173566B81FC2C1290C717A09697DAC6072408E20926D39270121CE58 3EF97CE12EDD7F87F2C8CFE36C3C0400869C0D813B71C425343EE0CDF717BDD8 409D5297D0F8F7FDEB0257C0A391F5635E0DB1116058942FF3E7C94D5F2873A7 A3B0ADAFC3835AF2BE474E6741319BC6695FB37F59AEE388F81F6E66F910000B 72E6BA7531B4378CEFEEDC79CCF4947BA1703823B5AB4F4AD73D9615C66C489D 99D68E49C9BF765B7FC547BAB9640D51D5A7A2396507AB5A4DFF3D14F52422CD 8FCFEAA06A56C6C7FFCD29C9A7A59DDD2A909A9363FE5F1E9629616D25ED38CB E754C059E4379318CC491C3B1A90128693AC53F80F8210FAEA7EE638902A7D3C 82B95B3F5AE340EC1B648DBB9FB679D6E80B7F426D8671FE7136D97F51E2D2F3 C9CE9183E4061CA40091A2A70DBB9ECBB19CE3F65ADD0FB346B54BAB182E2CD0 EAF4C0F402C25573FB344EA771B297BEB615FCD0595172E84ED2A62FF8962634 23C19076C2A9ECEED5135994EB397303A9619C76DC55E032DA83FBA441BD484A 59F70A5110A8927F6239A14D4E223E189A5462E4A92EAEFFA4B961A2A32B320F C2B4E8C1821FA67A655B5042C15E4DE1FB3652B55078DB123573C4E986B19DB0 1C5131F3DFAB271C30A5476B4A19D8FC922E31879C34BAED94C07A4841B8209C 403369FB8E842610D1EB4662B6171A4465FD0E819964F62EC5B0ADC92F08CF90 1DE0B410FFBAD16F6D355E8AD72CCF67961EDB6CDA82398021007C2D0462E893 75EB0710AE4A6CDD15077C9DEFC5774EF4A657734D703CE42174259B58E5277E 0DF26BF59AF8D1A3E7DC12E3C12AA4B67CF35B19962F6950C2020B698D971B35 82FF84E72F72FBB0C54A112BADBAE6C4CAA358BDE6A705AB59332C3850CA3D25 C7564499BC1319121CE0D93218210C68080AFF33420E3CB3A48BF9EB66BC07C8 A79D8CD8E78C200FF7CFA3DAED0B9E87E6141C88B436D8FCBA50AC195FCBB9BC 9512B95FE3A37FFAAB39850FCEBD4D50A243EA416E73F53B4B00F3B6EAE0CA06 0693AFFD24DCEE2BCDDC10690C4BBD7C09503FEE760A8C80ABA4CB4F2E137B9D E84C2A7C62046C9466BF2240E2A71CD2B05928AE68403AC7D2971DF67836191E EE8E5518B94CAB77651C1EA94240333902BD6E97FBB8D37CA8CF48FBF19FD247 FF5C6B8AB3C0920302DECDF87278C13FCFF6B78E129A647BE595260BB70CE4F5 417C2D5F7F1E767C37A07A70675028FCAF8907C43D36DCE606D8D89FAE426033 708CF14692804D19A2582702B0E297D69FF9B3AD38AF0802C42384F56B64ED2E 391F887A1B89D59AA30F3AEB8463224046242061441C3F50F817A997CBFCBBE4 48DBDFB624A248F2B3FB6C04D627F9CEBC040E43C59637634A542E7F9EDDD228 FEA159A40DE56AB5261F0667CED0D79F987D963CA8B2227DE9E6CD51F7EC6136 692337348E1E82DCD3864B113D6541913936C4D91A229583538B7D9F33910E66 4401924B9BAA85F6D8724A1B8222C6F188F8C8790762CC7D2F2B08DE3505BE4E 30E12AECD48688868CA0DFC6B4FE349CE21EAF04D3C4E5F9C7B68C529DFFA8A1 F7AF588EFF713A233704F64BEF7AF6FB37DFB9934D7876C663B79E1F8AE37057 DE0BC5B2799B4A6B62A9C9BBCF1FC02739AE04AAAB1492482AE66546A605B0A8 62824BEF1647C96DB158B12AECFAF8C4FCED95141F702410C9F1AA05F3C0037F 2AEC5487664558F918E3FF1B51425D70EEAC41011F6725C5385A08C7A0E73203 739A8BC315770619FB3850E53A9C12129CEEF0C7033B87072A685E1C85D6E591 5CEC2942FF48478437C1C412D244CF986BF72324CBC8EFDF55B13F42939EDDA1 2D79250E7C9316BAC08E14E2EFA77A7755E5E3F772E76E43EE8401FFE8439679 0F7F5201CC03857E14E16BFE960F3F5F2CB0722E5F81C4A4C9AEA6FA2E4508B1 9E871CE623A4368B92AFBAA2AB3CE8F848CB49F50B63DC054EAAB23DF877ED8A 6FDD5D422FB7C073FBCA0B3245587BEAAED2AB1DF5FD0EAA957E62610FDFE0BC 469AFF35B1A7DD235538945D9B3D431444B29485CF5E6018ABFC6EB1940762E3 49633C4525C10B76DD5151C5375FD372ED28611255C5449C4D7922B92F360BF3 E0ABB18BF5466BE71EE0616C40F3A6821B7F763DE8DF5E680C74D422E00A0C63 6308FD402A44D4302A1F069D0C7CE42D9AA97254902D7DB8FB28A567E4F1F620 47A9972D7761AA5581CF8198A6DBC75A58EC526CE089A5FF529734ABEFDA75D9 26FDF8EFDB13EB8BCA4B1B0EB100B08BCC6866A5F32EDC9FE15EDA3F14BFCD5A 45076B1A03823DB4B734E7CACC45356C4ED03118083E8FBBC484915EE62C2F6E 64ED7D9FD6724EE6630AA10AABE01B06A9036102CE4EE1B71A132736D1AD88C5 3F72FAA124A90E53FE0EA7969C280BE95D5A42D4C2E1D67C98B435F11A2692D4 F01AEE9092F20AD92233B47DB3C06916D89EC0197D42CA9634F3D080CDB579A2 FC412C6D5EBE52947199EEDBEA92F8D19D327505EBFAC127AE6978D255E1F561 DDDB040E4D9A0D4A72F0E502FE77619FD7661DAB09E7DA5DF97D448F3FC60219 8FFBB7A6539878F2A3F69C75F1AA82ADB174C11B7B8C2F63683655E7F5B1E31C 6BB470993AC90579E422CF2BF19203F00C13F1CABFE843C747C544FA94CE070F E889A1765D71455FE049018F3E84AF0F19C07F03B9DA1AC74F4D0B0491E5D192 DBF12A5DF4406F492FF22E29E518468FDA859C78D573AD206D0AD9C98D7AF768 B0F4286D5861DB380687BDA842E8329B9BDC4F45DB99C209C4EB9C3F02F939C4 CCAA5AFA66C9F7408087A7D34F03FF9FDB9BF909C0279C9BC29F59F18E8D6701 11B02B70CCEEC859261FD81BD86B0E398A95B6043E0F0134F97B14847B8F0B69 87D13AFB28426374ADC4E9D64E8B5B070C33BC5ED978EB31B8E7ECB5B20EBAC9 7468651919A494DF5FC3821B9AAB0AA7B6B384216B774B44D3C1EA05D604DEA4 330E5C1AD52A890925CEB62B2F322DD236567666D6388BC72E5537597F96E343 DAEEB356DFF9B3A826641854B2D8E30BFE0CFC6B4B27BBF15C55AC95026C947B 6AD6B51DBC3B579EC35F7F38C9A8938D40041D5B1EF69C7C2F8AA0719F7714BF 9FE2B87972DE9566CD3192683974BD1EB2374992009A28744B32C0D4BB90034C 9739AB9D5179E637D61A005F695E9680FF5110E7C8552588BEBD48CCBBA82354 E89165C25A42EEE6D1BBB8454DCCF46E668EAB80D301FA1391E9842BEE345DA6 A5DD59D868C8F663872B23B73BF80E0D8A00C18FB16379B6FFDDD552E4A48714 6DE123E2C374BDB4D83184971E458BBBC2877B0BC29A6076102A5B27B0C759C8 1E6F8773E0623AD67754E63D39DB81994815E669723BBAC918092C9E0C452150 E609C212EC80C2560B9C675AF1AA86274D2D6CC9DE1175CFE46D18A7A5B2F63E 24C260B38B46939BCC63777843C62E2E3CB48F3ECF3A6D403D9FC6A35882A8E5 D82876FDCAD231563465C2512B9CCAFAB7A7F404F4763151CB7F4D4444B99E46 7A3013C00F2162A8FA811B9F07032361A03AF6D29785DBCCBC67C2AC17638689 E052EBBFDA68E1C7BD535ACFF8E06CE35EB82B01B06A29556B5A597992951F34 EB7B7A79BA23F34730C65A687788B7884F3902BF3F40B146D9DE5906B894B35A E080B3F1D7B19FD29466B3E61EC1E3B1129EBF8BA238D1E4935E99FC5F0E80A5 95364BCEEDE6AB9E9C2BD45611C8B1218CC0A3CA7034A50E8451164A88A75C4C 6D325F60AE3D43E04691EAF6B5F8BBB5E9D0BB72623EC64B9E5C6F3F101FFA4A E7820C5AE33F5660B84DFF63D723281308542A22BB40D553BCFF6420685674DF 40D01D9A0C9774C988FBB2FAA0AC2799F296F01AE8EF5DEE952032C44EF016CB CD79CD287BEF402C4E115E4C997BCFE7D1D35A6648BDF370CEEF7E718BA98DD6 CD3CFF8CD3A0E4C5CD17C2FCAC5EEAE834091921F338159C2BD9068159366466 208184CFD8DC8B698E9257CB36EC8753832B365EF86DD14FF44C88DBEA46E964 EA6A9BA080BD7CF0E0CC7C5E32236244002127045DC81A58335C81FBF71244EA 2F2392272D760F3F96FE47C9399E3DFA2E966763ABCB0407D46BD32E5D18AA37 24E2CF901FD556D061D3CAFC2B972DA3CC8CE0724B476C950C7C5DB112DB232C F42BFD5FC0F49B300A23A548B562210EDF3004092AC13AE8E45B6F719CC63559 E1B0C6ED738FABEE92C3063B767E6C126C54DC8B03BA341900FAB5DAA2F79EB2 B2F2C62C1BD04FA9DBE7F2C15336D7B6D113C2FAF4EC63A367F3BCC2B21E0018 77649385CBBD742C32ED934A0E724F1A1F9D2D7DDFABA65FBD82CEC1C97B589A CBC9BE7B21469A5C77FAEF4E2C5217FEB9D967140E9C017FC4007D226BF2C2E3 4BF1B67F46CFF86C23F3C19EB36042C92AED351346B6320DE83A6B43FF03E011 BE5E2D678F561A0C280EA88FEA95168E5A5BCDE11E70A3AB8091958CFE359A43 B4E8C355C74DDAEB3DBCCD60A6BC0C695C181AC0D50A04BB28DF9108CD50DAE3 3A9DE29699723C058563E1E7056BAB2416C5CA8809C394033B8ACC3BA1B1BDB9 DBB13C5A6692FDA7B1CAFFD357A8454C8C426C4F6B08786B31A8F801266D1854 6AFC9809ECB4A7C747BC8D566006C21A333DBAEB46F5CE522E94CAF47B43B311 0B980AC9ABA6EEA94D277996C8594B700B7220D5E2434A24E6726857C4E560B2 A92FC610825F46CB1B0D863DE27BE3150D036EF920DEF7EC998C59CE8BF5028B E610015F659C5156C435D1B0FCCB11854622AE4CA048E572E9D4979E90C1906B 9F626DD5D4BAA310463724BA2A723D3F1EE8FF73848A07616AC88934370D12F1 CCF49791598960CE93AD3FBF04AF9924B9914C5ED023F95E71A2A3C2F9C5C2A6 16875461EFAFF725C74573C904ADFDA3B2756284A48BC67EAADF68125F2FDE3F A018AC6CE37E14CE0C8A9A29B98C08DE78C4DC88F913996B885E1F483F6A15F3 30C5A6FFA861942C14276BBAA09107EC30DA940A723DB67376ABBABDF1F60AD6 3FE70688ECD089D935F524EBB670E046B97F76E8AAA8D23CF5F5C35ADB236687 07EF3BD107829ABFAC56372294A7ABB98A5D4359E63EC1B719E68B156AD6FD01 D2ED80E8FA03A05C57FAA891B5434CCD291FE8377077A6B277F0FD49FF5486FE 1D4C7ABEC144933A9744FB339933F336EAE2759E95CDBAA5252EE41AA822D567 E3AC2D7C2CEEDF5D3BB4E93F844244DE44293607E8F3E5C6A42602A9A6C8C8B7 8F745715B6DF68538B4F5CB6DA9FA3407D23DE9C12DEAF7219943AE405EB348C 7F2AC3FAA4A72107C77F39ECE976BB334803837DEE55F21E60D3FD8705B4C79C 2F8DF6FE9AD48C3ED2897EFB9CE027CB1D84D044163EC6D78F5DFC4129002CB4 58C6799FBAA54224CF61D042993AE76503B2D6ECA8B6528F6FF4FFBE7D9A882D 77395AA2D85BC7137722367F3EE7AB1174B9AA0F134D94FEDE0DF1DBD36B9BA8 8F6F42437E68C5C452C78469A6AD12B1F8DB0A816E953214D9A72058C805C157 51D39598C7A997108F42AA9E7775E07129F08AA02D3E2126E5A0EB43D320873A E78DAB112D3B5FF44EDA2680473E9FA68FF991410ABA2992EFDDBC67F1AF8AD6 46EC3C0E5C70EF9824D626D03B366BFED998AAF65C5E6C4051FE1CB230CEF405 5C97E8A071F1E39572E8B929F1F12408120C9E5D167C213D1CC08406BBC7E340 B6EB0BBC21A6E079C93A8807F83B842C43F82C2934A003443968F3AB77E6D6E9 CDBAD929BA9BDB3E151B8FD9603CB11A6ED0E78E38F9F14C2160261390B297A5 0BCAD49B59B54AAECE3D1A559D6283C1C8E98219ECD5311E0E3AD613CF8B208E F78A0922408317876A4984CD499083306108635494AD1225AB3C4A0DC434FF3D E141A9F98348DCB5EE1DCD858CA32612349E3415B7338FF1836821908CB32F31 57CFEA5B1A8C1AB5894577FA8BD9BF5715190F397B5538E3EB23121A088ED33D FE1CFBD99D125E0246445B28F9DE61A528357F875E45D5EDD30C2B244ECB2975 DFABF88C46533789DC8971E37722435843382F98050337389783FE493F789F8A 41647258DA79844EC2E724F2F9C9CDFC2B1C1398F3999611188DD5650B3F3443 B850ADC9DE0BB2BFCA2C46B1CEF560C87C8DD51183BBC59C9B3490D417D2E39A F7ADE4131FA97DB440F45FC2E607328327A795D6B3E1729E07550E8612D0EA1D FF52AB9A2F7B76FB2E33376A5D4312476671018BBB9F2FB5D2914DDFB05CF03B F4EB48DE98A7B50DFF155A8B7D6ADF510F7B26F44B899CC41BC153711E81E7C1 DC470BF55BC7EA478E393E533F23E7F111AC90675A692C21D0075FD99883A28E B3377D67C3E8EA30919CDBD9230B010E2791FA8BFE9BE8055CAC4F7D98BC3647 9C3051F34C2AB95220F15FF87E06D290BEE0855554EE11D93FE10E1CECF4CE04 56B9536BF5A24F141281C328F5281BE260F87C49EC2582BB210F3422521908E4 8B2B603B1FB77CE7E1F4E41E9777B1E4F1C4C6F75A84A9CC0D628453595A00CB 434BC97487C8F2DCF613A5B55E11F57A20D82663F1FB8DC7D83C74E3B4D51949 007E9AB4EA5F1DA006925F7B514A7E56B54347EF3D000A1A23A7F4E1C232F307 B56A476EB6DBF0595FC7031938E3E86EDA3BA050F9D1AD453B86FEB8BAA22C78 B829C60502A964893A4F7E03AAA3EEC56175658939C1361DD89A0B9E95BD7D49 5441F4792ADC1AB28756D32CB9B85151CACB70AA24A28B3CB3107932378823D8 661E00B8774A53E93818D18C80BB9CC7C0F9341B1C11AC4AC5E0A5AE083ED041 6BDAF1F7456ADBF84DA39A287FAFBF3E4CD03F74D32261D62B420F3A188F2EC3 E688586D7384E5915352D82DEF737FC117E77CBB5489A90C27BC4B1DA01B2EB7 FBD3EE6B09197FFC31881ACB40E10C4485540A3E9709E214E70F231F165883E1 D2DD33E5F85CF47698BBD98E5C97E8D106B53BA63598890D8692C87C0E19E6DC 48B6B96FA0263CE26701A64FC09641B544542F1EE9FE4DB06039297C717AB04D D118DF1C55F1050CFE813522C00AF54FB9C51EC3A19C530A3DE1ECE66174D8B5 BE98473E32F20A39B006A81AAD23F0B92814F1B05A929768B983C839E8E8F7DA 7A488007C6ACC4F2CDE1C22E8B1B10CB4F2A04255FC0F0A9EFD0B8DCAA50A86A 5456A02937971BCD20D43AF72DD1968668179A321D30BE7C35F48AFA1EBB330A B15FB5919DBECE3CF400AF4F50F09B3C809C97E6C264D3548CE96352EB4D9E61 58C16611C995E6193661D83610B23124FDCA1FD21A28D8A08526FF074F50E811 FE15519337D34EE142649F2818E61B50980B6FC9727A8F6488E2432EC0AD8EBC 9C1A9774A334CD2D2206519D53503BD7C290FC443499CC821379364FE9473C1E F26C274836B041ECD617AD88FF7B1BCEAC3A844FB1CD989E83DA372B97AE22D1 433D561E7555D191EC38B6393B26662CADB4790D7F0DC0436679914DF22EF422 7B73EC697AD00C81E7E10AEC3C69F6DCE6D3D1A6A8C402A4D9CEF9A5D5C19746 2E1C6273BD1C6BAA212C23239223CCF580A309EE6386180F113767AE8AA388A8 70B30C44D7798D733167A9BE7028823292E374F77CEC4485D31D181B5A5122EA 23E38852D765005A655564B845E90749BD6B8F1C48DEF82F206EB4438C9B1AE8 0AD6EBE7122DDBE35EED48E2FA64793F21CCA25AC41396ADA3FE00CE97405C9F 9353BC232F7638D45C645DEDF2FE82F2801ADD70A99527C6F01AB01ECB77CC77 9D733F531FF66181D72F9A3E06CDB03CA44F7E81901855B3EC071D13CDE24C00 8A984EDB123BB49E2F81B4407FCAF0B014600AAE7AF106A5C7AE081A7C1B490B 917035BC7B76472FF92C8515C5E1704A0294D3547784FA28DFB7ABF1A3C5BE4F F41C99560D73570AF30B0E7267CEB0CE320717A6CBA5CCE176EED51D0E26C673 C746C0E4E1681D698E0628E0F4B52CBA75DB0B5AFA37C6FCA61FBBDF93BB9F75 F41065BCB57954C4CBFBE13F0BCEFF0A717ED4EB208212711D33D7FE10F11A29 8E26490DEAE35553EE5DAAED6E0D0D27DE91EC8CAE93E224CC8CECB13EFA58D5 7265D2C046C800233946891C2D5A3AF58EC5B82890E6DCFDF9FE5301D157D9EB D023CC382E091ED29E6D24EE9443143D66A00B235E10EF4AE27998A452F614BF CF39C8020B773C6808377E1CCDFE8A10C95417EAA097CB4A3ED5CA073D118536 044BCE90CA88CCC20F7E4BBFAD79C757B310265345593D88A8E31035354BEFAB CBD577427B0F3B0FB842123DDD53AC4AE9A7F0C960D630D0BFDA091A0383F51A E61C595687FBE3CC7377B494723BB3D427A82AFA37AF4EFFD6F866E23AA1833D 2A527F7FA01C661CC91AC736247FC2585616AE48FD769BD550C2B3F51E96B0BC 9415572CAD967FEFC2A680C7A7E4FA31F145A703AB4EFED3FE76BAC059B92CAF C7506A8F35B36BA21DAD13B87B38BB6918C855981201E9D41877F6C38FDC6A03 087101799B7A7A071AE33B47BD37EF7A8CEABB00366FF624A10BEB3CE7FD47A8 7C73BCD5905410CC3BA978881FE51C5A5C9A3A22537116DCF6A6692ACB492E55 4FC69975051A748F74C50F193362F74340A4ED472D88782E46518E37F25CCE3B 3DACA658AA510F7C12F9E53A15B1F2C29ADC4453E40F9B49B82F4B77F90283EE CA9E48D308B585038F9C03C638498D26F312E8B6866106DFC145611043A75DB9 64B7D96DFDBCE6CE302C71B2FDC19BA63D611FBE0B9D01F57B0B3EFB346F92CC 3F698FE35F6A8CE520AD9222566610778E6890A899C89DEE636267A1A989C185 06107D6F00F4ACEB1CCACC4F19E3179C158DA907AE533E505BB90992DAA673D7 CEBB198A644011C6FC6AC44B78A0FD90966562DD5A1FAA3B8784A3D0511BB351 845FE602FAE8F5F752A36C0165467C2F08B047DC6D4D086B6FDC6211BF9ED573 F472564FF2F069472D4ED034F7CF825F3D7A6F1215D7704787C5B386C3147C31 F917E589E431AE2C3054D9C1FF093D5E94FE5261CA4DB79762053988CBF75095 5760F4D8AC8A1765B1A13413B6592E1FC306899AF4502E7FE9B28056F763BC35 893470BA1B3DD881E715787DBA93E486BAA2508118657BAA56A80B5C2CDFA90A EF9D3C2333CCFF488DD8A82CD70C0D1C8ACAEDEC57268B9B755139018A544578 16DCCD1BC5D011CE0B15A8556C14C6F3063E18E0BDA5307F46BE06B737E4ACE9 922F08E447599828817B68B14CBC99CCFAC064156C0A12849D8AF13FD56066E4 24D4B6794FBBBBCFD20BBD36E5DD1DFEA8C3F07B2B45D6E7D703088F91DABA1D 843C0BEC348E9B1F6FEA71121D4A8AE7686D956D82420BD331EE81B537E8F9D1 225C56BAA9E63E27397BA86FB9AE46A9438F090B8B10FBD9A64B73871BE36166 D039317D89B2C900D0F5A896B3643F4A0498D2693B7FD5AE6A975C18E8DF5666 038FFAA544BF68794F2338637206A7941CF073043C97398902EF6BF3CFCD4361 EAF231169C10B5D779B25C656A4C3598BD137D894274AF7264EEED3E2CD7E146 E323408CE4B1BC8070F81998E4E8843F84B187F90BEE91332AC34B685E523318 9AA32DECE940B4D4EC540B49FF2675357249029A176925BF41C0CA2E927E773B 4E80F8ABCB8DBD89944E45F457A9A4A232A2AECDD736EB5588BB298B52B68307 795014208619E3A715B470BE73D3B1F0B898427954F2369A6193E0C5E91AA437 951789C2423095CD40E20EFDD4D13C1294A0FBFB4ADAD535C2A7661D5AFAB9B7 1788646707A4F631267ECE7A6E2F982AA79C1E924B62C4E386722E1605E5F306 2A7D01C2F5BF32E3D155CDD856370EDE0D51312FA02222F17F84D3685EF3FF49 1E941247C9B11F5F6F4827862B25894CF4A599DC98B13E7F11B9527649DAFAE5 A843A33611C1BC781AC5BF449CA64DE0C9378360DEF1645295DDB18310762052 3F8C394B4D9A08EDC4158EAD5801CCCA6711937F6CED2344ED9E9938D1DAE388 BFDB91FA8284F153304D0BF96579B71B362F0F3E2B626130B87EB56E114D9051 28ACB40428CDF06EDB7DF75C81E151AF798BE22AEE9B1BD7098FBEA7554A3E6F 84367E93C53FDB6CEA145D13BA30184215A9A2DE31D3B59C2E1C6F6647B46E33 03BD2DC57CA1C2951FD62957C1F57C77709FCAD6A8C03A492FE73F13A2AD866D 6929DD2EA1398C00374F5A54C4B1349B1EDC972FC5770ABB8365359152D90F20 FD3482303D50360D1B818F37C5E9C0734EB7F13D48E3A36701A4B575A9844B4D 4A2C12EEE68C07969175EED766885F8E3F12950EF4A8FC2D71446ED509751A3E A24ADAD3B22CA71F0D1836DD358380501499E414658E9C8E217D62474D9396F5 2BCA6D2019D26C2BEFB5B48D05BA012B554AC9870216C14ED30AEBBE27212192 7F746F3C65AFCA94D0E8E9CEC354DB6831F6F1644EE6534E120D5C3C5E08ADE1 BD1852490AA3609BAC8B19B93D6DBA518C209842F71D12FB85B61D53B4CC08F7 00FA1758B7B8CA463BB40EA2CC0C39F3D55809639622BD4197C4FCCD3D86D252 4685EF783F0ADCBBD10FFEE636AFD81D8F519216AA65894F8A6B4988C4054140 7E9C2AE6A7F0A59117FBCDC5DE21EB5DD85782522B88B1E6D34E84C65AF8E73F D3519C5D8A787448AE30E5F1B299AF47C2ADF25CC5A43C75DA942C46C3399AD2 82495C1B0C48CFBC6CC65627C87DC742044F10F593989B19E0A12EB8E98AFAB8 6CAE639F70D381194CC6646844920E2B365A2F26218DE4D414B7A75B2452A44F 4390C14392C903963F437AC552343530DE740F5D063566FB455CE15095ABF55D 303292F4D302C3464698042AB4E65AD6F62DFEEB3839773359E2D8E7819D7CB0 7835B71934581D227D4C104907CC8497D683A7B06321C001541D80CB9D345A6B 9E32348310D7DDCBA46C89CF21EF15E4B58D4F4F40F6130C31A8A86CC22177BD 100644C9AEAB1228D745728DE956E10C37C4BFFA2DA0402739A65DDFEDB48E51 3F506C47151D23294B177767FA7F37CB35EBC865584819C723651DF9B72C5021 5113C05321AB5B3C8A312FF68C34182FE62944CE7AAEC31804F3F1F49EA735AD 713914450511761D483C02590354AABB884C9406531E92DDD8623C7C9D40DC85 C201CCE3AD54DF782ABAA2207E91270B8FBC6BC47F9C9D933925233865F4B535 E2216433150DE556F2167312DAF4D8B97BE9B675E63BB928977EEAD44F4A2EB0 D4FCA8DD6A8A62981EE24B3C1046651DA27FE5FE298779C54144D873DE81FA15 AFE31ABE1082855A371659E1D2FD6754D8F0EA74C9AFE7A5C944848DFE875A98 771643ABB0B510FD9011C2B42E6A31B705C491D8C4DC0D54ED782AA62E25E5A8 2885C74200639A87F529659519AAC21F5BA2F3E8C3F934CD54F819713C5795B4 B3BCA4CFFADF01522ECAEDBCBF629C397BFB1C3B23E69631DEEA8D6740AB3840 100E73A7B528AC42CA8D4C6E6AF2DD97D00057DFEBD0550052CEF84294AA11CF CAC7EAC8C0664EEEA631055A67D144D58BCC7216472E3B9A1DA34517466F92FD B2F65B7F74E7788EB76FC44CD1E6A14A34DE9F8BCDDCF0DCE2BEA9333679566C 90AC6594C6B8BFE3D2D6484A142A67318855A9F92124B8D69B96729832160D14 0AC8AF9E4EAEF56BF317BDEDD23F9D0AABEA5145DCC4F219E1CD45B81CB5EAA2 62E6C7AE3BB3AA96B90AF4AFD2D54C2804FA905188A9821AF6A83A538DA39825 EEC3D2CCF02713BC2568520F69638E2B614EBA7FD210346982249E8C91C9E74E 8AD59153059F225DF775D54F433CF5CEE96445B7157164F09CF3A99BC5C060D3 BCAB51F44690311242EE8A94CF4CCD01933C3D0E8EB3CE6EC4A211A822C18087 DD31915F5FD66A22AFAAC18A1CEF240677571C65CEE829F04E6808861DEB93D9 9A0333B9A23C34B8BF85D16EF7563F2DD3CA2B7B8A8344777E9B3F15648471B5 C35BCE44B62B8892B7AA2B7E21D2751D07F41AB80E578D97990CA179732AFB92 326AFD5515F000CC4027F006DB1A66CE5627EB3DB588EF8A3B7F3F79E09D6DFC 8D6F2BB14FDDFCE24E2D808EEAB0A3B0B8DD76149E7AA314A232C6D660EA48FD 3749195491888CACE338D18E1217E070EB8EBD6F653493213A249C7D177155B9 B83AD76BEA3B42BB4C35E6A6A3C319573CB5A71B35FFE43384E962281A2BCBA5 F526D9A521F387CDE6B9C64E6B7166B269B174B95FE9E1A30FE47A219B4F4559 772672F473ED8E3F7AF554E298E864BD11257E8AD8808E03422730875720622B A2C698F6BEB927BF1ECEAAA5C555C8B083EE9D4CA00346BF13254EB4C6F0328E F166CBDD37266E0A82BDFB56C130AA662E7D8DC30100362B3261CBBBFA93D2D5 ECA280DBFB558A885916D0F1A0C3C2A76B4075224661E4F4FFCFAA4A028DF758 0515B37AE745869CBBBD4968E71C5C3E010B374CB45A84872542AFE54BDC0536 78E92FFD6DD252564A5AE9D6646EE82AF2EB0F1FA58507A99D8F368376665573 29E09C808492EB1BAAAE292328D30609DB080AF944CDF0D97531 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMCSC10 %!PS-AdobeFont-1.0: CMCSC10 003.002 %%Title: CMCSC10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMCSC10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMCSC10 known{/CMCSC10 findfont dup/UniqueID known{dup /UniqueID get 5087402 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMCSC10 def /FontBBox {14 -250 1077 750 }readonly def /UniqueID 5087402 def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMCSC10.) readonly def /FullName (CMCSC10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 43 /plus put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 105 /i put dup 109 /m put dup 110 /n put dup 111 /o put dup 114 /r put dup 116 /t put dup 117 /u put dup 118 /v put dup 121 /y put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BB89566A9BDEC70EB4F2 048A6EB631F05C014D372103E37FC3FA317EBC9973565A638403DA02E48B7D31 CFF6C241DC5CDB470561002FF46437C06EF93BC99352DF04393C661FFFBF4BA2 0723ABD9B3E9CA9E63BA57EFDBAE684655CBBDBA15ADAE43E1A2C98A3CF060A3 D16AF8FE3A49B50A24C20EEED716E49AF6013D4D38CD9CC41A91C17E4D04D79D 567E1EF49110AA9C34464E95D81A730ECEB2C9AF38FBA6B45E253288438B4CB3 DC75B3A906D4357293BA41E59C35223A6C9CBD6FF5FC90C2D07CBB376C7320FF 435A6251822BFCBB612CE630EDF826C37E95F541C21B93FCE127591D5E38165E 2B58A34AAE37712BC58B63FFD70AB80F4F24612CFD2F1466BAAF3CA2BCB45148 D0DEA0E9B8FBA4C4FF5B8B3CB02E461355051842BD1C94F41066B9B909DB83B1 DCDCBEF7CD00A43E4C0B8191A29600CA197F0BA227FB8309BB539D2A620BAC70 8A1AB2DFA51ADC9873B8E5582DCD3ED154E5D727D1665F99BD89883D69E6CC2F DB3A57AEB612171A88E22F038461DE03FC357F771675E34E90D4D19B4B36891C 9D2333960400E97494F4FC4DBCE6A73C34A0409E433BBDC0AAAEBA7D3555066E 1CFBB4515C8B573C9B9DD12ED5B6ECEBE35AD0DDEA9DB004FC6CB540B5117B49 59CABE5FD74C6F5B6482B42C20B5FF0467D1DBD7CED2CC651CA57852B6FBB402 A6764DB342889132C911CAA713A7F2FDD8A5E849345D6C81025E02F5B8B682BA 90CC9B467FBC37362436EA6BF8EB62D784B01D5430147945BC09D1F49EE89F2E 3E2B8E6D439248A56F82F2E03EA5C7A922F2813BE6538A3A423BEBC55B345AFB 3B3C125306749E137C647D78028AE1FBF3E1A82C260132832A9668F454D39C41 736717DED0A99F6B11F005F0E1D07FE84713AAB4C042FDC166AA146D7B5E9198 E4F485BE5B135EA281FF1C1E616B5AAF02771F58C5840CB5A427FF9794F93E94 17FD799C78AED1DC4810BCEF4C6C51D3C1504EA2C6F2B29805B7ECF97B5F637D FE92E168CB9029E90404CB54FB312FC7AA8A9F2F524C03E61F03B1E31D4F061E 1677B39D5D30C9FD4673E1723F4AE3CCF38593AD6D7F61E9DF3C010E51F25085 35D51105E1464BA146A78D7297D4D310AD91342A0BB942034A3EC0696B467367 3E39D202D637E6B14D0EBCA6AD3CF22B07D4CA69C0FCBB6C93782B2F0DFC5AC1 5D8A16CB5EDB671A0C1BA9D10F63CEAFCD0E06E42C730C8EF769CCFD57937245 658F486036D37E8BDDE5670A212FB488A8753322A5B170C9662750AA958C0BBD 8E97D8239D2A08B30416504DEEC4E506013E037C91785C674F8A6A44E23FEE6F CCC00CC5E4D355B0871FDB8ECD64F70EE32449BB5D6F84F8C8AA2D5B1A489BA9 D7FF2DBAA8D0B84054E93D64D3E77850A3724824914A0F821EEC3D605DD851A7 606936B8B9E24D6E932E16C448140FE94DD96C75AECB73850035ED9C04A1D93C 64B21E7D4657E030483EC5C3554AEF8BE4D0FE5B9743B875340B09E01273DAE8 F256C50A1A8F2E0417440A8BB0173F59E11523E1CEF2593A4AC5AF2167627B00 C5EA97D125EB8A4BD4C372877ABF10F5B7B149D73787E0834BFB3084E9508DF7 072DD71637019599252059738D4D6BC57A9358E4B14F6AF9C4B31DB8E25C29B3 7A15F9953BD73ACDE5F0445A5DC406BB4635FAE51C1D8202AE31730E6F355317 1DC197DB0B6177307C60E5D38F4487363EE051B2E609A52BC4D45B14B6558B6B 5E1618748794B8340752CDBE7756C068975B559615D4CD5A97CE30BAA7B2B1A3 2FEF2E055232B24FD8A21BECDE1B6A479A28EC80AE2CD16DB50B30B4A6CFCF06 491C7CD5AC29FB964D4846415233947522676DEABDA0D9535F8507D33693930C B4E4240A02B0CE7EA288516B8A6EF908D7F8BAF9012D052C6AC96D9F8F6ADB07 8984F3559C5E7E3022A957982155FC9CD599C74E18328D3AB46F9DD15D1C4C3F 9B93ADB4489BA02CFCF57DE6270F3AD2F8597BE71786510EF08142F430EE5568 4F9DDB792B7C46B6135E341DBBF062FBC50FABA80CD4A384157BAE57CBEA9781 AA4416323265168AC097DE7E30A0D4750143A4FCE70A863A31876A8FA5327C3E 36E89589E363AA2B1A6E8B09F5AEB8FFFD0396067173465B6503383DE517A6EA 88C0FC08578398C2A721E5AEB29F4AC9BC990A50CD87BD35A11F9E81F68E7B85 5E5B95A4F9A5D30379EF90D78E1E466DEF867BAEFC4F5ED2C762BFF099C1C2B3 5E0DA1C2FB33BE1379413CDDB1EE6BB3A495331F72F2FAEB8152E8AD5FD334A8 AAB0082A71D5574B618EA8D487B8FAF1B445F3395B1E21224F5492A0E06F5152 7726835C900E2E52BE3B7B654183AEDEC68053DD0AF19EF6DBC10B6FC08EC7D0 CC0E2C8FAF8C9A4C21FB7C34E074BBA4EE64226BEC8C928A784C1BEE35B72EC8 E9295240B29DDC2539CD118BAC38DB3917D14CD33AB45FE47E827F2A2B193AFF 53C5396C52CEA4F43F06AC2D08C74CC85D608CBA267175EC31311EE25AB48DD9 FE811B411AE426C9FC0B6044D1EBF130231623F1566CEA4D1C06D8032FD9808A 94479C842BC41B675CF6B90113BD681F8D43F51D5016D80EDC11D7640FB950D4 E709A46184406ED90D0892A4CD9062938A8205697A200DBE1F38EB166EFEA0EC 4FCB45CDAF82EA103DD6FDD03D146F3E42EDA6496064DB3F4FC1C5280C9E604B D5EBCA08BF2AAC90156C11EF68137DC76502EBF216F3AF3EE30DD2676D218428 F41C655093F8B530FCA378B5769F262A6FDB4B66B83F18F050E77227E28D71F4 5F4425CB8D51B3DAE872CD86D7804F870BC564A6DA1CA13EDB00D131CE4F6460 7021661B99612629DCC20C85CF155EDC5111E015A77B0B82A8FC1EBB374B7EF2 361419BA93B857D5C9944BB5B4AEDD86ABCC261542077FE09701C96370168579 5F89D5AAA08D700E2643E88C2FB8D1D56D37AAA9744872E7C050B4CE046B47A7 83F224FA9FD311C955EFBF173042C8FC66524135F579B1397828870D5C9DC71F 8615FADE2A1CFAEA90F732B6C266E2F3048FC43EDA7A6B6D98E9DB793CF457B3 F5877E7A055C92B0246FEA8C72B3B3456F93BF36E2651D32CD614C3AECC0B4BC F824C8363E593A6458D37408FC5B09883B280005DD24123E2D4B1B85F4113327 EEDD9186A4AF2CD6439B46C5C168C125CA80F9EE9E68906620EE126CFBF26E15 B269838A54224EDCFE2A373EB750D4829BFA410DE5F1541E428BB1E024AF496D F5F1C151F5A645C8622F2EF9088D57A2811868A8A8BFCDBFCE3ACB8463AC35B4 8B6F44E1C1232805842F56FA468F81FF37D5D55B81CA56058558544C142EB3BE 07CFB1F75DECB1E48C14D6AFDD455989AA6FFE8B8DC54F462B3C20E31D270BCE 8E68E2B43A6625AC7E9792704FAAD6CE8BBE0B341DA7189EBB3E9D5375B27FD4 12506D5BCA50AEDC6955E6C3C7BAA84BACAF7ABDF3A270C7734EC3C6EC22793B E67B0E288F99699D38DA8B79F2D21DD97945FBDDD132A8F0BF947950D3C0B4AA EB7B2C435AFE54489E1930610311D718AC610C21A644F34CB2D1959B3066F39B EADEAB5CFC6AF4D191D86B02402B00D1C5262707861C5308730579795EB53207 A291A27A8B5C4DAE0A87A0C6A260026CA3CB620E1002E066A515D7990F3DEA29 0FAC962E0B82B7A6C86B1EDC54007822BAECED673FAAEF88C8109777EB79A53F AF3C58546974F2F56E70E9B5CB59ACB5C27CB01895557B2D82134D7F02029B24 3331621F38E68717F5CB68A8892D0B9C0A8ED4F8BB56E80505170D44C6856128 2DED0254ADA4875CF56B4D97372AAE730D4C77A2940DC8C178274DF88A9EE037 215C6FE7B9D481EE4DE809B124C0270782411ACCCF89906A8B143D0BA8B2CEDE E9B90465C3E57A4FD9AD2702323450256ABD09A1F8C26F08480317C08B75B720 70A161C99715A35A94DD5C9647ED0F8A5337B774C8E54F9653AC859485A1FED5 37B725A7E4BA58711CBCDA6054E34CBD8E9F9460179DA7DBD243D81A1531FDDE BF2BD425BD9DBE75EAA333B1F5793669A215549A774597E6ADA16D323FE5601A EDA41092730009A99BF5B5AAE281844A6BF3292D4D4EDE36B4FD8BCAEB6EB72F AC5D3CD53D0D621CA9EA8D254FDCB2B5161EE9E80B266563F669805A3A15271A 0753983004A1ECC7FBADF62AFEA4DAB49A178C231759857DB910668BDB07CB3F 7E8EC24901863088B3231EE3FA563924032C91CA9D68DB398F9BD9AC0C651EC8 9051C9F709CD784F3FF5951DECD7E869ACC34B83AECDB011E6594347855EE7F5 28811F744A4BD70D4E9077EA7EC19FFCF612689F12B34332857AE41F13E6D16A 962DB9B6AAAC167B9FBDF0068EA13412F318384134B29F3F0C399F1973A3564E F9C3C39B5BDD4C98D81A6CB476E565860B50704BD65ABD630A5F1372F2D826F3 3AD47C08B8AD3176A170C369EF3CEEB190134006D6135C5B8CCDBE1C11FFF1EC 3F6D8C46E15C4F5EB9ED9F31A129594D542D40DC3815CD075A0DBB648D868AF5 15A05C4BDB28BF23653A3AD96CF6AFC065DCCCB23D5D9A945F8CBB539DD3BFA8 DB8F1FBF9B6F25B41EB4309995CA3D5D6ABD70CBB4A2F0C6364E5439AD1045FF 72F6B45A30BD3A548CFAADDCC6C15D46F6D783D3E520215751DC98335A4ED512 D7D19235CDF911CC69F3CF4365B678EBF3E87C456A4E77339C74930083445588 462529C22A96A28C5CE87AFA0C981F26CAED5A1C8DBCDDA612624DBE0373F026 465185A4D8C73CCD8D71EE97116F8F7D341B87FD78F9CCB9FBDA2A7799711607 6BBA855AE9D5C505870DC85FDFAAA130A351D56AADBFBD6A7D52055E3200F8B7 8AE9A00092B55DEA8BDE224B4BA7FD4A191CB1FFC4CB995FEE1AC2883AB69E1A AFFC09AB5B9AE311A030A5BA05E2213F9BBF016C8FA80689C069314D91274B20 53FCC65C7D7B3A7504887525BFFA060304931672A078BCD7F269595686310E34 E1ECA868899BC402D17EC36CE40D5041D7CEDA77F7764C9D98793F5334F574DF E93CB10A5E8ADAE95CE63D2339557091B4B4911A4987CF21B7F1DBADBC2DD605 8EB72473C1F2EABCC44E0D0339EECB55DA74085606C3F89D57ACFBF5755A5395 CA8D4BD47E4EE8D8B882D3AB31A1F0C62E74654C7E041E4FF2693A38A9796064 46526B0A37E6B5BF8E48E80EDEF81E34DA8F6CC9025936A4D0E6D709D61B7B5C AB550397117F3F9D2F5A542A64DEA8E1178F7337124D6B56BA92F659AAD694D7 391028731E01284BFEA635314A8DA8DF7A34EA3B6B2F8803BE6DCB423A9E8015 55EBD90EBAE8A00298B3B6B1C02BA516AF528122C1F2B07EF69F5466C2C36643 0D665D6561705509B7582D8301AF3C32E2F3B9433E3E04D62117C7E8A368BDE1 0D4DAA1C415B2A6573116D2A169AFEF700A83F55D88813585E89C94C07802BA8 3AE8F9BC3CDBFD9C2E35D062B1FD6E79E1EF104FC70B0AB09D12CA027F33F85A 22F0ECBB4AD55FE8C616B82C46CE69A600E4F767BD7A9C5F9B37A3196B038384 5DEF76A8884425FE598A63AEB19FA698C2AF7CAA4983CEC789268E22BA051EE0 20A40633D22D8F707626ED30E8273EAAD1C065F0B2E1718B5AC853ABE09330C3 B0082A71D557169BC1559B6D285A3499D41C4CCF1F74884EC3917EB9C574371E AFE8578DDCA459B8D22C0188A8D150437B05FB92022C95EB6FBCC954216B5FED CBC7C90B9A1F061376A9840FB64390A6BA99CFC8279A86A730C6DBFD14C53C4B 7277D676BD42203677E9ABEEC8C97E13DAA626474513B06F8734DD784F2FBBB9 B3B448B8E8221E380AB4A86D3A683B86A54129519D50DD4FE63B30954D805CED A9A5D9A39C58B65B08E1C19555E927C6DBF7FD07252B2B57F62B905D6B488201 213D106A41033B26FFBAC2E616DA6ADA6D560BADF10E68872806CFD6F6E19D7B 57CF1F7A030A7BAD374F16A977E0ECB8742D034ADAF9C247DA19C8AEA74EF6CE DAFD6B1DC562FD3B77E4D008BDE4D8C7FCA9895DA1AC9EAA01C32A0DA712B082 9438E77230D38FC4153E1711417B918BA6CC03203A5FF082AF880F48518D8271 C1121E4F1386B30A7F1BC6F10EA98443F8A65C867A109336B808BC9A8E2A75AC F950835AA84B56F59DA4C8A18859C3B68F6B6DE09A6675F639EA9107BDB67B0F 54EBC564BC2D781B61C14363A54956BA78A2BB89C9F966C94EEFC29EE9F4E23E C0BF750144DC289F0DEE1F8A25BB52E54F656FAFEE4BD2DA57E1306BBE648051 1D0CFD6A23A3DF082E3CF13197BF1B7FB22B2CD427BB78F455C9634DF989DC90 7BB2AE247B1C99AB2062855B2948341B0F857ACD750B59E370A6698C6A1F5287 72A4A9628A592E313956C242DF8277EDD2F1FDFB07CDC104275FFBF796D7518A DF49FF3CDEC3BDFF1D290C382F244DF18005ECDABF0C5C2C64EEC4383E2E07DC 5C82587C071E59B46B7BEF31D268F39D9B12D534344FBA515E9DE8F166FAD1E2 7D1558967AAAD3829D3F7EC6938D20E5379F414532976ABA844D97A5E9078901 EAE4D0ED1F4C7EE7A2D80D891A5013D6409A38ACFA497F5A169EB7F9F4890DC4 62FA6A89EA48267331F086992B9CA9305E16611E6AEE67DCDD588A25D37F45B1 0DE75C802EE021E574B64B3969DE2E5061ED9364B646C38D4BBA86802CA6338A 94E135D2256920EBFB1AA22D9E90C7D16853F0DF9F2D942748EE540E4FCE63C6 5380D7AB4ADD6CB00FE8F7867E4862D8DB432F28331428CC350CDF7F447A65ED D7683ECA35A22ADD06E9FE6BAF060913AEEE7B2B8EE4798E437698CC9EB2428E 74CE73F84D0D2292DE709D71FFF8901C3505370E6F1D4E28E6B7372492C65A88 159371B1D60D77CEC93B272B6C5394EE1D2EF9969DB2838B8E128553879A1BA5 2884B0A596E8FC3D1E648B7E26A4AC57DF09B9CE09B2F91D8CA618CA52AB3DBD D005A56A420366069B73146A6F58E88BA49671A1AB7C2070C3D42AA770285143 40AE7D7868C0E1993506B07C086AD7D4F28CE2D15853FC5FBCBF9425D8012B9E DB6E1E5002517659C8DA69DCEACA94F368537668843D281FC11782F1C5F71977 CA215349EE6F20565DE3D8D8212A40E1227A4B22965FA64A0B02C62BFDE97E6F C3C54FED4057EF9D258C42D7440C78C5E0CC58A40DD74ECED4152F70A93CE71A 1B3A57C46F74A6D27BF98C97CCD31A8EA487260F224A3E40F52C65490AB4098A 7B9EEB54A5A415C8C88568F7D9EFE74BBB785FA18AA27D9201F28BBC477A20A5 D1307AA78EB8C7CAD409AB64B29E4115E45F5FADDCC80CA74B296C4265A40614 37F2ACD8386AC0202D6FDB6711E8CB06442F209D781E940ADDD6D881D4F8E874 357C533115923B90138FFE31D3577C6AAE60D768970FAAB682CD0DCA3E9A9A68 6393E4B772691C1013ADFFC90C508D51B02D2518ADCC7E79F7DE5DF9D18B8435 6129064DD1A3995E5A6F45D78287CC10A0EAFBF47223494C5EA934B1BC2F7C53 686C5880303F9E3ADC8B100D441D944686E1FD811C646C6DD0224F6CF55FA87F D132EF50450879A25242A18683BD6D0266F8F333F3768D1952B0F32AA75106D8 EC0AB703F287E847CB91FFB88CD9DA174B49171822BDE34621CF41EA772230A6 3088F8D19CF2364A329162D39E166AC728B4C427EF3BEBA94B18ABD2C5585D05 475C9649C7ABC6136B4E55255B4FD5E8A641D1D2DF1E5081EFB6EBBD8D0F191F 7DB3788BD9FF8EB017E3440C96BE042568C0C11ABEE6BDE4CDE434EB44785CFC 43F1AF5FF465AF2FDDEBA8A2421C966210F711E747B22C5E73B38B7279F9D195 028CE439E1D5137F787D92AE0F39E206C98EA23DC05356642D5BEFFB637A71FB 621AD89DE7AA6758894D99C4BE9E6EE4B6BFD9AF997F71E7447D6C9B54BF55FB FEC09764D4E20C2D01859044DDF7D762EDD813635B11510A60DC90CE68E798A9 F7DBEEB25C16F0A20E27F572CFDD40A9F9A0D2322C8B3CC97D07BD47DE9446CC D82486C4477DAB3BA8F7CC3F6FFB4EA9FD20CE0FA2FCBB6A31319B517B516797 5510EE20E487556F5DAFB420BF5A471FFC465B8D40FA63BA53CD71AC8A5ED111 216E72838A719C5B27C4DBBE2D64FA7CAE823A3A0A97C5B150666D08C5DB9D0C 68D46B370733A7BFDB43B4394117F78BB283A307689462778C95AD78B2762993 FEC78B20D1010950FBB8524B3CB356DA2D6606A7F26411514B7C37637A71B198 9124B8E9068AB645468E1E5127E20D53D7C4DFCC1122E30676F2EB9B0A7DA591 36FC044E070CD4C3AF4C37E119AAE72230D93214D4010BD57519A4DB700AA3B6 0786617D09657CA419E78D0028624879110360909579C07C6DEF23C7AA10E1DE 2CADAEE76E15C060808AD37F25F8BE9DF14AD16A7343CC962542E2E3021A0C09 E402245B505C1F40261CB9FF810C7FC4C80E6E8AFA207DE559501DC3913D3D3C C80447CDB8791CBA79517900C91A644DE308F3BDC5F9A3673233693E1C60025C FDAB645050AAE5E6BADC7AD9262D4A4382F82134AFD1F13969A433BA3510A03D 33FE49FED460A102145C17788E5055433A8F2A68AD49A2B7AABDD3FE636FC0CE 1ACCEC44F0E6CA5188E756D47693FB2483EC06836E9057CB466554EDBA4A39EF 049C71527B645C2D663A60236C88911642BDC31B9583630E00622BAB085DCD07 69D3C8603A694271A925E9463DEC6B1A93722A5AD98607B783C133BD081DEF94 1FF6403DB744F750667EC3DC9DDC840A87A4BD358E0606681B00481C84A55F24 BDC0AF90BF9A66CF76E5F1E59715CD38D63D347DC81D12E6151C58126D0E3999 73AF97BF12BE113FD00A6D0D69B20238C8994277ADC9B44841EA7F65D44137C8 16A58E8E6DC2F13349D602DA5F52936DE18B4845B724F6818B9774DF551BDD2D 998A24A10C71E0A5B708AB55D43CAF13B8807933EBB1BCE3AEF3C3493D93BAD3 F431816B914399DE63F5AA4805E3D4B80F613D4B8322CB9FEF3864CCFD546509 C16AFE9F22FB63191EB6697E3C04FACC44E95F30EDB00FBD9B476CCF3B9489AF 013DBA2A20121B3862217D9BE47A5332D3D80C2293F669FFA6FC07BB13F4CD98 69A055B51FDF10F151F057BA7922F93930963FE9B0970E57DFAD11B5A47A17E2 0F4192C0FB40353B620785206F2AB4CD42A861CC14130E0BC7AAA50AFACC1F39 E1F6E1EC6144CDBF336FABFD3EC5B81120C27BD8949DA6453A2953712B051B5D F2BF08747DFCCFBEE97EBD9B3631C2B94F67F3CC8D0E544464294A1C509A5A29 7995058F5A982A6325FB50A799F40CB08ED790399F066263449EB1708B6E6850 5E83004680E3DF7A4485D7DD874684A2C74DB1A8B4E4CF5E04009D20A3DA89A4 6193BDF5F29555C00355D1085FB62E778ABEAF281F0C22942AAEC23B0849C6E6 35E7BA895F6DC0E0D8D78CDA453FE179563371821279CCF4EE3796E249E401DC 0157DC61D0631DE110333541B416254D34D2F4D05E9BD128DE23736647DA222C 064C4EFBFC108BE520F1F714BEABEF15614B20E1AE7129784B8F012E7D5FE5F3 B724309A8853889C2467907C9615638C06CE1ADFCFABE4602574113DE8176F4F 2DB2E81B83199E4CC1B3CF5D91B0782C4350E114F11E8C4B0196C7785F4DB1E7 F1456F77844FC274384BC849C6AB24682F02A949332FA0EBD88520C83A67B0D5 CFE70692E4D216C4B2FB3A752618969F8FBD5BC63F51C3A94FFCEFC1C92E55DC E682450206F3C5312AAE8B3D76A5BFDAE70EFDFA6775EA36BB66C11598B3A0A4 4A45DA3BD393DEA84E080DE882432D6FB3EE16D0AEDCE0E50FEC9AE0BFD859A3 3C116ED94981043305E9B7DC23C721EDBBA3C0E0B779C2631742F9C7F4A68691 EB193A8C6771364CC604446AC22F0EAFC5BB81DC4B40F4400B4EA6DC25966A1A 869941646C74EFA72AC072B658621117FAFC5EB96354B684BCFD28D7A5BABD8D 4572863D936D2B6BE6099459544684A072465613180CB446117F91803DF7DBB0 3CC17207334822F5233FE5DBB5357867363307BEAD3C0B37B3243F6143D5B23B CD420831915FB3103C97BC6F2DDAA00F9C0AAF22CCF3A7D8BD30B07CDC3CE1F7 08631F402356AAF87019C6F835133EEED25E63058A10C602F48B3BCFE3DF8665 70EF9B12036A6F0E7A49C7E7CE0328969516D4E2B8F4C947FAAF3212AF945ACC 280F484B9BEA6C4D9EA038961061496A0E487140B067F93CBBB475F9D6B52FA6 A224837C40EAE3F8C28EC36BA0E3808F4AADC11FC72491AF864927C670C98727 5D2F01021F7311C024AB6C43B50C3C907AA5965845CDE501C35C341297819B4A 85D8685411EEC2AFF71E9BC87DB767BCE90341DCA237CEC8F51965246482771A 80D2F75008C16DA39078C3C2E646F04BE69544B422B6FDD9ACF35EF3FA5B01F8 8EC3941875EFD5D3C8B2B58E5B19C7B03FA2A6B3C58836DAE2ADA7DFC1B6FF83 DA31E2608FFBB5D5C12B6EF00B8D46C0E23689365FC8348D2586B1A1431C4F85 054480677047C6A3595753CC183CDA9A2035174D1A5C00C9DEA2F4F5F2D9EB87 29957DF4E9A1FBD5F6D47FB02C009F267AD99A83DE10D2A09145627E30AE1B7A 615EC6ED96D5A363D5FEB970A5DEE6186B09C9EF9C320FA7EF012F8EBAF67E6B DF0429E392C4CB78B0B4BDA0D88A2A5A39CD63E7D7CAC8282AA20DC12586E018 C0DCC3B86EF767E789B86DA28BBD0917094FFF0DC29CD48AA736ED66B54B733A 84FF0D2A3BD13C96DA38F8652AB6D5FAD162C23F861F35BA870D1DA095076A87 94AAB10BAC034868C68DB090D1561C36816D7B682EBDED9E8D4B7439A8A8AF23 1AFB674478491CC35C249B1214DB8FE34ED82631931043B18DCF506A6657B696 2FB20839DBEE9CAC7E77D79B1205000148389A838CBAA2126BC99486055868FD 2B1C52F7640508EC186FAABB8CED8C26537B691129BFF29C303A0F27D1830230 1BDE8122A1801A86F59AFB7A7574BF960EE93D5BE4953293093B941DFE63881B A4153B9170725B7773F9964F33153E290E31C7E81C2647FE0CDE1A2258434F61 A83DE191F38831E6BF23EBB8B1796452E70376AF4D3CF5A90709D6F37F6E10DB EA21340F6BBF91605D5A4F6D1E57A42D4B6D616A69CDC7D15B636C87446F796D EF59628582392BC8119BD1DF1042B3025694745BC2CFC30D9C4F969F7321D53D D578F4A6849149F0AEBEB191C62A1FCE152042CA1435AC1F4BDA9E0405D95436 E3920762759593A18A574E4240F57915A40998C4C57E453F41D1700B13429BB7 C2DEFF4DE13045739543DDD72DFDF10C0613B5B414FB6D81DDA326498174564E C9807C40E03A45CB7970A418DB29706DADD82D9C1A4F1D90C4F19A0999B94073 957CB5FE913F854FC0259F7715695925CDE53199BBE1A146F4A1CF66E3906F11 7BADB397D0DA46B7790AFFE91CC2A572A921C71C2CECAE03B0ACD346BBCCC05A D5E48F82A8DEF63CDAA28B95A9BA366D2327D6815EFF01DD28145CC7DC37644A 0DA5741581FE7DDC975B0556EC89323320F0F39898CEE725E457B73F074C8812 9E7F4D673752B5F8D04B80598937ECAAD0FE9729758F8B1934F0797ACC8B08D3 00FB01FF175231A852219146D9613D4769A19C2CF5FDE0D8498A072D849F58DF D97445BF988C438E33BBDBCC6B3051CD78DC853B82AAD34ABEA877AC9C74DC6D 128073D4D3614AAA4BDE55BE5B1F7D58E35577F344D860D148ECFAE711E876F2 2C6E65178088742C6A903361EA7A66E6D93C4D2F633338FC81CDAEB06951061F EA24B7EDBCD96EACCCC7A7C0C7E495BC663A6BDF28D688EF566C4F6A0720D0F5 DCA0A50C3F8EDD9DC1E80117FF2C49A2963A195869916B063B65B26A95C303D9 02081B4C6A3B1A63833F7FD82FE35AEF71CA3FEF3233D8A9D3557BEC5927F8AB B876635698A02BC8807A0422FF04486EBACCAA05FD29BB36EFD7BB686A1DF981 341342CF4CA5563723064BD5B4141D6EA9ACFDA305E4315AE35724ACB471C47D 4F89B1C9CAE90F8931D6E3CDA0A50F3BB002D79CEFDB127C6080B8B936F3472F 58E42BAAFCD69034C8AB5149A613AFA590E5778F39B329E9F3FBB04569EA7A86 ECE449097CC1B2509CCF87C9D3AF895A42BB373C3AEF414307357878A7A4F4C4 5331C30D2D0F08A9E26029A8E9E23E91F2E3338183A891BCB8D911504AEBA3CB BAE302854017F2E8EF0226A2BBE961B7BF199BDD7EEF6D9085E623C4C0C83B69 FD0639EBCD859DE15C0B833F0B6A3631F3E51CAFC67C5E8DA9A3E84CF8AA4BD7 0FF026385B4C814F310A00BB28CB6586076495257935DDA810E561EB2CA5EDB8 853224CD2E6D77FBB8B25A6504BA12740C857E41CD557CE8E23D9771C637D6BD 596379DAF14EE10A2DD92EE5DE8B45668E23E12193EDDA4B1E4813B2460BAF76 DE4D1871F67E1B923DE95EE14C7E0431810F6110DB77B4CA49F8E680B5FEFC69 EB2742BEBC0A3A2901ABE63D798A7540C19349608D85371B5A9F496D979D7E8D B10564D8955C475E4A4519EE193F3B24909E560E4606DFD5EC419171BF786F6C 55915AE6FDDC6C3811195AFB50E7CD1225C8312832BAF8F878596335F1E2D000 AB209224B06AAA808F54168F24F45572 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont TeXDict begin 39158280 55380996 1000 600 600 (short_ref.dvi) @start /Fa 207[30 48[{}1 49.8132 /CMR6 rf /Fb 144[31 2[20 1[25 5[32 100[{}4 49.8132 /CMMI6 rf /Fc 211[33 44[{}1 119.552 /CMR12 rf /Fd 133[62 3[62 2[62 3[62 6[62 1[62 102[{}6 119.552 /CMTT12 rf /Fe 134[35 40 8[34 2[21 1[29 24 4[36 15[41 19[37 64[{}9 66.4176 /CMMI8 rf /Ff 175[96 53[68 26[{}2 90.9091 /CMEX10 rf /Fg 214[91 20[71 4[45 15[{}3 90.9091 /CMSY10 rf /Fh 130[48 1[48 48 48 48 48 48 48 48 48 48 1[48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 1[48 48 48 1[48 2[48 1[48 48 1[48 48 1[48 48 48 1[48 1[48 48 2[48 48 48 48 48 48 2[48 48 48 48 48 4[48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 3[48 48 34[{}70 90.9091 /CMTT10 rf /Fi 133[74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 3[74 1[74 74 74 74 2[74 5[74 2[74 1[74 74 74 3[74 74 74 74 74 74 74 74 74 1[74 8[74 74 74 74 74 74 74 1[74 74 40[{}56 143.462 /CMTT12 rf /Fj 207[19 48[{}1 66.4176 /CMSY8 rf /Fk 133[40 48 48 66 48 51 35 36 36 1[51 45 51 76 25 1[28 25 51 45 28 40 51 40 51 45 3[25 1[25 6[66 51 4[68 8[62 1[66 5[71 1[25 25 3[45 3[45 45 45 1[25 30 25 71 1[35 35 25 5[25 20[51 12[{}47 90.9091 /CMR10 rf /Fl 203[35 35 35 35 35 4[55 1[27 27 40[{}8 66.4176 /CMR8 rf /Fm 133[42 45 52 2[52 33 9[37 5[47 9[62 53 75 2[62 14[58 3[69 68 48 1[71 2[25 25 58[{}18 90.9091 /CMMI10 rf /Fn 207[27 47[77{}2 99.6264 /CMSY10 rf /Fo 194[76 4[49 49 49 49 49 49 49 49 49 4[76 43[{}11 99.6264 /CMR12 rf /Fp 167[207 86[66 66{}3 143.462 /CMEX10 rf /Fq 139[47 3[72 10[65 3[72 97[{}4 143.462 /CMTI12 rf /Fr 212[126 43[{}1 206.559 /CMSY10 rf /Fs 141[120 58[0 11[88 1[143 7[143 15[112 1[72 15[{}7 143.462 /CMSY10 rf /Ft 135[55 9[58 85 2[40 33 4[51 15[57 84[{}7 99.6264 /CMMI12 rf /Fu 134[68 80 100 68 80 51 13[69 3[60 12[95 5[107 5[62 2[91 4[105 74 4[39 39 58[{}16 143.462 /CMMI12 rf /Fv 133[58 70 70 96 70 73 51 52 51 70 73 66 73 111 36 70 1[36 73 66 40 58 73 58 73 66 4[66 4[137 3[73 98 1[90 103 1[122 83 1[68 47 99 1[86 90 101 96 1[99 3[103 2[36 9[66 66 1[43 1[103 1[51 51 5[66 19[107 1[72 75 11[{}53 143.462 /CMR17 rf /Fw 132[81 3[117 85 90 63 64 66 1[90 81 90 134 45 1[49 45 1[81 49 74 90 72 1[78 10[122 3[120 2[121 1[153 97 2[60 1[127 101 106 124 117 1[122 17[81 1[54 1[126 1[63 63 27[90 12[{}38 143.462 /CMBX12 rf /Fx 133[103 123 1[168 123 129 90 92 95 123 129 116 129 194 65 2[65 129 1[71 106 129 103 1[113 12[162 1[173 2[175 182 1[140 2[87 3[153 178 168 165 175 17[116 1[77 1[181 1[90 90 28[136 11[{}38 206.559 /CMBX12 rf /Fy 134[61 2[61 61 59 1[60 2[63 61 74 3[30 1[64 53 56 62 59 58 61 53[84 43[{}17 99.6264 /CMCSC10 rf /Fz 176[84 2[67 7[86 81 1[85 19[37 45[{}6 99.6264 /CMBX12 rf end %%EndProlog %%BeginSetup %%Feature: *Resolution 600dpi TeXDict begin %%BeginPaperSize: a4 /setpagedevice where { pop << /PageSize [595 842] >> setpagedevice } { /a4 where { pop a4 } if } ifelse %%EndPaperSize end %%EndSetup %%Page: 1 1 TeXDict begin 1 0 bop -118 -34 a Fz(ADOL-C)904 b(A)p Fy(utoma)-7 b(tic)38 b Fz(D)p Fy(ifferentia)-7 b(tion)39 b(by)e Fz(O)p Fy(ver)p Fz(L)p Fy(o)n(ading)i(in)e Fz(C)p Fy(++)p -118 7 4016 5 v 1128 361 a Fx(The)77 b(Basic)g(Idea)p -107 496 3995 4 v -107 830 4 334 v -12 710 a Fw(V)-13 b(ector)52 b(function)41 b Fv(in)j Fw(C/C++)p Fv(:)135 b Fu(F)60 b Fv(:)39 b(I)-30 b(R)2358 651 y Ft(n)2461 710 y Fs(!)40 b Fv(I)-30 b(R)2759 651 y Ft(m)2888 710 y Fv(:)40 b Fu(x)g Fs(7!)g Fu(y)45 b Fv(=)40 b Fu(F)20 b Fv(\()p Fu(x)p Fv(\))p 3884 830 V -107 833 3995 4 v 972 1108 a Fr(+)44 b Fv(Op)t(erator)f(o)l(v)l(erloading)f(\(C++\))p 574 1283 2633 4 v 574 1617 4 334 v 692 1497 a Fw(In)l(ternal)53 b(represen)l(tation)40 b Fv(of)i Fu(F)63 b Fv(\()p Fs(\021)p Fq(tap)-7 b(e)11 b Fv(\))p 3203 1617 V 574 1620 2633 4 v 1009 1895 a Fr(+)354 b Fv(In)l(terpretation)h Fr(+)p -78 2071 1947 4 v -78 3909 4 1838 v -49 2195 a Fw(F)-13 b(orw)l(ard)52 b(mo)t(de)p -50 2218 1018 6 v 118 2595 a Fu(x)24 b Fv(\()p Fu(t)p Fv(\))39 b(=)636 2416 y Ft(d)557 2459 y Fp(X)576 2763 y Ft(j)6 b Fo(=0)788 2595 y Fu(x)868 2616 y Ft(j)918 2595 y Fu(t)969 2536 y Ft(j)414 3020 y Fs(+)124 3432 y Fu(y)30 b Fv(\()p Fu(t)p Fv(\))39 b(=)636 3253 y Ft(d)557 3296 y Fp(X)576 3600 y Ft(j)6 b Fo(=0)788 3432 y Fu(y)856 3454 y Ft(j)907 3432 y Fu(t)958 3373 y Ft(j)1040 3432 y Fv(+)32 b Fu(O)1310 3316 y Fp(\000)1376 3432 y Fu(t)1427 3373 y Ft(d)p Fo(+1)1606 3316 y Fp(\001)-50 3842 y Fv(=)-24 b Fs(\))55 b Fw(Directional)d(deriv)-9 b(ativ)l(es)p 1865 3909 4 1838 v -78 3912 1947 4 v 1911 2071 V 1911 3909 4 1839 v 1940 2195 a(Rev)l(erse)52 b(mo)t(de)p 1940 2218 989 6 v 2147 2477 a Fu(y)2215 2499 y Ft(j)2305 2477 y Fv(=)41 b Fu(y)2517 2499 y Ft(j)2591 2477 y Fv(\()p Fu(x)2722 2499 y Fo(0)2775 2477 y Fu(;)24 b(x)2918 2499 y Fo(1)2970 2477 y Fu(;)g(:)g(:)g(:)g(;)g(x)3365 2499 y Ft(j)3415 2477 y Fv(\))2305 2747 y Fs(+)2055 2996 y Fu(@)8 b(y)2205 3018 y Ft(j)p 2055 3060 201 6 v 2056 3192 a Fu(@)g(x)2218 3213 y Ft(i)2305 3093 y Fv(=)2458 2996 y Fu(@)g(y)2608 3018 y Ft(j)e Fn(\000)p Ft(i)p 2458 3060 312 6 v 2507 3192 a Fu(@)i(x)2669 3213 y Fo(0)2305 3436 y Fv(=)41 b Fu(A)2554 3457 y Ft(j)6 b Fn(\000)p Ft(i)2739 3436 y Fv(\()o Fu(x)2869 3457 y Fo(0)2922 3436 y Fu(;)24 b(x)3065 3457 y Fo(1)3118 3436 y Fu(;)g(:)g(:)g(:)g(;)g(x) 3513 3457 y Ft(j)6 b Fn(\000)p Ft(i)3673 3436 y Fv(\))1940 3848 y(=)-24 b Fs(\))54 b Fw(Gradien)l(ts)e(\(adjoin)l(ts\))p 3854 3909 4 1839 v 1911 3912 1947 4 v 1458 4125 a Fm(y)1503 4139 y Fl(0)1568 4125 y Fk(=)24 b Fm(F)29 b Fk(\()p Fm(x)1837 4139 y Fl(0)1876 4125 y Fk(\))1458 4263 y Fm(y)1503 4277 y Fl(1)1568 4263 y Fk(=)24 b Fm(F)1734 4225 y Fj(0)1773 4263 y Fk(\()p Fm(x)1860 4277 y Fl(0)1900 4263 y Fk(\))15 b Fm(x)2002 4277 y Fl(1)1458 4450 y Fm(y)1503 4464 y Fl(2)1568 4450 y Fk(=)24 b Fm(F)1734 4412 y Fj(0)1773 4450 y Fk(\()p Fm(x)1860 4464 y Fl(0)1900 4450 y Fk(\))15 b Fm(x)2002 4464 y Fl(2)2062 4450 y Fk(+)2163 4389 y(1)p 2163 4429 46 4 v 2163 4512 a(2)2218 4450 y Fm(F)2289 4412 y Fj(00)2347 4450 y Fk(\()p Fm(x)2434 4464 y Fl(0)2474 4450 y Fk(\))g Fm(x)2576 4464 y Fl(1)2615 4450 y Fm(x)2667 4464 y Fl(1)1458 4666 y Fm(y)1503 4680 y Fl(3)1568 4666 y Fk(=)24 b Fm(F)1734 4628 y Fj(0)1773 4666 y Fk(\()p Fm(x)1860 4680 y Fl(0)1900 4666 y Fk(\))15 b Fm(x)2002 4680 y Fl(3)2062 4666 y Fk(+)20 b Fm(F)2224 4628 y Fj(00)2281 4666 y Fk(\()q Fm(x)2369 4680 y Fl(0)2408 4666 y Fk(\))c Fm(x)2511 4680 y Fl(1)2550 4666 y Fm(x)2602 4680 y Fl(2)2662 4666 y Fk(+)2763 4604 y(1)p 2763 4645 V 2763 4728 a(6)2818 4666 y Fm(F)2889 4628 y Fj(000)2966 4666 y Fk(\()p Fm(x)3053 4680 y Fl(0)3093 4666 y Fk(\))f Fm(x)3195 4680 y Fl(1)3234 4666 y Fm(x)3286 4680 y Fl(1)3326 4666 y Fm(x)3378 4680 y Fl(1)1557 4840 y Fm(:)g(:)g(:)305 4970 y(@)5 b(y)403 4984 y Fl(0)p 301 5011 145 4 v 301 5094 a Fm(@)g(x)406 5108 y Fl(0)481 5032 y Fk(=)591 4970 y Fm(@)g(y)689 4984 y Fl(1)p 587 5011 V 587 5094 a Fm(@)g(x)692 5108 y Fl(1)767 5032 y Fk(=)877 4970 y Fm(@)g(y)975 4984 y Fl(2)p 873 5011 V 873 5094 a Fm(@)g(x)978 5108 y Fl(2)1053 5032 y Fk(=)1162 4970 y Fm(@)g(y)1260 4984 y Fl(3)p 1159 5011 V 1159 5094 a Fm(@)g(x)1264 5108 y Fl(3)1339 5032 y Fk(=)25 b Fm(A)1503 5046 y Fl(0)1568 5032 y Fk(=)f Fm(F)1734 4994 y Fj(0)1773 5032 y Fk(\()p Fm(x)1860 5046 y Fl(0)1900 5032 y Fk(\))591 5204 y Fm(@)5 b(y)689 5218 y Fl(1)p 587 5245 V 587 5328 a Fm(@)g(x)692 5342 y Fl(0)767 5266 y Fk(=)877 5204 y Fm(@)g(y)975 5218 y Fl(2)p 873 5245 V 873 5328 a Fm(@)g(x)978 5342 y Fl(1)1053 5266 y Fk(=)1162 5204 y Fm(@)g(y)1260 5218 y Fl(3)p 1159 5245 V 1159 5328 a Fm(@)g(x)1264 5342 y Fl(2)1339 5266 y Fk(=)25 b Fm(A)1503 5280 y Fl(1)1568 5266 y Fk(=)f Fm(F)1734 5228 y Fj(00)1792 5266 y Fk(\()q Fm(x)1880 5280 y Fl(0)1919 5266 y Fk(\))15 b Fm(x)2021 5280 y Fl(1)877 5438 y Fm(@)5 b(y)975 5452 y Fl(2)p 873 5479 V 873 5562 a Fm(@)g(x)978 5576 y Fl(0)1053 5500 y Fk(=)1162 5438 y Fm(@)g(y)1260 5452 y Fl(3)p 1159 5479 V 1159 5562 a Fm(@)g(x)1264 5576 y Fl(1)1339 5500 y Fk(=)25 b Fm(A)1503 5514 y Fl(2)1568 5500 y Fk(=)f Fm(F)1734 5462 y Fj(00)1792 5500 y Fk(\()q Fm(x)1880 5514 y Fl(0)1919 5500 y Fk(\))15 b Fm(x)2021 5514 y Fl(2)2081 5500 y Fk(+)2182 5438 y(1)p 2182 5479 46 4 v 2182 5562 a(2)2237 5500 y Fm(F)2308 5462 y Fj(000)2385 5500 y Fk(\()p Fm(x)2472 5514 y Fl(0)2512 5500 y Fk(\))g Fm(x)2614 5514 y Fl(1)2654 5500 y Fm(x)2706 5514 y Fl(1)1162 5672 y Fm(@)5 b(y)1260 5686 y Fl(3)p 1159 5713 145 4 v 1159 5796 a Fm(@)g(x)1264 5810 y Fl(0)1339 5733 y Fk(=)25 b Fm(A)1503 5747 y Fl(3)1568 5733 y Fk(=)f Fm(F)1734 5696 y Fj(00)1792 5733 y Fk(\()q Fm(x)1880 5747 y Fl(0)1919 5733 y Fk(\))15 b Fm(x)2021 5747 y Fl(3)2081 5733 y Fk(+)20 b Fm(F)2243 5696 y Fj(000)2320 5733 y Fk(\()p Fm(x)2407 5747 y Fl(0)2446 5733 y Fk(\))c Fm(x)2549 5747 y Fl(1)2588 5733 y Fm(x)2640 5747 y Fl(2)2700 5733 y Fk(+)2801 5672 y(1)p 2801 5713 46 4 v 2801 5796 a(6)2856 5733 y Fm(F)2927 5696 y Fl(\(4\))3037 5733 y Fk(\()p Fm(x)3124 5747 y Fl(0)3164 5733 y Fk(\))f Fm(x)3266 5747 y Fl(1)3305 5733 y Fm(x)3357 5747 y Fl(1)3397 5733 y Fm(x)3449 5747 y Fl(1)1557 5922 y Fm(:)g(:)g(:)p -118 6252 4016 5 v 1865 6372 a Fo(1)p eop end %%Page: 2 2 TeXDict begin 2 1 bop -118 -34 a Fz(ADOL-C)904 b(A)p Fy(utoma)-7 b(tic)38 b Fz(D)p Fy(ifferentia)-7 b(tion)39 b(by)e Fz(O)p Fy(ver)p Fz(L)p Fy(o)n(ading)i(in)e Fz(C)p Fy(++)p -118 7 4016 5 v 1300 382 a Fx(Application)71 688 y Fw(Op)t(erator)54 b(o)l(v)l(erloading)d(concept)g Fs(\))k Fw(Co)t(de)e(mo)t(di\014cation)p -118 851 4073 4 v -118 2365 4 1514 v 33 1084 a Fs(\017)c Fv(Inclusion)43 b(of)g(appropriate)g(ADOL-C)h(headers)33 1308 y Fs(\017)49 b Fv(Ret)l(yping)43 b(of)g(all)f(in)l(v)l(olv)l(ed)i(v)-7 b(ariables)41 b(to)i(activ)l(e)g(data)g(t)l(yp)t(e)h Fi(adouble)33 1532 y Fs(\017)49 b Fv(Marking)42 b(activ)l(e)h(section)h (to)e(b)t(e)i(\\tap)t(ed")f(\()p Fi(trace)p 2764 1532 45 4 v 52 w(on)p Fv(/)p Fi(trace)p 3400 1532 V 52 w(off)p Fv(\))33 1756 y Fs(\017)49 b Fv(Sp)t(eci\014cation)43 b(of)g(indep)t(enden)l(t)j(and)d(dep)t(enden)l(t)j(v)-7 b(ariables)41 b(\()p Fi(<<=)p Fv(/)p Fi(>>=)p Fv(\))33 1980 y Fs(\017)49 b Fv(Sp)t(eci\014cation)43 b(of)g(di\013eren)l (tiation)h(task\(s\))33 2204 y Fs(\017)49 b Fv(Recompilation)42 b(and)i(Linking)f(with)g(ADOL-C)h(library)e Fi(libad.a)p 3951 2365 4 1514 v -118 2368 4073 4 v 0 2749 a Fk(Example:)p 0 2781 373 4 v 0 2945 a Fh(#include)k("adolc.h")1047 b(//)47 b(inlusion)f(of)h(ADOL-C)f(headers)0 3058 y(...)0 3170 y(adouble)g(foo)h(\()g(adouble)f(x)h(\))716 b(//)47 b(some)g(activated)e(function)0 3283 y({)i(adouble)f(tmp;)95 3396 y(tmp)h(=)h(log\(x\);)95 3509 y(return)f(3.0*tmp*tmp)d(+)k(2.0;)0 3622 y(})0 3735 y(...)0 3848 y(int)f(main)g(\(int)f(argc,)h(char*)f (argv[]\))332 b(//)47 b(main)g(program)f(or)h(other)f(procedure)0 3961 y({)h(...)95 4074 y(double)142 b(x[2],)94 b(y;)95 4187 y(adouble)46 b(ax[2],)g(ay;)954 b(//)47 b(declaration)e(of)i (active)f(variables)95 4300 y(x[0]=0.3;)g(x[1]=2.3;)95 4412 y(trace_on\(1\);)1238 b(//)47 b(starting)f(active)g(section)191 4525 y(ax[0]<<=x[0];)e(ax[1]<<=x[1];)426 b(//)47 b(marking)f (independent)f(variables)191 4638 y(ay=ax[0]*sin\(ax[1]\)+)d (foo\(ax[1]\);)188 b(//)47 b(function)f(evaluation)191 4751 y(ay>>=y;)1382 b(//)47 b(marking)f(dependend)f(variables)95 4864 y(trace_off\(\);)1238 b(//)47 b(ending)f(active)g(section)95 4977 y(...)95 5090 y(double)h(g[2];)95 5203 y(gradient\(1,2,x,g\);)950 b(//)47 b(application)e(of)i(ADOL-C)f(routine)95 5316 y(...)95 5429 y(x[0]+=0.1;)f(x[1]+=0.3;)809 b(//)47 b(application)e(at) i(different)e(argument)95 5542 y(gradient\(1,2,x,g\);)95 5654 y(...)0 5767 y(})p -118 6273 4016 5 v 1865 6393 a Fo(2)p eop end %%Page: 3 3 TeXDict begin 3 2 bop -118 -34 a Fz(ADOL-C)904 b(A)p Fy(utoma)-7 b(tic)38 b Fz(D)p Fy(ifferentia)-7 b(tion)39 b(by)e Fz(O)p Fy(ver)p Fz(L)p Fy(o)n(ading)i(in)e Fz(C)p Fy(++)p -118 7 4016 5 v 407 382 a Fx(Driv)-6 b(ers)76 b(for)i(Optimization)e(and)311 585 y(Nonlinear)h(Equations)f(\(C/C++\)) 1093 1019 y Fv(min)1175 1105 y Ft(x)1336 1019 y Fu(f)40 b Fv(\()p Fu(x)p Fv(\))23 b Fu(;)263 b(f)56 b Fv(:)39 b(I)-30 b(R)2267 960 y Ft(n)2370 1019 y Fs(!)40 b Fv(I)-30 b(R)996 1281 y Fu(F)44 b Fv(\()o Fu(x)p Fv(\))c(=)g(0)1561 1302 y Ft(m)1650 1281 y Fu(;)263 b(F)60 b Fv(:)39 b(I)-30 b(R)2293 1221 y Ft(n)2396 1281 y Fs(!)40 b Fv(I)-30 b(R)2694 1221 y Ft(m)p -118 1478 4121 4 v -120 1660 4 183 v 3122 1660 V 4001 1660 V -120 1781 4 245 v -68 1665 a Fi (function\(tag,m,n,x[n],y[m]\))p 3122 1781 V 1243 w Fu(F)43 b Fv(\()p Fu(x)3438 1686 y Fo(0)3491 1665 y Fv(\))p 4001 1781 V -118 1785 4121 4 v -120 1967 4 183 v 3122 1967 V 4001 1967 V -120 2057 4 214 v -68 1972 a Fi (gradient\(tag,n,x[n],g[n]\))p 3122 2057 V 1391 w Fs(r)p Fu(f)c Fv(\()p Fu(x)3532 1993 y Fo(0)3585 1972 y Fv(\))p 4001 2057 V -120 2302 4 245 v -68 2185 a Fi (hessian\(tag,n,x[n],H[n][n]\))p 3122 2302 V 1243 w Fs(r)3293 2133 y Fo(2)3346 2185 y Fu(f)g Fv(\()p Fu(x)3585 2207 y Fo(0)3638 2185 y Fv(\))p 4001 2302 V -118 2305 4121 4 v -120 2488 4 183 v 3122 2488 V 4001 2488 V -120 2578 4 214 v -68 2492 a Fi(jacobian\(tag,m,n,x[n],J[m][n]\))p 3122 2578 V 1021 w Fu(F)3284 2440 y Fn(0)3339 2492 y Fv(\()p Fu(x)3470 2514 y Fo(0)3523 2492 y Fv(\))p 4001 2578 V -120 2791 V -68 2706 a Fi(vec)p 163 2706 45 4 v 52 w(jac\(tag,m,n,repeat?,x[n],u[m],z[n]\))p 3122 2791 4 214 v 377 w Fu(u)3253 2653 y Ft(T)3328 2706 y Fu(F)3439 2653 y Fn(0)3494 2706 y Fv(\()p Fu(x)3625 2727 y Fo(0)3677 2706 y Fv(\))p 4001 2791 V -120 3036 4 245 v -68 2919 a Fi(jac)p 163 2919 45 4 v 52 w(vec\(tag,m,n,x[n],v[n],z[m]\))p 3122 3036 4 245 v 969 w Fu(F)3284 2867 y Fn(0)3339 2919 y Fv(\()p Fu(x)3470 2941 y Fo(0)3523 2919 y Fv(\))23 b Fu(v)p 4001 3036 V -118 3039 4121 4 v -120 3222 4 183 v 3122 3222 V 4001 3222 V -120 3312 4 214 v -68 3226 a Fi(hess)p 237 3226 45 4 v 52 w(vec\(tag,n,x[n],v[n],z[n]\))p 3122 3312 4 214 v 1043 w Fs(r)3293 3174 y Fo(2)3346 3226 y Fu(f)39 b Fv(\()p Fu(x)3585 3247 y Fo(0)3638 3226 y Fv(\))23 b Fu(v)p 4001 3312 V -120 3556 4 245 v -68 3439 a Fi(lagra)p 311 3439 45 4 v 52 w(hess)p 659 3439 V 52 w(vec\(tag,m,n,x[n],v[n],u[m],h[n]\))p 3122 3556 4 245 v 103 w Fu(u)3253 3387 y Ft(T)3328 3439 y Fu(F)3439 3387 y Fn(00)3521 3439 y Fv(\()p Fu(x)3652 3461 y Fo(0)3705 3439 y Fv(\))g Fu(v)p 4001 3556 V -118 3559 4121 4 v -120 3742 4 183 v 3122 3742 V 4001 3742 V -120 3863 4 245 v -68 3746 a Fi(jac)p 163 3746 45 4 v 52 w (solv\(tag,n,x[n],b[n],sparse?,mode?\))p 3122 3863 4 245 v 377 w Fu(F)3284 3694 y Fn(0)3339 3746 y Fv(\()p Fu(x)3470 3768 y Fo(0)3523 3746 y Fv(\))g Fu(w)44 b Fv(=)c Fu(b)p 4001 3863 V -118 3866 4121 4 v 0 4251 a Fk(Example:)p 0 4284 373 4 v 179 w(Solution)31 b(of)f Fm(F)13 b Fk(\()p Fm(x)p Fk(\))26 b(=)f(0)31 b(b)m(y)f(Newton's)h(metho)s(d)0 4447 y Fh(...)0 4560 y(double)46 b(x[n],)g(r[n];)0 4673 y(int)h(i;)0 4786 y(...)0 4899 y(initialize\(x\);)1189 b(//)48 b(setting)d(up)j(the)e(initial)g(x)0 5012 y(...)0 5125 y(function\(ftag,n,n,x,r\);)757 b(//)48 b(compute)d(residuum)h(r)0 5238 y(while)g(\(norm\(r\))g(>)h(EPSILON\))666 b(//)48 b(terminate)d(if)i(small)f(residuum)0 5351 y({)h (jac_solv\(ftag,n,x,r,0,2\);)566 b(//)48 b(compute)d (r:=F'\(x\)^\(-1\)*r)95 5464 y(for)i(\(i=0;)g(i)25 b Fk(1)84 b(prepares)29 b(for)h Fh(hos)p 2412 5085 V 34 w(reverse)e Fk(or)j Fh(hov)p 3066 5085 V 33 w(reverse)p -118 5254 4191 4 v -118 5652 4 398 v -80 5487 a Fi(hov)p 151 5487 45 4 v 53 w(forward\(tag,m,n,d,p,x[n],X[n][p][d],y)o([m],Y[)o (m][p])o([d]\))p 4069 5652 4 398 v -118 5655 4191 4 v 386 5857 a Fg(\017)49 b Fk(higher-order)44 b(v)m(ector)h(forw)m(ard;)50 b(computes)44 b Fm(y)2138 5871 y Fl(0)2225 5857 y Fk(=)k Fm(F)28 b Fk(\()p Fm(x)2517 5871 y Fl(0)2557 5857 y Fk(\),)47 b Fm(Y)2717 5871 y Fl(1)2804 5857 y Fk(=)h Fm(F)2994 5824 y Fj(0)3032 5857 y Fk(\()q Fm(x)3120 5871 y Fl(0)3159 5857 y Fk(\))16 b Fm(X)3285 5871 y Fl(1)3324 5857 y Fk(,)48 b(.)15 b(.)h(.)f(,)480 5970 y(where)30 b Fm(x)25 b Fk(=)g Fm(x)968 5984 y Fl(0)1008 5970 y Fk(,)30 b Fm(X)j Fk(=)25 b([)p Fm(X)1367 5984 y Fl(1)1407 5970 y Fm(;)15 b(X)1522 5984 y Fl(2)1562 5970 y Fm(;)g(:)g(:)g(:)i(;)e(X)1839 5985 y Fe(d)1880 5970 y Fk(])30 b(and)g Fm(y)e Fk(=)d Fm(y)2326 5984 y Fl(0)2365 5970 y Fk(,)31 b Fm(Y)45 b Fk(=)25 b([)p Fm(Y)2693 5984 y Fl(1)2732 5970 y Fm(;)15 b(Y)2825 5984 y Fl(2)2865 5970 y Fm(;)g(:)g(:)g(:)i(;)e(Y)3120 5985 y Fe(d)3160 5970 y Fk(])p -118 6273 4016 5 v 1865 6393 a Fo(4)p eop end %%Page: 5 5 TeXDict begin 5 4 bop -118 -34 a Fz(ADOL-C)904 b(A)p Fy(utoma)-7 b(tic)38 b Fz(D)p Fy(ifferentia)-7 b(tion)39 b(by)e Fz(O)p Fy(ver)p Fz(L)p Fy(o)n(ading)i(in)e Fz(C)p Fy(++)p -118 7 4016 5 v 1014 346 a Fw(Rev)l(erse)53 b(Mo)t(de)g (\(C/C++\))p -118 517 4191 4 v -118 914 4 398 v 880 750 a Fi(fos)p 1111 750 45 4 v 53 w(reverse\(tag,m,n,u[m],z[n]\))p 4069 914 4 398 v -118 917 4191 4 v 386 1128 a Fg(\017)c Fk(\014rst-order)30 b(scalar)h(rev)m(erse;)g(computes)g Fm(z)1944 1095 y Fe(T)2024 1128 y Fk(=)25 b Fm(u)2172 1095 y Fe(T)2227 1128 y Fm(F)2298 1095 y Fj(0)2337 1128 y Fk(\()p Fm(x)p Fk(\))386 1315 y Fg(\017)49 b Fk(after)31 b(calling)h Fh(zos)p 1133 1315 29 4 v 33 w(forward)p Fk(,)d Fh(fos)p 1700 1315 V 34 w(forward)p Fk(,)f(or)j Fh(hos)p 2379 1315 V 33 w(forward)e Fk(with)h Fh(keep)24 b Fk(=)h(1)p -118 1471 4191 4 v -118 1868 4 398 v 585 1703 a Fi(fov)p 816 1703 45 4 v 52 w (reverse\(tag,m,n,q,U[q][m],Z[q][n]\))p 4069 1868 4 398 v -118 1871 4191 4 v 386 2073 a Fg(\017)49 b Fk(\014rst-order)30 b(v)m(ector)i(rev)m(erse;)f(computes)f Fm(Z)i Fk(=)25 b Fm(U)10 b(F)2245 2040 y Fj(0)2284 2073 y Fk(\()p Fm(x)p Fk(\))386 2261 y Fg(\017)49 b Fk(after)31 b(calling)h Fh(zos)p 1133 2261 29 4 v 33 w(forward)p Fk(,)d Fh(fos)p 1700 2261 V 34 w(forward)p Fk(,)f(or)j Fh(hos)p 2379 2261 V 33 w(forward)e Fk(with)h Fh(keep)24 b Fk(=)h(1)p -118 2416 4191 4 v -118 2813 4 398 v 622 2648 a Fi(hos)p 853 2648 45 4 v 52 w(reverse\(tag,m,n,d,u[m],Z[n][d+1]\))p 4069 2813 4 398 v -118 2816 4191 4 v 386 3027 a Fg(\017)49 b Fk(higher-order)44 b(scalar)i(rev)m(erse;)52 b(computes)45 b(the)g(adjoin)m(ts)g Fm(z)2627 2994 y Fe(T)2623 3051 y Fl(0)2707 3027 y Fk(=)25 b Fm(u)2855 2994 y Fe(T)2911 3027 y Fm(F)2982 2994 y Fj(0)3020 3027 y Fk(\()p Fm(x)3107 3041 y Fl(0)3147 3027 y Fk(\))g(=)g Fm(u)3355 2994 y Fe(T)3410 3027 y Fm(A)3478 3041 y Fl(0)3518 3027 y Fk(,)480 3140 y Fm(z)526 3107 y Fe(T)522 3164 y Fl(1)607 3140 y Fk(=)g Fm(u)755 3107 y Fe(T)810 3140 y Fm(F)881 3107 y Fj(00)938 3140 y Fk(\()q Fm(x)1026 3154 y Fl(0)1065 3140 y Fk(\))16 b Fm(x)1168 3154 y Fl(1)1232 3140 y Fk(=)25 b Fm(u)1380 3107 y Fe(T)1435 3140 y Fm(A)1503 3154 y Fl(1)1543 3140 y Fk(,)30 b(.)16 b(.)f(.)h(,)30 b(where)g Fm(Z)i Fk(=)25 b([)p Fm(z)2295 3154 y Fl(0)2335 3140 y Fm(;)15 b(z)2417 3154 y Fl(1)2457 3140 y Fm(;)g(:)g(:)g(:)i(;)e(z) 2701 3155 y Fe(d)2742 3140 y Fk(])386 3327 y Fg(\017)49 b Fk(after)31 b(calling)h Fh(fos)p 1133 3327 29 4 v 33 w(forward)d Fk(or)h Fh(hos)p 1786 3327 V 34 w(forward)e Fk(with)i Fh(keep)24 b Fk(=)h Fm(d)c Fk(+)f(1)25 b Fm(>)g Fk(1)p -118 3483 4191 4 v -118 3880 4 398 v -6 3715 a Fi(hov)p 225 3715 45 4 v 53 w(reverse\(tag,m,n,d,q,U[q][m],Z[q][n][)o (d+1],n)o(z[q][)o(n]\))p 4069 3880 4 398 v -118 3883 4191 4 v 386 4085 a Fg(\017)49 b Fk(higher-order)k(v)m(ector)h(rev)m (erse;)66 b(computes)53 b(the)g(adjoin)m(ts)h Fm(Z)2713 4099 y Fl(0)2778 4085 y Fk(=)25 b Fm(U)10 b(F)3017 4052 y Fj(0)3055 4085 y Fk(\()p Fm(x)3142 4099 y Fl(0)3182 4085 y Fk(\))25 b(=)g Fm(U)10 b(A)3478 4099 y Fl(0)3518 4085 y Fk(,)480 4198 y Fm(Z)542 4212 y Fl(1)607 4198 y Fk(=)25 b Fm(U)10 b(F)846 4165 y Fj(00)903 4198 y Fk(\()q Fm(x)991 4212 y Fl(0)1030 4198 y Fk(\))16 b Fm(x)1133 4212 y Fl(1)1197 4198 y Fk(=)25 b Fm(U)10 b(A)1433 4212 y Fl(1)1473 4198 y Fk(,)30 b(.)16 b(.)f(.)h(,)30 b(where)g Fm(Z)i Fk(=)25 b([)p Fm(Z)2245 4212 y Fl(0)2285 4198 y Fm(;)15 b(Z)2387 4212 y Fl(1)2427 4198 y Fm(;)g(:)g(:)g(:)h(;)f(Z) 2690 4213 y Fe(d)2731 4198 y Fk(])386 4385 y Fg(\017)49 b Fk(after)31 b(calling)h Fh(fos)p 1133 4385 29 4 v 33 w(forward)d Fk(or)h Fh(hos)p 1786 4385 V 34 w(forward)e Fk(with)i Fh(keep)24 b Fk(=)h Fm(d)c Fk(+)f(1)25 b Fm(>)g Fk(1)386 4573 y Fg(\017)49 b Fk(optional)32 b(nonzero)e(pattern)h Fh(nz)f Fk(\()p Fg(\))g Fk(man)m(ual\))0 4852 y(Example:)p 0 4885 373 4 v 0 5048 a Fh(...)0 5161 y(double)46 b(x[n],)g(y[m],)h (**I,)f(**J;)0 5274 y(I=myallocI2\(m\);)1141 b(//)48 b(allocation)d(of)i(identity)e(matrix)0 5387 y(J=myalloc2\(m,n\);)1093 b(//)48 b(allocation)d(of)i(Jacobian)e(matrix)0 5500 y(...)0 5613 y(initialize\(x\);)1189 b(//)48 b(setting)d(up)j(the)e (argument)g(x)0 5726 y(...)0 5839 y(zos_forward\(ftag,m,n,1,x)o(,y\);) 518 b(//)48 b(computing)d(the)i(Jacobian)e(by)0 5952 y(fos_reverse\(ftag,m,n,m,I)o(,J\);)518 b(//)48 b(reverse)d(mode)i(of)g (AD)0 6064 y(...)p -118 6273 4016 5 v 1865 6393 a Fo(5)p eop end %%Page: 6 6 TeXDict begin 6 5 bop -118 -34 a Fz(ADOL-C)904 b(A)p Fy(utoma)-7 b(tic)38 b Fz(D)p Fy(ifferentia)-7 b(tion)39 b(by)e Fz(O)p Fy(ver)p Fz(L)p Fy(o)n(ading)i(in)e Fz(C)p Fy(++)p -118 7 4016 5 v 148 382 a Fx(Lo)-6 b(w-lev)g(el)76 b(Di\013eren)-6 b(tiation)76 b(Routines)737 750 y Fw(F)-13 b(orw)l(ard)52 b(Mo)t(de)i(\(C++)e(in)l(terfaces\))p -118 921 4121 4 v -120 1104 4 183 v 3192 1104 V 4001 1104 V -120 1194 4 214 v -68 1108 a Fi (forward\(tag,m,n,d,keep,X[n][d+1],Y[m)o(][d+1)o(]\))p 3192 1194 V 132 w Fd(hos)p Fc(,)37 b Fd(fos)p Fc(,)g Fd(zos)p 4001 1194 V -120 1438 4 245 v -68 1321 a Fi (forward\(tag,m=1,n,d,keep,X[n][d+1],Y)o([d+1])o(\))p 3192 1438 V 206 w Fd(hos)p Fc(,)g Fd(fos)p Fc(,)g Fd(zos)p 4001 1438 V -118 1441 4121 4 v -120 1624 4 183 v 3192 1624 V 4001 1624 V -120 1714 4 214 v -68 1628 a Fi (forward\(tag,m,n,d=0,keep,x[n],y[m]\))p 3192 1714 V 722 w Fd(zos)p 4001 1714 V -120 1958 4 245 v -68 1842 a Fi(forward\(tag,m,n,keep,x[n],y[m]\))p 3192 1958 V 1018 w Fd(zos)p 4001 1958 V -118 1962 4121 4 v -120 2144 4 183 v 3192 2144 V 4001 2144 V -120 2265 4 245 v -68 2149 a Fi(forward\(tag,m,n,p,x[n],X[n][p],y[m],)o(Y[m][)o(p]\))p 3192 2265 V 58 w Fd(fov)p 4001 2265 V -118 2268 4121 4 v -120 2451 4 183 v 3192 2451 V 4001 2451 V -120 2541 4 214 v -68 2455 a Fi(forward\(tag,m,n,d,p,x[n],X[n][p][d],)p 3192 2541 V 648 w Fd(hov)p 4001 2541 V -120 2786 4 245 v 1987 2669 a Fi(y[m],Y[m][p][d]\))p 3192 2786 V 4001 2786 V -118 2789 4121 4 v 751 3152 a Fw(Rev)l(erse)53 b(Mo)t(de)g(\(C++)f(in)l(terfaces\))p -118 3323 4074 4 v -120 3505 4 183 v 3665 3505 V 3954 3505 V -120 3595 4 214 v -68 3510 a Fi(reverse\(tag,m,n,d,u[m],Z[n][d+1]\))p 3665 3595 V 1342 w Fd(hos)p 3954 3595 V -120 3840 4 245 v -68 3723 a Fi(forward\(tag,m=1,n,d,u,Z[n][d+1]\))p 3665 3840 V 1416 w Fd(hos)p 3954 3840 V -118 3843 4074 4 v -120 4026 4 183 v 3665 4026 V 3954 4026 V -120 4116 4 214 v -68 4030 a Fi(reverse\(tag,m,n,d=0,u[m],z[n]\))p 3665 4116 V 1564 w Fd(fos)p 3954 4116 V -120 4360 4 245 v -68 4244 a Fi(reverse\(tag,m=1,n,d=0,u,z[n]\))p 3665 4360 V 1638 w Fd(fos)p 3954 4360 V -118 4364 4074 4 v -120 4546 4 183 v 3665 4546 V 3954 4546 V -120 4636 4 214 v -68 4551 a Fi(reverse\(tag,m,n,d,q,U[q][m],Z[q][n][)o(d+1],)o (nz[q][)o(n]\))p 3665 4636 V 87 w Fd(hov)p 3954 4636 V -120 4850 V -68 4764 a Fi(reverse\(tag,m=1,n,d,q,U[q],Z[q][n][d)o (+1],n)o(z[q][n)o(]\))p 3665 4850 V 161 w Fd(hov)p 3954 4850 V -120 5063 V -68 4978 a Fi(reverse\(tag,m=1,n,d,Z[m][n][d+1],nz[) o(m][n])o(\))32 b Fv(\()p Fu(U)55 b Fv(=)41 b Fu(I)3477 4999 y Ft(m)3566 4978 y Fv(\))p 3665 5063 V 99 w Fd(hov)p 3954 5063 V -118 5067 4074 4 v -120 5249 4 183 v 3665 5249 V 3954 5249 V -120 5339 4 214 v -68 5254 a Fi (reverse\(tag,m,n,d=0,q,U[q][m],Z[q][n)o(]\))p 3665 5339 V 973 w Fd(fov)p 3954 5339 V -120 5553 V -68 5467 a Fi (reverse\(tag,m,n,q,U[q][m],Z[q][n])p 3665 5553 V 1342 w Fd(fov)p 3954 5553 V -120 5797 4 245 v -68 5681 a Fi (reverse\(tag,m=1,n,d=0,q,U[q],Z[q][n])o(\))p 3665 5797 V 1047 w Fd(fov)p 3954 5797 V -118 5801 4074 4 v -118 6273 4016 5 v 1865 6393 a Fo(6)p eop end %%Page: 7 7 TeXDict begin 7 6 bop -118 -34 a Fz(ADOL-C)904 b(A)p Fy(utoma)-7 b(tic)38 b Fz(D)p Fy(ifferentia)-7 b(tion)39 b(by)e Fz(O)p Fy(ver)p Fz(L)p Fy(o)n(ading)i(in)e Fz(C)p Fy(++)p -118 7 4016 5 v 228 382 a Fx(Driv)-6 b(ers)76 b(for)h(Ordinary)f(Di\013eren)-6 b(tial)849 585 y(Equations)77 b(\(C/C++\))399 962 y Fw(ODE)p Fv(:)263 b Fu(x)1129 902 y Fn(0)1184 962 y Fv(\()p Fu(t)p Fv(\))39 b(=)h Fu(y)30 b Fv(\()o Fu(t)p Fv(\))40 b(=)g Fu(F)j Fv(\()p Fu(x)24 b Fv(\()p Fu(t)p Fv(\))o(\))g Fu(;)287 b(x)24 b Fv(\(0\))39 b(=)h Fu(x)3328 983 y Fo(0)p -118 1193 4191 4 v -118 1591 4 398 v 685 1426 a Fi(forodec\(tag,n,tau,dold,d,X[n][d+1]\))p 4069 1591 V -118 1594 4191 4 v 268 1804 a Fg(\017)49 b Fk(recursiv)m(e)24 b(forw)m(ard)f(computation)h(of)g Fm(x)1734 1819 y Fe(d)1770 1831 y Fb(old)1857 1819 y Fl(+1)1951 1804 y Fm(;)15 b(:)g(:)g(:)i(;)e(x)2205 1819 y Fe(d)2269 1804 y Fk(from)23 b Fm(x)2529 1818 y Fl(0)2568 1804 y Fm(;)15 b(:)g(:)g(:)i(;)e(x)2822 1819 y Fe(d)2858 1831 y Fb(old)2973 1804 y Fk(\(b)m(y)24 b Fm(x)3180 1818 y Fe(i)p Fl(+1)3323 1804 y Fk(=)3469 1768 y Fl(1)p 3429 1783 115 4 v 3429 1836 a(1+)p Fe(i)3553 1804 y Fm(y)3598 1818 y Fe(i)3626 1804 y Fk(\))268 2014 y Fg(\017)49 b Fk(application)32 b(with)e Fm(d)1086 2029 y Fe(ol)q(d)1208 2014 y Fk(=)25 b(0)30 b(deliv)m(ers)i(truncated)e(T)-8 b(a)m(ylor)32 b(series)2652 1945 y Ff(P)2748 1972 y Fe(d)2748 2040 y Fl(0)2804 2014 y Fm(x)2856 2028 y Fe(j)2892 2014 y Fm(t)2925 1981 y Fe(j)2992 2014 y Fk(at)f(base)g(p)s(oin)m(t)f Fm(x)3595 2028 y Fl(0)p -118 2176 4191 4 v -118 2573 4 398 v -6 2408 a Fi(hov)p 225 2408 45 4 v 53 w (reverse\(tag,n,n,d-1,n,I[n][n],A[n][n)o(][d],n)o(z[n][)o(n]\))p 4069 2573 4 398 v -118 2576 4191 4 v 268 2802 a Fg(\017)49 b Fk(rev)m(erse)31 b(computation)g(of)g Fm(A)1368 2816 y Fe(j)1430 2802 y Fk(=)1539 2754 y Fe(@)t(y)1615 2764 y Fb(j)p 1536 2781 116 4 v 1536 2833 a Fe(@)t(x)1617 2842 y Fa(0)1661 2802 y Fk(,)g Fm(j)g Fk(=)25 b(0)p Fm(;)15 b(:)g(:)g(:)i(;)e(d)31 b Fk(after)g(calling)g Fh(forodec)e Fk(with)h(degree)h Fm(d)268 2990 y Fg(\017)49 b Fk(optional)32 b(nonzero)e(pattern)h Fh(nz)e Fk(\()p Fg(\))i Fk(man)m(ual\))p -118 3148 4191 4 v -118 3533 4 386 v 168 3380 a Fi (accodec\(n,tau,d-1,A[n][n][d],B[n][n][d])o(,nz[n])o([n]\))p 4069 3533 V -118 3536 4191 4 v 268 3762 a Fg(\017)49 b Fk(accum)m(ulation)30 b(of)e(total)i(deriv)-5 b(ativ)m(es)29 b Fm(B)1753 3776 y Fe(j)1815 3762 y Fk(=)1922 3714 y Fe(dx)1998 3724 y Fb(j)p 1921 3741 111 4 v 1921 3793 a Fe(dx)1997 3802 y Fa(0)2041 3762 y Fk(,)g Fm(j)i Fk(=)25 b(0)p Fm(;)15 b(:)g(:)g(:)i(;)e(d)28 b Fk(from)g(the)g(partial)h(deriv) -5 b(ativ)m(es)362 3905 y Fm(A)430 3919 y Fe(j)492 3905 y Fk(=)601 3857 y Fe(@)t(y)677 3867 y Fb(j)p 598 3884 116 4 v 598 3936 a Fe(@)t(x)679 3945 y Fa(0)723 3905 y Fk(,)31 b Fm(j)g Fk(=)25 b(0)p Fm(;)15 b(:)g(:)g(:)i(;)e(d)31 b Fk(after)g(calling)h Fh(hov)p 1921 3905 29 4 v 33 w(reverse)268 4093 y Fg(\017)49 b Fk(optional)32 b(nonzero)e(pattern)h Fh(nz)e Fk(\()p Fg(\))i Fk(man)m(ual\))0 4434 y(C++:)p 0 4456 233 4 v 178 w(Sp)s(ecial)g(C++)e(in)m(terfaces)j(can)e(b)s(e)g (found)f(in)h(\014le)h Fh(SRC/DRIVERS/odedrivers.h)o Fk(!)0 4664 y(Example:)p 0 4696 373 4 v 0 4860 a Fh(...)0 4973 y(double)46 b(x[n],)g(**I,)h(**X,)g(***A,)f(***B;)0 5086 y(I=myallocI2\(n\);)1141 b(//)48 b(allocation)d(of)i(identity)e (matrix)0 5199 y(X=myalloc2\(n,5\);)1093 b(//)48 b(allocation)d(of)i (matrix)f(X)0 5312 y(A=myalloc3\(n,n,4\);)d(B=myalloc3\(n,n,4\);)90 b(//)48 b(allocation)d(of)i(tensors)f(A)h(and)g(B)0 5425 y(...)0 5538 y(initialize\(X\);)1189 b(//)48 b(setting)d(up)j(the)e (argument)g(x_0)0 5650 y(...)0 5763 y(forodec\(ftag,n,1.0,0,4,X)o(\);) 614 b(//)48 b(compute)d(x_1,...,x_4)0 5876 y(hov_reverse\(ftag,n,n,3,n) o(,I,A)o(,NUL)o(L\);)184 b(//)48 b(compute)d(A_0,...,A_3)0 5989 y(accodec\(ftag,n,1.0,3,A,B)o(,NUL)o(L\);)375 b(//)48 b(accumulate)d(B_0,...,B_3)0 6102 y(...)p -118 6273 4016 5 v 1865 6393 a Fo(7)p eop end %%Page: 8 8 TeXDict begin 8 7 bop -118 -34 a Fz(ADOL-C)904 b(A)p Fy(utoma)-7 b(tic)38 b Fz(D)p Fy(ifferentia)-7 b(tion)39 b(by)e Fz(O)p Fy(ver)p Fz(L)p Fy(o)n(ading)i(in)e Fz(C)p Fy(++)p -118 7 4016 5 v 1251 338 a Fw(ADOL-C)53 b(pro)l(vides)p -118 439 4073 4 v -118 2235 4 1796 v 33 680 a Fs(\017)c Fv(Lo)l(w-lev)l(el)43 b(di\013eren)l(tiation)h(routines)f(\()p Fi(forward)p Fv(/)p Fi(reverse)p Fv(\))33 904 y Fs(\017)49 b Fv(Easy-to-use)43 b(driv)l(er)g(routines)g(for)239 1170 y Fw({)49 b Fv(the)41 b(solution)f(of)g(optimization)h(problems)f (and)i(nonlinear)f(equations)239 1373 y Fw({)49 b Fv(the)43 b(in)l(tegration)g(of)g(ordinary)f(di\013eren)l(tial)i(equations)239 1576 y Fw({)49 b Fv(the)43 b(ev)-7 b(aluation)42 b(of)h(higher)h(deriv) -7 b(ativ)l(e)42 b(tensors)g(\()p Fs(\))i Fv(man)l(ual\))33 1842 y Fs(\017)49 b Fv(Deriv)-7 b(ativ)l(es)42 b(of)g(implicit)h(and)h (in)l(v)l(erse)f(functions)g(\()p Fs(\))h Fv(man)l(ual\))33 2066 y Fs(\017)49 b Fv(F)-11 b(orw)l(ard)43 b(and)h(bac)l(kw)l(ard)f (dep)t(endence)j(analysis)41 b(\()p Fs(\))j Fv(man)l(ual\))p 3951 2235 V -118 2238 4073 4 v 1143 2470 a Fw(Recen)l(t)52 b(dev)l(elopmen)l(ts)p -118 2571 V -118 3868 4 1298 v 33 2811 a Fs(\017)d Fv(E\016cien)l(t)c(detection)f(of)e (Jacobian/Hessian)h(sparsit)l(y)f(structure)33 3035 y Fs(\017)49 b Fv(Exploitation)42 b(of)h(Jacobian/Hessian)f(sparsit)l(y)g (b)l(y)h(matrix)f(compression)33 3259 y Fs(\017)49 b Fv(In)l(tegration)43 b(of)g(c)l(hec)l(kp)t(oin)l(ting)h(routines)33 3484 y Fs(\017)49 b Fv(Exploitation)42 b(of)h(\014xp)t(oin)l(t)f (iterations)33 3708 y Fs(\017)49 b Fv(Di\013eren)l(tiation)44 b(of)f(Op)t(enMP)h(parallel)f(programs)p 3951 3868 V -118 3871 4073 4 v 1152 4103 a Fw(F)-13 b(uture)52 b(dev)l(elopmen)l (ts)p -118 4205 V -118 5046 4 842 v 33 4437 a Fs(\017)d Fv(In)l(ternal)44 b(optimizations)e(to)g(reduce)j(storage)d(needed)j (for)e(rev)l(erse)g(mo)t(de)33 4661 y Fs(\017)49 b Fv(Reco)l(v)l(ery)43 b(of)g(structure)g(for)f(in)l(ternal)i(function)f(represen)l(tation)33 4885 y Fs(\017)49 b Fv(Di\013eren)l(tiation)44 b(of)f(MPI)g(parallel)g (programs)p 3951 5046 V -118 5049 4073 4 v 1219 5289 a Fw(Con)l(tact/Resources)p -118 5398 V -118 6019 4 622 v 33 5630 a Fs(\017)49 b Fv(E-mail:)199 b Fi(adol-c@list.coin-or.org)33 5855 y Fs(\017)49 b Fv(WWW:)161 b Fi (http://www.coin-or.org/projects/ADOL-)o(C.xml)p 3951 6019 V -118 6022 4073 4 v -118 6273 4016 5 v 1865 6393 a Fo(8)p eop end %%Trailer userdict /end-hook known{end-hook}if %%EOF ADOL-C-2.4.1/ADOL-C/doc/multiplexed.eps0000644000076600007660000001714711227416777015634 0ustar coincoin%!PS-Adobe-2.0 EPSF-2.0 %%Title: multiplexed1.fig %%Creator: fig2dev Version 3.2 Patchlevel 5 %%CreationDate: Thu Dec 18 13:46:12 2008 %%For: awalther@localhost.localdomain (Andrea Walther) %%BoundingBox: 0 0 524 303 %Magnification: 1.0000 %%EndComments /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save newpath 0 303 moveto 0 0 lineto 524 0 lineto 524 303 lineto closepath clip newpath -71.3 320.2 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin 10 setmiterlimit 0 slj 0 slc 0.06000 0.06000 sc % % Fig objects follow % % % here starts figure with depth 50 % Polyline 0 slj 0 slc 7.500 slw n 5550 2625 m 5550 3525 l gs col0 s gr % Polyline 15.000 slw gs clippath 5216 427 m 5490 427 l 5490 322 l 5216 322 l 5216 322 l 5441 375 l 5216 427 l cp eoclip n 1275 375 m 5475 375 l gs col0 s gr gr % arrowhead n 5216 427 m 5441 375 l 5216 322 l 5261 375 l 5216 427 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 9566 427 m 9840 427 l 9840 322 l 9566 322 l 9566 322 l 9791 375 l 9566 427 l cp eoclip n 5625 375 m 9825 375 l gs col0 s gr gr % arrowhead n 9566 427 m 9791 375 l 9566 322 l 9611 375 l 9566 427 l cp gs 0.00 setgray ef gr col0 s % Polyline 7.500 slw n 1200 2625 m 1500 2625 l 1500 3525 l 1200 3525 l cp gs 0.15 setgray ef gr gs col0 s gr % Polyline n 9600 2625 m 9600 3525 l 9900 3525 l 9900 2625 l cp gs 0.15 setgray ef gr gs col0 s gr % Polyline n 2100 4425 m 4725 4425 l 4725 5325 l 2100 5325 l cp gs 0.75 setgray ef gr gs col0 s gr % Polyline n 2100 2625 m 4725 2625 l 4725 3525 l 2100 3525 l cp gs 0.75 setgray ef gr gs col0 s gr % Polyline n 2100 825 m 4725 825 l 4725 1725 l 2100 1725 l cp gs 0.75 setgray ef gr gs col0 s gr % Polyline n 6375 825 m 9000 825 l 9000 1725 l 6375 1725 l cp gs 0.75 setgray ef gr gs col0 s gr % Polyline n 6375 2625 m 9000 2625 l 9000 3525 l 6375 3525 l cp gs 0.75 setgray ef gr gs col0 s gr % Polyline n 6375 4425 m 9000 4425 l 9000 5325 l 6375 5325 l cp gs 0.75 setgray ef gr gs col0 s gr % Polyline n 5325 2625 m 5550 2625 l 5550 3525 l 5325 3525 l cp gs 0.90 setgray ef gr gs col0 s gr % Polyline n 5550 2625 m 5775 2625 l 5775 3525 l 5550 3525 l cp gs 0.90 setgray ef gr gs col0 s gr % Polyline 15.000 slw gs clippath 2067 1538 m 2154 1277 l 2054 1244 l 1968 1504 l 1968 1504 l 2089 1308 l 2067 1538 l cp eoclip n 1500 3075 m 2100 1275 l gs col0 s gr gr % arrowhead n 2067 1538 m 2089 1308 l 1968 1504 l 2032 1478 l 2067 1538 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 1841 3127 m 2115 3127 l 2115 3022 l 1841 3022 l 1841 3022 l 2066 3075 l 1841 3127 l cp eoclip n 1500 3075 m 2100 3075 l gs col0 s gr gr % arrowhead n 1841 3127 m 2066 3075 l 1841 3022 l 1886 3075 l 1841 3127 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 1968 4645 m 2054 4905 l 2154 4872 l 2067 4611 l 2067 4611 l 2089 4842 l 1968 4645 l cp eoclip n 1500 3075 m 2100 4875 l gs col0 s gr gr % arrowhead n 1968 4645 m 2089 4842 l 2067 4611 l 2032 4671 l 1968 4645 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 6342 1538 m 6429 1277 l 6329 1244 l 6243 1504 l 6243 1504 l 6364 1308 l 6342 1538 l cp eoclip n 5775 3075 m 6375 1275 l gs col0 s gr gr % arrowhead n 6342 1538 m 6364 1308 l 6243 1504 l 6307 1478 l 6342 1538 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 6116 3127 m 6390 3127 l 6390 3022 l 6116 3022 l 6116 3022 l 6341 3075 l 6116 3127 l cp eoclip n 5775 3075 m 6375 3075 l gs col0 s gr gr % arrowhead n 6116 3127 m 6341 3075 l 6116 3022 l 6161 3075 l 6116 3127 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 6243 4645 m 6329 4905 l 6429 4872 l 6342 4611 l 6342 4611 l 6364 4842 l 6243 4645 l cp eoclip n 5775 3075 m 6375 4875 l gs col0 s gr gr % arrowhead n 6243 4645 m 6364 4842 l 6342 4611 l 6307 4671 l 6243 4645 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 9468 2845 m 9554 3105 l 9654 3072 l 9567 2811 l 9567 2811 l 9589 3042 l 9468 2845 l cp eoclip n 9000 1275 m 9600 3075 l gs col0 s gr gr % arrowhead n 9468 2845 m 9589 3042 l 9567 2811 l 9532 2871 l 9468 2845 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 9341 3127 m 9615 3127 l 9615 3022 l 9341 3022 l 9341 3022 l 9566 3075 l 9341 3127 l cp eoclip n 9000 3075 m 9600 3075 l gs col0 s gr gr % arrowhead n 9341 3127 m 9566 3075 l 9341 3022 l 9386 3075 l 9341 3127 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 9567 3338 m 9654 3077 l 9554 3044 l 9468 3304 l 9468 3304 l 9589 3108 l 9567 3338 l cp eoclip n 9000 4875 m 9600 3075 l gs col0 s gr gr % arrowhead n 9567 3338 m 9589 3108 l 9468 3304 l 9532 3278 l 9567 3338 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 5193 2845 m 5279 3105 l 5379 3072 l 5292 2811 l 5292 2811 l 5314 3042 l 5193 2845 l cp eoclip n 5325 3075 m 4725 1275 l gs col0 s gr gr % arrowhead n 5193 2845 m 5314 3042 l 5292 2811 l 5257 2871 l 5193 2845 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 5066 3127 m 5340 3127 l 5340 3022 l 5066 3022 l 5066 3022 l 5291 3075 l 5066 3127 l cp eoclip n 5325 3075 m 4725 3075 l gs col0 s gr gr % arrowhead n 5066 3127 m 5291 3075 l 5066 3022 l 5111 3075 l 5066 3127 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 5292 3338 m 5379 3077 l 5279 3044 l 5193 3304 l 5193 3304 l 5314 3108 l 5292 3338 l cp eoclip n 5325 3075 m 4725 4875 l gs col0 s gr gr % arrowhead n 5292 3338 m 5314 3108 l 5193 3304 l 5257 3278 l 5292 3338 l cp gs 0.00 setgray ef gr col0 s % here ends figure; $F2psEnd rs showpage %%Trailer %EOF ADOL-C-2.4.1/ADOL-C/doc/tapeadv.pdf0000644000076600007660000001222111417030411014644 0ustar coincoin%PDF-1.4 %Ēģ¢ 5 0 obj <> stream xœµUAnŪ0¼ó{lsŲr¹$—¼(znb ē pģ¶›øśż%K‘k5öÅŠAōj8;³ÉÆäYČ·ėpÜŗ/wF«ß®«ŅŻ·ĆbærÆNśõįöø„Ūą…¤r­Uińäz”9””H“rŽF‹­ūōöš²¤Õr·Ü?¼=’Ś}^üt_l!†D°»]h :NŲ&±r0*ɳf£P”c2Ś/Ż=ō QŹž¶ĘS‰“E÷hćÖN½VØ 9²TĄU4r•±²yÆ /­2ģśØ"ødš@—?ŒĢk÷ć†vĪsńŽŠŠŹ,؄qWÓĒ)ĻÓĶū\‚æĒ=øē¼žWćęZóG>¦Š®×e 'ƒ_“ĢRŌ…½‚Ÿ±?ūÉ8%HɘP‡Œčķ .O”hĄ c!;tžś(0 GT¢°@vL\Ń…ŠÕ8ū4_‰¢¬•¢b0µĒ÷U’q§4‘ ļ“õGv4$gĪÓ©–S°§™¢Ž2+· ’ZÜė. ©ÖŒ<­žMĪšÕ8NĀyŠåARZ (§vģ@‡P…ńŻ2Ɯ0ų *–ZŚ öRmÉbЬ” ģIžÆ„¬l"ń@:žćVc FžńˆĶ—nÓ\€‚0ćéTĖ©ƒšZ®²įCšÓŪT\‰ŗāOƇęąŲģ| ΃Ś@ž#hŠendstream endobj 6 0 obj 525 endobj 4 0 obj <> /Contents 5 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 7 0 obj <>endobj 10 0 obj <> endobj 11 0 obj <> endobj 8 0 obj <> endobj 9 0 obj <> endobj 12 0 obj <>stream xœeTkPWŽ%Ąī(RKšņP’>¬ *Z;-ćL‚X+E@ŠPˆMH–&›4äaB“(Ü!‚AäM R[Zµ©ĪZ©­čX+Å铝¶s·³žhp¦ķž9sĻ=ē|ēž3ßwQ$4AQ4"Ÿ” «6åɤ|jŁO¤× ōŚ:žŠÖž•du±VˆķY¢ąŻgįÕgąäj„…¢#_~Ÿ.“k¤H¬$ÖämHHHüļfkrr2qHūO„ČV‘"ŠX<؅™\*¤”;ˆō`¶DB¾Oˆ$Z¹øŠą BĮrY!_"ü€Č$%¤\.SėÓ7Ū’’¶n šm;ˆl•Tؐ%$UAR¤RKš)±W*ń )_ \Ȑ’J…–ŲžDR’Vg“ŅCŖ*āéČD¶,™Č"ņ„"•„ÆųA”L®Pņ…"’@½H’‹ģC ·LämäEV‰„"j䜌‹žāł5śRč+ŠI.:īzgf,°:é8-¶6k;Ą½}1±b Æ®f’Q\Å.l’q½ ćpūä£^gąnÉn#Ä@–Aw`9IąĀŠ›k`‡Zģ§²Ėi„Żž]Üo1SS±–¬ĖƎ v4zém^Ō÷žxȂ6ŗœĆ<Ÿ”Ąp™5‹ė`Œzü'äĀč-KĢs<ƒŒ³0ĄÄ3aļķJTøĻ«y²©ź9p_śųź n‹‘žŌuĮ\?łEŌ­ØŗĶÖ;čxŽĆj€Ś%¼'bŒ=ŠźźrĢøc딄+<Õjh³8܊ Uŗc‡+ĮPų2\½ó‡ūŹe¼Ū˜¹©@-6äėbįĘTN’åį‹_O¤08Ć*NM/ÉīēFĀūĄłżfe§ć8'l«ą§Õe<ʆ&ÓžŚąVL.l—MēWpØĀü&=-‹±ŪYÓnīøŪuŅPw“|J™QĢ{„Yš U"CĪįŲH8`œ¢#üčÜ ¶Ņ…œuok“™¹¦zs½É(Ģ/?X}“Īd6 8fm°5ąŸ2Ÿ…æŽ_>=1āž p ķj…ĪØ±zĻ,žū‹¤sŒŸÓ12Ąæ‹f/ŅŁ×9ŗšZ‹ąJӉq,ĀĄ”ŧw«†ĖOåœ}{SZq–²[Óēīéī=ŽŲÜhē58[÷ų{ĻOxØn6Ęl~Ww¤\ˆ³Uš²2.k¼lf|“gj†Ū\Ō„ƒ Ē94‚3[īr€ÄRÆ®­Ŗ‘Õ«.– ^ąĒĄōč0\5Ž/æļ+Hł!6ŒŅ‰š ĪĮ”rjČå>źŠvÄh˜ĮįLų‘kFŸĀ/.ķ)@‰VH–’g€dœįŽ| bK·¦!2Ęeęa"§}~šģ ˜nYĒv|™0Ō8{VžköFy稻pēm'šĶŠ•t ēܛ˜čm»Ŗ5FŽ&ož08>ܜ–ž”å^ÆäÖjufK%eŠ P;kG58›É(’WVÄĪ—-ݚ?36Å8é#ąjÉXšį“Ä6) t†<­ŽF{£ œjčhlgĮy׀'ąu Ią³ōÕųqĘō$Ž0Ż1OüĒ€A”›"`Ā^Ķõ÷Ł;Ę&ylŲ 9ÓŽ”‹gtŅNn—ŲY ų>J\ŗ—ķqŽA1Ļž†.ł’¾¬«-łaz¬Õźlź°:@¬ū)/õH7Öe.«ÕčĀv7i7q±żPĶ‘+•2YÆŅėėėõy•}/2ųEhŗéĀn˜ßŽæāŽŹžÖˆˆ{]«äo:ˆó endstream endobj 13 0 obj <>stream 2010-07-07T15:52:46+02:00 2010-07-07T15:52:46+02:00 fig2dev Version 3.2 Patchlevel 5 tapeadv.figawalther@localhost.localdomain \(Andrea Walther\) endstream endobj 2 0 obj <>endobj xref 0 14 0000000000 65535 f 0000000839 00000 n 0000004587 00000 n 0000000780 00000 n 0000000629 00000 n 0000000015 00000 n 0000000610 00000 n 0000000904 00000 n 0000001005 00000 n 0000001350 00000 n 0000000945 00000 n 0000000975 00000 n 0000001601 00000 n 0000003064 00000 n trailer << /Size 14 /Root 1 0 R /Info 2 0 R /ID [<2E3525C3EE3D1D3424010AACE59E501B><2E3525C3EE3D1D3424010AACE59E501B>] >> startxref 4832 %%EOF ADOL-C-2.4.1/ADOL-C/doc/adolc-manual.pdf0000644000076600007660000176523712120123050015576 0ustar coincoin%PDF-1.5 %ŠŌÅŲ 188 0 obj << /Length 2126 /Filter /FlateDecode >> stream xŚXM{ć4¾÷Wųč<4^Ėßę¶“tY`Ł…8ÅQS=ų#+ŪĶ– w4rā“Žg¹ÄŅh4šwF£„ŽĪ ½7įg¾ßÜ]¼ŗ¹'’ N²Č»»÷¢< Ź4ń²$¢<öī¶Žžėė÷?®Æ¾^żu÷=ų /Ź<Ğ‹ #/ʞ’y…ćŹęR×"+‘$Ž:ANģjG™’a徬č÷ļUšųr§xį¾3<,%÷_C·~#]1åZ’ŠXÕ®¢Ā4Vŗ–Tšā8Qź­£0ČS>°»gyÆė]gōšŠō,ä÷Uł btĖ WÆ®¾śŹ7A÷4e7eAVäW$ĪņßVeā+ӓė8Oż(HqÉćwŅT«Xųn J;¹©'ąņ°“ž\GQPfų¤A&ĪMķÖ(‰}qLšĘ¾¬į³,Č£bhé"ˆ³”8±ÉvĖņł,rKœųoŒVr«l’^8M„e–gĮ·6½€Ł«›$óJŲe ‘Y‰Iī¬Üōƒ‘Õš °`.!A‘RpE rĮī%I’ų3 ROØ*U£Šˆ fęÜŖ¾2z³ZƒKm™×:Ī{@ ÖĀ×µĘxƒ¢YόĆtžz\„)¢22ų, F_ 31żĄÉĶĶ5R£¤l`D±śzGQ]Ge ½Œ~“ZųˆŖēKßG²KUCē6܏mE‡;¶įA<’d ‹$UZ²’¦šÄćŖköć0½7ŻĪČĘI:LiAĶ™ž+~EŽ|›¬ųĀūĮjf‚B$£ś±t»ć©³.uÖĮ¦ĻżwsžéFģar>ń6Ņ@@žT²®ÉJߛ®qZ]µ»\2↫3€`{É©`ķĮW¶ÓIH‰Īfž„×²Ż\«0cK%[&“"nr(£łå‡łÆ«Ļ$Ńš¤Ualą7XG¤ŠŸ|EČ ¹XŸAĒ*@ōbz&XdŲ›Aj šŻåv°ÄŠ Ą5Ate y äĢ“]-łÓ7 Q· Ź„„=¢Y»xŁ¢ŒļpDĖŲ2ū GāśDkM!•U„ś ŖéĢӄ¶#äk3”`3ƒŹń”óĪ"¤§t¢„/ņ›h.K€ō$žõ¢ćŒ.*CP¶EDõ¼Õ:žVOŽ'ņQK¬T]=6mɳłŠéhrč³¤=ß^H•½4½ā1īR(Cź&įvĒ…³Øø±i T£™ląt‹Āyõ –£Fwf«[iÜlūü>®™Ž˜XļY›¢ŗqvTı`'½unUv'’ūØ·V•2™Æ<+ĆjZsƒ;{mZ„kk·­zŠ g+”sVi§3o9Ėāg ²Tmxų½¬ŗ–mæd‚KńBPż›Ģ˜‚6ß Ž…uŗ9BĻ· 1T”ĀZ³ųQ}Ś×ŗŅCżÄ󉮛9=: !–O7ʂź/ļRŗ©¶·‰ŠŅ]- žpLd6›č’ t½Ōꓦ+4wAiwB4-tmżÄ ĢÖP£‡ņįv°­6s½³IļŹ”\”\=£4_¶tH®ĘZN÷&(ŚFĄś»«§$ ÉŽb×÷zcu©ŃøČډø·ÆęŠN}r‡ģQ˜t5Č *ą‚ļeӍG ˆœė#¾[9H²,.ż[ŻVŠ© ·Ģ#Żó—ė£7fč®pØĶ,ģ?"ļGB]nuŸµ;™o2 6S¦X±čĮ›c\ ŲćRt·\7ŗKŃāõ }Fk‹fČZõ7—hĻ:a~€ĄįARŗ‡Čźé°Š©×ŲöKmš`O…,÷ךVśW¶½±a¶S½^z5PeH^Oö}™õźAŚZ ¶_ĘZ9ź{ŽYóétZ‹8H§§BŻIĶŻ%µ ź”8ˆŲꔄJ³Ļ©2Q؎թw›ŽˆxFūń¦jä¦7$·3ū¾2[üŽo•cśEqJŲ›b‰į­«#ĒPƎyÓ4»*ćĻ{ ko-Мsz׿OK Ÿ=“6£ĮĪ-įŲö H)“ ć9RЬĻCŠn5q½Ż¬'<Ö e\`™Éb#ę÷ČüUóķŻÅĒ ač R¤ Śæ4Čšī®š‹?ž ½-Öąķ . ļ`9OäQ%ʵw{ń³{½—^ŠYžń‹,FOÄe†Ńك/óoŠ§p$•K=›ŌœC1šŌ_ƒŪ€W®ŚžĮ%^šø0ń OŌ“YQĮfEEźŪ*³{ZrIWYiå§Ū›Kęµ-‘Žk×jzūȜ(7$w$é ±Żõ;Õ(ݱōä½mÄāĀæEĖL¦‹@ł,sU§Ļ›†);g†²÷‡„ņōO'=Ż? –`KPą’õ‡Ž„š%fžaځå*ž=0Ń6ÄńÄc~& ŗéådĶI‹,Ģ_EkĮ Ų‡Ē|ēä咼¼`č—|ND-q/™$ößIhnėˆķv±ņk«™28ßē“ćƒĶō)ēI[3±ĒaY°Œ6 Ł’/Ū8f%`¦ī;ņę¹±’ŻŲ+i‡6®Žk¶š!8ü»JEĀoC0’3²Qß dźÉ†e¹@fąg’ĪD]ż鳀D endstream endobj 2 0 obj << /Type /ObjStm /N 100 /First 815 /Length 1709 /Filter /FlateDecode >> stream xŚ­XŪrŪ6}ēWģ[“éŲ"$f2qä¤q§i\ĖM/®hr8„H$Żø_ß³¼ČŹÅ"Óé‹IŲ³»ē,€ł’ņISlȐ Ÿ„Ā«"įW@ŅēW’*&“Ō$ń¤$ąb‰šwCAØ30>)E!(Œ©ˆ“Æ1›“’˜MZG^ )ņCQ¤šŠÅl)†BŸā("ą!) Č0`DFĒ"s“Ą30ž–x‰IxŃOĢÕČEv‚ōą:B689…|/ThąĻ8‚_$-„‡”D£x”'šBŽ xa¶€§‘°žę§įß/‚¼Øć€Qh<į1bx¤+bĮ/ĄŒ5€|€Ę¦‹œ„9‚ł7X½œ Øę³,x„u‘š”>ąZJĶ/‚1ō*ąÜ|¼D°…2`ļPE!æ9ąü!C(!  £Š–ćÅ(¤GtPHźˆÉräGĢ^BŒ€Å<äXņ cV&äŹ`&4×ŽŅžĄØ4Lŗę ōł„į3cLł<’źŲ‚^J°wئ{‡lJ²w@@ʎQ¼Ä¾' œRĢO +Åś£¢k( ¦ŅH¬£¹ §2L?W« ™u VŃ ”}&–G޳g“XŃāūņ²¤Å)=©ķŗÉŹāX<„ļ¾óžœ;[%.+n)”U’‰Ź -©t“üö[Z–©„ ~œf›u¶h²„'=żø½ŁačgE揓]ϰ½Å©]ē}<'ųrgé-~%7¹­'ģUo’:qķY)M½ńŹę<ó³"µ•ÅŸ¢”¤Hét÷knZĄCĮüŌno¬ŪĻ©'”öņ|üņ¼åś=—ĖöŇd›ńĐX+iÖ×Ē $·–.ģū6s¶Ė™&Ą‡€—mŻ”Ū쟮JOßüx“œ°*ū×ÄqH}v«ööÖ֝š„g[ŌŲŖćÅf¶Xß?ĪÜų"©ļ.Ė£_jK§%é˦Fz†Éć7U“!™^5Žģ§²ē6qōā}›L—¦Ś­ü}T—fä^×ÉgŖĻWhrHó‡d]ŽdI1Ų¾²ØŪdučƲŪwķ5w—t łŅu9É]8ö·Ń®ę> ŻrčÕ7™³‚ćµ×ō€7ó<©³5ķ'Źū²t'.ķ0/l‰Õu`-…Ÿu™/a,“½Å`9ĖhTyčĢkK'hB÷uv€¶”›ž¤w ]~[ŗ¬y·‹éĒeŜå©w‹bßKŪ~h¬ć®ø™Õ”õH¬ŲP9Xv16;K7Vqˬk;åG}ŸMö“Ŗ®(k¬Kęä|liÅėsĀrD…Łœ†żņ€ĆvĘ­[qWś]¹ž7£QÄnŗ’ŖlŹjłå„³o>¶ör[eŻŽĆĖęǬųėė”Ōn_]ēmŹöv‹CĶĆņŽ%=®Q^Ūż¹¤h§,du“ä» ©gīCńČŃ÷¶čŖ`Ȭ7E²7|‚˜€˜ä‰wŽ*·¼’?Vūx»PÆ]Vå„¦Zŗd µ£™9z™M×ā±dæŚrĮgį™A'æ“Sļē6IAŽ25Ÿ’V•]ó^6£Ē›‡ĆSµsŲµ%‚›cMńyį›zGźŸOź½ĒėŖśóéą Ųył7h|Ą©š?fAģ4B󥩊eyJ1:hP蚣`|=}Å-Ÿ.hń2k®ųŁ3oqy£Žā';oĮČīX'ā˜gz‹ [w˘‡¢~č5N„Éóņ]łŠøšGF^{€ąĄp ż¼“¢(uÕ]ėŲ-ßźś§īž×ŽG!tó½īM÷› Ń[6øŠ‡ApÜŻš:Ę„9 ±ŪOĘ!’æ8p>ŽĮõG p§3ćPūqģ×Ģoæ’AHČ0³FūFQŃęłõ£sƒ~.TJž+aČ’v„"œ;ŁĒ=Ačy“ nĖaō0÷_¶Źt¶ endstream endobj 231 0 obj << /Length 1234 /Filter /FlateDecode >> stream xŚåXIwŪ6¾ūWš½<*ÄĘåčµq^cåŁjzH{€HXĘ+E* ™Öżõ,¤–8’ż²ÉĶ 6f¾łf¢`DĮ/G'Ó£—˜8gQ†ƒém±q†Y§tŒiL‹ą="£?§Æ_^°t}"M¢q„a;åtr5=暎˜™G‘ßöNĢʔÅÄ, żšņqsæ²®F£Vŗ¦ńߊ׿Į8Įn …į譖K”U5…4„H˜†”™· ö“}õ­kOŻX­żß/üZ‚ éĘoū gźS©Ķ”j•p[¦˜PÄÜ 7aĆń˜Ę, \0¦ž˜c8(ŽA—Õˆ¤ØÕš5h‹®?a”¢ń(äQth ˲oū…u3 Žl˜;`W½‘G“õhę™ĢĖžŻ)EĒ9ōƍ0ś8" ’®ūŻČŲ„VbVŹŗāģ'Āl°@ź1{#ō_kˆµj*ļ2€·:d¾ ,¾ĒĄ˜ėF–3Ž‹"–ÖyeUHēĶnPT…ńģĮ ŸŚaB¾'“ŸĀ£x ÜĆpģnx·ļfK]ϵXųK7īn¢ŚiP@Ó;L{.ƒ/Å—ÉGó¼R—µ(dį™˜Ē‡ūkŃÖŗŁ2 c]å0ĮØ9HŹ’¼Ū${ģ%ńø\Ė®œ¦…‹ŽI÷{j]Ą#äŗ\¤5¦£gŖÕBß»æ—Õ²Ūpœ²3^“aśćĮĄĄĄŃ4RčšB™„æiÓØyµ0䐝ƒ<#B}2Px;e=Ū¶rΌK݇ę·37µ5—Ā1–{żeŽj7’Ė¢Ó`MŒ§Ļ²%7unŲĖČuµKœŚ½źF‹Ī¬`•+ŁŪŽyń:e±õ23ŽxMl)Č ]§du]–F.m/§č¤s’F Ī0Āō±:— :÷ü±PÕ 3Ś5`ŽŅ>Dxr4ļ) 5D[ˆ@ bīg]ĖŅrį#*Ü cĘæ^<„G‰Ž-<É ™¤™#éŃØÜ—ž,5cļ[Š1„uaŁ\’m\čbKj]ĖžŚżō7«"#&QFµ!t»ŖÉŻQ&~õ]¦&Ģų>x*ŹŅH„„F±č±q…qeŚ 7“ūŪņš(…w»Sa>“eÉ’« łh#c»]Įjńń™·µøĮ”ž„u^‡ąī̐ÆĀÜzI-÷ō~ õ}£Ą¾Ł—+Č1Ū¤¶ķö|zōƒĒxV endstream endobj 256 0 obj << /Length 1045 /Filter /FlateDecode >> stream xŚÕXMsŪ6½ūWšVp2¤ńMā˜ŹvšŽ;±ŚKŅ*B'©’Rćüū.”XV’S•œ(‚‹}»ļķB8øpšźģē飳O‚c… ¦ó@ńXȔń„Į4 > ÉĶŪéåŪé]ųĒō×ó+"¶ķ9•± –kL™µ9Ć~}X\nG­uÄDœJįęČ0RT —Łß”äH3“…KŅaDŠā¾¬ņõ§e>sƒYžf*S„Œ¢u®×yYŲOå…3yyqsM`2„œ!.ĘĪMdĢ$"¢ą@‰?HL`¦]ō›ŠŌmRÜĆāŒ#ó°6U”ö”ł¦˜ŁŌa$‰Bq ŒŸõĮÕć¶ŻŽOš!"‚HQ?Œ‡øP‹‘]Œ½¶Ÿŗ&>]9w&ė|iÜÆÜ™ūjĖlU•aD43µM€Ś>(„õ(gGŻ“ÜcOźš‡v•=;*½£ŽkČ ķ³F1ł-a’·›q5ī¦lŻäOźęsĶon½«ŗŅ‹…ńĢ€(BT—õ1i;4÷KIK`†c싉S’iØ$Ņp<³0uķda^V_¬f菦Uv@N˜—ŽĖ ORŒ9VN’NNŽ” TY>’źuHšÉsą®ÜT3氝xƐ I±ś’|?Ńc,AŻĖƤ“™I¹\å‹*]džė¼ų¼@†l˜“ †ä÷#Ę£9.Ā:@ŠŁb“u¾æ7K]}®*×D¦”­žžŸž0|e‡- `XWžśmnś©æ7S«\·‚•*ņ4ńwÓĒS:u”~]Ōk@Ū”§1GæÕݧ–®”¤’"”ҵݩ£ė+S4=Č“^ ģąužg„«Æcœ Œ? !ÕŽüK摐—z¹Zų—Ū®¤œ>'4c(ń‡[Ā]˜zVå«¶ź1_õ8z½ō½ZCöY–$mY’ÅčĢx*^å Ū¶$8żtł *ü1i09Ÿ¼x1Œ½'ly÷%ŁŪ3„±čz¦^}ßmtś°©ŒW`ķöĪKī,oļäöw„Óf€ĆmśxeVN™{²ƒ§¶6*kZvøG2$Ł±ķ’źō·…Ń,ڳģŖGŌå#v}"œXķlĄÓX²īZZÆģbnx¶ZI‘ķ°0‡óäĆh„ųīpD9ŽiB‡¶Š}kĖwiÕ©)÷­.†VŒÓŠUłÅĄ“’ĀM²]Ģ$ēßwƒzėĮu8" n`Ż øŠ-óB÷—<~$Ņ ÄUˆĄ ڇ4•R»h§Š’&f/&ąų S]”¹©@m›īŹ¢·żoLbļh^\/’Śč¾B8„b›åe¶o4HŁĶiņ,€ķ¶ŹĆēåōģģč\x endstream endobj 270 0 obj << /Length 2828 /Filter /FlateDecode >> stream xŚ…YKsä6¾ĻÆšQ]“Ö4õÖŽ¼~¤¼•OMŗö’́–h7kŌR%ÅćüśąEµdĖɉ/Hą@ķ.ž.v?ų÷žĆ§[•^Ø]XīJu±¼(“°TÉEVĔЋ‹}}ń[l~ß’ēÓmRĢ c P°!µŁŖŻn|łzóeSÄĮå×»Ļ?o¶q ]n~½¹ŚßŻĘAÜßņä7÷_yśźćG™ææ¾įŽķ&*¦õė»ŪŪ›Æ7Ÿ÷w—›" ˆˆöa'ś€2ł…JĀ8É"”q+Bnć4,²ō,ŖŠŅą‹3'ķlū¼hn~5Õ`»–Ż#·W2t2$1±ÓAµįį£'ø¶’ß©Ų8Ónb VK:DP…eš’€;M…;8p-ōĀŻń—7PA=V3‹ūQiĪö’%NŗŚDyšm“f~¢É"ø¼¾’e{Åć`ū§éyŌ!ńxÖĘ5®åXņĄ¶ü)ꬂŸ`ŖąaxvšŪ½q5žśĻż–’ę• "@?Ō±sFxė(Ā[> Ņ$€‰OF,½|åź“†įōÆOŸžŸŸC<±Ś>>†{Z³~Q%É'ēä`‘xLŒép¢źŽGclķĄP@Óx»=Sjžq–/–G“ ēķ „5f0ĶĖŚ­_/:m-o),-Ž„ sąˆ .Ńn .ł<ø×(ŒŌ„?hü+Œ"DS_Ķ!3ŠdĄŠ{ä„e¹Ä…żĮØąČ7>¢·ā˜ē! ø'ŻBZYó“ņĒ®iäFÅ)ėó¬zŸqćĄü85ڶĀĶß7öģ©pBåĢw“6śo‚²Ń”’)Õx¼įMD Žš8Ą9~6ć#I‡ƒ<żńdĪ«SA ģ1¦†L4«2Ņ š6:'2ņ¹ī·kö6Į ž@Ģu ¶A±£…d¹Ū¹š.« =h’J½ ł”9½š§ ­a“B×ĪKD‡ AtÜvr«Éū_&ž‡KRdēź„¶}5ö½eØ'€+„h5oŚ9©nr²0‚ć§‘„ćÖ#žł - üTįplØsŠ\īä³\Q€£“vŗ‚0j%*Œ eŹø-ščĄŻ)4°Żņ$WKŲk©I{8°kCČY9{¢$’ ‰(bAkt’²ŗķHq &j7\.Q' ŌøŖ¹‘œOŗõQl•ߎ Č•eó[g?Ķ0bÉ¢ųœbAj^±B:Ł:b刄f1™pÓ± ö²7˜āIOĆ r ›šüćĶüéÓ RJłRłģ¤“ /īˆÜ&Ēē55df³)£+ٰE_֛x¾‰,w*‡ZōĢ}”×Gé ö‰ģŠBb“ø•›ņŒ®­§g‹É2¢éĶā\ė+¾-ģŠżü eM–—•ŽļŌ›ZŠA0zm2=æ„y¬(įŗR…ĘĻ…§J|Ɵ¢ĶR¦®]ĶäµŲHŽ Ū¤ėå›ć˜qH§R©>€ƒć{Į¾D#<É2”=!šO©¼(ƒĖzrYɶbš,S>«÷ćāM}†sZZAhøĆÜ9EOHEKĶ·ežĪgKžE,ģQxųT’\B ,…²ōu)$ŽgŠaĻrąŃ‰A‹Ąōƒō‚Į‰«.Ėjńœ ļ'J…å™(c Ü/¹ššeó8ZÆøā3Oł\²˜u?ȓõJ—$ ’{ŸŠż÷ OœšĘ42r•^0b×@Ęś>pā_3W„ Łąµ>{I³\|V9dĄ‡üū5–F¾KŲ‚9‡Ą!'D( &rµBI ķŁba£Å¦Łr²ą¦6å„!ß±é8 }&g?ƒÅģŠżÉGkĻ+Q¾ 0L-ŸO¢8øµpń@UõŖeÄļJhu ˜mm ā fūķĢŁ¶l2]Ž8SA"Ū$ŠÆškĪžƒŌX«¼}JŖņU†ƒ+莋 R’ tVHsŒŪrŽC3ļd5žū›–ńµ’š'*×Xć~Åo9ŅĀŽ `œ#ęŅ”[&¾\ĆĪ”¾Į²?ĄłŁÖ6wl“øĄ™=Æŗ±ĪXكĄxæ”×Eåō^ƒ»u~WńņŽųų¾ėf…„rģéPEcµL#:čšĆ\ĆšGĢ„p†ü;›½bC’ąā–CUVšƒu†Hk廚•ÆĘć9ČĖ4¶ų.ø"v?bå_ń£ßŚ»}f*óļö‘¼Ū_›Ŗń?.+4†˜ļĘ’Ū”ÉTķ’Żs~1ĪĻ!*PŠ}į°‡ZĒ?kšƒ_1{ę£į»pYųgižzõł·ź¹¼ ļUęōzS)+ÓEå (ĘS]©ń(Ų9·²² °r,k§cAWž+ŌmÅĀ%=E&łņ …§¤ ŽQ£j/<dē„‘ē˜f©®pS Zø½9D“V¾Zęė÷ö;3ž‘4±łŃ›Y–CćŁ^ä˜3z<ĖY›©Ęs¬ćE‚% ~šÅŽ9 b²Āc:xIēiŗw‰‘ÄņY²ßqه½NRzāVĶ2?óĪŖæĻłc¦ĘA…ńWž'Rµx{Ų…E”OFRwć{6ĪßC„ļ󔣸[9C¹ą„ū{Q#~ņKüó×ō/‰ć0Ł$q˜5!£]fédŹļ •a”й”‚ļ­8&&^ų®ižń™ižÓ·7ūW+Ł* endstream endobj 279 0 obj << /Length 3470 /Filter /FlateDecode >> stream xŚ­Z[ć¶~Ÿ_aōIF֊HŠ¢„^€MŠ Š“E¦ķC6™¶…Ų’W—ōĻ÷\H]¼šĢn’‡x3yx®ß9œdsÜ$›æŻ}u÷å7i¾I\$…ŲÜ6E"Żd¹Š…Ź7÷ūĶ‘ˆÕv'’$‰žn۟«śøŻ)„¢·e_}ŲŹa :{<¹šWĮežĆ~@6.A“Äb®B›%S§=Éå†}V}¬ĄÕ­x£ÖuĆ%k’ķæ–?es¹Vg·ė« źxŌµ-Ś)6/®ėģqŻ; šŲ¦˜)^fDō-äŃŽöxFR°) p¹ę}©źęÜŸ·¹BHѓ£÷ĮéĪõÜ ”Ć×NĮ†DĪ]Üq€—ĀD5x’Ž›üõŠõÜóšÜ“/ĮŽ"‹ŖŽ’ Ź.Ž“¾Vr(‚Ę"•Ļ8Rœļm?t1/²øPˆ(( ÷“Q.@sģ™[ž¹æE'÷›cø]uv-²['@æxZ ąP“Ń—•¶ęµĮaĒ=õ-܉ø„'Æzę"µa£§ųƒ=ī]¢ų/y”d®Ģ:7¤ĢxÄ„¾*0ztׅBA&œ¼³P*VF/$鞂C•™\zO”M a³Ć:RjŹ %īx}ķÜ/ˆmŠ™Ųą _½·­Ÿo†ž:ųs®mCŹV’ü÷ĆeøĘ…ķTOqk!ĄV-=µY )XInĻļzP™KąŠ•K;m¼ƒnm?†<³Š€4Īõ(øw‰JWcžd1Fu f”q²ˆöÜXā ŽŅ‚žōšĒĮ3„mē;ģ€`ž•‡Pģ~ē×Õ\ĀMM®>-Öé 1Fõgׁø-»aAĢDÄķ™ibyÄ߉Ą%=:NµžXØū’ÖĆnFš°ō xČNüŚ=ė 41ņIy„4Ŗ‚Ƚ*ą/kքq’ŖńĪņE”ĖŌĦČgR×«ŌźXÉbįšØŃ;`gč–4#gCĘk&Čņ X%š»3Ž-¹ŒU²[Ąą9ļ›ē/č‚Ö€Ę> öč8ÉÄĀØŠč{pĢ-Ä#×öĒ–©ĻŽæcšG<y`©pg5NįOPõńĖvU‚œĖĆ*°ÕöčŹ*v8a†›~L†X+ ÆĢMŗdķāŽų`åcŻ#FAt6zq½Ą):Ć,Å ˜•Ją[9Ušnł ˜­ėÜZŲ3ó°@źė/¾ążdM &ƒĪ|¶Žš¶Œ3 qs< 5gÓ~5g²J†ų.£f†ÄƒŸS„ Gpī`ÖHq°ŃVżiē%‚鋺ń)~”0@¹™Æäx$»tˆQoV±jØ<ń4Ćģ„!¼bdōöū¾å±Æł3Ž“»œļ1ĒgĪļBųĖȐ䯀&tćūpež$ä­1Ęåõŗ&*ČVē–K¾ŁxP˜pŗ];“ANi柱œsłe8ķō—µĆ ½P“ƒõēp=R@<źlūž€?œ?”>ģ¾ŽHMÆĖ󡁍76™ax7KŃ2Ų'a. Ē;ų öĀf«7"Š!”ų˜ōQLō%|Žg"g-Oᤖą‹ö¾ę”Īƒ*Mģw†8" ŌwŽÉ4‰3“k0¢(ęE,!õ¬ˆLę"–bœ ż_*b%ČRøžä߆•öŒ°0Ø1YM@Æ9+fö¦bv[±‚”¤Éå(¼-ɹ,ļ¼¼Ü{Ī£°éj’3xW<¶ņłC00O*yk ć¼¾÷$ƒ˜.^¤¾ˆČ›dz÷×ū»÷w(Äd#6¢ŹR@•Yl@“ååīǟ’Ķ&ĮXc”ż‘–^6*–õž¼łįī_\†¼Ń#¬zq/y†75˜ŽßüĢ—æ¾„hršĢfaÅ+ŗšĀ¢©6ńĀ„,H‰~K©+ü`y)°0Å9 ZŚK7‚ˆŠžt) v—Yp,†C€”z$ZžtßcĪGõŠ2:˜āõücŠę³ŪÆ–ŃĄĢ c–źh«Ę .WŖy® µŠž‰B³ģŒ3{üśr=ÓU˜@Bŗ@SøŃÕ|œ’`ćŁ  ą²Ń#•æä1I°/įšŽ ļī“d&z`čšųĀ ž`ņ½8^7¾±Č3ģ•P° (×Õµ;ŚÉąq°ņµŃ£O’hжĒįā&z«6·ee{\e9BĀļW”d[”Z‘sÉB=Kf©¬Ÿ°c™»\ …F7ŽiOŠĆŪ$Uič”Ć*š•WB½āžaQ6e÷\0µÉ!ĻXDŖÆß@Ŗ™ą‹×Õ šMż5›d*Iń\Ä©üM&! 0ķ\ŠVR¾ā¤Č_‹Il^5i >Ģ€]żäKÅ‰ŅKņ_2høĮ¬’Ķ%t €»¾Y< RM*£šƒ ø– >±§Į_Ø%h.g/³|PÖ”ÆĪŸ”åæłX‘‚™=žŖP¢¦$rė«W˜O†ŸÓĄ` éōÜóraŃN‘~VaB$ŠžJ±vč›  ·2%㾋8IIJ€6’·HĀų#dÕ42'SĢk ”œ¬żO9qĆyJ„qč،»ņ ]ŗ²™S9>Į¾ü ßąż‡pž'nł7¶įIŒł?-¾„ab@"!Łć\юmŸ¹ū?^֟0·ć”½ėŖ–’ļ`±Āś­s»®oÖb%¾TĖ_÷ SPaöākÉ}āńØäüæRÓ~Tļƒąż‘/> endstream endobj 288 0 obj << /Length 2708 /Filter /FlateDecode >> stream xŚ­YYsŪČ~ׯą#Y6ĒsįŹUåŲR¢­-kc«ņ²Žˆ„DTH@ €–µæ>}Ģ ’’ņęģ™īéžś€\Ü-äāgæ>{w”¢…’"“™Z\ß.2+2eqj„2éāz»ųuÆ~»žéŻ…M‡ ,P1”%jµVRŹå/ŸĻY„fłžó姬ÖĘ@“?_Ī?\_^}ĀŽ]^]šąž\}ęįoŽøń«ēÜŗXé4̼¼ø8’|žéśņż*µK¢W;“ŽŸ)3kwɵ‰DG|Õ|ӕߐjD£e[Ą@]ń 7«u?³-öEWlG3·ućfĖ•Zv-·7õįÖ±Z[›.ÆwnÕ·U/óż±p+ė[&—ļ÷,ÕH¤Šķ4õbĶ·õńf_šŹ1oĄ’Œ•_čØw»¼cśÅ÷²ķxŠu;"Ұ±6[¬•|‰‚ćﮬŖ²ŗƒNf–yµåFĮ K×ē÷ea&(2ģaāā¼q£ł±«yWn€ėGjŠMŻl GößćqV :Y–x>»&ßgē×gæŸ!’r”Ö&B%jƃgŚ,6‡³_“‹-Lž“Ādé⁖FčÄ@kæųrö/¶€ń‰6’ĀZK“mł\`ię ”:Óį±@H3h)’$~H¦°Źü"„įyć _„2³<(‘Ŗ poYC,J=bqfÓķ=«H°xK0uįØ&H*‹"T%hY, ((ƃ°JGĖ/`S@5Ģ$Ńņ²Ś@Ö(T±¢ZA£ćŅ=l|<±ąß+R±2iē8ƒ;čX¤2ę;\U V™eŻš÷@¦l•AĪ€ŃF=ibĖĀVŽøUM‘oyY)—UŁ•ł¾ü£ŲŗŻµ§āNĀķ¼åńM]µÜ„kQ|96×ū¼mƝµŃÓ;抧Ų І- <±lwdƒ0”»]%? ®%‰ćUĀq8N©å°Ō8)žøIqĄ‡dmy(÷yćAb$G8äˆ5nrĄĆ‚+·EćW7šķŠ3S7p•Ā~•‘,ĝx Ŗ$Õ2ēŃį…ŻnzuŗĶ‘å¹Ļ;Ö·é“tŒł ަĮks§=Zn1ōÓi4h˜7nGSÓ%·ĒMēŻv…›tĒ6ż‘Tpµ æ ˜y¤ČY°-w.ąl3^9xž9NņŠļݱ?T€9ØKĖußēŒ2qŠZhŠßeSø½į®-.iĖ»ź”ĒYźĘæŽ]‚?Œ¢†>z˜ø ’ ķ#!ĒR”œdé«4օKńf5ˆ7ņ«ž:'=x“Yæäy˜”¶"‰_÷īŻ,- ĒÅ/ÓRįš»ÅŚ ćx,ģė]‰.&x²*A½ 3Č9āĄį¢j¤Ųń`óD6ćŖ>Ęś.¾!#$ ńĢŻĻF]Ä/=^™Wœyl{w»Ž“d_GluŽį]}Ü»±{•ŠmĮš:Ų© {Éaė“5U3n'ę: ĄĢķcˆ>ŅčYƅpӄp’Ÿ5R~ „`-iŽĪ‘¬°qō.")„yÖAøq’C|.1EŠ}5G‘6ōŪćM Hįø÷± ŻūKp3EH ĀsG8 ’ŒE”š‘£:øč’yhlgDŚaĄžx ƒšõŽŪ§ī0;õŽžš;ē»yæ·ź!dżHNĆå =Čė3™Žlųń5€ż8Ą|ü€łų#³£€å޽Ž>J)”zńēy|„ōĄfŁ>ģ„į¤ž${ģĆĪ)ģˌIō 6! éaj^śe¤qÆĻh^/#©ń0_¢Ėz“ĆvUwÜdāhĖ›MQl‹­Ÿó—Cń÷p€ć!>`{`§pp­b9S4ĘŃĒSx8€Ćr›‡)ĮaBpø¶2„‚T6ĪÄ'Ż š„›ž ­T¬AŁćgį#F›§ ļØō2 xRTÜ jf‚aw?¼¤Ć׌üŅ·²>¶Œ¬.q7)’iiĮ•ro:K!X§÷ʦó/čs˜ŹŻą‰„$KĒń(ļiy?Ā~ļŸŹ18Ž~T- ˜ŸAŹ2tŃ|攀ß1ĄQłÉŲ?уJ÷ %؛Œ“$ģ÷Õ'œÜÓ½9ÉiycS€ [ŗ¶c},u Ü'„ūpFl™;H»("Āč–æœ†Ā!_„²ÅT¤øÅ夼šc &>ōƒL qīOąä\ćĖą8Óź3hz(»·ø”€»6n9åljééŗgHĢ],qÉņxuxŚP'˜yØńÅę*™ŽzĖęŠWåÖ*‘N|xŠOˆa˜ĖÆ(,åļ>×µlƒo¹ćŃĪļ˜×h“ŗŠ6N-˜$Õ“§qdyóR-¢1šłīģWl2 öśŖäe’N\”ÕZhmžZžĢ©Z Ż×œž§ą‰› —o;°Sģ¶ģŽyė:›ęˆ Äž1ä}]”ćˆŃ…ZdKˆ ĆŖ±EÜb8¤ģƒŖ!6žz€ƒx”bó4ZzŗQ­“†¬½å™mĶ_vŒŠ˜`9ŒtnIļ2S"T½›²ņ·ĀhČŅ6ü(<…øƒv‰ķ"÷öØ'X¬‡Xģ/1Ć×­Ū$XŹj6›å®Č]ÕÅNcjhäīŗĻÖNµÆF®vśž Ÿ_Ž7÷M}×äW)m}Ŕæļ‰-£ŲÅ`ɕŁz¹DśŽ×TųŽwEÕ'śÅ÷=wĄĆń’£ŪįĖo£ż0|ó†bAæ=Vį_‹ æB‚XØ2C-ˆɐŖ±t/@K}¦šU,2“Œ‘łņöD¼Ŗm@‹BÕŁ\šŠÆ”ņhy'ų† ;ų/ƒŹ»Š¾mĄŲØå•ĶFü86Ŗ.C$zē)ĢžFH!¼ė6œ*.Hłā’„ÕōŁ@’č˜a•o6€ēS#R ¤¾=‘^I™ü?æµl’ŗśH’yŸśĒīs°„‚a§)–WžĆų’¶Ń?Ųt(ü}Aƒ;b©×<ĄYU^Ż“SŸ»×3øo:Į¶ŲģįRƒØ¦pė Ķū}(VŒÜø”žßTĆ4¼ńN,%"ī÷ɲJxkRÓ9B߅×~ęi wģ3.“̤äRF½gWQķщ™aN>ŸÅf}²śj„ńEžŽ›'\’±>K1Ų’Ņ3!¼ †_±ßb°7CŃ~é` Dø‘éiy7€mōLžžpčP‰N3ĻĄ_€ÕżęcXģž6o£öFZV›żqėo’{ M”S=UĻvӔĪ)o9Ķ#„Ķz_Aƒ„Qf›.?¹ø†Ö0ųgü³hž™‡snĖī˜÷ŌŠ gygTg{˜ČŅŻv%™ž[÷™­Ks#ŅsÅ«óė³’fVČ endstream endobj 294 0 obj << /Length 2433 /Filter /FlateDecode >> stream xŚ„YKsÜ6¾ėWšČ±4A€Æģśąu­²IU֕²nŽ3b™ zä×o?9¢l){Ń  Ń螊żņƒć;?_üėöāśF%Žš½ŌO…s»wRå„B9Q"=!ē¶p¾øĀ‹6[įū¾ūé~$®īŖ6+t±ŁJ)ŻOĒĶ–„ŁŠv=Ź”›5įü}³I”;6łP¶MæłzūėõēKŖ ņĀ ‹hµĒ\ųĘDūūļŪ‹?/|śŽ˜Œ Ļ—“×_¾śN}æ:¾'ÓÄy ‘µ£¤š é;•ółā÷¹ŠŠB:* =†ßS£ÓĄSqbtœ[vžKN Å|‡B†^ '’ŅS~Čū¼oKćA}ŸUų”_6»¬¹ā#n}µę8”¤ØĄ:īśš7› vG@;ˆNģj Ūq»·Ś mb_ Fvč¹+kLšxD¼A–,7øMüv¶Bz”JŁž¢w•f…ļWw`¦m`Ķ06ē~Fn֕٤˜™ō~hWøbÖÓ&‘īL{«ačöWg6…üŻ·7yŒl”åŚÄł˜uY­ŻżĶż˜Æ·”ÓYÅĪ8_8‹…-l+ļßš‡ąP6MŁę VīĻɆŒ’–¦O«žō$¬ü¢+LßsĖ’ĒŖ­Fə­Ɯ³oaøJ”ó F’Š:ƒį}‹ńīŲ,L°é){”ļĮB†…QØę 1ćEŹŚłĻµ5a%™NC«ķņņ%D(¦Å/Ēi£¼­ćšū°óx˜cqłžuüõ„üśīž¬Ćh83(o)7|\F½Ļ54üįūWO_ъģ’é}&{=ĘÖ·õ?}©·ā+k1Ž®ė·ą[ŪJa«Ź³ą¾ęōŽpśŸ­ø7ä‚xƂ'«š¢4ü;UžŁ@"ŒŽ@6„ąlkQ Ģ臊<¼Į›ņ0v&)ˆŸ6[„B÷gŻč®ĢĶγśhӆ=L7ūqwģŚ$^“²ŚyśÓf,ų‰+Õģmf9ŪX1‚²”ŇÄA–=”ĆčIÓ©ŠP‘A1… MLś'QwkːÉų‘ĖU³ķūrW=ń°}×Ö<5cĮd?6ŗr@‰]•Ž`µn»”˚86šīĄ= ŪX“¼a*=°„̚Öd‘¬Ŗ(ƒ>$į÷ŒŚBUńh¾ˆ¼TĘ $†³’[2&¢Ē”­ėŽq[2Œ ž57 žq8ü²]4‘¢†»iä ±łœX¬Öq)”…Ó¹|Z;I įśó`¢īN÷fŃ|`³5Ę,Ü’V*ß Ļ³Ę üL„?¶Vų10ą‰ė?®Y Ą“ĀŽĄ(‡ÅlJ†>Ō҆W«³oV -v%|pŁ™*>ÉČßóASŅ –uĖ Xż|\N+ōš¦xp4ÓĄ‚‘ż$$BŹĢOę¼2?mWgŲx2䎘Zī€D×éū²{ۚļž¹^=c”ė~¢ƒō;Ļ(ĒåÖ*ļt“ÕĀs<;1s®ĢcTąŽGü5©ŚĘ™x”„"OGčūtkˆ¹VĄĒ:~ä9†‘|jrsµĮĪz†/ø9ś¤%H«źn»–€ŸŅE&b bR^뚿2“'H” ÕõƒņĻ®4y5ÖżŽnÉµŅżÉ)hŪŻ]ńŠį®4 bīź÷mWg}˜ŗ(nE'.U0Odßd#īĄ°• Ѽ –H39\A¬`;ŽŗÉM'jŸŸ*5„ ĆF&rKO{ōBŠÕ>›|:?ŲĀŻa7Źļ1Žji ՈÅęjĶģv’ł 䔭šn¼–$‚ĄńÄ :]gzåĒxš¶ l„t‘Š€`ż²g9mGłXŃj†lŪeŻĖ`\14ˆUL‰jXO¼2™xō]VšŖl­.x™lMwā?šw‘57¤^"’S²¤d¤Hųį DT„䛳 5)+Į¦ĒŖą&UHVKŹ]*ņlģĢų›ńĻ@§Ņj«”ć–łĄŖ)>‘:Y’84§ †²}k+3ĮŲŽ_ÉL§[>åžÖvŚ>Z Ų^¬°¦i÷ö”Ŗƒda¦Ue?ŲI6ƒ~Ö§ļWöF™z&±#€š…a€‘ó Vś"æ™‰ Ä73)ęofqHof$“ofqh’#|ÜlŅļ?˜ĮRAģ…öyīC@Rģ`_ZP/9!(Ź>ūžĮʉüąV1āo•g1=ąŒ³ŒŻ=4u}z=BaąęG¼ ^^‚ ķõń<Ģ1™5™˜Z8¦3‹ s–yäRž`‹”ū8vę,÷f‘E0fākÜ,J@Ø]ęž=`%!*…Č}Ø*3 Čč]­qŽZ;=€bĈ±(®Å@&ø &¢FjxŸO.õ=‹øGaG.OŹŚÅS«]Ø3ŖĪY,f]џx)v8ŗ[ŪKF[L˜”Ą’£ĖΈ¦Õ›¢ē^¢bŲ·›N>H­p^ž±=OØąāŲī‡Õ€ ½dzNČģS źXeŒ*õ‚Ó²yqÉĒ®ć$&•Ö$ž™yi®¤3^Œ+a,N©Ī©Äw5įfŚ•čīō±ŹrB& ²L…&f&_“PdĖćzmQ‚.£–'{÷8ŅKO02?ʁ{ §æµH^pµż”PØÉEŅŠ S‹bāĮä P¹āEĘeČBńüšßĻæš×GžŠY‡Ą">(ž&Ą‰»ćÆŖÜq}Å7ŠW€ĖņIӂēŃĢŁ ¶N¼µ5ÕÓ“õc®ÖŹ,ÆBœk~7m³g…³ƒ¦ģ—Ył,dҧ’F˜ģ-­_-Ū‰ixS¬*„+E8±«nõ”4X<ŲįŁ÷ Š=”=ń8r+}(‡‚avóŃbnü”|9#K¾€+å/O4“ĶØēQœ ”¢c’ŚDÅ \H×õ¬9P‚RØR’B£8™Ćō¢ģčvŠĀv ü°œ¹ć³ōµJpv‘ #Œ]Łŗ—EĮ·AQ€wć'Šm~ ‡‡>Ø«fćÜsŗĶEĮģĮG~+ę*TŲn;TĢnŠ‘Ń,ŽÕ­>_<ܵę²f™Īō AU¦…„g Œ-ī£żœsEĆ'ā¾uæüwгbø++,‡ƒ-§’ IJ€Q^Āõ‚žƒā½ō?»’Q9n endstream endobj 302 0 obj << /Length 2127 /Filter /FlateDecode >> stream xŚŻYKsŪ8¾ūWšHÅ ąkvsČ&vŹSSńlĘUsp| EHbV$= ŁłõŪhQ¦ĖćĆÖ^Dl4śłubŽĀcާ£]œńČć,ČXƽ˹—É ćŅ‹Sp‘z—…w姓ėĖ_OĪdŗM(€€ĒĄĘšÉ”3Ęüßæœž>I…’žĖłēO“©0¤Ē§.Ļ/>ć‹ō/Īhņ=.¾Šō‡ćc;ńń”Fg“0ķæ"¾mX&A,c°°dŁ÷{Sdõ=_}e#‹”uGÓõŪź-¹ičOeA’¦ĪO''–|&žzĀż 7“)ü*M<›9єu”nįKź+Õ舮„Oy]-Q$ #ÅP§)ēĮļ1č~Æčy;*3 bæDfgķ>TŽüē0+éZsA!"@JWŖSś„Žž!̐¢ßp\’P ÷·A?Ų~@zܐoe]—õ‚ę(-¤?Ē“©g]ŁŌ4AŁÓ˜%ÅżøAdp*†µĖÕŠKeąkĒ]n7}GöQį-×į»Ü†–ĶU­sLņū>uO=Jł•qé"¬µy=+qV韫es£ÓłLT 0`§ō"‘Iü„]"zČ8dVQL»65b"˜ ćjÜX! ā]Sµ]īĢr£ÆŸķ¾|Š€\†Ķ›ūC\UØŁ*×Öä9ÄŌxę»]Č[KÉ}Ł7&ķŻV!Ś®19/yMW±ōRįĖ `EŁõ7“رHüs» ŲŁH‹Œ¤oń‡ĒN‚ŠJ: Ā- F2Ż”Œż‹JeŅh‡“5=ß¼ųmśĘėNŁeŸĄłśŽ^¬ķćŪ?š™)Żåī„wŃ@fŪ‰ŒßµĶžb=Ćlą‚Ґć?.©„5Äö=™@Ł"ĄR˜°`Ń Ą„Mmr FåœH 2ųĪՊŪŅ[Tx5z @#‚”Ž¢“;¬ŹZåQ¼yīŪ>½ÅćAļ5ĶxP³Čę,© QLęĄ˜Š¶1'”F(Ŗbō=Ų«š…Ŗa6, |ʑVż5jG3hdį W·³|EWĢ„¤{I¢-ƒ¢8s°H_{2ķŹNk'śˆÅČH£‡ųƒo­2’élÆw4ßĢĒĄR@é‹evH„̲žkŃ`sŖEw"įĄzų×KŪTj³Ģ]ĖjŃĒ`»éßśšCé&0\xd"Y-1łķ¦Š(Õ9ŖčōęBį•wY¦!ŲŃ„Ć×¾cć~;^< ±bżµÖ¼*ė13„būZ‹Ę/čWö`Ś*æe½ėūŚłųB`žp s`cžI°?Aäz±v0†Ąf ø€ģdʧ ŗŲ‘?c’ żÓt· endstream endobj 308 0 obj << /Length 3718 /Filter /FlateDecode >> stream xŚŻ[K“ć¶¾ūWĢ‘SkŃ€D֛*ĒY§6•ņ<•‹ćG¢fhK¢BRŽ’śō A (M6©Źć$F??@ŁĶĆMvó§/žp÷ÅWß©ņFd©Ķ¬ø¹ŪŽX•Z”nL™§"/oī67?&"5·+‘eYņń×[Y&u·k«M½¹]åyž|<Ž®Ø±Ś®Ē6•T‡[‘lųł»ŪR%§ĆzhŚCūÓŻŸæśNčpJ%MŖ„Žh6‹c¾Č‹7+ß½ŹuZ̓Ŗƒ›}SwĶÆ·Z'ÕŠ0sÜĪm»SŻó{Õ¹Žö~ؚCķ˜[OM?ŌütąŸšį‘Ÿ†Ē¶Æy`»eÖµY— &čõ¬o«ūč „L³ÜŖÖė¶Ū4‡7GĖ ŽĮfćøi†¦&r7+©ĖT)ƒi¦,Ś7‡æe:ć ev6”’zœń-lŸ)’ūoB§ŅŽĀ‚¶³(“wüóc”¼HKQŽäcdĖTĄƒń&F„żĒ›ĢĆ!E*²€µ,ž¤L~Ž’ĖS›Ū3žęäf<¹ĻcK„¦”~ÄϱÕēĮ~’›Œ¬¼‹‘ЩңbIg¤ö÷r_=-m~!R)äė7æųoŁü9‘Łęæ‰ķÜČĻKrž_҉«*”'•ˆ1jŅ܌Zó»‘U^¢7’Ī—8÷X“§“6éź]žÜQ–¬«Ć”øė±Żmų©Łro ¾²ī¢¬ą¶K{QOlšėqDŪ-˜u./źI™Źb”JÓ;žĄ5 uh†śKf“9šļ§ĒfŽõ‘Ē­+Xvı Q¤…'Ž‚Æ:ö<-ss¾‚3Rį ¶`·QBŪFBŻ€=nÓqČˤUܬ€žö!ĄE?ć¢_‘Pøƒåķ+\ä3æōC³Ūńć=Ēj~łDńŅwmjY½IoWJÉäĆą¾~lO¼ķgŸƒZŌ®}x¬’äz7MWSĢÆ<żčēuē£)­-›/*jaD6©Óā†( £B9Ę¢6x°¢¼ŗ% æÅH깩w®…ģ×juāćó¹Ī“fŚ\Ń|;9·wQŗ©‘łĶ·åČą™x™ÓõA$'ČĘvCĻ\o»vϽ¼W³ Fr×\n‚ ķūęį°G’$=ņˆL“e.»+rłX{8Kg‚ėŚĘÖiķ,Zż{}ōY¢śhŅrŹNs4\ā°~ŖöĒ»Œp C5Ō{/Ų0;õæ/4¬ Óąb-øŚÜ¹¦-Sư]-$mf Ę_G@¦BŽ¢øē€D×Ģņ;—ģ¾uėŁłōuĶ ®’žm42ˆRƒ„Š9Ū“āgÉ6īįT™ź‰ń}WVŸéū‹„yyq’lZeٶå‹4PA6a‹ĢEQ©r¶V»ŲU'“–bd0ģėWs}6É‹ČtēɆāp:gœ¹Č<×æĪżjić äøP”o0;mFĘ×ĘUZK×G9å3Ęß}¾œĢgČ ŹNĢ@hɆ.ZBöQųh©‰*)/ĻŸŗ ģ²XģE>•0̧½$j…¹¦­ņźt ]0Æp:poEV`^×Õ`¶nåĆ#&HJ’)ļ¹ Ü²“ x~ÆXŲx (Ųę“$1&4‘śµ AŲxĻIķˆĶĄ”óHB÷¤rĖ<ØĢm4l`šEį–W3Œ$7•6YŌu‘38“6Oŗ2oć4Ju9š°nUīŽÉywxĮ„O Ŗ]ßr“ĆZzĪűo!3R`„™¾*H÷ssĶ}Ź4/®fF`…f…Ńł0K œŅ-ąˆä\[„†”%;S‚Ŗ{8y%Ć8“I—’f"Ł7Oµ{ōÄ ĒżŖZ®śF…#!Žą6;&"½BRG”¾Y7÷€öĢ2Ē"ēĒGՌ$«£¢‚-X ³iŻ¢ķąSĻ­ä$m6ņ0Žo÷˜yIŪSā%­³|Ų·Ōµ9ķN=·0:…w5Z*¶U`³Ļ6ō,Dzhą ŌēKģ±Ž,ĪŪØæ> 8ŒWóXC @ŽóLüŗƒ7z˜eō00ĒŖ‘松ŌOC}Ų° !_8Ö-V%Ē®=V#5ņq:4?Õ<ŗ=Ō«¾‰ÜažĘÅĪŽ³æēõė§cu r߯£Ė‰ī»źĄµ  ‡ź§Uø&N•FöĀģ ‘²±æ/ł›% T:ͳ1awƒ— ±xU"”ųĶĻ)vn°ym·™gę¹OkAžė]z]&D-a põĄ¦rTō>Ęm‘Į£—ģ’Ž Q“ w©'nc„R`яpÉ-•Ŗ1zw*®kņ }»w¬73Ó®¹{蚇 «!Šcxg«ĮĪi±DąqŠnīėæōƒ›o×:y:ŠVää¢r¦X:ŖĀŗB8ūhÉd7U÷Ģ­nåĶčń ’…p 5mŚ=xŌģ’½o| ę z7ÅÜcĆQ:¢¤GvĪg n*VÄ[ō5śP£'ļjTņĶ?žeõ-·Ä m3°hŽäApA°ĪLL9ŹP}>¶Åł`]ńā=)Q5 ©±/b`³¤óūöūÓ>Šāé°\u„?Q…x7åw—Y ū čBkqK›ŠrĀhÉ!Ą@¾Õ­FœĒĒdÄ Ļbņ±źŖ}=€µĄ µ = %Ńɵ yŖ0 x T?ĀG×ņįżū÷2ͦŸ Ī6e”0!©"¶¢ŹŃ/+¶IŗQÆ6=Å8CųŠZ= 0ø€¢ēR„5vfEÓ\\ĘgC8‹'¤ |żčą:W°A+ZRI›…½®’eøÕ°?K劤ŻÕ÷ _0ČI;ū?’6%ž&@¦`}2%€ŒÕE"…½r0c„y!: éB¾£w蜁_^Ģq“\¤2ׯ+ļķE4A;«cć%T—y*¬œ›ēhdHﮃj˜¼DGąZlÆfõ^ćRG‚¹ZŠģҦ„čV@%õ5“H„ņÄe1iČ+Ą5Ć<„lęŪ’jųk:ćʕ>€?ĀĄuK›Ŗéy„™HJ”“6ŗxĻ†ŒW‡3Ūń«)š^FģģE+#”Ć~uÖ,”Š^oVeńņL›([Pbk]@x°ŸĆut+g@½FįŠ• 6g‡@‹.÷?+żÆ_)ż^1…±@ēņŅA¦,%X"N ”4^aŪ4$ĖTÖA݆Ź3­Ü±£ū›zįąN§ÖŹ+øvxŅC„‡ņe=¦ōŌP¼rŗ½‹V’%ø½"æ}«é:GϼWn2XĀP§>Ļ8ė8pŽ„°’:ŚhR“yéŽgŽ҈\=Ō‡ŗ«v;‡žåŖL%Ģ1G~ččO/Śżń4ų;9wxaØĀ`óŒēV|8ƒ‡TœĮA|2ė&ŒĀ’÷·ŗk¹œ&µ¹/f‹ ˜Uģwš1nVfRČƒ.a"”żS•Ŗ™Ż³øF>Å­lŹ®c‘Ļq‡#J»ń[e™Sį82ŁLa²™ox^:§œƒį„B‹,ŲxÜŌŪś×p £ßžGLµ ļA™Į¹•”Øćł\Ļ"Ē›‘Å‚kµ£p7ķé~W/”!rŗb1/1qĖŹäCŌѰš©z}Z84˜ŠE\2¤É”~kq„ń”IŪiõār= „ĮWPĄ TéąKģ„Ū”(éœŲ×Gž˜·€¢FŸÕ?TČg^ļ£_"ŌdK9¬½~rXęĮóĄž9K‚O‰ķ•ņ]Fš ķ%»īk@čc?²ź#?]D§v“ဠév2ŲnįōąTeR5Ż7[×M4‚Œ)8•^¤3}J0ŽōéĀĢa :{¶GĖĄ~6!»ĶŅ4ঃC:” ņß"ÕÕŠ€ūĘ-„hA 9sz“æĶؚ÷Ņ1ē¢m*”øh:¼&zb ćø@„=ķ_įuO|'¬LW’C« 6Ųńßy×{„L>ƒė¬„Té/H ŗ 1z”šĮ lŁUe!R…Wgš8ž`gśł…Ź*7Ł…dčöįŠüęʃgtł NƓ8å>Ŗķ4jē\Ć.Ł‘ļØz3źķšįĶ©/§V<ü,Ń9,¹gēC äīB ~śā vĘōĮ!ѕ›³FHzŗŪģėH(wyŽ„īJ«“ońĒŠqĪxIĆ_`Ćžžt<īžy“5Ļ!lóČ0^j'_ŗ>ķŖŽ‰øó n·k»ł·Ń¤}ä?8•č¶˜<-™ʂ“5?/DĄś‹Vš:6PP"Čm”ć µ†–ę°ŽXį­Šg6Ź ĖÆ.DBHJ³Ń:ƒ“3?:Z“€ŗ}ŗäāȧėć1Z­*DWü"ƒ;|“Ī~:ō7ēgĢĪīH»5f‘{Æ$$hjO?l9UI’ ʵļ]·ū’g-hV­|ŹńŅϐĢĖWäy:Żæļj8–jńĀ„†Ę1ĆW1µņēķųY³«P„·+ĶžĪ™ŒÆ°„Ā覛LtHNKŅ=’}ķüjō,ƒ‚t\Ē›7Ń ś_œĒĄbåT˜ą Æé–׋0hĢ,‘>v”>­Ę©ŌéņÜŅ³Óƒ öäę…+NPŸ„Yö*«€˜e&4)õ‘Z„Fīß쑇ūęįŌŅén!‚«f|”m»ę—ń żełnS¤£üśwü[½y½é„ 8¢ń#āā„ˆŸ¤jGłou#Ö]ߐ…‹²ų€ł|³#KOžØWFUšŗö·qfŖĪ±JĢj9œgĮŅĖiPźł’£ŠĒhž āŻķĒ~¤qŸ8*Hw#rN¼kܙ¾5ī{š³ūŽCG“üÜŖšśŁ²–HžO±–¼øUųžī‹ › endstream endobj 318 0 obj << /Length 2670 /Filter /FlateDecode >> stream xŚĖrćøń>_”#Ukqų~½åTj¼å(¹$9Ą$$”–"ŪŸ~¤4œŖœ4Fæ 6ĒM°łżĖ_ö_¾>…é& ü2(ĆĶž°)æ “MVÄ~›}½ł—Ū’ģ’śõ))–˜1`„Šaœķ. ‚Ąūćõńm{÷ÆĻßßīā†üłūćĆžłå;Nļ剁üyyešĆoæ üåŪ#ž¶Q1­{~zz|}ü¾¾ß‰Gō€µ/\čö6»0óüÜģāŌ/²”Y½ļXyļHYóų¤¶QīżX@L[›J ŗę©zŪī`±C F»ƒ…0ņTÓ0F?¾ŁnL«…~Knū»NBØĢņećY·dćyūg|°`Ÿ;˜å^½ĆkÓõŹ8‡oģ§IÉ×3’Ā„ĪsƳųEę̠ޚOĪ·°M§j]ūŪ]’¦Žž¤ߜ/ ^$ō†\lGŒTŗ­f:¦ēµ”ćy­«F¹ÅĮŃjd£jxįĒ6Åką‡D… ę=x±€Æ$ ;Œ-­k'=…{ŅčZļ;ž'50P3–†¬mK\Ų©ĘF!]GŠ %Õ8ZVW­I˜€ą8ą›į@]Hė±÷öŠŁŻņN)ĆŲ‚-üĮ5Šp‚ؐų‚ÄS®ŖĆCx%öó'ݐp4|6{cŪźJ÷=ˆŌ၂d•ƒsښw˜VUÕh#A?ł“ģ¬9ÕŹUf;G€Ėƒ>SŁäz)ü^a6+CB‡……&a]4Š!¤F¶“–Žtz‡(gõ]3ĪūÉjęć.Źtŗ A• :«į“Ŗ +†-2ĖѶĮĻØÅ$'š¹#Ģ ¼ŻŁAµčcč%~‚36  ó˜Ź’»tŠĻ3 ̄ŖAöąE II1k’–ŪłüƛÄ)0Qƒnģ'Ckō÷X[Ń4‰įŽ”Ķp«< ½—Ć(“DāÄmčcY:ėį$1FŽ=` !ŠģøØhÓWü“ Ge~£żØĢfAš”Ä…˜ŗqŃMņna¬ˆ&^ŒCò/FÅšĪž õLLØĀåŗA ƒœ×4 ųId ü5łĆq»(yį VƒĀH–Ž+X–¶n]&PŪcā9-ĢhąĪ!¹Éš”ć‰' ¹”€…–ŖÕeŽpør‚ļPK!%Ķų•v»·Aė+Bē²hÓQˆ€ap2G¾J‚ZĆjvG÷ŒTˆ…ĘD;ŲīĢp– ŠÕfÆ¢-ģ̆·”_mŗ±€8ń×ų­SGŗhŠ¢‘pČcŒØ | Ŗ9Õr6vH‡ˆ¢Ö+tu׌”ÜAh”,ž¹ø ė€No»† ®”ćc–Ā®ż4/n”ĻPDs[›ĢŽ2G”Äćš«Ś£ĢoĀÖ/µ;€ŃNÉÓÖ`£ä>±ø ^9»vītj‡µo{Wä§kw+‘g’r$ū” ~¾[הq–zOęČOLYāÅ ®zĶĆéŌliU¼¦Ü6Ó4c?P$B{ƒdņ|p”ø+Ć1ĒQ“©ūé0¦2•z.5ČÖNČ©ö×/q“” ’O†‚1°cąœ-`Ņźć"µĢŽŽųźĀY€sŲKx ·ŗOsó«#¬óXyפuqŲ£?t5ŽööSŌē·”›w7˜÷Sƒ‹Gh=)}'åXŁńCŗŖƒėŚd k(ŠGCÉōĢM•>ģĢŚōƒržÄÄåā"/į”ßīśE;÷Ė[å„×É^;½ę„;$/¹čTāõĆõö 1’eĻh„+¹\ǁ{•¢')Ü}[c ņĮ'›ę.x—BŪņģøĄ*õē HJG§<’’„=AĄ ‹Ć5CܓŹŃqA_É*æĮ`­(Eųub€Ä ąEĖ3O§—Ō%pĻ\„ĶfMāż©7Xä (ŖßOzŽbe“rźÓ—/‰ivÓØ/ĻwŽ3#ĖīEuÕh5ø‘+špÖźw\Zp…"I(üą¢ Æ™0œd¹¼5 č Š_μ$OX›ė±·š1»v­€‰ĆČ’ü’Ø`(ģą>‚ø,ž„¼T€qła™] [zްŚĶ}I6=źėVļ&ŃfSi Gq“.ןŒ"zĶÜσģ¶j•‡Ö^C#5W=²ĻČ·Ē÷)‰ó0;c™ø¢ÉVHšQį¹÷ĒS'æyčōŽ_e(¦BźbŸ†Į;Ŗ½yŹŃīk`'Z”÷a&ć^|”|Ķ@ŃfŠ„€ām%…B„Ź>ä_żårßĒż—’īŽ}Ś endstream endobj 202 0 obj << /Type /ObjStm /N 100 /First 902 /Length 2546 /Filter /FlateDecode >> stream xڽ[]o·}ß_ĮĒö…Kņ~ŒI §Z H¤­įŪQ£†TČ2žūžĆ„­åÕ¬å?Čäģpīܹßē’Ī­†ФEBITq4XUŒjęč”ĒzēŲBĪR0é!—ŠIĶeWrŁŒæ”½s"!7.„ÜŻ11>Ą žŠrRĮDćĻ-ć?¹‡ā†I?µ×])9”.|¢I• 2ˆ "Š'Šц/)ı°”¤:æOµ‚‚Å]y«cŅ|WĢ‚¦†5„%/ųE^ˆ÷©óĶRƒVēkz"Į,QZų³Lqi&”؛šīŠJ0£Ä”ł¢¬9'<%Nj𬜓ą„q҃+[ n^(’ą5qR‚7…œM‚wrh:"‡PPĶixµ¤æŖą·ąū«UŽŹ”ÖDіPø+.ŅÅ'»†–©AhdŖ@UM^ź꧊jĶĮ‚`čšsÅĒCå İ®…ÖČwŤS"ŠRO­ļ ¤Ū©Ah«ó ÆģBN`]”‚7uƓśėUZ½A*™#M 7†4ķ-ķ`!§\ųŒ+Qrf”“Š:gF#ė‰3šAÅÄaßō0uI` ö„7wĪxBe˜]ļœAp’ų©“[Xf4%xDĻoÉY;gŽ™Aī’¹ŽŸ"š¤œ Dč™šČŠĖ²{ņd·vuyž< ūg|Œ¤š/ųõåö„ńÅóOćm‡ 廽ÓégóBø¬‹Æ¾Śķææ¾zżćÅMxöß?}ö?]üv^ģp‹Lüōæ’^ąĘĖ_/vūoĮŠÅåĶ;H}0³Ū’pńīźżõė‹wĆuĘOæųåĶĖo®~ Ļ~pų|ķå^óņĻ">ĢGæ¾¼¼©ē#І˜Ćhsō9Ö9¶9öƘÓóĖ'½<éåI/OzyŅĖ“^žōʤW&½2é•IÆLzeŅ+“^9Šū@dćūvūßæŗ×{słŸŻž›«ė_.®‡hņ‹ż_öŻūœÆK/(Ģ׊B—ŲĮ™ēcŽ”Ųapˆ\±ŲƇMüöß]żtöOߎįĮ7W—1’™ ]… u,°H;‰.Õ+FDšT¢{ž8ļ_żĪÉ&¼Ō;Ć£k¤—Y+Ńz]ę„lĄ‹„ŲĮb#Ü> $G]ęE6ąERD÷”"Óõ ©čœ`¬p/I- ‚Įh5ł2/¶>/ČČё]!&ęEe™߀X®1‡3+,Ģ2/u^`¹Ęōh…–‹¹ĢKŪ€X.Žid=¤0Żle™—¾/3Ž œ( Bš T”:āo~0ŽnW¤ÖČZIK–"­ÅīmI"e‹x+V㨄õąAā £,ó²…\¤Ā2ņɬʓ!ž.³"ėJRĖ€Ø°YŌlHĢŚÉ11ģ¢yōLdˆv‹Q_¶°äeźD"±J5¤eYfe3”©¢ģ—*#Ę!ÖõeV¶ŠP×’:’>įĄ^ܗyŁ /£ÄF^.#’ H VRYfÅV÷ž\QĘ¢@‹Ä³™™°=ģ>ŗ>Ņi¢AŠG3%ķ1ūĆĮ~ƒ EćPG`Ļ‚”Óc½mįýÓ8‰‘āĖL~ŗĢÉ.Ģ8Ś,m”Ģ5/sräĮOĆs6°ÜżĒ?’†Ś5x÷f.ßæ}ūāäZ=¬u|čŃŚ;ˆüj³…ō;æ‹Õļ€šĒBmó{PŪō±P»LČ+ĀŹ„°2!±ÜޟX'$Ö ‰uBbX'$ÖIO'=ōtŅÓIĻ&=›ōlŅ3ŁB+°™b éVƒ#4µ½|ƒāߋFg )š-3ŽyŃĶ} 7÷„č‘ @@eƒĆßkĻ˼l”äQ@J °8ż2+[ hBgŲŖZ‘Ų„Ŗœ”¢õS“”Lš‘Ŗa¼p`Są’ōp‚¬[ yH„„jžƒ1(©ÖE”X·0ZķĢŅĄȏīQbjh˼”-|‚Ś%²ƒ«ČOµäe^Ö"ŖKwvŌ‘³Ė0ŽŅo[`xXFņ>Ā·‰»ŚbĶŻ6±”T£Ä{bÕV‘²ĢĖˆ–‘²ĆjÓš A‰U“-ó²A|Gˆ%j†n]v u™— °‘{gρ®s÷ĆŁ§;CGėƒdįŃ cs[¹=(`1ūƒŌ7@gŻRhǐŒŁŹŽ“$‘¾ –Æ-6ÆÜOƒżÆX—ūO}0o=rg6×įĢŠ…č2+[€yĘFŲJœTŒ…+`ģ*Ņa‰Ły°äØqŒ.NnńqŸÓ>oWƦ{PĆŪc”†Ķ’ßgÉļ³ä÷Yņū„>!„OįBųgīŖazG‘Š"\zL4rQ%#"r³DNfˆ×on.āw×?æL+¦Mīē +Ąé3ų€æ%šĮvs;µ#°~»y“y0(#ó¤DމĒ"€¼}±f¦(’Į2¦pü .VLL _īl-'AøAI7z!m4v“Ų—j i†a°Æģ9ś€EPĻĄ+5J«_ µŽH—ŲIE~ačA" wƏc;‰ÖĒ!„ć«Q©Ü²!ŠŠ…×g°±¢·²‰ĖlŽŚx=”G)Ź.U?æR`č÷~~GźhķģH±¾ō8k­ČŲ€=gmfqXśz®£\“6NkŻžW1^Ü0&uż¼”ÕZ›²ŖÆŁ…āĘ3ERńŌąĒEoŸē©“ŚĪ7œ£µ#z ׳§×§”õ¶åbž˜źļXČcÜŚ=7¬‚Ū¬=ŚŖķFī WD,˜eI£ó<¤Ć ?ŖéæłõżõÅŖõ;°»©µsg‡g¢»äĢīy¾or­žorGkgüI9:“ĪŚŒJØ~×Ή?GyŒŽ-ņ®­£Ję®÷Ģóp6oŁ<{»gž³n¶jźĄ0āxóŒ,+Šqd©žŲœŗbÅ)Ć@YGä²U“›Åķäa„Syōö¼ć9¶ywmĶnV}ąÉ×NŪdž÷öhvd›…OoO_ņŠtÆ«HIåC ä©ŌGZąäe­Ą˜<޳Ө0x Yać7› ¦g‡F(GR>[éGkKǾƁ‰&ł3£ĢiMž 9Vk»ÆV¤Zež¬]I­ˆÄœ"å‘n¶ĶŲØqÉ®Ÿx>h(¬®×9Öׯp¤<ž’€y€Φۼš„‹ņ±rꎎ«Ö|_­łńj=˜˜ĢĻ’WĶŁō°ĻĄ91ž»>lŽĮ«[Ņ/Ś°ĶłßQģ€FŁ̇ć '¶/o^¾z»n‰U„’sÅ¢Wø)iŻcń£Łļ=“’”õ„£ endstream endobj 326 0 obj << /Length 2800 /Filter /FlateDecode >> stream xŚ­ZKsÜ6¾ėWLķ‰SÖ š‘Tv+ė¬×N„jkĖŗÅ9pHhÄ5‡óaIłõŪn¾Ę”Eŗˆ`hŻ_?Gžę°ń7’¾ųēÕÅwļt¼‘¾HüDn®®7‰‰Ō›0„ āĶU¾łĶ“"Žī¤ļūŽŪŗŹ‹®Ø«“Üī‚ š~jŪāPmµU±×µŪ߯~łī4sŽZIįG6$f']ų|„‡ž’ŗŗųr‹üÜHi„–É&4±šµÉŽæżīorųųĖĘAonŻŌć&H`g·[¹łxńß5&W$1é‘ЁaNLp©D$” ńNī$!š EØ ŻģMąn¶<9l&}ż:›Āf~,—›^ŻXŅÄu_eØ|Ó^ѵ¬·;ŠL––å=QRŠŻ}WdāŪĆ?„ż…³® Y>ĪćiM™$ąłčA“ŚØ§5%C”ā€5„ÖŌ«l:hJÅBDgšJ¹¦CšꙦ€2hŠęķūŽČŻĄ§=„M[thy¼¢ķš>ėś†'|ņŸÕG˜fsbŅÕē<Šn‡²€;ķ¤‰ é°}J'Ō*ńŅŽžn‘¤§¢:ŠųäN]ä`GIōcŹēĀ—÷ņ’0‹l«" W›_Å(ϊƒŲī¢@y·7Ei϶žķ˜6‡žĢį9žp6ėcz‡‚H/÷ītƒ‡šh-¤ ’ŌX`ū–3 D›d˜˜®°ŠBć„[¾/ŚćĮv+ )Ōä÷« u8ķŲ‘ “ö€ė\ō)뛆 dšŚė[›?lģχūŗś„ĘnŒˆ}óÄAĄ˜õÓnŁDHāˆ]>b쯱)»‰H“¢Mbč|°M[֕åĮ5=ɦbē¾·Ģb'½®€Q]­a[ 43ąįśf÷-f$€&‡I—+l"0‰Iz·ĀD!ĶĶŗY=Œ=ņI÷ķ)ĀÉ$ŠŁįmķ×­W‚›Aׄ¤”E”²`ŠAR =’°Mķī²Ł)„—fŽŲ–\‘ßJž ցS1”ņŽŪ*³ąj‚X±żD‹˜)rŽ@ŻŸČć)yńɗŒŖ ćēøaŁÆÅ©ĶšćMŃż±Ė€¬īČ!öuϳŠ}ÆųYvŸEķ‡]ÕÕī›]÷„}ߍāuó ēń'lX)ČšńƒØĻü° 'BĀ9M”SI’’’ˆæĀ–ƒc H8ēżX„MŃŻ-bx§ˆZ“›Š+œĀäźņ+†©S‰¤ˆ&ĆMóŗ®˜K ą6£¹““Ć}a˜Ē)=Ą<ŲĆ ŲŃģYŠAöā"2g抌9LhG/Ō€rƒ%šaŅŚ1ŗLĘ/yŃ:üĒsü?‚Ūēźn q}½ ¶:ÜPÅ/ƒ-œ|’ńĮłvDž×ŲsĄ­Ōp Ž;ÕśB—…> >#Ōäó8WzB”2ē^‘ˆ#bھģ`ĢsƛśHž@š¹ņ¾@;9 ‰$Ń\Ā !#¤„‘šl¤€lc‰ę” ‚Lqč[\–r1t°•mĒCņŁjYG“Æ^˜ é0Zæ"u‹X")|^aK¤Ž5ØjVöØD%«*‘. r_č‰j³Ė- Kcžķ¦|éÓTęJœsƒŗÄq]A_f8źhGé`ff0Cڲ^Y„d³Ģ²'ŠĶ“ī—#ģ™b^džƒĄüyĆgŁžQJ‰XPA!ąsĪ|…™&t-ł=ä`Z{?Ūķ;kŠÓóŌ”Ū€ŠÄyT;Ńx½mWū=pŒhCbWxŒT•‚Łģ ( Ķ¢óP>ėƒaŅ÷”ˆ•½„wū”ID½Ž4ś_<µkąœ©cqĄŠā~~ä}’.*źĆ€ąŚæį„bgāäŒÓÜ¢ŗ/ń>~čå6»¦2+čŃĄd •óųfæōcYP\„aššf€–ĒļŃĄŗ¢±k×į0•½ī[²jxsśgŪļŪ.]lIYpQ:ćY-Ż®ŖĖś0”]:0čż €µƒ†žˆO‰3°lČPņ>³‹‹Ć`”o=lŹ¢]Պ|ć¬ÉU !=kR1Įfr5#-ą“Y°…v`A3Ńļ„ ‰ßǜēhóĀņd{Ž0æ}“V\":ė@\ÅŃÅ LŠ’ ‚Ū$Ā(vĮ°ūEmWC'-Āö`k[„‘Cļ¦ Ł~ZŽŻ@$»<§Żń€Ä…™É?¾4öT¦™«Ēݧ‰ÓB¢HH]@©Āż©ø/1SÉ(sé½Ū‚ßtŽŌł®¢eßŌ7ƒ{²ģQČĖšg²‹ÆE΁=„ĒXń“:`ęTŠ»!-ĖY#oōāDÄQ0„ŗUN įNįev™/ŗ…³µqG<,e×ų”k§=¹„PE"„U ™gZĮe7U9®\Ž Au(ŠĘÄ£½'a¦wĖØ;NČĪ™Ō4&^ė±x)±^„čūÉŠīt,¤½QNÜÆ„‰³µFŽ…īßׄ¦¾‘O=cäżĢ2 6Įšķ{zĖXSĀNA2…ĮņŒs/%ŽŪ7op€ö nØąĪM2T$šį-ŹGŠx=ŗA&唣9\`Ÿ7”™Ä“XŸś†‚:z“sĢ-¦dŽbZz|§fŪ¹w;!@Ēi:öZ€ZŠžWGĖćą©dĻ‘4ĖŽąlģąńĆŁ%#ę~Ö”C½9H°Ŗ³ŲąDR]­i\+PłŌb߯iԈ¼Ē¼i¹Łic§r!‡¹Žń‡..4]÷į¼(şÅHׁžĢ¤oūĮ@±˜-ęG0^pC×µčĄg¼( „µ‡A¦;÷żitxgF\7Å”ąóhoĘäÄķĒ>’Œµ£D.—8;ǟ3ś@‰$QlPœģb4wP,Žž’¹§tŠY?ŠÓ–ķšėĘĢćłC9%Ļ|Õ{ė ¶[W˜8i“pļ×ō¤ų ƒÉ.Z"ąuė†9Ž‘|ą~‡|—t–Ōeę¹c"‰Ó÷ĆOz؄ĻķO–ņ Œz‚~¶vMˆVfģč£aÆÅ4%L¬†Iłb+`ތĒ볩sš!™,­Ī¹wI9·@śXQvŠ/.C+ŗ¾s©F!sĀCTWQį€rAS\ÕYӇzŸ+Źq‡`™uō28(»&Œ3ē™> Ōh*eżZ åŽUi Pgæg[ūM›Yw6ė;Kó)”Ŗ^g©¶“Š+kj†UD:‘8?3»ĀÕ1k@ ĮŲāą  č õ*©E>5ā ‚YK{nzŚÜ?v,$ż²TŹh5¢ ³cZŒžŽ(°¢ķ ŗ'ĀP® u f.Ō­˜»héqÉč4‹ß]KÉ­ēZń˜~ęä©mOEÓŚØüŽN°ž endstream endobj 330 0 obj << /Length 2313 /Filter /FlateDecode >> stream xŚ­YYsŪČ~ׯĄ#X+ŽēđJRåÕ±Q*±YɋwFąˆD™øhEłõ鞏®ŠĖUęÜ}Ż ńhń藋Ÿ/ŽŻ  Īrž‹čń9Ź5Ė…Ž’L1”²čq}Ž…\üöų×w·:;>©ą„Hą:³X Īyüńįęć"Sńū‡»æ,–JĮ~>Ż\=ŽŻĄ‰ŽļoińŠ~īhłź§ŸĀśżõ n2öÆļnoon><޽_d:öļk<Ō’Ž<^šHD"əHe¤“„©<*væ_0¦RśGCæÕ_ ļīv"ŗ®/ž’śĒū#ĖžéåųöŒF…Wii-Y–•Ž–ėCćHBõ‡ÅRk?øīŠT“öua’Ųn®%ĮmSŖķu›p±³ū²ZÓxæX‚žź²Buu³J‰ŠBŒs-•d&ÄJ·±0 4=ģųČ žWÓĀSc«ēdWVa§ŖĆåÅżÆ ™Ęįėyy„I[®Ā²ū• 劮ķ‰öä øąA×<»&\z)»Møn‰šÕĄs† J ’.…bFē$ŻĪLšųÉ+ÉѤܝ5 ZóėϵPÄķį©uæÜńfa·Åak»²®Z¶X&©w?,DÜ /»šX½69҆Ū{ŪŲĮ(žŒ˜ÄS.Ą?ņ> žč̉/qˆ9ŃŁŲ6PؽčKĶĖó©™•ÉŃ$s”93©ģ_µ«śš“usäUĘņl8ˆzR ?óØĢĻŅļ}TõŻæ÷k[Š/Ø×H€ŌźKŁ:"FĪ¢Vq©Ø«U‰™cCäS‰~S«93fŠ{ŁŅ«+źfåVD­®zņ`hGŚVŚ€šÓ©ŗ!&'ćĀh!žĘ6šĘéźœi9.F¼±›ćRkĘå Hxŗō‘“šCE+]¹ äFŒ‡ōÕsƒ¾|L‘‡Ā,)ār]VvK +¤ØV®*^鱜yÖĪ™f‰4ßr[>:XŲ“EW~]x]‘>³ŒĮ=ÆNCG ›Ņ‚ļ ]LÆ]FŪg—hMq‹ė„×aįĀl–k‘H&³ü[n”ÅÄ-ą9K?E½ƒ`.[ļ0Ż6pÓŗ@’@]Ł,A·y|÷L+čŻ=§-éA¤jźVU=+…a:Ė†ŠŁ¶³&9Óf8lwÄbYŃÆ„Ÿ!ŒŠ üŗWo[®«]Ą@”-•`@G'põ÷ķ6\¤M ŽŚf}Ų PŠ+dś¦=ø*S¶‘;Ū.ƒ§ä)SZOU„ŒžŹ ·—O— Äl”‹ žņČ2ݦģsŠD½“ų«ĄæÖ% õJː ʐ–QŽåĄcŻÓH¦Ęp%ö',^ŚsLęœ)>z^Eō)Q"EȹŸųqyc÷}¬¾Ļx¼4L™äMĻ˜śČć)©HšS˜«źjŅg[öa ®­„qÄČĘŁfgCŅ×=žĆ#njAŠzČ„T±-Ž…„Į6žΤRGŚõŽeĖ^vŪÖ4*Љ=Ą5Ī;4² ĪN*T€vČ]å?ܟǺ„^“lŖŠ9ӮΚvāŌJŗ9Hą¤É®sīõL²T ŽC€zŁćõiOÉÅ Žéo½‘ØÕ„÷£€n‰Ŗ\ɜ’$:+Mķījļ/«•ķ³(cE>&s€Ą öį|(v1įՇŽ&Öą+Mü‹ `”˜)mĄ[Ųņ%%ÖĻOŽčŽ&X:øPL“’šhŻ@Źļ*r(ī1‘°\”ėC. ńķŒ4ņPå»-’Čįx üb…ī1ÄxP-ܾ£‰§…*qAīNjn\8®¹=Pqˆ°5 Cū„ģ/†óv.ø”_««“Xlf›Bæ7žėlē–}Qi5±ĶˆäRJ_J(Õ,M ŪĶę÷žēŲŹ–äCČ—ĻŒ1Ÿ½ ā3~ML2–Źō¹5% ļHjØtq²ņIŠ–)GįŲUPI`ÜĻ$4“rˆž÷×÷»ņ}4“c_Ø!›ŠTGŅ@ī…nz¾Ļæńh›Š{ųyńGw‘b2En£OŠ=śĪpJQED>|Köįūkä÷_¾‡žpus=ĆBeDšž zĖĶ”ƒŸ€š_°}Ÿ1ä^(ęT2Å@Ū÷¦!5ąź»”7mŻv(‚ üśą„ÕcQ?!¼gœFrß䨄ų ÆÖĶlš‡ŹŚœŌŹžį±äōKČ…£`‡7ŅH@e @š`o2ļPœ1…m€Č„ń§Īķ—O %ā×%ޱ42ńßE¹¢G"ŲųŲŠNįVŲųĻš «L|#ę)=¢`“ — ¶„²ĶŃÄŅOŪ«T+e~q¤«hzE?¾”…Sžė .ōŠJ(Œ[Ōōā뇮ŽßMĻ`«?ŁŅՕk‹¦¶Ēt> KĮY‡oĄāåą ¢·T2Ū’¾x}åx®·ŪĆüet(Ņ=Ęõ²%ŻĆõ=ęx’Œ“Ģ&ŸA Š`p“œ²<‘½=§g>/ ēń?}·)“>y%ˆ£·ĪĮx§ ¾®±…ūßŲ•*‡Œ"}ѓ‚‡ž?±+5įŚæezE×¾Jčģś\@Ÿ&ŁQ?' <<öłgDQ"…rŃüQ j Ģ¼(—_¼Ēøż9™ U‰ųŽŖj,ŽĪ„!t}?B(čķY"Nķƒń„r“rBf¾Ē>ź[¢ P’ ūč)fgEĮŚžœ@ y.&x€E FņĪ6_BQÖĒ{Hćė²Ŗ†€ņ‹ė”*Ž®B{ĄĒ“ųFrh%Ō›\/r>ł¤…Ż@€“.¬ųJ:Ü@Õ#®O>XųR-'ęq“Ŗ9[­ŻšlŁ„”³įÓ.=cĻRļęæ­åLŽ_ŽŽ(Ł”!ßr&ɒ±°[šŚvg>/Font << /R8 337 0 R>> >> /Length 8991 /Filter /FlateDecode >> stream xœķœKÆ$Ir÷÷Wä’ŠI?¶­Éī”…P)TQ¤$@_öć™U3œŗäN a€éJ»ž07;vĢ<žå‘žł‘ųßłļ—oż·óńĒ’õ!éćžń#Ļ“Ÿi>jJėYßnAŁ»ÆąKPźsÓĄŌT‡š+®ß<įAÜ-īQŸ¾ŸÅ—æ’ķ9K+żńb²’å÷:Ļųųõ£„ō9÷£“ŌžkÄÜnI]ūYņ£ä¾BJćŁłŁŹ³õū÷—x  ?pµČM\Ļūēyķ $7?·ZŸåÕæŅÜļæž|÷zśūńk÷~“b«z -žZēs®˜ÕKRŹ3×GÆ”3±Ó%ĒN7~GĖz’ü”Œj¼„*聫ƒė·_Į—¤W?qõ0Ę3—×+ü“®1\ ®1^|? mŲļuj’ŪžŸœŚū¶å”*ū5·½Ā|¦}ĻmĻē{n×Ļ×Ü^ <ņWž}½ā5·œņŽGī¹åTĆ\o8æ^3»’| łzśū)xbµŌ-ßTĀ…±łö&sSćOĻ Rz~f~ēü¬ūžżå£ęŻżÄi‘Wõ§‡ū·ßĮ—$žŌ§‡šęsõ×;ĪļxāÅŻāåéį‡yH#æ“cėī"śÉyLžśķMšč įAfüŒĒCÜZ ŠŠļß_>Lœų·łzžśéŠžVuóėńĄzßõ’Ž®\ ®ž~˜Ā5±X ½pƁ¼4ÆKóĻ÷ĢgünĻQųæ2NĄO{5Ø;?Wyup’ÖōĄģō,óńź`7¬Ąż’db×®×OßĻĮ0ņ÷8/6l„ 5pĄdō÷Ū-©#ŒMÆŃź…Q/Ü| fĻŻŌčļ˜Żųń_#ØųĆĒk¬ZÅ%…é /?ņCŪ{uõ»¶y^jÆė×’““X |¶Ķ®Ո~VŹ^ā¹Ųŗæ{„?j1µCo½Ē+ÆżįS}hś“9䉙–1Ź‘–Ī-eæč­¢«H0v1ĻĖ36>Ÿh„6ŸcE«]@ć“ Jźžį/ÜŁ'šżś±Łņ “{“®ļ­vĶDÜźģ3Ķ~ż˜ń¦3O­>ėŪčkąiŗśy£pŽ Ż1 ›]Xn‚éĀžŗ›Ÿ5!žĄ+Ē£ ēÅžN>Ó,}ęe}k‹÷D«mvyc°¼čŸh†n…ŸŠæV]6˜÷+KŖŌ/Żśy³·‘D«eQkŁÕĻ4‹ĆĆn[Ų§<×Ö+‹Ö—γfŸiꀁƒ³Yį‡Ęß+ąb€˜µįgmb‚=ÅyĀ3E(K2&' ź/–įņŸicŠ“6ÖP .Ž×JēUaJ÷m¤?Óģ׍+0†ó¼ĮÜKQyyĢ@%ŖĄ0öĒ žüóK µøłłūc²ėõōė§»ö··ōøŸa{ņ~õ~łøp$Æń©ƒ'šÅĪ ńw8»ų³ĄvbŪJ(̈n§÷IU°÷`ū™>М?~üK˜h)ŠłĻ—o’ōŪĒ_’m˜ģś$l}üö÷Ī€W¶„"Ö”ayæ}ūų«ņ~ūļ’ł·æłsS9 \!BÖ?LjB{9°ż{%’WŪ„ &… ŒctA‚p–qöĆ~Ē3uś‰fŃYé;–‰ÄŒ|F0.÷āĪ>Ń ė!K4=«K^<Ģd„F “>/ćžÓVŃUļ™ų-—X܊5k;ĄgąÅˆMb÷ζ¦Yt6l1rD6†*_PįÓĀn\ęų3Ķ¢³ÕQrn‚ĄPh±9T/b„ušĻ4 Wīm”™+ ‹5³łŪ›;#¼h“—ąąŲ÷’{ž{Yڈā,ż ż_DjĆÓÖ”š/4{Å«5y@Ē·čP·ż dz’V؄aä[„QĻų[™K„Ńūė~¤¾Ż’šīiµ.9ĢTębÅæŻ’ŚĮH'– æ¼(+BĪZmƒ™x ü³Ę'LĖ'ŗl±ÖąØ ą§ā§%t[țCö™fŃŁ&~#¼ˆUŪ:×lē:0Ćŗõ'š†¦“Ąkqöt/­ 5Z@ęÆo’7"įß÷ Ó·rF;bGö–°Å$ųéøūO4£³ų+0üZPŸx•BĆ2ÆĪ~Žģ­3؞" ßˆīŁ÷*ö}g”™ōo˜UóŅŖėO…Få¦?oōŅś\ -öMDį€cIaƒæ"I„™’Xż‰¼JTā )4w21’Hŗv+$õŁ–$­5Õ;»üTA·C&ĘMˆ…šJ¤–"B'‡ö—&I ‚ś “[ZÜyU‹ĄAĀÄ :®DĻ~LIŖóĆ=¦¤Ą-§I&`t”_?vLiĒģj›Ž26īx{C‡DĒĮ%pbk¢oæ~¬ÉVikń)] §aįčue /ļI±¹!˜œĶš'µn憀 l[ėņtf uʼn 8ŠõŸ™°Š&¬'"ĢG/Ā6Ž +ߥW¹.«Y%ā®o¤Ā)r,ˆ|Ęba'֙0-f’qx”bøQ‰Ęe”T4āĘR„%iœ”XVŪ®Nm„ƽ"—0r¹e[ÕC9w ¤8Wį +H"$ģIļ–c0r(ZY«™śĶaŃVĀ€€JÕ&Śhėß {5 Ā Š)÷ÅŃn¶j‡Ó@Ż·$³Ÿ” äsŖ °-»=%U3‡Äćo¶#;w >°'!‰ó“Ćź„$yo" _dŽ:@1Š”6Ē‚“¬“·cßQņēģX}gĒ& &$™’"až†°^ÅŲĘWóˆU”c؆.£ŠĶłĆÕm+¬VYČ>§qE†šć ō±®6aYōTģŖt!7֜§X3ÆGōShūœ,!°„ŸX½ÜµĻ”9˜ž«ŹŠ¼żfņcM7ę2lW?†[nĘÖŚHFä‚5‘ķұĶcčŲĖvÉĪÄŹlKŲ®só4•Z©µŠŅø(E%“beÓ„0I‰j‰3ĪŠõ®•eC«š¦µšü_˜°C*äKČį©5å@µ1 až>fš+™`ьyŃš•³(øšį§Å…„Ł7&««#n,SgÕ2šĻvåąSJœ*[`.¤“ä.¤‘…” ?% JĪÆ±÷GČ*¶G¼ (E¬É~ĶƝ—p“ģaŲ/éóץ<4“ģĆI­¢%ź8VĢ÷‹6/ńņĆŹļKRD²ĒReo¦R¶łÄĘ[29µX°āšµp:°3–\Ć©åoEĒrģ…¼ŗųń9ģŲ•Ž’I‹Ż/]°ĀzŖ*üDRĻS逸‚_å)ķ²†Üā_2W1Ą¬ė±Ń‚~ķŠš„G$äV¹Ģgo¬¤«Ÿ>¦1¶ Ięl<ż 3N¢¦`3ŠX‡é’käw¶-)#åłfģŠĪeHšW8ņN!L’e’$·ĀĢLü›¤oÅ"+¢Ń¬Źā¼Öų–1 A„ŽbłCRl5j¶$™h0$&’‘ø˜-$Cā8;Ö¢?“xS;m'‚"$}<ķ:‰ą<€n™¹’ul8:ÅÖdRŪZģĶźĘ9Ė-4ٶŠŠ°œaݚu:§¢  Śį­æ¾ģ§““ĶWön‚®…ėBOCŠģSJY äšģ^¬¼liĘčV=Båœ@ćk{•Æ’B¹†”ILŠ"ū‰"vZ¹u[|d!5ɼEK3ā0¹“%Ė&sXåI*Ŗšńd¶2a<°!8ܦ‰hT6Ó:Ą“ ƒŒ_2p%v>Ϙ‚ŽN&ĒkŹ)Īō³ĖvZяŲāłb÷ć‚ĆŲ’ƒDŽū)Ą(Žp?'«cOĀ‘‰±– T·›(~ŖėqšŸ×Z½0‹Š3ÄĒöé<ĆURøq’óÉŌ»āHN“ķ V[uY“żÓÉwµNÄE¾~^Żż h“ Ö |0ˆłõ®Žõ¤Žb×§;N¢ˆ¬ [sHŃw±µjēäŹ:ai¶:{Č-ܹFӚźrƀg£Œ8Sˆ°õd3Š“łJ¹!”lIl ū)¬.āŲ|Ć.Q¦;–ąVׁŌķdU¬ ØPL‚”H3šļ9±CĪ“¬e»y`¢KaŻkõPŠźw$!ŠŻĒāł”,sQ`­Ōć˜;"Ą·U-b,{¶ńlp•0¾æ\˜›6ĢÕĀÜhClp JCģ#šŁ’Äß ŅÓ ģ"KX(›³ŖųrƒÜK#c­6­©Æł\ĄÉēž†DģhŚpRGH„.øQŠ“E ‰fqŻ’0Š©łØ'K҉cė1¶'S »”Hƒż‚ƒøćį¦ėa*p-& —U3÷yVö,)|÷’ā¾Ē,ūØ'EDČXĀt$Jģäɚ»g]‰Š“>=Ė╁8Ģ5܋ļ,®ĖĶd1µ™0ĄM’ØÅ¾6~6­Œs9i]”`[ö]S]pOZc+Ģ¹oéT–5CK{(„ĄTņõuØIDŖ¬öüž9učO†¬CA”‹žŲ"ķ$XG";ö&©véy–‹æ!v-¬—7Ģ€Ū‹IbŽ¢†¾IÖ!ČŠ×÷]‰M‘0<Łbe,SŸpYŠĢ ų4‡š]É ±:Z0xˆÉš"Oūńņ(¢LB óÜjŠ~Œ£H—ŚdE~R¤‹™'•·O{öPV)É©w»°żŖžm8Ä%Lih=iLČ55éV›,`šß”8±ö1“v‘qŒą}«N…ĄĮń(XFK:Ī™ŠĆŪ¼YćØh˜¦ĪA IóA,$gݦŸ «sŠŠ'•ŽU»Ö sŗ ±fu|r˜ üś^īoõIŽēM5Wóū‹Fģāļƒacźņʐ¬ŠVÅ_LˆČė.O¼Žįr^ĒGa2T"Ņ÷įVI¤U—ēP-Œ}œĄœ§0ąŽo„‡XŒāµæŅLŪ’¶N¼¢­j‡£+Ūł¦[ 3vuĮŠńqŖĖjR‡Õ¤B‹Ŗ˜ćR~!Ÿ×sˆ*fK’aČ„Ē*ū’ÖęķĀۊLŃ“ķ¤ššaåÜ|–ŻÆä/EaĘę £–+½÷²; øl¹Ic ‹xvꊙ2˜£[²@B}\#@RB2Ī[³±ˆpČõŃUĻ|äī7µkž`¤"Iņ™®Œó1ø*ģȅüÖ¶ŸNTłČ×ųWŁęv/ć[)¹™ō‘Ž"Õ­šC¬ļ<Ō®—=ĪVė ŲŪ6¾Ņµ gĮį ¼Į>(e 2<ĘUăXV ŒųS'W¤žŅ‰c2H+ŁŖO×ÖåÜļ*&¹Có·]Į2‹Ä ”Üj70’ś#RW Xd#éś ½»ŌVĆ8:a!ȕ…y™ŽĘ ŖĮć!ųe±Ń€d`C½_6!ŧ§„XhŲ“/P<žĢéųl³“jļ;M.Ŗó M’¼mįx?xĘWŗŗ³"ĀIŹ‚4įĄ­é[^Pviń5ĄšW†&\ø"ŗ?ńšŅyÜÕk«f•¦¢rįŪjóå€×m»Š1^ĪHš=zÓupŸĶ–U€ƒų7ķX-Łģ“ĢY–œ"IH#$i#Ē%±Ž”ŚWćŗƒY°÷rČŁÅƒfĖĘ8Šų—nh*qÜpP±‡Ü99Ė9§Œ•ŗĆƁn ›Ä (FĮ¤&ā4Į>ećoX¦ųM²’.»G§i@ cŠÜ]D‹øRÆ ČҶeöČéVc½]•A'޽»PŒ¤jŁ&‡_ŌnĀDPY%ČÕįą3U_O !š'ųteO*Øx؆°[Ā ¢•Ųo-WĻI—¤‹źqŌ1Ń3!Ā]ŒŁĮ«ģ/¦“ū)ņ.uŖ!õĮˆ†Ģ”œv‡Ó* 6T…Q@·ä՞X(I€€T‡ÆRĒ\ĪĀ¢~Ś«Ž^£‘°ēĆÅ9M_Ix—t±}ÄCa„®B£:·„ZĆ¢{*ŽULųĶ¢‚5ś9ĀxŹR}ė'ŸX]ĮqV¢óÄźŪWUȖ/ėĮņ1²OnĖč&£1V—ēä•ˉPš·ņģū˜ł¶Ó°ƒ›Ē µ]8¹ē©_§ØSŲ0tKüļw^ēĻa0DŒsH²£ĢN–—óĄ]rļŁT %§Ü7™zµI":ę–w÷eÄ‚åšÓg¾o×]dnüy–ātó›ä×÷’­ęä·²®zeęm‘B’¬ż„Ķ X ĒO¼Ć "]'ÉF…„ß¾ƒ±ėÅĒŚ’U $OV/{˜BUätĮd ¾bĮU¦ę"ŠŲNx›QŪUČDłĄ\O¤‡×eĢ >ÜøĘLŁĄJp“Ÿlķ銤­[ʃę“N 0%¬ūņw!<ä”6•TßHjmžmśęM󚼤č#9)[Q(œŹ[_ŻI6]dW DdÉs‚ĶņI¾$cÄSåōĆ+ĄQßNię}9 +äĄ,˜QĄ]'šé$żd–‰Ą!ÜØ˜²YbļY>@92®Ś„=*Ö6õfĖ@¹‹mgYĮ(ölŻžé®P”M,Ŗ F ÜI7nIˆ”U@ t~­f,ƛ Āf^…åYÆJ˾‰Ūę*³L€y&1GøBŗė›ćšgÓ¦UI|Ŗŗ^u2[Ūę6(+ ei®Āą›—»®Fdxe‘Äņ³˜.2„(ŅRZšź .’­:J1uć”1sUgÅ]K šqVdŻL–$rŪ×GMؤęšRÄ.“P„!FWœ×ä“CŻ]^Z}kféœJ¢¼oĘbIÓĆf Gąė™a ϜķyWāæĀö ‰Łó;}RĘ醘UóŁā{\æ!ŚöH.•ś=µX]łS}/5åŌ|P -¬V²łž?IyÜ×R^Ÿõ9žń‡düÄExÖ/›P€zī䟓ę‘(Ń)7$ÉtĢžU’.a źēhµŹ”óĖn'zåė(ŁKqN•ŗæ÷r“Š/lźwŸT(ųŅZYU*ŌĄĒ·UØ¢óĪw[”nص+ ~ōŖob`Hr;ōÅś T=„F\ęē謞JpJKtļ²Ž×ĢL7©ć$ ÉĢ™µl ®rOf­“q… ĘĪŃEŽ'ėY ś³S+A9hĘf–ø>Nƒ’`*ÓX¢?Ÿƒ գƔU»­JŁ“æ¶DhUU“b˜óEŽÖÓɲ“ˆˆY¦PX·¼żU§W`«±‹Ü0q–__Ļ·Iņ‰…§Gæū] ƐU@毯œĮ]Ԉķõķ¶—„ģ»§ü]›ė£'__ßń`¹³··>­÷”ø1č,ĶåXz.VŖĖe5.qd}k®›=ŠnD;¾¼aī‡v©” j,Ź[1Tc’5«~9(Šx¤a24쀔‘4©ćŲīš ¬“cŹ]*|E=:uĶ7rąōso»½UĻ”(]hś:ŃQ¼¦’}eéxįóG’$` H . Ģż€ķ c‡J‘ŸüirõIÉĒф‡•+Į›RP³µš§]ŃUD õįNO«sć‚t uBĶćĮøDįŃ L·”ŖŸāf *n”ėU”\—ž–ÄźÕJ/<¦uH"¬Std1E•²^F÷ėVųĻ„¦9Źuݱč·[ņJ‹æŻ>Üåܳ*Bü†dČK¾įb/”ĆÓ A„¤)ƒĄ uņ7>nå+¾Č&oiŌMÅ#˜?_A Ń,QiĒYØł ” =xĪCS8,]Ku*®•åģĪ”«˜ŸT łaūڲ²Ye–Kš!4³gµœ>f ŪĢ /V ‚¹†‚ĖØŁĮāŹ*×%Ķī„XIÖØ3¬V²®õAŽ”œhg©Œ¾ū B>Ō€øhž6CWĄ ÆRw ¦ļŠź0ŹłyH°eIRg=øäąČfVĮŠ“Æ^\HČnjīc°ołt’äœ:±­õnŗVXąžĄS„Ä©I®ĖQßRdϧ”«©į6R†&‰(u)µé ޹“3H |R¬Ń¹°µųęU>ģbUzvŠļ­Äó`ųķŻųrK”Z1/ßpA&W/Ną ÉE§ “Ī„».gCļV%5™ŸPX°uļ ‰«EūĆ+s¢hĄ›Ł¼ĪŻŗ*`üģ'ö†‘£«uHœŸĻŗķŖńQø Ą×ż+^©:KĪ „¦Q·é“…Ē ]0—;Mņ&½®¹s7%00R2‘qīŠSŻ\tī,ōwnŸ'Ų·–$iĪąÜ¼>½óvæ~ofüQ£åT ó:“X:µŲōŠU½værĄäĄIQČiŸ¶²>Ȓ!Õņ”Y…¢p7źü°?+]¹{.Ī“.χæ½2{óT¹t_éķ$_Śt ¢‰˜ü"Ļõ–ęiäÄåwʦ-%_śįé† ńƆžL^#ź‚FDéĢ¢sFįąŗ’¢ąž:wŠ– 0ƒL¼|źQV6:öÉęĒ™ssÅą±˜_Ģ|aĻŹŽŃ¾ŗēU:E™Įō×\ŗĆ©]bÆŹ©PŁZŠĒsIµqC^Ņõźęo(ą0Žøņ€-§ųįęHż”vč¶ĘĮ†jįZŽ›8›ˆ3ĻČįbÖ¹S«oĖ™Æ¹;9_{kŪŁßmĘņŖ¦Ģ’å±Pü~9]1ŹÉ`÷«æ#%w3×jpĀ0‘©;\« P©Ü—/«j5ī0§aAb脧é¤U²J€6DŲNRB‰h4Dŗ50 G¶ įó%*«Sƒ7Tw£’ę“öéŗęE%óIA3„g£v[Պæ*ŒočĪeŻćt*R¶ŽDõU÷Å4GóWF„³µ(Ü>R@žxywéį©#é|d`QŸT˜—S¢€€ļdģ}²_"įØņš“|ō›qo”„…‚`Ģś)`ŌĀ>˵ŸT`UAå8 U欙nPć|N¤ØE"£šĪ…XW䣓“tÜžŚ'÷¦o 5ޱŁĶk”Ńė ’M6Į֍@%źį’n Eę4 —"cŻłÖÉo’ퟒńŸžųųē’ń’ōæłģÉæņ™} –$‘š ēŃJ{p67~įr.ć·?|üUā/ä@a ~éē’+ł%ó§_@ų)įžĆ\„Nš§|uåo>ž/¬uV( endstream endobj 339 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1676 >> stream xœeTkTSW¾×ÜÓŅ6é-¹·/W[E‘޵L;*…¢­y(£ isIy y˜A!B ĮP”gŹA^B)ŠJ„ŹŌYµö¶•²Z; N×L̜ėŗü˜¤kĶĢłsÖ9gļż}¾żķcaė0Ēó”j¦$.S«–jBēMģ8ūä:6–9 {ļĮN~,–ÖĀ[Ćy0<¬żIĮœ­>†n<‚.<Šńp|äOß%kuęb„\”§ŸĻĪĢ}aćĘM’»Łš˜˜Hækž…NaJ”r ½!ø12*­NĶhōÆŅÉAo•Jł-W™uŠZ*“1²PXŽTÅŃ©J•R§Óéē“_ āć·Ę—„Wétƒš)Ön¢•š„F©7ÓRŒŽ§fäRZ-•1!€µR_l¦ÆŌü7:]©~×PB’śe:]›H§Ń™ŒÜ ’’æưV§—Ź•Yqń[^¢1l¶ĖĄ²±×±=Ų[Ų6,{ b"ģq Ē ’Š…aFģ ž:ŽønOÄ+ąńęĀž + »ÄßĆߋÜl5lfc®ąß,””%Žiöiņ¤»±ö=>kÅÕ0³Āvš°"E3q°Žź‡Ć%>šźšB0P½Iq ÓŹ,‡BN²f"ĻSī‡3™‰æJ꒎Ø,{w‹ļUuyfeEVitšE{›Šƒ÷ŽCļßć!7›Oræßȉ¹'V6 !Ž’'£Č-«ÜćT™–\šßČÅrüwvļ’ƌ”v¶ō&ü¬N_’\ÄāŌg,-(c€ųDųÕ2,GЬ>6–ōÕz”‚³^ūajMAˆf`nEÅ~°"+r¶vՖ‚ m%† ö ŠĆAač9ōč?¾x@Rœ-” G]¶QQ–e‰F/ī"ūę†?ürf'8^Ž®äƙĆ}āŌoŸeĆš›K<ŌĄę4ŗÜqU„£²ŹĪdå’±ōDE•£ :aum»\ā. ¶÷åĻόfÅe§ŒÅ»FX»(4ś"‚ŻoæŹF„ē~Hż=óm¤h…MæAZlåN+śŖ÷')”KĄYgÆ5`Īo݁h1.)/Mßfź “·uŌ»<./Ućs5@/čč›éÖd‹Ó nóŪ–ćł ­L6eaLڤäŚäxūģ5±'·Å8ĻĀv’Šą¶Ü%”ŹYi,/±i+(“gĻSõœFė'AˆrĶĒhįT8źéöÜŌÜEo,vwGŠ8¶"Gw&hu›¼††(]£Īs4˜ڜ”ŸÖĶÜ(¤Ž™Ķ‡³PSf‚&hō—›€ˆKÉÕÄäܖ¬~u»kbV<ŅfŽĄė‡'’Üy2*§®ŲOƶĮ”īŸĖėrĆ֚&×IxŽ5÷wö4Į °×Łi\ÕZ 9Xõc‚ŸĖä;e’„ŒŽÉNoÓÄJ„-nQų@8 QŁ'żō~Ø ĮvXų_ 49¤Ģ-Y|+ŃPėÆkŖõĮ耯TBqV&Ū+RCz·7ozŽ7Ā[!ā 2’:½^«ķŠ÷ōvvōöč;5T‹`+ūóŽ¼æš÷F®UšåŠŠWœąšj%ėmMš Ą6\&v˜;¹u p üµk·ƒŽŁŠĀ ˆ@Ė(gEdr-ÕRmėz ģĀ÷QÓżü+d”Z Ž€ÜCĆ¹‡¦œ“\,¹ /Āóg†‡®^A¢õIćŃS\¤øś(¹4Åń9†c$ō¶m’!RL!Ž2õė|Ą‘r™‡&ƒŲܞx¾š{NÕ××µxĻŌ7BŠī³Qk‡Xx\_Zi­“UK]Abz›‰×jKįG€ż[(Mų5Ūł%Ž~Zę±ZK–y 2Ė*߁ŃÜqz „üø2ś5¼ż÷ß/>“•kxÆ@\¤“YRŚQc?|ĮŅǙےpdóöŠKå2ųålL•]ūDˆnŻanEŠ.”8t—œ‡5J jænĶLŁžłV’Īä ˆÕ-Æ%Ų@V›QqŽpsńN×ų45=Žuž^,Öō›:Žł%­@té³éĪ]ŽłvļܖCK‘\¬ÖYö5Ÿˆ’bjp‚O§$ir«¼ø˜R«µÖŻ%Į¢ø#LmlNŹjō=üżośĀĆæo _a’Ķd ž endstream endobj 346 0 obj << /Length 3172 /Filter /FlateDecode >> stream xŚ­ZYŪČ~Ÿ_”G š“Ł/ `½»q’™$@6ūĄ[Ę)“ŌĪłó©«yH“ץęEģ£śŖ«æŖV“9n¢ĶīŽ<޽~«ćŽTåzóxŲÄ:Vyo’Ģ*m³Ķc¹łq«ķī§Ē?ŽE2lsos«Ņ<ƒB¬²$fŖCמv÷ÖŚķ¹čūźēI·ž~ŽÅɶčŖā©ö=6¹mŪ….“mż~h»^]­¢­ŹŻęŽX[Ēkø+šļć(Ś>ųf€ł²l[ą'ßöžćÅ7{Ļķæ„?ļīq½¦ō .,ƒ`ń|8Ļ©mŽ\ž=OZģ‡Š÷»2ģÕīŽEf[4%w"ĘńU‡ūŽČ‰ą»œOōļH»¦ØG>Į„õ…™d·Cū ż,?¹cxŽi¦·](;€ö i?įĪ^æÓ¹˜8R6qĄd٤™Ģ%s2mą q ś†I– gµł8žć؜„ł77y¤Œ³K™Ē«2’®=«ZŲĮ‚Ćī[’oN*|,ƒžT;¾”Év>ņŁe A™ĄŌ|ą|Į—«Lēį8æ+ʶ޿†ß B=’~y ¬4a '‰T¬Q»seā„ūIēj_Ōõ§]f· S„Ī›41m¬ė®ģI”§3œµŖ‹”jlO¶/U]3Eé¶ hķ=kFWHēĄ‹±=0;m`…'¤É‡žI’˟K”m1 žt¤Øø§¶¹§F¬åādiÜJl‚£€ŅĀ  NÓĄw©ļŠpķ@ ‰~>†OŅ`ūm' ōt h³,ŗ’ß½~/SÖ·±°kµcS”7™-pÜv\Īqō“Ļ]{ģŠSϵ}Ńpļl–‡^8ų2ō“eŅ ‚›N~ĻEƒś!]ēs 5–=ተƒ4FÖ'¾ģ}yéÖ÷’D-NĪLxµtX>“uM/£åō Z¬sŠ_‰”ĻRXmLŁ‹•¶ )N-~­(łÜ@RrĻ„÷r€KrŹ:00#Ų¶ÓÓ¶ HVƒĘżłrŚY …_ßńöŅXl »Ü£P?·¤;©' ßĮ`ÜŠĮłn‡¾¹€9Xß­Y5lĒ‚ §b¹Äļ4‚™Š½¾kc‘¦3‘"“Ɔńū‹ˆ/ńĮ·ś\1±>ņ+§b6#(š‹Ō^Ŗį¹ s„UēŚć:+šP±WößGhä]Ē‹ˆ™“ĶA{%NeÜv>Ķ]ÉKWƒhdŲEčŁM$¬ZyhG׳^”¦’,Š9³ż':Eķę:šŻ|aļW‘p\Ø}Ć% źIš:n:>WŁćX”Źo&ΐ‡ŌČĀÆÆQ¾}y®Ų–™vā"Š’Ēŗ{žzāĻĒKøĖX:µŠ=Ķ·VSŹRķšd=›Y}uŗD.…ŗś3ź‡Kģjl( œ‹x-@]± Ŗ)ۘmæ:V¬JŠ,¢­FŲmÄŠŁŠ¢&åu~Ķ[uĒĖ >€VŲķ;t:&ą4(ˆŁ°”>¹*“‰–Sw[O'€/śžūŅ"#~BŪĒKQ‚ƒļ$¢\T?Ūžv4Bj3ŻĻÄØyfįŹA:?ŖE‰Ÿ”Ų€__ķĄZć_¤Žŗp"«a `‰‡ź CĢą3˜LōĄ£öhMxśžėĄĘ{zkŅL¹x‚i hÖüžĶŌ„‚Zy™¼Å„”•Mó§¬Ų“ŌĶH'*qWxX.Ltēłö©ƒ«!X ÖŁ:YY”>H€ WI4ݘųi‚å¼`=[莌'ĀĢ@XQōüź$ óÖ}{5µ/{ž|h§-²&@„¼ę„fr·Ęš¶śkXäXXā;ž=Šu/UOŽÄ8ąm'(ĻŠ9b9ā †›qAi\cīź ś4:ņMŽ»jüšĀ¦WY6*Āč5V4ę>Š^Å=qōģŌo ń&“i® žĄo]±€ŃėaŌ*ŁVE~ƒl!į›[/½šRÅļG`Čܚ±üM†AׄśåPĀxXŲŽ`Ų£9­õŗqAHmró5¶«( tØWÆ`ĻrŪ•¤3.eÉŗDd……Ł„URTź/†Õ=%©ĀāWČĻEć§ćöéF€™[TC.ŚīÅÄ÷ʊÓó^ū”=ĖaÄŽ›8SV_{D įXĄB{>xnĆŠ¤8ö\A÷†ĘĄ±55‘Ą±€č‡ Ą ­°Ė%ē=•LuiśāąA}Ņ$“.“•MŒø­JijęāłÖ” ¬ar ¾0b tqõL@_ńt)Ä”ŅC±uŗsLZ@£…„µ7_Ŗ>ƒ$ŽĻ "+–ŻańńŽ€ĖśÖ]]ÅģŒÓKßļ»Jü±`÷1ØŃ[Ā$x Lh’aŠģV«ŒCaør›ĀŠ¹ŠĀó`ÕŁ™v÷\Ÿ°/T¦` *sŌmYćØĄ~äln8hØ}sž—KŚ> stream xŚĶZŻsܶ×_q¼NĮ'AN›Īȉœ:£X®¤d¦Mņ@ŻQ'Ęw¤Bņ,»}w±æDYv¤¦y¹#@pģēoą‹ķ‚/¾=zqyōåKa‚³”§bqy½H5K…^ĉbB%‹ĖĶā§Hčå/—ß}łR'Ƒ‰e2Q@Ē‘Ė•ąœGÆųžÅÉł«×ß.WJ©čņ'ų £Ėe¢£ć7'Ō<~ż ųśģõåłR&ŃŁééżÆ^üšņåÉ9Ī~Äżš§ ^łu¬”aIlh5Åžv—ļó ·E¹jĘDķMŽqTēļšM^79½ŁWĖtl|3khÜ&oÖuqåŽåzW”#b&ŗČ×mQ•ō…öŹĶ½—&2l¹2BDĒŌü™ ½óD ?攁y`»°Õ•PĢčŌoØlŚ<¢š‹ØŗĘ³ų’ŗĪ–ŅFØY\Ó0·BģhŠ’äŌ•æ_ēł¦”n’^Dūģ}±ĻvŌČź„ˆFōvy¹moŗ©*1”’)3*\‚Ō.^żū„FŽ„e ć& ÜäȂ2ßųu—^ĶŅ‘|U¢™Iˆ^¼Ė6Õnżå”©o³zß°›æĻĶ%xĀ”HĆlN&ڦ°Ż°9hxįR#Ūüz>ūq(i Ÿ€#9=7ŁŽ½C"Ŗ‘§“+Ž.=©$0ŗ+xŖż\ŲÆr­„¤Ņ8YÆĀJG"ļŌ·" eøZU85i0hTl“čx×ęu™µõī>,})mėlSxZ(y!€FĻh€a śī±Į½÷{„ēŒÖ±Īv;źh«Y}0 ½oš+h焤,Ć'?Ņ/łī¦Xć¬7Ä•Ę,¶zjėŻ ģ†'ø0ÅÓč¶ĪA#²¶Ŗ?P’uUß!„¬ŽŠˆĘ5óü¶{OżdĪŠ³®óĢ›,t£©aÆ ćņż- ”Īh’Ō2ƵĒŃ+’Eµ/Zą!ģH ķ¾Ÿ1ė¬Ž‚œē©–ˆ$pēmXś „ī­ź:;ģPŌčJA@Ī“ņ/ØŻT¾’&kéMzhgI·3ģ#ß9.į×m¶FÕyKĶ΃Į³ó`@n›—yŚĆHx`ńI"`Ū ŅŅ_ :Å:jņ–¼³ŽMofš\Ż¢œK‚a1(ß:ӁŽŽmvžm’[«N«ü2ē\Ų]lĆøyēņJzēÖÖŁŚ‘::¹<śķēą j q3V s&Ņt±Žżō _lą%©4Yܹ”ū…bŅ"¹ŻāāčŸ‚'Öc&•AZ~]č6f—oū„UāV”Zļ‚€›`,Høėł·ļü4ĄÖ~`ęķs&łÄޜ {üõ£v!1‘ %·Į‡Ø„“fÜł¦Ó@uՏ‘Ń]ÖQR£±B Ɨ£zddq¾IŃĪ-‡żĢ Žžõn( ;÷Ͳjéć æōĮ¾1®}‡q9•dŗ~ęßc¬)ć*ł„³LÄa~Mī‚ @Dx@{5„pįF ­F;žB/÷£ßöVmt€'j$£GÜ3Ŗ›¾—tV“ĒŹ1K§ßŽbĒ óć]•;ļBœ8•īĢŸ¢Ą÷ĪĆĀVś˜4ģ¤]ĄC°w2ĒĢŁ¾ģšÅOg§KAźĒĖ_>IĪb)Ć7yļĮd’°81Ž…Å4īųŗEk’i:8¬*_(v`?Å‚iŲ× ²m ą)^7³`]äĶn=š/7.įƒłī ‡Ž‡Ė™IiĶč³;LŻ›žĆ9ˆīĄö8¬Ķ¶¤ķ±čl1ą*°r+.F8¶ƒ‡”†Ģ¬“{|Ł PRĆŠŗš$O QėHAń)Ó Į°†‰łŠĶuMR„ü=$rMČM!¬‚•všĒ0æ˜OQŻ©ĻƒDŠˆv’BŅQn4ä\U0Ńm]]Œ_ 2½ņ1ąˆŗ‚D©tpZ]ét6Ÿ“,ŽO)q†–Ó:ZæfėźŖČŹh?J«3’kWHšµF”J½yĄīć¾Žō8Ł:ē)ęć—ģŃ~@ŁłĆL’Žsr¬DĒKU}^I9)Š!u¶i|–Y7-5Üy&Y8°aJÅ¢{ś–Ēé#ö –'ɰn…3mrP„=hŃw mŗ˜JԘ²–ŌŻ‰iŌM^ŌōX‡:J6Łz'YBŲ“c»®ö·‡6 uGHśaāę-=.JŻR±ŻÕ²°įWWčÅ2°L]‰_b©ńōl†pO?ęuĄM0%5h$,€ĘÓ2‘Å-}ęæƒ5ȐL:‡ūŁT 謣±„«RĢl3…Ē>½Č£k«Ī0LDS KĖĖ>o5j]ÉŽ„Ä"ķ‘Ͱ‚āŖ ˜_SIĮ€…¤$«‹źŠPĒõ”ōv8np}žcēƒŻT‡«&’ķą9±ū@½Cmš³ hšĪD'ÅEˆå­¦ÓUņęŌŁ/ƒ˜;Ą2YéGQ}^GūŖĪļUŠö俻Ϡ’’ūXJš ›bŁHāī|ÜÆÜ!© ³ĮĄ»¢¹q•Ué«»šz¾>ģœ°yˆ¶øJ,©Ć¢Ży«Eä‡{ł„ćPk!:÷`ÉWfD²° WÜu„1čƒł°$ę” B)ØĪ`&Ļs3‚īėε¾Ÿ#­Ć—„ź‘š˜¤c‰I?oņ”ČO݁śĢ̐Y).!ęćéŗdŅ$ć Lč1¤÷lĖEI¢ÆšĻF{TžĢ`{Ø%é0ś_ĻĶ>ŹēžØG¤FźųW`Alg—Ÿó?A‹žgv0#š™ķC’1żghČxˆœź9"s š;uT>ŠŌdK“›+Š+:XA|`EÕ4ŕ;KAØSlŻeåīŖŌt’€*ü7ōīFåōHi Õųbé®øŽŽē=ß]QwZęīøSm­¢75œ]įā£ć„„Ś>ƒqįM1T·|Ŗp„§ūTœp4_ķa¢†,HOAńŲeĆiB©9ž·zS؃ކ.#äŌŹÖƒČīŽūń“V„č żˆuÜC8ÓéØŪõ{HĢ X¹”v(¾ā: Š"šŸƒi<ņP «€PB&ƒ·­ž”ƒ5čŒtYQüUVŠč ÖL÷¹ķCHDtŠś‰‰HŠß…,-˜Š?…l2!+=ŁÖęŃ \wåf[”%]Nó—ŗFƒź¼ń²\óöä&ķ HīŠŽ.–śzˆŠ’¤<„¬tMH µ•»Üƒś'šČy]øqš ÅŻcš1DaĄŠś¬śu¼Ģ-+a¶Ļ1’Øh’łØQ8>ēą8³©z”­ńŸŸ­ņ’ĆVgv"\$Žp FŽG O©'PšŠßNJ@Čߐ^“ 7/üň-Vü»īzŅĖ™²4’¬`Ęķē*ÜĘ0źc5 ƒW•ä§Tē°ÄŖćqAaÄøģö¶®n‘{…ēŖž †ĘĻ–V|‘œVv."Ė>¦|E鲚 v={­Q‹‚#+'d%óC-^"H‘n¹0Œ[ŃĀ›·KšHĒ løo —Ė™…-ņ]„­ŽŽ`~Tē›bŻv^“•SÉ­|ī*!æŠŚ]“*m3· §œ{\z<(¢ge€°7S‹¾Ź®M.ż€tA?ö_LJŻ]TlŠÅŅA9[ūJ±#3¼Ž_æρV*vŖļÖž®*6įBcĄGmÖ6h5‡²)¶ī.‚»ąxć.×Öm¾ ÷&ńõ̵?Å, ŠėjO<³–qi‘”JƒęžÅ³„:”nµb–°¤’[a| endstream endobj 357 0 obj << /Length 3132 /Filter /FlateDecode >> stream xڵZY“ä¶ ~Ÿ_яšŹ¶ĢK]IŖbĒ›Ų劓ņ$ŁŻM‹Ó­XĒXRļxüė Žõ®ņSSE Ž`‹Żq'v»łźīę‹×&ßI[aåīīagMl„Ł„¹Ž„ĪwwåīM¤bu»—Bˆčėó0vMõkÕo÷Zėč/żįūż×·ļī¾ūāµL– %c‘IŲĒÆ!œt#xēŻ>¼ßė$Īӄf=Uć‰Kär1eāŌ&a­CwnĒakS \ēaŚżķ^å‘sĬ“QŃņoß·šź•ˆŗ&ō[»bą”«Żū[•EŽæ¬ZüntG×ńķŽŻ½{+¤éƇE<7Žfo dó83i`u,Ž[āČ<–҆IĆ# tØp+7ŠN#ģŸ‚3KīöRlj±ōÉcяÕį\=×Xšōč%×f«wĆčÅ2,¼;t ~“E]‹ņdŃ8Lo ¦’8M³O:*X%ĢėŻ#lž…ķ%X¤NSŲŲH¹\žx·i26‰ ;|‰&lSÆ/ĻæßėÜ H÷^@דĤ Z)« FÄŚšŠßÅ.¦Ń֍Šŗ¾•Ń@ߏ ­c•O‡łVhCÓĄ –G®ąō&K’Ó¦U€"ģ$׫Mm©,‹Ó\­­µ%m}\W`K '¶ž+J2–6_()ł=•”ęqć-%©ß¢¤¦ų„jŠš„4–‡HŌ/½NGuõž6ų¢‰ŠĆøxÖŃūŪ$0R÷µ¶łgn¶Ų׿…ż”śÕ­u¤8YwĢś04Ÿčń­HÄGĄµšIÖ?õÕčųL~¶Dę·Ht†P©ƒ©łˆń‚Ļ å9ƒ÷ÖcõX_ČļŖćÉŪņu–uęmqéL'K–“OcYeĖ=F² }\µģŠÅXu-‡ŸŽŗ¾tågk8ā&ĒIz©ąŲķC”äÜŃĆŠŒŗ¾ń\±uSŠčĪ#KNhŹH1e1 p 1Ą ėÓ'#“%č)Ū³¶„K²ŲĪœ<Ģmę+‘]ďõZ Ÿ4•ė4v-(¤qŖ§©E[nēÅ8KŌ”ļo‹‹)§YśqÖŌkś:kaf鱔šŖe]ޤT8 ׊t}Ń? `^_YØ R—Č×FÓ»ŸĻUļČAć3YTž{‚[0цķé×; z°ą„_W x^Ćšbś~š ¶ō„›}IŌńÅzŽ#ĢĄ„¦ó"•lWbĶüėŪ¼ØĒ)**čēąś±Ū… ß{‡™Żm€Mćl64˜K“”^“…LęT¦’Ķ<%ćd¶3)SYEr!S(±`>ƒ„Ž©€a§Ł+E!aŅ=’Æśuŗš€ķĄ:@¤Č‹€÷ö]3/M~©2€_ÉZK8)ģmz$ø-VpČ>x ėcš¦yƒā¤1/“{”·$¶z:‚?H Š›§:Wó)½9 (&—ĆsYvgHĄ[¤Y¬Ō“2Ė\±Ģ‚]ŠB‰8Hz‡”²¬022¹ źž<ĄGRܼ€L.°ŚĘs\, näĶĄŃz„”ģ@$üPcfsōŠ’wī“·Wš»\ž„łV Z+J²ä³Ōś“7_D‰Č 8lļ@Ī­tdv©Xą¶z ļfYU‹~ÄRKȈ>ēl  [õ‚’L¬$ƒżĶ“’ŸÆxm>×¶k&Ew½›łį¢,…¹Ąį£÷†ą:Ūå®ł\]U•6±P«ź*… ģ°@léä!–!ŅęfĪL5¬0å›ėÖf‘Ė)eBčÜNLټštÅø™äDlņÉ0@{ÉTqūu1Ž]ÓŽ`O]uąw§¢¦0Č¢ŅĮĆа<õ"7qĖml/ŃžCHCõä‡9ū!ҼRb/ÄEX©˜Üń·ąĒK84“Ē«ĄŌäŒę€ 9§h”\ė@ūI‚&±Hņ„ąźģ,š±j™½É5ģ@\d““+J“=Š3Ķõ§]m±OLøźEŁÕ‡/ĪC5C|Ś<Ķ.l>ĶŁę $’RäÓż¢‘L•ų– Ś·]SB4øšæ ¶ČŌ§ÅdĪžŪ(S·˜Oqf³œøpXÆebK«^š—F;łžŒ†óżĀńˆš#VG‘Ö0F €ƒ3„U¦¢ æruIĆc_”Õµ"^jł]ØkfiˆŸ’ė*JÉKÉé—89@ÜAƒKĄYŚś™FŽÖg{¬ŻžJ²Š`¾-‡s_žoĮĄ2›T¼H ~ŠęGlš&4‰Œ'”Ä®W –n€ąuĻ P³Üē­ŠĆrĀ—H-čń»āŠŻWÕ‘ĻĪPšBŹyš‰Ł(ŠŖ4ÉĪې\.aįÅ?ÜÓhĆč}[5“Ń·L«FffąF[ŃoɲĄĘ«,—7"ŻŚf€ąm&#›ĮĄüĀf˜~–9éäz^z€š…#y+yQŖFߊāŠ“żxօj0Ÿڼ=Y+ęX“«é,{Y¦hWč(^{-×G&‰eš~JčńśüāvŚ„LTˆdTˆ˜µŸšM?EGŠÜMĒ%§|n¼Ū_֚8ÅGGŽÕ+ lŗečŲoKCˆBĶ”€!a°.7°4x$żĆ`mYab>MÜ“,\ ē –‡ś!Āy.¼[é€Ļ/‚ĪÜ«ćĀ›)—2]6µ*ļ—0ń>”aZĻ+Q4pIĢgŸ!ÖµI¢šģŸ9V÷BR%÷BYņ{!}×84å×ųŖšQC„ąeˆ™¦CBÕ.ŗHųę‘āÓūŖ ߉p `Ź#^saXčź‹l¾za nū¦bݰ{E f2ĆØ×ӞSčʇ¢‰¾ē”«k °Ø'n­€ĻjłśĄŸhHQ0œNA(e66~Fu¦ĪĆ ēØĮńuP£ąhSa>Õ¤ Ģ Ź“c:Ƙ9ŸŲ+8;r ‡*Š©†oŖHD‘Ē¼Æś® M”xu{xy¤hSP5ŪŌ+¬ø¾:Hd¬ņüƒ÷Łņėū¬eģ2f~|­’|Ć š+9÷YW—„oö‰š± ö‡•ą=$¦ŽŽ°l ŁE•a¹_d55hCĒ ÷ē‡Ē ŽÄBÉzF±YSŗ‡ā\_"øH¢Dp~ؼ@Ų|Į¼BŽ~Xßŗ)„vÜ3¢×‘ķÓµŻłx"2YE“Ó5!š#„÷l~ą36Ŗ(“Q«äÕ29ooŒ Öćwš >¬øšŁ#0˜SĢiŸā Ļ­/Ͷpr*ā<ŸNndēŻėę›»›Ÿo.v²fC˜‡Ł2Ī­Žš›7ļÄ®„—Ą1`|÷ä§6; e&Ųz÷ćĶæčŠž< ŽŖüZ©åy‡ZŽōPpP©VÅČŚ((8µQHt’Ć÷½Cåo¤²((lq§ķq«$ÜJL˜XŖl•¬J7T=VXÖƔÄńœøą_)2TCTœ]ł<¦D6šĀ’3=…°BsĪķA’…`-QÜ/īp¢KK”£Ū- Z,zļMIŲó`%žŁWMŃWõk9å Xüy€–ī6QdBÉcź[bzńK_Į’™Źi ½xčę.€M.°#ca°ķĮ}y‘DĻmėą¬$§†YĶÜó5Ńiv*~Żvō¦ņ ēƄwIŗ9–"xOEš„WN—^Äš÷ µC³uØ`§źžš.ÖRĻߒ‰cą)j8N~ĒĢćpѲö“b©¦ōż>};ŅėŠ8Qr÷.ƘŒ^ą•\ÓąĶxIŒr~KWąģ ’ŠŃģ‹gŗł‚š±ŃV7iœvĻ–½š ļ}E{¤Ī Cų†3€Ē†FēĮŸ·X’™ŠēęLģyźWR Jw’Ŗ'a¹Ā Af¶R²ąOż\ĶÜõ(¾ėšž­TB@÷™/%G"÷gī÷5n3Ā/„ņ’ ē~e endstream endobj 361 0 obj << /Length 2906 /Filter /FlateDecode >> stream xڽZIsŪȾėW°r¢ŖĀ6zC7¦*/ņÄSŽ<±å¤*ž9@$(!! ŚćŸ·46 \&V|Æ×·żZŃģnĶ~¼xqsń쵓3‰$Jäģf=KŒH¤™Å^ ©żģf5ū4—ńåÆ7?={müp¤wBy ėŠu¹QĶÆ?žķÅÕū7×?^.“Öó›æ^aĆĢo.½™?’łź>æ~Å^¾»¾y©üüŻŪ·g½ųųśõÕ{Üż" gnŸ½¶rxœE8ĻB[įc˧ŗ>¼ł×ŸĢ©DģU{žF›Ģ>-,0ssŸ×— ćÕćžMVÜ5÷Ü.×{y³ŠtĆäŪŻzŻ.».+&¦üݤøļ×Mśė&]"å?xÜŁBia¢d¶ZX“0'æD6Zeėt·i~€IĘĢ­2pŅŲĶ•÷Š+ň×G‚T H§iq›^ ŚI9°³äˆšm划#Y"q•õBÄo’Ŗ›žžoQLH„™»-ž½½\Ąßv:ŠGe…ōNV5÷?ŒVgˆ#šĒāŠ­Œ„)š)iH+Œ2'¤‘õĀp­Q‘ RąE@¬<0ŸLŚÕ$µŻŅnæ¾ō …Ŗ©Ņ‚ Ėt³Io7aāgÜ%«ź¼,ź”Äō|½+– ’Oˆ 05ĮzUīp‹ hfÕy2IŚ2mņāŽ•„,»yģ„i§Ä²āaßU$Ē‘HņbM“®n.~»0/šį$'¤13k$øÕl¹½ųōk4[AßO³HčÄϾŠČķL“ŪE³ĶģĆÅß967•Š6ŅŃR‘“¼i.1e‡‰HĢ9ĮĶ‚˜Ė» |®āÆ/9Ä-Zqo÷Č ķm»ę$³Ź8‘8õĢ*pLeģ˜ŁUVL1«¤Ņ·'«³¦eŒ.4~‘Ś|¾¤˜Ńä` Br2Æ7%Ū[6ɰR"QݲoŠõ?p ˆGS6/…—pž2¹ė>PNŹĻXĖų§Ÿ±±Ąę¾±<›Ž8ŃĀIū$'±H¼’W®9«éÄŁKkušśeNySĖłRpė­LIže½ė($ŠrW¬Ņ*ĻĀ(JĒŠ £ņŠI«r›ęķ*£<1”G my\‘F‰(!@2uJ~›@d#i-«ŌQ·WFÄŚ÷fH 8Ļ-œŽēļŠ ešU§ÕXŹo®®®Š#Ƚ”<ļ9-#…¤Š üšsĪJMŹ  ŽŖ’æŚ-M†¬ŒŚXMI!¬K7Ś:ŽŒ"Žhé¢,`“ä--O„ČcŅā3Cbįœ-°«‰b WŲœ~GčG”L2ɔ”j€,›ÉN[wv@‘²Ew>ˆ÷Z–Ū‡“ ū3n‚ī*«A?5S)³a/īõ_ÄĘā\<6 _čPU5Mɲ‡()=0ZÉ!yė¬ŹĘLrlpi{&ǐݬDqD-$,Øøl˜0AˆķnŪéÜŪ!bœ‚»‘ąŻsR¹‰5ħ'Iåø”“Ēƒ¤Œ…Tņh.’eÓž$|ļNÓ<űˆ{žbĄjĢŅ”0…~·{ Ģ£6bÕ\ā…ŻGę&˜”JØ$†H g¾„A‰ZĖ„éä&ķ…Į×azr5L²« õūX> »*Ž8ؘŻCŁ<"SĆ0äŒŅ14¶)4įŗéę+Ó 7gtjćī éčéUQb]“3tćń}$œÜTĄ&ųŽbŚuy=­ #Ī4hSæŻQqĖD ³ ø›Ł~“uō‰ąŖiM$IŅ£¶iEkpš'ŁWXÓć}«YĒfŚŚ'{ų )p•.  :ą»t LĆ_ĪWŠxӐŲ.`6±čRnqĮ4‡fņŗ=*{¤ 2”WĄT0>­W€ ‘X6†eæI­Ž ­4­eģ©ŠčŒ 8m|&‰ļh“°†żc°†},[蟥RCRåž=”†¤0‹QŚ‚„ėH"nšā·XŻ•ÆÓėCQ"q#Ē,įoįš‹ŲrČVŹøcˆŚšĪ]SSŽąu•ü;†kHIyĀAø¦įž§ć.<Œ" ‰Ļ${8DlXĻ#Äęƒ?jcž4VłīĆØøy@vĄ <„ ŒŃ\Ąh@Ø©7`4ų ZCŒę§1šV^x«O² NŒ>‚g|—ˆ½Pjļ.Į˜M0[ Q±ŽBŹX.wœm™+y;tīŚźNČń0 ½×÷)kžƒĄ„מIŠ®ė仹¼i¦v˜õ$Lł“­ĒLż_‘žŒĄF½+ļł«wo_Np 7§XČ!ÅĪ~§Ś@[ŃZŲ }Æ~žpģYU_ØJ†+MV·eO lĶŒÕ»÷.CTļ&_(óUėVB„‹J«;ź¶Ö:–¾Ėč ī?ēĮ9½W~õę9®žć„ Ę;`U ·õoŅģ˜$šÖŅ2ģüīćͤ­)0q{\9•€õ|ī­! UąŖÉBJĶ”®^A_å®yŲ5<‚Žjˆ†øxÉÄUžŽ%hvęļ =ĘÜŗ ©/ą€Ó‡©6čԁv/“†ŗV‚£Qé×Y—› ė—ĢČøh\Æyel”m©Ģaj Õrģ¹m źt¼¬į!»š×šĄĘ²ÜnaĮՏ‚[6¤Ø~aŖ®…)üj˜Œ]āvćL!ž-ĖbßķŖÉ÷¼¢źĪ³źe•?4'ģ5L!Į£Ł„”“O?Ü( †yĪƍ‰ęUØ™¤MŌ"'9~)¤“²ÆĒźĢVQhŽĪ;g" ¶ƒGOg°;VÆ(|įĶAY¬ēÉ«¤]ŅH<ē Ž»ćÕ¼0Įz\1Qo?ųQē³ĄŽÓ`棆‘cY¹«ńØ-,“ésŗN‚w¬žXŁiWŌłK óIŃY @^rźxž¦ą©ŁļM•mĆ!–$¹~~¹ĻĀ(¼¤‡1\zڶl[Ķ=I:U8ƒŸį£HBRļ ī%6B«É›,Į Ķ ł?®%…7­^®*\¼č7}”Ečmņmögh&į@“уۤńbńlć…Ūy_!`;©Ć”:#ĀąÆĀAŹ©ŻtZ÷Ųpʦ„č5M¤Hś –ą·*ư±:»Ü PĖöńvųōø"Ńķ?=>¤5Ήą'„»ķ2Ōb‘ų&¹Ų:«×ĀĖŽæV{‹BbŌ]ą:J]ļ;ęæqF *ĄŠ£¬_eŸ«ģ`7ҧ#ØĀēXŅo™/Ć7†QEO’XS£‡į›_’&¬æ©JWY˜āĶ"]~å/¾)śŸ€²JļĀ|@ĀŽm`+¼ ‡ĪĮŠsµpv| >Yb0pŃķäqŲs!$ųž¬ K2ž’󞩊‚X²¦+QūօJėŹtõlīŻ‘/ģ 8E W÷)'…ά½B„ ł,žaĮīŠ³…3sG~ńPeĖ_Ńqš…»uÅo@6?$`g’€AĘÉłč+ӚĒ0S0»äJ(ŃV’Øś8¢-A“5˜;ZŽ6iĪĄö%Tģų^Ź©:žž [›KģœŚŻœÓŃc“C+§Üeˆ¼j1F<ßdu(åZ°ēK|į¤n7t ÉŖ„ĘĖs&:YU6éķ“ürŗāĶć2@‘„{•‚ˆ¾aķÕüĶøR©Ž/ń£Ź~Ū嘈[­#±µ-®8u;½sV|ä”]Yŗ(tc£¹ø…n&·ųhßNŽrķ…±¦ć«¼¦@~ŲÉ!S)§¾S$oįRö_ Õ²_ endstream endobj 365 0 obj << /Length 3493 /Filter /FlateDecode >> stream xŚ­ZYsä¶~ׯ˜GŖ¼ƒ%$TŖÖ²ÖY—cW¼Jü`ūĖfsH™‡“ŹÆOG«Ųū"į"ŽF÷×_7&Üģ7įꛋÆn.^æŅ Efrss»É"‘ÉhcR-¤N77»Ķρśr+Ć0 ~ŗLu·uY_Ź`ß]nµŽ‚¼ŽaAļ‡żŽv}ŁŌ7Ü6-yw¼k›K•÷ųĒŗń׿„Ņ„­‹ĒĖ_o¾}żVĘó­DJŠ0‘°SŚ…LpŠEčöī’æ~ĖłW[’ŁVĒ"51ü7~óć»ohŽė›‹ß/pāpß*#’0ޘ(Q¢6Åńāē_ĆĶ:æŻ„Bgéꁆ7ZØDC©Ś¼æų'Ko¹øT™Č’”ęĀ”“öõo׎'3‘Šl4čĖÅį6?oc÷ĶĮ^n•Iƒ™ģŚŖÉw(AlwM‹œFŽņ’Ž W5}Ū¹ĘVļ ‚­čS•÷Žu·wģf„+^LkŪ/×ßāö7[•ˆŲD›­Ō"Ž2>Ķ“UJāX.Ų:’PŃ”~ ćpKAŸ n”U’%hHšC½³ $Qmw0Lņ×hóüń]Žue½głĀŠ3ł*‹(޽€·[^u›÷m¹ßŚövõRĀXÄ ’Y›Y*!ÕØ—āuŃŌ·å~€ÓĶļš‰bź“ÉhRRrzłõß]­č¤–ĀØlcŒ>łS:©Į¤CEsIøZ÷_ļÆWVca“ś<«Ę)”ćåŖWo¾ūU[›5ņYcxo+[ō¤”×Ć08ŚcÓ>r9ÆŖ†T¹ČŅAcŪ }Y»ŃCĒ–NJe¼„ķ•ą}-”ś0*Ń?¦%ÖN”µˆ¢Ń¤ŹŖb³Ši",ķ‚­6¦3ķ6¦3”·ÜŅŹŽK÷—±Ū)Q{¹Å÷ĢĢcu÷2U"‘Ęo茲i¾‘é&Ī0A÷’̵ė()q.#ćg”M”äēYÕ¤°j“\õe‹…ŽĘ;õĀEÉUÆ x';{‹ ä.¦qX—)Ɗ/Õ­™XŪ”0OE€æEÓ¶ ¹XÕAk;š »ŠœÆŪa¹—Ćņžµģ˼*’ė»„ޤźiˆĖm’ÄĮ»qžŚOāT +~a{?åģx³õš$įR/ŸT¢F¢īŹŽ ޱ-Š4V­BŹTČT~SµJpSOg4ÓĄē!¬[ØH2äĘŁ‹07–€ĻŸsćH‹,NüŗØ’F&ņęū«ėÆW¶!ėRŸg ™šb _ż+’żŻ÷߬Jō92Ļbš5¹PЬ(Œ<²śšż}([R/ØóĆB>ōĶąøąź‡6GZQ öø©C\wüAj#”'ńœ?čŠ0S`S~i8$r °)fĪ„£«qÜĘęnFÓj ;‡zŃļ\;æHćYQŽ7mĒmeąRWų@¾j &J¼ ó]3 hÆ{ė‡.¹Ņœ—Įy²€?-‘8t~ŲDŽ…JuÓs”µżŠ‚`k®®œ›Ē³»‰ršö`Å/†< ĒÜĮßbœ6ńsŲ% ˜+8‚W]ą,xĻ  TƇh›Šŗ>ļķühІW¼ą‡³Q9Ėuņ&ēšōjmžTÄ©ō”\æ•2Ÿœh„4Ōöµi p݌ķ įŌ45&xWw½Ķw£h—Øź¹“¢š¾žÄĆ>G!³l)čį,†Cg~øOŗjüPb<YÆŹŲ6ٱ:³1< v×£iĆ ß§¢pdķ6³B45™É=¬².Ć8 b£ļ8±Ü┪—½~2éŅJØų‰¬*mć4e,CÉ=S@·š:®4wtRé¢[(“ö”…Z|`¹<L4Šz3Ė}›:G£ĪIKžæ¤­=ĒGбe<ŻUĒõuŃ'€:E}NņQā›Ō·š›*ĪĻ(„„»ŽŒ‚ē~n$†Ž…ŚŌBéÖoŠŖĶ å|čLŽPĖ{ē”v—žG °ßFsŻvč bŒžé>”“FĆŹ…r£{P~.ØJ”zTīīa?v·„}ĘÆO ‚"•¦Ļ3! ™±åņøŸ"DJdY¶ E0$ADĢbąØ8-؜›ƒ0T˜y^GŖ8ųé2‹8ÆCIą–¬öPX&u‹H?)©^ų’X7žI’aģ"Ā÷@ń:—ZŠIrbä+aMäǤ/p²:›ĻCŽńJ9ÆS{‡TŽ—ˆŗŲRīśv@›xÅ)ˆŃĪ”÷h[WŚŁ¢Ź[oą0ę]°Z÷«›Vi$¢—1`n™<®¼mŁ%S“b& Śōło—>–4ĮpĒ­x–r`ķāF°»”ę!}y“`%F»}ÖŁ–‡yHÅņ,J‘ų !q1(É>/A^nÓDC^­1‚·H}›¶o‰„ €#{GĄŠ0 µ“-”6cŲņ,«ƒhˆ[ę²ĄśCŽsOįgĪ Œ~€Ū2łP ?ŲĶB7ÕõÜzG£°{w+§{/rĢiÅŪŌ ×īć9ÜCĘ¾Ķ<Ą±G…†‚#ĒH^!T„ō‚V$ƒw·üQ7Œč¦χ©±#«shŻŽ³r9¾žnš] >õ8,ų²ŽāvM†ŽÆ^ń¾Jč8Ķ;2dϾ cö§Ē¹łĄ0Œ3+¾•ü”*">Ų[¤·Ä#·² QjģŹm ž"!GīY“ī†˜zźĄ Ś™ÖƦxźź‘›»cN»ÓĘ.ŗ×Š@čpOG®Œ…"’Ś{ įO¾>cø©”÷’ćcEŠzWŁž· ķ»ęˆeē$gĪÉe¾ųUćltčqCĀó`¤Į DS¬÷„6ÓĄŃņ§=˜m%ĄL„z¶ČW>(ŗ•Ż}É©.h¤Ū‡F²ÕÖ§€ÉR±y÷XēG qģ’ īŁĶ ȂĆ3ś%Ē;žŹM9JÖf¾Ę»dæd‚«/¾ąĪEˆøšw‹ba’ģkūp&<õäĄį’$# Ž"q˜&"W^ŃQÅ`ŚošCĮ‡ ’PѬHŠčųŽ^š,ģ°m1xbz>³}£ēO«MÅ=÷pF§¾tTšM Ī$A¬ŪĄ\TF/b÷j•ł¼ŲŠ#V½\ŃŅp ©¦ąBĪ™¦GI\Y9MElFUj’Ä8w»ŗ |JŽG§ĮpäöX”F2IĄ« ĻoŲ~–;>/ļ¶f[|&Ī¢“hĖs ćO$Šh/Ÿ¬g(ŗŠ jN²0ź…ę^½ 0Øõé Ņ®l–·;3ż”bZ› DŌ¬g-’pEæĀӆsģĘĻĒ Ą­Ö6o«Gīpī…ŚŻ£m²+ˆóĻrźPčō$5>ńŽTŃcęėZK‘K§ēįßøJYA\i$JX[ąf2očWmŖ&¾ ēµ’I…DK¤ŸC ÓØ8jxņCĀ뛋’Ö“u4 endstream endobj 370 0 obj << /Length 3408 /Filter /FlateDecode >> stream xŚZI—ܶ¾ėWō‘óģ¦ ī“$ N{‰48=”išķæ^¾åī·Æ`‚ļß¼>żü—Į›üćć·¾ūåÕ«—?ćī/"įłžį£šqL²°Ģ3ę¦1ׇ#,jśĘög\+fzīN3ρįīu4s3ł ™Zļ Ņ4L åOŖ›a~l Sny¢ÜӍøp<Ū¶å-™%¶}=8gź)|8¦Y¼Bł Ž'‘7”sFC?Źä¾Š*Lā…ÆŽĄe¼~sāĘ<“(™2,³ųpTI˜„“wŗm Œƒś·(‹ąO'Eč¾į†3­žŒt¾ēGgŗĮ}8źEGļ« ÖŲ™HŠHó4÷õd‘iź>_LĻ­ĘŌ­v ’· ī䞐£Ń Ź„4xeąų™/ꮌé³Ó× ņīŻ‰ŹĆ*)`õ*Ģāœ—’±”ä1vļĘÓ"ĢŖųs.¼ £Øō„ēox䵇y’Ę>U0Ö(Øõ° =Ą9ĒO+/™÷×ÖÖvj?pæ1­Kų{•ˆ‚†ĒÉĶõÄÆ« &[ū§‹žųęU2„Óßdk§‘ÅŁ2»µĘĖ"‰³ą\§Ń&‘‡2#Åe†”óä ź߇ćĘ8?ŽęĻ„ /M<† öCg{ŻŽ–mn7Ū‚ögUüŌóüŁōĘéO[”T`Sū iĀI× ćÕ¹zƒė‚eui,h.Š0.ĖąļfF~‚Lįxo«įĮ™™·-æD’Ęń »²Ą4šs±h|£ńg+˜—-QFk~Ō@@2Łó<Ģ~= ŪīŠšP3„Č•7fp¬žG˜yR ¾śD‚†Œck ļņ-.¤d0Q)2ȗY'.`B®C?k©š h7°v1ĮėS…(+̐ŚĻp…Ģh!ŒŅBö]ĀžĘUęÕēXa ų¼Ž_ļóŒŪš­³P\o$ĪוFJl²¢re8īt6ÜDłąÓ2•Į7ĪĘ !#µĪn@‚gœP‘ą,ŒĄÄ?„¼µ°@&€tœt£€¹äE¼6Ļ(A¤`LmŪą6ż/Ē„Vž+MӖåʵÕ5łhćm§iĒz ßIm„4œ~Ź™”Å·‹8%‹‚°ö®ZÅaśų’»XZó Ø¦ł±±2äŌߌĀČT%D6QmuA*­ĄkŲ–ą·ō8\ßõŌCw…i'=Żóü :”ŲΆY<ŠBƒ½g@gJŅ ÷8Ļ==OC<Õ;.óŻC.ÕYM.õ˜D9*$=Ѱ#@2ƒ¦˜g:Ā” ŽŲž-R)š&OųQŚÄļ=-ļįƒ@Ⱦc¬šāøus8 1ÕÄMŽc€Ń:䑻W=MĘ Ÿ ŹB~lŃGŠ©]ŲHĖ0Ī’ĻU„µŅ£bhīķZq‚Ž×m 0B"V'±pĘByŁåOåiXéēEq¶. Ąü¬ĘĒŅŠ£mp¤§ O²K%U§ßŪ§ēŽÉ{饷cŹOxµ${K¾$q„596b›ĀnļłÓž€™ZÅk«š„ęU˜FÉöRĮbš”ćą"#¶60PŽXAÆXõ™‚Z°š«®„‰ūt @ö:“āhÜĄ`ģ£ ‘ų‡hHyäĒā^m‡¹oüžŽ wĀ&«{FĪ·ÓNöŠ%McIÄ\āg¬Üžé8M6‘(Oa²+|ū$§GS󐄗^½38{Ęü†‡EæA Hö!Ÿöm;;!«ŁK[ČPń”`ČzŻ!ęņŻØM˜½į©½Œæ@ĆpżÅ…`‡ō@K¬¤į‰#¹Ų[æV”[īģZN|~«,Œ«/dw“, śĆ¢ŗC,M†©`€¶ŚĪšø-hŻ|U”.xĪ=ūÄO‰mĄ“_×75Ēž¢ōŽČä,Ŷõ”@ĆĆĪ×£š"Ń''Ö}°.vńĖ-@ęß1QpŽ#gvV2D$,¼y‘®g_aęIh |ŽRČc„B@ÜmEå„GĀčæŹŅ*’Ō`b“ūÄ};aLZł‚S…!MoÆs+˜#drųĮ³cŪ {,™töWę±v6# cV‰jĮ…ŸÆt‡*²aÅU Ō©A OsĖt#’[—ŠCĀTłSbvLU.ۉ“›ųø°ŸØf@ꀁC²ZĀ'“NŠėEš@;ŹĮ!§Ä3—Ś’Ź»44~ŸøWRžŖ(>ĄĒ-eć>†’RŃć/'lßL G{īżž”ŚĄóę÷†Xg{`(©Ė6ƒŌĪ'š\š°ć“*"¤)DdŽē„ze¤”åÉųyć ”4†żG;!>š±Ž×ö®ĢóuŪ+¹åĒ°ÉŽih:+©bb]•^JeH@z”IĮlæOZ,ņó¢Ź ļJļp7¦_ģ#ó±k4øS ]!._JĪųšyÆ;p¢æVœŻoĆØ%|˜)wė"Ģ«€';“^ķrF¤Ŗ`m‚ĢĻtRwwŻpĀféĮw‹ō¼ZŒsM j– kå5öŽTxDJ@&Bė@ņćx4¶n;vĻĀFĘPÕ¾[Źec¬£÷Uµ• 8R¬ 4ø»“±µ— uģeŃęQYNØ&¾® ÆÆöKžqCĒ QĆ€õŽRLؚū1 A€» w’Ų׏a Ń“ę”¦ÕxJźL)^¼ŖŻd‘ćŚ2#żöŌRŪŚnøŃ8īi”Rėš{kg%ähxĢßĀ*EĶDõĒÉēØt[Ƥ›§ōTÖŃ_õy5³Ųvań[“Dīn|·96’°?Ž‚· Päf\€™.Įc0Į"Æ'`œ"``]ݜyļI=ŽG Ŗé¬pŲW‹ŖxUP\÷‘ÖNQ: 1 lMRŒvā0;Ā ¼7yĢ~5’ÓØōĻĀvŒ’d;|ƒ!ŚĒ>¼0b“AĪ[‘EP1*>ö­y¾B7 XŠmē> stream xŚYYoä6~Ÿ_ŃyYؑGģb³<‹wI&—ŁīŗŚ} x¾’|żó›Č¾¶ •ą,Jł.”1Ė’˜øžˆāč’m·YpßīC)e0vų«‚i€MniĒb¤UÆæLuÆāõ@ō›}2ō±@Qwu׳}ؔ Ž·ÄYō½Łz$öŗĘ¢EĀXcŻŁ³‡©Ü‹48ŅS1l®ą~ß]Å|}}ž –dé.)KҜ.VuÓM£IĪĆ'łł{õīJȍį2–Š„šWIJ3ĒŽC°Č'†K–ĖÜ1Ż^ó-qlŠ8a"‘ŪkÜ×M–Ms°X ¦jź?µO~"įéxų}öĮs–ÉÄq£=’ø`©z~ć'‚øĢ1mõLGˆ†ČDW}:7uYĶ#…ņGM‹^Ÿ x©½%žUą®nōI·ćąSU$œ©|¹4Å„QWŸØˆ%B-¢„WTØ Óx.v!ø6zĮŽ›ČĮ”‘"x_–]_‘QņŲä£ł5FƒÅ‡Ææ¦¦PUōՓżµįŃYRå>äd\=¬¦’’÷»ž&ĄĪ’‰kxFæ–T"éX“·ŚXā6ałĘ6Ļóüu öJ’m*ÆJiH„ürF«Wd“ŗ˜ŠźRBg,Ė”/”U &4."rRŹ¬Õƒ+ŗŽQPĄć%ėČ˜cęE’AÄ`®yµāb¶Ļ „`ĆäR1mŅh6Į¹²ØDŻzMq‘_*,™‰!Ėt3Ł[9«EAY8ū”Ł<§@{Lfr‡.xØĮKå“NĮJ Õ@ää…ų‰qe$6ĘF.Aˆö±o¬ ’L¢ 묻ƒøŁŃļL!UĮµć7Ós؆G: x0jGŪØY«§AŪ“8÷ó®®4 ś9é¢5¼©¤ŖFšŠTG"XČ+×é…gwŽCߝÜ[ö¤J›ņŻXµgÖ ‹¶ēTz1  Æ ʤøęOüo¶ļöqS'h@΃ŸÄM­x fõD2Z-=C©ū:9qYv ß ŗ-ķ»¦­Ąļ:6%Ž!ßE 0Ģ 0ĀÆ X? ޽Ć?š”%Ž®µ¬eŃŅÄĀW`ĘŪ©·üļųķ—š1Ž×ćq9ĘD>h³NŚ,c±˜³6 Į×h¼p«ĆŠ›ĆQĀ’h®ŻŁŗŽyK™#!óøäOīÆmćūü?Ö{ÓĆ ¶Ī»Ęī` žhˆ®®„·ŗyO÷G]ŲmōŽe4‰ŻFäĄģuŅWLŖDąuĄM*H”’štć">Ćcx½ĻUŠ…’1ņŅ8ų”ÆļöąqŻ{ ˆ’“ĀŽųjŸVm™Œ°§->nk]yDѵęÄP}‹{ŁģU$›ŌĶLźDōZD÷ECŹ]h4*TÜŲkp‡ą8dō1XźtžĄ£^Gn¼ÄP%<8NÓ¦įé€s”-nĶ#Ņ„­*āØ4žŠ)9Ö¤ Ń;u žO—#ø$„ u®ļPŪc7pgvæ·Y€‚”5O'ū:©n؇“™ˆŚ—tśA—ŧ’¹11žę9 Š%g%ŚÓ`IŌ#±Øɀialb^\‰;łn üY¾9õ[øORēŗ­’2†ĆgsåuĒzLõšŹ\qRōIQL(ł·Q”0!ÕJ ÷é›2‘®ĪÜ«17¦šcŹxÕ;=g9‹¾ Bō2…ħ¾„õ\C葐 `ņ¦”E…PŁöŠ~ ڹ§Ä”]QU0evj#5™?m¦®”¹ķŖ.‹Ńž5:}¬uUóWĪE•™mÕ錊ƒ1č‡sc릊2£Šr~¶Ćg ~ U+I9YĻŠ`W·AĘ tABŃ[fš£ņž]ér|­=tļõ”£×r‚ĻH·Å̇8”1…2­Ü瑨Į‚†2Ų€ĘxŪ'S„~ļNš6®°wżŲmˆsAŸ`Ūkђ¶(Ė‚z5keøˆ‘':/&Ē õŲ)Ī ĒjßhK1bcHøĘ.lŚÄ 9ĖćŲA`HÕH:ĢøĮk¼kšĮL°ų P’i™ō€BVÅÆ]Ū€ó ĖłńĖ“ EÄ - NÅ&9ųÖéRFėyµ" ©¼C׊¤v[½`Ž£Ÿ¬Ū@8LĀ‹–xĆ/“›F¢˜0³Jū ¾|RMQ®’ä#„lĀØ•€HNšMbź¾’3 ų®Øŗ¦|‡fø_vü§·Ę+šŲüē(•lŠœl*QÆl¦Ź)[Lcw‚Kch>ćŅņčó_Ÿ~+vž¶én%(O¤y/IÓ¶¶—4_øTŠX­ėvō|ŒtŲ$c ;³ą&…’Ÿ*D90⦫ųR<`ŚĮūŽ’Cp–ńåū«­)>å¬&bv˜ž 5Š8Č*žŚw“–f‡“H– vZź|=¬¹āŽ73¼\/ŸæĶŒ,öJČŒ”€"|³eŹ A-c ”ū¶² ņjźKkģ’€„æń~żžxżę/µ©'y endstream endobj 383 0 obj << /Length 1655 /Filter /FlateDecode >> stream xŚķYYoÜ6~÷ÆŲG-jŃ” ”|Ō}8‚D(¾ÆĻ²ź€(²¹=//£Õ}KXO¦mU;„„1aœ÷änŅrÅHȂū„½;ß>JڧŹJ ¬'vēb‘pp„DQš‰ŻņĘMC‰~ƒwIø«ķS jDaN>“”į! µå[p;pÆŻd8Øź|—Io:]Ńa“›¹ėŗZ×É_ņŸ‰¶n΋Ēķ7ō‡¦ĒhģŗHfuÅĒ—=ęč—®ÉĢ4€Q…3iµ½īŚĢ…|F‡1bŽć¦čz+ńÄᤸCm”±ĀU«g•ėu»ŗŁ}¬}&«Æė¬› &– żT«¶É’%12BøÅB;pLū³„ęļ n-ÆiR¤]a ­' $ĄófSvČ HT[ŗI?ŠR/ō~U…Ńž&/×h(psŽi¶ģź¬łŽ™§į®éŽs€Yš·ež•mŸu\æŠųRĘD4JX4H¦ĖAˆ3Ā™˜¤Ņ Nķ Ō‰<ęNR…$~+IjżHi!`ŗ¢µ±${ļG”QH±/$ē§"1ŃƒÆ“{ä4÷< 9ĄŠŅå ¢iČ\%iu™'“ ųō…ĄgEćJ`Š`«ßLüļ }ÕBX½tˆ9…:ųy(sjƒĢ-£rą—3Ø(C:Ą› ++u‰ĀIė(ßmūŌšĒ—¹€š &2ŠīšMÖ4#¤Ń8sņRqęe„å’ÅĘӑĄ[' ģó€ąCĄę*}}øuVB’0Š&UÜ/w˜€EĒ(Ų¹;ŅC!ö0įYõ ŅŻXĘ„$./Ģ͌An­‡‹ĘĢÕU&Ė\gĆp'«E—0BA< ņŚ›mƒō«²øÓ£žņ SöŽe®}VŠMR¬ģž•ó'’³‡Rō°C²ŪVnóŽZ:„±HxH>#æL“L|6ŚeĪÓX£©zŪ%-Ī$Eƒ”Š8ĻŽ©†bčä<æ8æŗp1÷% l/oņvć,E‚]óųjīK%½Ÿ@ž8ōr§gP"wut¶ū¢_N7;¹ŁĪŌ‰¾„›KyŅź¶Š¤`ˆF?„—ąkó±3W~³Tצr‡Æu¶MtļD;µŖKõsÓƒ«¾I‚k|5Ž«©1¾¹5L*ńC"†±³ vX|É#¢«Š1~ŸdejŃD’ćPŌĮ@+w»3‹ó}¶ćܝD€2ŻĆbWķ“ˆ NŠŲ“›eĖżŌåø˜™žkڤޔub³ļŠ¢ĀĢS5ł}U(16¢öq§ļXĮÄŌšq“ßĪZ˜vpø©  “ZšˆY±`aՙŒtŸė:¹Ģ‹¼µĪ„ēLuĻDßV[MŹxIqa©K!‘Õ}a„‹¦SéYfGæ¾µģ–f QĻźóVZs‡Ė¶/C>«[ŒxA,Ī×›ćõÜ^+NOčFŸ !‹äŗćhrˆéNŚeŒ7hWȖ‡s_ŃŠ{õśŻož/–Ŗn÷cTĮĄvŻBŻu³A\VUW»ŠÕ!‡ÕĻmĘ}ŹRCąxqšń@§ˆ*š€&@H‚8˜„ۃó :[Ā"ˆb|ęĘlŻBŖį”†­bvvš;ž•›[ ˆˆBCKĘÖÉ®’t|żÆū +i”Dļ’ēr†ųę[_óÆŲgĪg’=K!l endstream endobj 387 0 obj << /Length 1449 /Filter /FlateDecode >> stream xŚķYKsŪ6¾ėWšHĶČ0^$€éōŅiÜiķtŖÉ!N EKlłP(Rvüė³ @Š”![ŖŌĪų$Zģ~»X|»€°·ō°÷Ū䗳äü‚K`¤°"ŽüŹS)½P2D˜ōę ļ҇įōŒ`Œż_«t;„ŅOŖĶōŒ1ī_M‰_VfüēŗNóō6ŖÓ²Š3ĢŠ…üQYZ$Qe¾¾łÜ“R›éĒłŪó  pJ¶Ę)ŃBl!Ÿ_d(}ĘdЊŸ±É00‹Ņ¢6–ŠŸ\&§(P¼3q~n…§TųM®ü4=ƒqnūsye>Ób‘¬įWŒ -lmm§AąGU}ŹėÅ#³‚!ČĪladöż!!bõĪCW{žTķØ>Å3ĘQ˜2J„V’,ĢTe™Ż3kiåŚūÄĪVĖ&ļ¼uĮī ·°ķ.,ŹBaÜ\ODģ 3÷MĘ5¤+ĘX!Bi§īĘ – ŽcW‘uš“ 0JūUóp`»},Äˆī‘‚ŽgŲlgDÓbb¦zJ¾Jó> stream xŚŻZŻsŪø÷_”¾Is‚OL箓¤ĶM§™&N;\h‘²y•HIÅq’ś.° Ф ;žÜō”OpżžķR|q³ą‹?_üéźāÅa‚³Œgbqµ]dšeB/«˜PvqU,>-„\}¾śłÅmĒ;„M˜•łMjµœóåėŸ>ük}õnżńĆėÕZ)µ|õžķ?^æ’ąH\p:x~ź:[+ĆlbäÕm¹r+ĖŗüŚćč®mÜ`¹)‹CK«łn׬`ī¾Ćē>¼v謖¦z~Ņ%,‹e»ĖmÓīqįoå}ßŌ8īśņŽH5õīG·¹;āKUßĢŁ4m[vwžVM]ø Ą)p¹Š!+}Ž;J”IŽćļm^/'’9JȈ±„Tā„ÄR%‘`U‰_ó'šśźā· ļņ¼˜p¦lŗHøalöŸ>óE‹p5¦2»ø÷[÷ ÅdŖ`“[|øų;ZÄōd‘(–$@ ,#£Ó»f÷ånxŸß\֗_/Æ/÷ؗ¢„iį%°V’„:A9F»[Æ©Öß] ©?¢™MMChÉL¦ƒ™½xlĻZe½ÕöÕ/\čMŽW MOmŹĢ:›hgfżœ+ų{ĒŠõŲ®üb³„‹ÕEI7­żķ’Īś²2f™·U~½+;‘,컁쉅* S4gĢĄ<Ń·¾‘d–0€×o*ē£ž „c\ń|(JPm0'|(äų³=(æw’Įa¦.Ae‹ ø¢Ķ{ØŅĆjC+×m^#8+»K2‡pż£H ŖG§+Śj@g8Qv›¶"(pŽ"F¦ŁFfČb`ĆP”¹ŁCŽs6ķ~GĀ(Ć)ī\W¢õt>ļjw’[SHöķĶa?€J7SŃĮUßÅE³÷ʃ%©Ń›;!%\±ė+'7ĢļīvUŁįCµÅ_'hښ‡AŻ ź{ĄŒ+Ē…®·īq¢’jM+9¦½sCQŚ5uōŚU=H¼Žšó„„CˆŹ©x‹ø‚”0øæ’ –U)6 †tŽ „™ŸĶéÅāŠbwę 1ĀŲKWy?š“„,¼ŅöT2ø•0æ¤RśŽ<ģó‚<ÖrU³ŠŌ L%3ót÷·•˜‰!iabōA–!0ģü=Żŗ& fŻ»½y[ąÄ~ä‰ Ś§;«;Ø whKŠi=#,šī²8)r®×µ¤BŃ&ßµe^%H|©ĮčķļŚ‚Uū€OƎ…ģī+Å`ž5%ˆ.f_Ü%_–čOż§Ė/±H}“‡R]$S(äšPYõ­ £zā»+/ņCßŌ;9t¾JĄ}GŽOKUäę«w°’H€R³4°M…ŠŌPd)Õ)š~ņØFŪ«Œ€ÜG}ĖvdŁ€EGKø¼ÕöŌŃĻ"sŽ5•y;WųY¦ķPEūkiS ʉļWĒN§ļ7ŗ”<Š–‘“ „ߟ1ķ„gĻØ5ėø(ĶQe h?ķč<¤ õ ¤»z†„»<Ō(ó£Ķ|S¹ż{)"\OŠåŹ4^Ņ»†¼*¢'M<ˆÆBŪƒ~¼„ Ā6'F UŃŌ3]{š%Š“’kÜø€¤{ܕͬ=”·¾Ś—„ÆT’2nķ`•ģ†]FŻO1žø¼@1éøNķ’_žš§Ć3}Õm&ŃRAŗŚ`†38Ģwޤy\Lf"¦ŠnjG»$³Ē^Å"ŽQĖʒō.ąŚUҤ@+|§½4åą¬ĀZ–œ~fŃ*ziŅ)>™6ÓfFˆ„.LˆpčZJ¹ü!**‘|γ¶ž組nÜCDv8¶1ŁĶŅ"°.Ē‚yXŚ2ė–„źX usITäwīŽŽ1yĀ PyÉøß'ŸõYK>[QbķflBĮE@r,āJ0ćąń»¤} ų=Øó»Ÿ¶Œsł_;’&{"’C>Śö]ןĘX 5€zģEƒŃZčp£ž&Äļóss’QÓ.(S|@d4ŻCh1ĒģY#žeߗŸgb§%ĮõOÅȋ߮$ŗ÷Qq%LŞž!*¬qR™ŅĒ'yˆJ#HŗG„C2”rĒ)šŽŹa%\+ü’Ē›»ß—»ēČĒA#bņąP×<^F@Et„cm¹Čnćń6`bčīś:6]~ģ°nCgŌŻr©ó&a€Õ¬R&ĬhŻ.oŹŗl}«©Ńą$f Į9åc'å,Iž8ńĢmęŁgp¢į +‘“8·½Bįȟ„~ąe¼Ž_ŚyøŽ8蚊v” vdLŪ¶ŁĻD »Ś)@ÄyüGJC-ōs"5fīžöQȍę?•K”ģźŹ“7Ķ„’÷ĻģÆ+Żæ)5†ęvļ*jÆR½;xÓź»#T(Ÿ’v)¬ßā?Eėo+É܈Ÿ:÷ؓ±m†æÅ’iˆīæą¹ö endstream endobj 402 0 obj << /Length 2700 /Filter /FlateDecode >> stream xŚķZIsćƾėWšHŚbOļ $qUJeOʾø’‘«¦¬Ń$A6 h°h–_Ÿ÷zĮ¦%MR•KNŗ›ż^æå{K“.ītń‹«ė‹7oe²`”¤4e‹ėż"•$er”A˜H×»ÅĶR¾Z3JéņĒŗxXńd™×Ķj-„\īWlYÕīż×zW”YżæÄņĒāe"ÆóŠŁŃ’ō±ĖŚ¢*›Õķõ/oŽ25¦.9#Ō0`Īę]PĻīüłę­bć_ÆE¢ģĻ×B‘D+·IQ¶Žņ¾BNźjµ†Ē.’@m³»Ėņ²ĶŗĖ]u¼Üåw—ļa˜!U °f‚(™ŗmšƒūyė[”pr’»ü5v&9Q© §yóĘńŃf÷–…Ü};‘ĄäÖ Ēķ6;]Ųβ5?\ł,½ī„ēŁ+YaĖŚMV{÷lŚ¬ĶŻVJ/³ŗČ6ĒÜėÓ ‘­M ēŸ'ŒpͦbŻUlÓ½ęĶ6;åcń>«³SŽęõó¢ ¤{فī_C̤νd@Uvģ¾ĪŠŖkÜ0vü>ņ»’”mWsÆce¬÷7åķ ŠųžŻ¾†«ėU"–ršåa[9+×ŪĀŪĄ£X:HٶU·-Nd¢÷1^ւ!p¤`d),fnéĻūŲÉįÕ Ūī£‡3„÷0T Z9_:·­š¢õ(x‰ć€­›벦éNłĪ}“‡¬²āKYhĢĄ)ʓ`$|ģyj&yé>QၶŸŚƒ`™…Ŗń̶0tČŻ{ƒ÷Ži–UŃ«(¬ØĀ‰ą§īP oŹI’Ģœmī cõ[ ĀįßÜ|ˆéī=:TžyČ£ņģēF<§WAtŚĖp G±{fµ÷£ģXēŁĪ‡°mĪ“m‰;)K8”BĄKJ7n‡wݦÉ?vŽåŽųCŹĮq;Ź–§ OöÅ}lX(·G°/»>žŗļŗźŚ¢Œž3E4ӁuĄĀq;‘DŃ^•ߌ¦ń&ŒĮkē°¦ŽÖö>łÜqtœpŌxmkCØŅ3m£¢“XęŸļ¬EćÓ6BŚawXxy²,*?ŖÜ¢¬ÜE&%:–ˆĘIĻÖ4)?oMB£¢N÷]›OčAn’ «ķƒ<Č>ź<ßOY[Ūަ²—‚Ž[ĶļŒocņWšH> ¹tR›ŚXgˆįœÖ$ ZA‰N“'å²…!©”v!RąhįšæJŒ·ƒeŒ/F«>PĪ¢ųʈģź7+˜–ŠYRnųļ«5¤_"ģĄĻŌŽ=āēā§ė‹ˆ”@mĮÓUŹ„€jŪÓÅĶ-]ģ`A$üņ“]yBä„w\¼»ų§KQ§ ‡½ ē`jĀßgƎdĢĘÄD^4&Ƅ¤*Y¤„ęrĻØ¬(ƒkż¼āJ-’ ¬KųŃ3ųŃÆ’£U’ŠĻ?PŹ#;i¢’y^5åIYĮÆG“¢į|—ARĢ­ń ×O@` m$Id:€)¦ß}ēLų·ØŃćę½d~xŅŠŌ ¼Ē‡•ĤSS*c“R ō£UĪåū\Ė6/ŒZמ<Īnå҆Ä]<]dP>(©fRŸ×š“_į#ē -ɦā-ā‚°Ō‰cTźŌ„?$ä`a„s.Ä;¬+l}d"æöYļ`Ā×W8°‹ŌW8ž‡ś 0R…X„'‡±ģŲTnųSŃÜ © tDfŠŽĄå¶;ś‚ `,ˆń—l[mЬŒW*$DyxY\Et¾lŌcų˜»'"’œ(}Ą³YˆWHŗ|ø‹¢-ų^Ÿą}Ž:*³tüō)š÷,|‰£ ”BåYäćĄsšL‘oz4ž ByŗʐDČgŽ7;Ż„ļŃéōPÄ4 P‘„ē`Q°ŠĀ¢ĆbEe;ĻĆ¢> ‹ L(’Ÿ…E&  Č)ŹśĄZ2ŌX0ą!$Ļ3Å] ݆Aū¹hZ|ÕPŚLź`h’hŽĆźŪ'2TjäøōĄ-8 4،?ŠQĪiWœ\ķPµ²ZėT.Æy“»É>¹±o³Ņ oBG« "Oąp`_W'·Ī§Ü`/`†Š)6@éķį‡aQŠ)-č? [RlōūŖģ¢ˆķ'l¼­śįLF:MLĢų…™)āl€2L\Ży³{Pś}]XhĉгÉ,®°ū@šYįēėĘåŹ„ŹÆ 9mų­S€ĄTt¦€¶jmwŅ±ų1\< ©øLJōŠi»Šš"ÄtҘ%[b=$öÄ(3ŪļeH?ėĪUÜq¦FiÕŪ3Ėė¦9ršn.Ÿ“?Ąn’åßvQ$DĆOF$ĒŁ=ˆßÖ<šģa jBAH}Õ/¶tgī“uģŠ€"¶Ŗ 5ž"õæHŒ‘XՂhDn Ęq&ĘqŒCĢDØżVPXžĮ|”"1šOāŠ£4É$cpmå4I§įlVĢ“ŽBBŌ_‘å”±ćPÜŹŲåkŸZ?Æjkc ķ—nŪ6Ĺįõ!˜‹Ō”&—th™āĒĪŖē:ąh~‚? ąˆ|9Wé YÓd¶Żžķ ›_„Å{lŽHķiåļŅČ;7•»Īī±ė»Īź äé:Š&4…Ÿh¾€ó!ˆŖ‡ĒFjū]”CBéejęF* ó F*|#gd¤óŽ™& “‡{™4yIG$‘½ī»ŅöPĆ҆ɾ„5Æ÷Ł6ļ«…X}y>¾¾PA@|čóMhŽŽŚŅõPģÅŃwcšæDļ>wÕ±óÉfĻ¾„<ā ½Ļßuäw—æ_^]–_Ÿŗģų’µĀćZįÖĪW…0nZ½†+ŸÜł^lP¢7ŖQ’vÜĢ7”ūM÷WßČ)`\wl£ńE’ay<ÓįP-ō‘Å}“šJ™ŌĻ—¦€oüģåałõ;°xĢל°ŗGŲr©°‰ķā~EĖė*h«[õ@ĪLā$m‘Į÷«AŸ 6G\ØŅNµÆź“ĆŠ>ĪĮĢē“±ĶŻŖhQøhćŚ+1pL1Ē0/GŚcc×øĄ¤µ^@7«ėlŌ2Ņ2ŲĶļÅT~}"+C ‚˜ĻłŠ”q“lˆb÷]īxņĖĮ²©!2?AĀW2¹¦ń„$Ä,Ķ'j“ĄD’ʏ&oĆØÓ¾gīᯧ‰Æ*šåLBĮ4°ÄłK®” Ä櫃†æ±„Øæ#*ż%r›5P¬€mⵁćŽ?‡g )ĄūĢS|IŚ_IHe¬ć᳿#ĄéöįѤ‚¼[&ÉÓ` Ƃ Īrp—cčSk“į–ĻMy« [Exn Œ‚\ƒ=c"Ź÷ø‹Ō¹Ūäģ]W`}Lg÷,®é•w6O:†2ć»°—$(½Ņ›žš-k‡ 8«l÷YēmWGC1de¼cĶ”6åŹÕMq{óĒķ͟·±¼^Šq"õdGO‚zÆ£žæ(E\žr|Yüg¼Ó/†Nµ- }aʊY:NeŗĆD4÷›ĘS7H‡’ ÷‡˜7 endstream endobj 414 0 obj << /Length 2319 /Filter /FlateDecode >> stream xŚ­Xےܶ}߯˜'§jK/Ī„J¶äÄ®$н›T„Öū€%±3Œ9Ä$÷¢ÆO7ą\DYZG/C°Ń4ŗOŸn0^lńā/ß^_\~Ļå‚ǬŒK¾ø¾_”)+yŗČ Įø(×õā&JŅåķõ—ߧűfRd¬H XČ)‰åšĒq½}}õŸõõ»õ殎.×BˆčĶĻ?üūķĻWøÄEģ7>ßu[ ɊLŅ’?t°B’FfŲj‹C=.“<2vÉ£ŗ_”(‹`’Ōvj°M„{26‰7€³°“Lƒ±ßz¾ČY™ĒN„`I.kĪņܟūWŅ:5µ``Ž‘ŅŸHIņ“ķólŚķ† ¼½”CÜŽüz;·tš0OŻŖeRDųćØčŃļ•ķ›'žI²WĆ mG«[5ų—˜§mŪ“øńĪTóž)–—"ģ={ņ’I9il¬A{†Ŗ‹usV%ųO0™–¤ō3hˆRR¦ŽŖ¤/«iŲi]㦠Iīš…iC“­é{’ą!šY™Ż~ŌŠ˜Nµ¤¤į“YÕč®zöŗ÷ōT~‡f§×µŽÓ]­;“ßŪdlŻtŹ>»³ÄtĀŗ…˜Lś yō~$:3P˜FMO“V?ŚbŅŃkć§Õ8˜ĪģĢčÕīŻ‘’xĘJ‘ĆĘąä$£ÆŲiįµf0ļ}šOš‰ČÜÓüß½y»®mC˜±ż,2ó”I1ģŽEŃ:GGµž »_š)sTWĻ-›$,rRŖŖß\1cIʃ2ś Æ yX5¢Eč7<čtĄ­V5RŽŗżśøS6ŽEŽćųGU›¶ŗD÷€k.M­żm’…g0MeOšŲ [ķŒõ§Ŗ5@µÕµBœ0ĮOƒŠt˜ąŅļ­~?śn”õswŖwNÅ:ĻT'żW\/ó£īj)ĮāżŹ£ ßLk,¦ļ x ¦ēłT(v@\žO°G–Y éŌÆ=Oe’œś {g_*<ŗS‘8„®ĆóFÜҬCœ“d·ą¶\†Śs.8}KœtM LPąx„‰#‚aCWēhU]͐b“B~YžĘQPćp<؂ŻŪ^UhÜÆK )»ń*ߙöŸ( sNXkJžÖ—:;slXįåłlØø[ćŒ¶Üӓ\øĮIŠu3'śČ‘åD¦šģĢ@¢HʬĄōŌ«œILOņöŠ^ˆœ²ŒZń{WŃÜŅŠŽū]šy(?n±~€ k÷z?Ē ·w(J·>G‡8•± d„KO?wŠč¾²·”&š €+y2(˜oüęa)ŖM«īZæĮ×&éZ£üŹĄ1ŸÆŪaŲsyłųųČŖ¾R{ =c7—V{@Ńe”żäɶĆn.]Č×2ĪŽZĖś‰æSxzÖ7pI}CīūšVū“KžŲś~ˆL×ÅN=G@č£ Õ{šÜųˆœ]dĪ:Fļ·ģĢoPOįm™ź Šģq­„›ĮäĒ:/ؕ×H݈W`n_Ąš…7ńȳ±m\́;;'¦BٱUšJVé«VßYĄäØC‡Ķ‰Äšo¾Į¢[ę ērž"ī#ÓłĘ|§Ā%¤.…„H=ÓQ¾|sņy嚙哐D2™…žŌoGt wļL»x{}ńžŪ+(QīĀXĘÉ"‘9Ėb¾Øv7·ń¢†I8e±xtŖ»…`‰+aķāźā'śøt~ł, !—n­æŗ ’UÕ/±ŒµYķVŻŹ†+ŗVO«W]÷aõ 2«^Y¼B²ØąĘ+÷ņ `ŲŽŚŃȤb°Ž8j``ŗ6ąž;EĪ ß;k¶tßü%¾£;_«Ķfo‡iĀäį{Ņå„ogÕtAwéRūŖ†ßҊ’oęž²Ė]|xv/1Įm8īš@ÄīC…=Īy@ĪĢw”?øBhäĖłļDōČŁtQŪĶžFÄ3NžNÓ}õÓ ~÷yrøõÉé‚0Wa—…łóö%'£įF>ųœ¦Er\„;šŗī/š!Mń’Ķø”ŻŒ»pŚĻ‚*|Ķ2ć]ų.štÓŻ¾ŠāY7§ž#%Ž×f}—Œ'ӗ”§Yc —0ž} 3Ż‡ÆŽšĪt“5ż—'äŲõĶęč ėOo‰nĄČłoB¹»Éxē>żß¦ 7‚`ĶĖLöe܅o˜/³äQ ©ųŎ€H¬1LŲ³9N’RTO81{¤Ųž&}ŃžŹZåŪųc€„’Ö“d4 .WžĖźg«ķĮŌ”3ÉGĶ-ąRõõk”Ü’zXčbBÉż‚ūŖræŌÕ+ļŪPJ?:>œą+3æ- endstream endobj 422 0 obj << /Length 3541 /Filter /FlateDecode >> stream xŚ­ZIsÜ6¾ėWōÜØŖˆ&6‚¬T.©Ä3vՔk&ŗ)>PlJ⤛ģp±ģüśy @²)t[Štjl <¼õ{L6÷›dóĻ‹ŸÆ/Ž½×ŁF$qžäbs}·Éuœ ½I3 •m®·››HÅźņJ$IżŅÕ_.eU]y„”Žī.EŌvÜžķPt}…m},Źö¶.šž»E³}ŗę_UßӒĻ×ß½fI†–"N¬*‰ipŃEāč~÷ވåź+•Z~„Lœ„†’Ō?“Hk7šŃu“ŗöPÜ’:Vh›\ūcß½cJ‡āpy…×ęn½­šKi£”ž=ŗ,†ŗmx·Y~»+”b£sŽ“nަy tąøĒ Ż-iQĒ“ķ#¬ŁVŽŅ†hĢ"w֗Kc¢¢«‹Ū]å.“£c­Š­Éü±M“$™ńKP¦@pRHæhÜGĘi2õ^'‹Dƒ*Mbe,sЬŲłĖĆKX \ŖAh«obq“Ź)iYģvNoŻI}±Gv;łŻżø÷ģ}¶Ü·ķĢē¾Ž4Ÿ_HrP°:bs,0T“<r’Ę× µŅˆŲŠō”–6½¹ž6móWÕµżó™76}}ß°€”'„Œ«¾"_ÄĻ®E2śP½ž˜6J€ž—S¶»qßx'õLZĢS„śRģĘŖ1/@W( ÆO&h£æįŃŚŗĀžF¾ˆ€¢ė Ē·c%)[Öó®Ż1i:Š}5`ģĶ›1-:‰O˧¦vč<‰ömWżpyed 8–å@éaxŚ{D;E-:÷ož 4jooäģ«ŽGļ0čįŽó:^UuM±ćš,]Õ»Ÿ :‘ąU=O 0…9§*õ‹Ü­ź;ęƒiœyūuzŃUŽuG** ©d-³ub ēÄtų}źf‚z ,øeyŽĖgqšŚÉ DĢ8ąE…\_˜¦TĒZé³ ¼a6±‘dˆGL (\_÷CՔߘ±Ź` Ź•½D Ŗ5ö$-Eōž2SŃŲĮ„:§uŅ:Րiā/×ĶŹĘÉĢĒE@ū) Ā"«lŗ¢d=3<`ø’©™O¾›’L’»¤Żø#* ī—8¶µ28öXĪę2ėd+pߦzäF ÆpƒondčĘr‰5 Lć8U'ĘĘI¢B,A–¤q*ņyy?ī†žO­žeeƒFW]}qļz¤a€<¦é‰nöE0u(“h¾»DÜĀ:ŗū]×4Љó*Ļ#°ś/u;ö<Œ¬5IµŽ®żŠrģ:!y€y]ź#iӞŲ[­e—kī6oø{ėų“ūZ¹"©üē+“pĢnĄŁj‚å±s@2‹ssĢŗ«»Üwķ8°ē…ēyĮń Ū…Œ³"BH Ń"“ŲŲÉÅō€Č 'Rl¬ą»œ ­dLĀ'¢÷Š˜}Š{G6 [¦ą¾G5`ā<5Ēq¼jZ2dšŖ }Ė-ē&e“«š{°Aj³g\LNō„Æ 1›'^üz}ńēŹąāFZ ČØ6¶ąAĖżÅĶēd³…ɏpōy¶y¤„ūŠ„EŪÜm~»ųē+Ų<–2„½ ģåU0ŖYŲ[.åW7÷«»u”Ć=rĒ”£ ļÄH“NŁIłōš'Ó,}“kj‘Ėņ7»¦Ć€v&ie×Ė]¬-™sÆcŖRņfŠo_0ī˜"%ā\™'ńžB- õŁ%M äĀ``Ö¹¤¬-ňčZĶ]ŠJ€!3;䏰(šT` ü‘5‘4ÄķW "­Ōģ{fĪźžW”'ö$Ķ]_‚lų·0@½āŽā&Éź¦Ē·xØśž„£Į"Ī*`QøP&›0€2łą×ēY =˟O@qgx‚±Žƒ Bؑ“MśśāŚēÄvVås·[ .|‹[Ą> 7łń-NEA‰<Ż‚«C)W‡°%NƾLĘēĒ>taöb”ē€rv|*,Ž@’Ā[a¹Šw8Ź„”S5N73Ą ė²ģ¶ZŚŪč¢fĘŚ«ōł <§²/®cĄ€ShüĻ«„…;@½Ø“/‚ Ź#c›Eū™O8įE9v<Ķɵқ©šŸĶŲ™»l·>“°öŌkõōO÷zX=ĒčT_‹żaGĻīq-೦§¶}µ„ģ8„ĄģŌq5šéU6‡›ŸĀ! ”aRć}ńõNĪērŃļ‰I‚µõXźi§"ōVo`Åķ ŗ¼eŻą6\YXX="°c9WJQU‘ss^ƒc}?ī),ĀBņ ©]>ņ*ņ‡0Į¹`zRĘ0sü© o‹ś|N†˜1użœV>W–N$#*Öi~–?ąjf”¼€]lPż4¤˜1F-rI²Šnk·h®Axč,§vÉ* žŹ+¤N Ų都™.BƒżśŹMBZµkļ#ģ‚ŲO^™4āÓO(p6æ@“5Óī­G= wŃė:ā“;ŸÉ„¬u"WźęiötŃՈüłóCł‡†©£oną°³ <ĮœÄ¹Cėǽ£Ę¶Ē>½’ •tOŽī\hĄlÆįŁiė±ŁÕ0ŽMUIšQzU•¬üžÓĒTu5•ŸšĖˆéīŁÄŗõs‹blāUĖĪŖ…OĘ'Ķ)õÕgĶ ą_>ŃYÕHž 0­×p°I„ÖŠø ųŸ@*‹…ßaņā=•± '$„Q¾³ po¶Ė“X~c”\ŗ5~ÕĮ>ņń”¢ĖŸ( ˜łĆ½|4ҜW‹ōe< —•°ś–¤Üžų Q‰)*Ou•ęKŚ*}¢ĒzŃ÷yńy*Ō(pKB—1WŸ@$K ‡N{;5æ6$«6³a`cĖp½wDŠŽ‹]}SŌ~–ėÅŠņo$“-łŽÄėÜ €ÅÉÜyFl0ÄĘÓB„Ļ$śŌ¬Öµl\2—ŃęƒĶƒiĀ^p6IKÉYbkŹÜ±ćŠe½ånįžē’ŽzĮ‹?īŚęžtHiŻi$ØĮKāS>śfIĮ[O•ļ>ƒ ˜Ģaūż‰[õÄ8@(Ö+ėōŠFЦŲ}ź’叢ˆ N*§HUŠGĖż•jł‰Ž U’æT…¹Ē‡zŖĘĢįGžĘį'Ic“¬|^ą›5–įFĒõūŖĮŖƒ«'Ńo5•USNÉBŽ ‚Fü7A¼ŅÕ·‚J‡_ėaģ…X6kYnŁt©ÖbEŌ“7ų3øKśrūEć>ī‘ ±ōMÆĻfč¶ųé˜xķž?Łv²Č±÷[oDzņ3®A+8Z *ć9‹ō‘*=‘HļNŲVż”ęfś¼Ż’žz}ńoCę9 endstream endobj 430 0 obj << /Length 2383 /Filter /FlateDecode >> stream xڽ[moćøžž_”6Špł.²( “ølŃūRō’(vŖ²åJņåö~}‡/R$[’#S퇵%™™gfr83Ōāč%ĀŃ_īžüt÷é3ĮHcM¢§]¤9Ņ„GR1D˜Šž¶Ń—•ėoO?~śĢUw$U)Ŗ@ÄÖ÷c¼zųÓćæīŸžv’Ē‡õ=clõĆOżēĆOFÄöĄcßOw’¹#p‰#!Q,’B!Ģh“Łß}ł†£-üųc„Ó*z³C÷#qNį:ļž>$„sDŸĆ\{Ī!’ ųĀb0о)öĒõ=U«āÖš][S{¦P¢•Ė(A©@”Å}%~Y ¹JņS:€ ˆoĮ~Į„D’Š ]"°l2ų &ē:R>›)„@GēČāXgÅ”ś‚捳8ü’ŒŪō?›0cv¦’›™‰łųn–_;· «cRVYŻłå˜ŌuZÜĻfŸźÄixĖ€å-uD¢XÅ·yĻ0[Đ÷Ąk±Ń‡b¤uŽĆćĖğ±.ę±,ŽÉ‹ó¼„¢a,;lÓ_UŪbŸd‡Ź=’Šަ»ä”×pI&č puKfmT]³ELхcÄ0s®#ćt-‚ŁŠÕÅ„ėWo]óąÓ./˜é°0*¤—‰¢B3ĄčGQ2Egc_p|›öĆ÷“ÆÓŖvœÖÆ©ć““ÜżöR&Ē×&xŗæ,r7ü+&¢0ŽĘgA€Zžbp'!‹s¾ˆ‰Å)b–×bé2˜ s]Ģ*لޒ}as²mŚ1sMVpKV;øø=CœŪ$)"š4[ÄA`ńµč¹ fCP³Ī^^]ŽģX2t¦bĆŌ8n|§‚ ­Y`Ą„œ›r¾PÄ¶Ż˜t"bĪæ$ö6żGˆķź?šwśm‘uÓMŲ#KXƒļé8ó6·¤Įä—Z-ĀŁ"¦!S†‹kArȆŖdrŖ!›¬³£e›Öé¦ÉfųĒ“ĖƶĢPا¹ bf¶ˆ)fLiMČÕšøfCMsW”n!•Ūómlœˆ'¶D@†+tPQ6_ĉ„ōN”ćD,‚ŁŃÅ,Ó_ iYłb’]*Ą‰]"Ų“Œė»‡dVņ…ņz®cŽß„Ųų.5ü‚Öõ¦µ§’č.eņū2­ŖÉĶ(Ä“–…QPĀ>WĄÄ*ćŠ#"ŵh Ì.ā¦ČOūĆ„’ēķC·;“„$ FŹlS“ÄI"®ķBĖ`6Ät1K_ŗ¶•ļõ•ąĀ. lZĘyčĆćē”bD)Ęc0ĢWOkÅVÉsīkDś{w®Ń|qE›cźhƅŁ.‰Š`µƒPd:f#³VķhK5T±‚õÕżw²q žŸB Éd£ą1)“=äpå-”wlńŃ{š$ę6;†b(ŪīM.|–ļś!ÆvÉʤõ”Ą£¤vĻ2’äXś¤RüÓĘVܕ±/ŹŌ9‡ßR3Ī<öĒ&e–Vh}Ļ9^=½śqļēöĀõ€•TiŪĒC„Ō¹a†^łNošCö[5¦xė¶YésbĮ\]²čŽĻ`‡bvĮ}}#ŗķtsSGÓepõ Xūź‡ōh“ˆō°Ķ/n`į’ĄaƅõÅio>Ÿ­Y7Ņš¶°;p9§OŸ)īŹ ēgš7–§ĒéfHrŲö”:@Mļäü¾TųĢ/ޱ23ˬŅ‹C^ĮZöƒjQŪj^֚۽‹S¾5·|œīŒsĢOÖ}梗A›Qżƒ“ķ†ō"±B&ü”æ4ŠćVƬrāŖģå}ńoļ \ą}’ēNGaVŹa˜rÄØœįKTß#ŽE‘†ģŃŅ“bĮ5å[Vł˜wjZߌd#©®©9• įF3#S#A} éÖ'VnNäéŽĻĆŹ=µók „Ļŗ–/ ˆ36„νĄ$ÄŃÖ ż®k®)hįįpȀp+ūH‡Ą‚Ø"°œ4bŠEyŽ9Ąr+‹(Ÿ“¾Āę:d,„P¶*&›MQś°օ³®»£Įc†&Ł×©†OeXÉA!±ć±Zęx*éģćõE”hŽ×{J\?^Ÿ}™E…ČčA§e|€MČ[¦~„ U±ųšéślģK*nŅ~8/īi’’9 p@˟€˜­‚*šł"&*ćMĢÆ¶<—Įl˜ėb.y.āܖ Ī`Ė :š/bŠ (;ø–×JĪe0‚ŗ˜· …ø±K }»ŒRØ@ŌBēB”uˌė'éóĮ/‰½M’b»śvܠ²‘’O؈Źļ,Ų×Dd±Ag@óEL-8ŠÆFĆEšN<ØmqŪ%!^ł ąūĢŒB¼Ś2ƒ)äÕAg@óEL1ƒ%”W#į" 9ČIvʉpb—¢äRż7bŽ™āHŪč`’÷ß’BZ )h`vuŖśśN”f\‰’yNhsn;pŖyĀVŽ a_¬6eę[D[’¬Ģü\q÷eqŖ³CZ™;aZ#īqŻČč¾ōi˜ąl¾ķĖ¢-‘*Ä Ę9éīł>©ĖlÓOJ›EŁ6DŪ1čģĒ²Ø ÷öé±Õ™ É|ĒMLÓ“­ėy)“/ó<õoŸėŽfÉ ’ŗķÖü!Łłę“ÓŪo¤e…^’8ŲQ‰ R¤ķŗü%_½½f£ä«W®j”Üä§­S9¶'č÷¾ćbl$g-0{ŗžä9„S*õźŁļ~Ųū><|ɋgS1˜ėĘbs=a±} ęÜbū9b"T°Š·ÓŌDõ*õšĶ™æ¹Qˆ™8ozƔ­~MöG³D¾›& «Ü}–ē§ŹŪN…ɰißöŗćM—‚rߐ1§*yń—#żXĮ\ōę„V)ĶT <°éN±}‡Ą5WÓ=wˆśļ“Åō߆śŠQż1#L•N–1BA­śFŒĘ-‚„l'„iWZJ|q7»ād»‹Ü-Ķ“k„i·”v’ Ī,ž³ä€6Ēć>÷Œ2DĪ;ė­wū <%ō ĮX:@`gß[«M=ž@PÜŗt4[“¦ÕŪ‡3«¶p©[¬·męŖżŸŪg>Z9c»›x)ĆŻ9˜’¤Ą‡5 endstream endobj 322 0 obj << /Type /ObjStm /N 100 /First 875 /Length 2495 /Filter /FlateDecode >> stream xڽZmo7ž®_ĮouP„K‡oEPœĒi€85£Ķ]6ņž­«#ł¤u/½_ϬV©Ö²ģÕKCŽÉį3g†\:›•QĪ*fü*%åČ+›=®QQF!įēPŒW1ć‘“Ć5+ļ¤Č«Ą~ąjGTwQe#פ,©ļ”õŽšĘ*"n7½¹Œk°(!e“A²‰SÓ”M™ŽŠL–¾Ł+² °QDŅ[E.Čhź„OŌ$ļ„(ć&ÅNQ@‡ńQH2 R” ć&cŒ2ĪTņ‚AŽ Ķa”PĖćG }ū bņ&I AI‰h×£4XT”‘ĘčNZJAä Y¶x @Ģh …0*±•¦‚–FD2T%¹A÷ ]„M¼€…¦8Ų0pµ£•nHqż"Ŗē$7hӒÜ$õ¬ņq`‡+ĄpŃć&c¤‰Š=€wà Ѐb¹„q%‹VĄŸ ƌ±ūģŒC“åMVDm 'tU£a UŸÓĄeF©GŸ(I؅¢‘ae@N*R–¢¬"ĆülœŠ^mX«1øńĘ¢(7`Œ,fAJ&kä&ŖD,7I%ћA•$¦b@–BČ-ųmģUŹą'0N€0ø˜ …£»l`W˜™@q†Ż²°G8Ÿ9F1˜ŹåŒāŠ£—ŃƒN9Iu”ŗ1VņrēyšäÉ 8Rļ˜qoTńīļ’@Ė:ƒ!mčų꟟ƹĒļ–åF–)i™&ŁćÉøVOžØāŲŹäåy­c™? - 3Ī0ę°"Åy“WœN'Ć·U­Ž«āōčXgÕēZ}éźģĻė åE5(ž”Ūj\Ļ0K‚ToŖŁäf:¬fŸh^Tē£ņéä³zošB 3}@7åu•_ä–F Čz#“,K!h+ VLŁ{…æĄtgÖĄŁEpŪ%Šna 7B9ī§3«p¦ą,Ē㠚zßų_ŃåK—PčüfXMÕĮ‹ÓWźÅådVφÓŃu­’Žęō˜Ve=šŒŹŗRG?ˆŒI-\+Ēļ }gĢw;™œ?$r6ŖÆ P—×’¼žŒĘµ®®g‹&Šą_£ :ÆžPæTÓzTN“:-ėįåUõGu„ĢćU]:Ō8¼©/„B5ü}VW£ńß^?=;†§łķąķčb::WĻŪ‚ß=źbūüsżām =Åϧ'Ź.JŸ–³Ŗ1tqttzrņśū³Ń§jöųĶäS9žSਚć‚~%š5°ĪŪ”RȌ¦³śŁe‰bÆŹöĮĀYæŽĪėKI­ūs µŒņ¦ūŪõ/X»¶Œ™—žę½QL7]=P ~='ē£ń…ĀŠĘ‡ćŁhńbP¼½łX7°8¶‹~Ē9®ÆĖOÕzԟ6äFæÉJBœI _•³éĆŁP؎×`RyżS5ŗøÄc@‘t%eRwP¼¬Ė«Ńšp|čYWŸ~AsG³ToŒ$ļŚV8ąAĢ(Sö 8+Źā¢øüóś²£b\LŠÉø*®‹Łu9¬ŠŗØ/§®’’«¦“Gó!®*„=——=ŪfZ.Aöj4ž\œLĻ«i3£ķ‡ā§āeńģ}cĀā†pl“¶MB:'„ÉHŚ7ykäT;l<Ö[U¼˜œMÆ:˜Ż|œ”2ę•¶:<o“ģ ó^vI–˜Š#¼¬Įč~įÖ˱FZÓKÖzÖ.ō(‘æ,†FČ(6›?ļe6,Jš3ݐ¦Å’I§įąŻĻ’-•n_~‚Aķn‘—W#/÷‹¼Ī›Ū”‚›7MfŻ »q7ƒŗA’|0`xQŅnÆŁĘ‡ˆė“]&īnŠ7šĄ”éŒ\ĄŅb[¬r4rų‡ēPŗ=‡xƒL…W“¬L“EŖŽKÖ8mbģ%ĖŠ!gźEöu\½—ß»'ŒŽ­ŠÖŪ­iK-mŻ>i‹Y SÕ-ĆJ KŠ:b]¼×‰żŻti¹Āū#-–-Ś`}øPCü®,^śØįoÖSĀvd[‡œfļvō¢buV"Vū‹䭔Ć*’¶¦\\„œßˆrĖą„ € «\ĀyĒeĒś¹ŪĮ®ńŗY½-ŖĮ®¢š·E5˜~ØīF¹%–m=jæ2źą¶5÷ēRG¶õö‘4šŽ\ŗĒŪ’•ōl W\]φ“­·qÆ^Žq£Ź"EĶĶVi*ÖĢPźļåėäÆÅßn¹• VŻ_ģéžŅŠ ZwāZ^øVŃ=ŁÄ"äy/›3^zš:Ȗ l(QKūĢ­Č»<–0¹#ÜŖ%m &‹‹:ł Æø?]œÉčŽ ×([ŠĒ–ÜÅ’Ģ»‡qq· 7cq5Œq£Hč%k®œū%„ĖÜļIJž+°NČk6ĘóN“'­¦«Én4y–ĄIō•¼DwŌ@>m˜żÅæ“źL’ߏ°)=cŚ:ÜĀ£›hīμzœl¶õ“)ļÓ³rJņ-Q€bČŗłzƒ•±·iCo&Ę[L¹>¤#;÷ ® žaŸÄļ:‚Ž”—)°n­±„ÕŁ¬XĶÖVoĒģŚ˜ļZŻ\ū]ĮĶwł›ÆfūŒ»I6Fœā„8+Ÿ1ėĄ8'ĶĢż—š;’Ō#Rå/Z8ĆZ¶¹śhĮū ¶VĖF裭|ˆ5IĒęūølÄÜ­FõŸ›r’ŪV°:RԌ*+~ł2ŠIœ%#„Fœæ”&–&/ÆAĖ7?‹e¬LIKIūͶD$S,Ō 4Ė‚>jÜŽ‘ĻÕ}XG–$ rˆV įė…Ŗ5Ń©ćŪ¶uZ–Wœ–„-–|•]ä£üüŪkjÆó!q«3Ū½ī2“1ŚĄmųh4;)dæĢ)ŸaČn˜ļŗØŒŚY9ƒ«‰XŠ ’{gųĮLŽm²ą¶ƒKŌĶ1 ,pMē/ēMąĒņŻ~l8Ŗ+ż¢:)O'ĘļQ–0KŖx§÷Rå¬l”‰ūS‹|-ē@GķIŽŌ–u,Ū¬=S\¼E„“z­*ž¬nŌd°ÜšFÓEĪB5ŸĖIŽ.ĮÉewÆg½żuDŽėōö¬Łyjčeq™R/YÉgƒ£ĶÓČõ~wóݱ}lÓ0­¦‘Ō/äʼn›æ<²Żkzčw˜”šp+ØcŅŽyŒßŹū;ÉQ—Æ*M·©Aöė/ł¶µĄźįīyųę P iƛ–Œ¼«9ĶŚKāįP“œQŒ²s!öćä“•œą4NĒŲz+Ä[IŹBō›oFń':²œöšs_6,}"ż?+Ū?H endstream endobj 437 0 obj << /Length 3099 /Filter /FlateDecode >> stream xŚĶZKsćø¾ūWč('# Žw+‡d'›ģTŖv’ńĶ3©¢%Śę¬DzIjĒ“_Ÿn<ųAye9U¹˜  u7śńuhŗø[ŠÅß.žruńöGiŒ’Œflqu»Č$ɘ\h+vqµY\/—+F)]¾kŹß.¹]M{¹B.o/ٲnüųćCŽ“ŽÅņ}¾®oʼjżk^mžĪł{ѶnŹē«÷odj,†äŒPĆ@J'78邹Ah=ž½ŠÓWB«•’Ńõīaßå]YWĄŠŠe}‹Ļ DŁ] ¾üęæ|ĄqŽuES„¤”‹×Dī ’łŻĻ’Xżp¹ā’‰2įŌĮ-š’\GŠ’WUUšf–’ö’™ćŸoĀ­’ķ¦ö»²*«;’”»/ü  ņĘßšeŪ5ūu·oŠ1 ŁGåū¹»¼kŹG\®ƒ ¢‚~ö­c…¦p¬œ=÷Xt ę^v%ڶśn¢łĮŠ5$4ØČ™ŚeÕyŹ_ņµ#š×«‹_/Šžt?Ō”kŹdÄ*½Xļ.®?ÓÅ>‚DdvńÕMŻ-įFĄh»ųxńOļ°SĪL ¢µ#„”析wŸØ¢]~÷ĘK±{旇‹ ĆĒšéż‡Kp€šR? ·“šcę¶œš5§6™yźķ}¦h:OØD¢a æO9Sšd™ŒīüömP{ž€6Z†€(7ĮSJp*¹öžėØM—¼Šä&bõ*ߝ"‚cø‡ģppā‡-› ‘[’ÜAŌŹ i—Ło—J-ó¦Ģo¶EˆdN§ö‘`łī’ æZ³™U’‹•ÕĖ—d1ŹFĪi AaŸ.iSgóx]}>easKXÕKu¤ųøŚ…!™”nŠ&\(–haü,š\·’X7“A¢IŖ¶¼«ŠM4ČõžĆõēė“ÖŲŌh“Æže ųŻ@Žˆt{4¶ń?= ž%!ŌÆłIęM“ˆĪækź­_:ˆšļŠ[#,ć^–1H^!źJ¦^2ƒ꒑ūŒ\šŁÅłĄć[Łś'č żü|ߔҐP&åżœ^§ųŽ8(ūźēŽÖ $ r¹Ņ™Xžx ™S;~éīhŁŽ“HTčþń^Y·Å›”¤"‚öŠøMi[cz’¼ĻqE„5>µ‹b‡’ųϼJ¹øÖųåŹ0‘ąćż”M¹+Ąmė*ßŗĪ“Žšź”¼ĆāJo`—éƒh‰µ2͈Š=2 q?A×KˆŽ&]ŠóÉ2‘TtY’‚„a]…•£^’P\)˦vÅ$cČū~A¹ūœ’#c„É^tš)ĢņݾńE õÖłvėG ¤„@PCZĖ#„dĄaŽŹ²…”‚dĪ©xfˆ…āimū`Ę,h*ˆ†YŸ©aaĪĘūqāĄ¤”łņßI—“ʇY€³ Ø*ŠčTĖ”Pčüb1šå`å©«’¢ī%@~Sm“©ĘN?%RöÉ7ÉŻx§=cW’CłŸńI¹čĖŃĢō@p&üŸųŸKµ¾Eßć™FXńē68‘YÅ4«RĀmÆĻO”Ėä’QƒĄeŠčÓf§ŃIF%’4 8bv…nC„«¶a1»bW7ßśÖ/BńęžÕ’wƒ0uÓī×h¼{ÆvN”ˆµjČŻ}tå·‡9V øz]®X2°„ķ}`ŠgčJ€āö[ÜÄą\gPģl÷»Ź”z.ćĪÖØ. ßš‰5p ¹iˆ°/iˆĄS’øĢ®č®[YåĘØ%ƒMgtaTļ>P’9r īŅcÕ lņ&¬¾ķźĘEƒ[}0 CKv0ÅPp{t؊ Ē2Ā.;t¬4öH©ŁŽó-š2m&½L֎3ūV_Ņ0—1”w$ŌŻJ#@(Ą‰āf\w ŗ,¶Å®_©ū«śąŁÅ)CU˜ Į U=…-ER8欝0q²]˜²[ū¼dIń¤PĀØćՕ¤ B\¹¤8«ŗ’¢iQ)WW dŚ[;_ÆėfćŹG·ĘŚ?Æ0TópŪmX“$ń°Å›{āŽX”†młv^Ӧъp~`9ĢĖCŻ ¾°v^@£9čĮaūRūkw¶XL¦ÓĆ}Ģ‹ū8†n®„–ó4Ų’mń9=?SŠ0+Brgēcö…t"%ļ-œ Ā-įžGˆŠE°ČČK7p>ŪˆHŃĶ“KœnĄgø~!8ėC =ĀŽ Ū<å 0/į=Š4Ųwj®Ī¢16ÕźLkĀG0}Ŗ"·±øƒ³@Ģŗō›ˆ¦“OfžŌ/“’ĄĄ8ĖxFo¦QėOoĀéK̊ńį)ŅFūŸ±ņŽt€Śęų^x^{Į'“HiOHØSQ<źć£ÓĄtų¼ Ļh±1χ¦~ČļāĪĮŁķ£7Õ¦Žåe¼fĀC’Mq›ļ·]<Ÿ1×ŖŽęāÖĪģ9ę:ÄsńŒA¢'²lÖ\ÆĆ3˜kĀsÖ\7e7«Y»œ£Ó±]š4ģ,…¢ £×AQn T¦jŠ¢lEOężŌĘ/’~ĘÄc黢ķn Gš˜oż·»&øŸ9’D™Ī«f¼ąå čķ§2b`æyNpžLāXpjŲ¼Yż–¾Ļh¹1Ļ6æ »¼?ŪŁŃ €™ńąÆóŸGĻs”ŪHjĀ ?Ė@'“8f E]ķųz¾ Ļh 1Ļ®¼»]Bŗ«œŚBoŠ#¦8Cƒ)Ɍ80”ęę\¾b i%›"&?‚˜'3jŲ—É?cŲ±ü³ugH‹b\nBŽt:}"·ükīõ±6ź¬ <™Ä± äŲnń,H¾ ĖhŖĖ|ßA5Ł•ėŲņŠėXĶČß_\ž£ÕŽ2ž\Ÿe™“I³ ĶĖŲ³šų*<£iĘ^ÅčąśÉĮ#¶>"©…$É]Ģ““UĄ?;4Z„¾ĘxŅ_ĻģŪü®ßȾ…r?5įÓØ>‚ ƒ×¹×HĄēT 9_†)^ÉĢĆś›n/ėäČ»ļš¶Ćö †@ćnT2‹›™¶hübażÆūŪp|śµdQ4šøŪµÖ³ü©ó3š€|?ÜĆĀT!‰ŸÜ…$Ž©{¾ÖEO;ļü/v½Z½9įw½Ē xž…›x¼fØb3© £R7É5“Ę; øĒTļŁšćŠ{†wäŒbėpvCrÅc¾{Ų L®bO«»Ÿ ż4»bSę]²ƒK€Ļ Ś_Ą­ÓŻ Bõ‡ųJ_˜ŒÆ|włćLčdbt5«’ŻoŅŻ¦ÄėŌ-ž‚}X}Ÿ\”=‰›ō8ö ’°Ų’aO»ŁBėW¾U¦Y~‹’kŪż.öy¹{ xŽĢzĖb:œė& m†”kŅŪ>60ć„i·ahLK·([c4vxƒjlK]'Į ·†ҤŅ`Ȍ 穳śÅ¾ńmMŲ]īœ`ó“ŗ•Ly0ĮĮØO”^C\”ßnü?æ–Ż}RtČ^£†£uZbč}óUžīŽrjj[ߕė|›l¼²D±žŌĻ’š¹£Ó”~õŗ-^²>Yyøq›³°ĪžiV&’ĢĻʇuåhʖ?¹’l8nŹŻ9•Ķ ۘ?œćkŲ0ē.`yR†QS“Pķūq]mæłŸ–Õ„4$²j[žā(ų)z”õ?&,2<óŹS\\GĖ"™z”Øų/Åé“j endstream endobj 446 0 obj << /Length 3114 /Filter /FlateDecode >> stream xŚÕkoÜĘń»~Å”Ÿ(ĄGs$—hRĄ­ķĘAS'‘Z“Pƒŗć阎‘’gYżõĒī’<­$IQō‹nĆŁ™ŁyƒÅķ"Yüłģ—g/ߊt!’øH ±øÜ, B/2£b”Ģār½øŠ¤9æ¾üöå[m¦Ņd±‘:_Š$I¢7Æ.ž¹¼|æüŪśó„R*zżć»ææłńQœ%öą—oS1ŵtȖ*M–2Ź’=!02s‡~ĶsdBĘ*ótŻ„¤q¦<’ų|™ ½¶UwW÷fQ=šo_ =`Ÿ7nļPCÕ5<)ū¾=F¢U]՚ļźa¢Qją3) «‘&Ī•tUäYBZGPi i7”CŒˆ•ĆóŅlæ’Rå2nMØ8ÕÅē ü ĶÓh]@^yT5ėŗ¹…µ,ZfrŪVÄočzEg2}FtF?«$ŚČgd#õD4!$*ĪG˜ß„’›0%™ņĒ쬖•»Żż¹Ń¤¾ZGļoĪaõcŻ{\W,emµDŪŹ®ĶØ{ņؾ(ł›”¬Š[8.“0q DŠĶZs$]^*YXœ*‰†śv‹^oCM7ć}yw{Ļ“¬"œ`wŪĪ¢ųwÕµ½C[6~4š6“u."њ·O)A_n,B&¤¢µŠŽ7ÄO2WQśJ§ĖF„uĮŁk™Ī 2}\ŗ«w; ׀Li톄o?’xŽvæ«×<-ķw‚ikę¹ēMūį®mnIŪ >lģoē--@ž=‹i†µĶ±Y‘˜IQd2U”>߆” ō-ͼ¾Õ(ūóWK“KķŻ^Å[s X Żm',oyŁSļ ź źd¹cą®:tU_ك¬vš.”½UVęhĘśmÕTśa4<.źfE·Å>ꖂ[żŠWƱ³_{ūQī>2Nń`ō?¬™Gk¶ŌŖēż¦x½«~9ր3 ™ećN)ĄUVƎÄ:Z“0™`-ĢĀ¢™£čŽ ĆŽ}¼>Ē0†MŅ+·ä&˜ŌõWķžpdł’äįŖķķ9ėŖ?ŌCåαx6åjpK„…Ź&502#ĪĒāÄr 7Ąś}āD_“ü»®`mR!phU8^zĆÅĻ£D'7z‰q”¹B—ÆL”*¢Õ¤0"W¤Lō“P‚T}XĀÉąO~ĒŪ¤ŸŹ0[œ6ĮŒņz…ŁŲĮe1øl³)ŲŲ•ŻmÅĆ} X?1ĄŗŽW †µ>Ŭw$—”Ą æļ‡jĻcŒ<åĮ¹ŽB¶üŪQ†˜8^i-®}1Ā„±:ÕäŌē•8qAnvü$VLQś}Č[ś”œśĢ¹JĶĆ×÷? STŗT@—ż:†³Œ„+\tčÅåļ¾’īŻ_ßĪĪįLž6gē)9¾ŁŁß½śGČxĄ[åcµæiw;Ź$ī8#r Ɣ†ŲÄi* oÕÖ‚Ę̜8Ą1U®ŪŻź%™Ke>lŚąØāķ‚öŒ¢“:ž½^Q€ēÖseĻ„Hfŗš““‹Ž×œ7£ ™N’”ż-[­-S%!PĆæĢ3@o«r]YtvUˆc©pŽłS#}ą“?ć6\JA~^«I6JLŃ/VR+dd‡©āŪø^‡,¾¶é?.ŻXļˆc—?āųv׎`Žˆcǵ‡ńׄ”Qu,×ō÷6 ŸR¹~JҤÆģń.!Ć3M¬`Sø‹Oeœ§bīœčā„Ž=[ŽK”āhöМ8‹Č§’`rĻ³ŚżīvGŠpnņąĀõH8ÜyÕ§rš©Ń\"JBĀ‘y­®C¬lo겉Wą/RYŗĻN*†uPč"–b†$é1伐šw4)ķØ“õØ c“MŲń —»®¹˜ųą×˜Ė kI ¹Jå©§Iœe§†ŒĘŲ¢„ā {wSœqø5FkƁKžł¦źūŗ“{u3ŪėŲĮń•hāĄMĪ{M@Xōźõūæ,’dC;fMłƒ€[3ėŖ?q•Žu³öčcmRĢĒ”†¬ZŲ4“į( „Š,‹%$iAćŹŪLGc?½`ž¾łŽu¢0āz -ÖŽ0˜y”ēĀź·$¬np± ӎį˜ßb B/|ģåK+är’倞Rł…»Ķ×ĒŹISÓ”›‘å%Ż| «É÷8øĆHg%²q¶Ŗ²pr™ōé*+WąōĢIķrڧU ÉY„X·GĄiÆėŖ¹ž¾£WNUČ©†Åųɞjy\ä ūRŚ„ –1A%A®¤Ń±!HB1č±ĮšltZƒSÄ«ė«/ā6GėĒÉŌśqī w8qÅwо\§Ų0¾„8ņĻ Ė]»ć §Üc„sķ[ÉēM½…m&ŖĀå-0€u±€ ¦ģķ^Ėæ·l[ė"ć XzøāJƜī„p=,‹ŲésEø+f_–PĖ ńvo‰Į”¬ 8ćōĶ5#!¹āeą3ÄVZÄŁŲ±ŸØS‘Ņ…7²XŒĮńæč©YGčAwnī?”÷Ļ1 endstream endobj 454 0 obj << /Length 2966 /Filter /FlateDecode >> stream xŚķZĶsć¶æļ_”£<a‰o"=„IÓm¦™¦cߜ=Š”Öf#Q EķĘłėū{x Hj)Ł[;‡Ģō" š¾š¾Élv?Ėfóכ7oæ7łLf"dAĪn>Ģ‚Aš™Ėµ:ŸŻ,g·s-ōÕBfY6’®©>^©|¾jöW ­Ķüƕœo_ļŠf梱ž’P”Ū»ŖØ÷<-źåē{Ž­öūøåżĶoæ—vH†QRd^‚ŹH “éM–čŃnø{Ńm_h+rgłŠ·Åŗ<¬‹¶ŚÖ@˜ėłöżƒˆÕjÉ+?mS•«I²ŁB9a½bh7WǬ›—ŪĶīŠÖĻ ž£µEŠŲ³\‘¬¬ƒ–Æoåo|ęC³Ż €øł}ŚZ󼞤Uµ“ōČ+»¢mWMżfNĶ·u¢į”Ų3€v›Ø)Ö bŠøZŲ$’((žw’žw»f»kŖćƒ=‹G¦7üOŪ‡¢å-ewųīj‘XĆäĄĢĢ=’W5äÄƬ&9 ¤ķ“ŠĄ÷&†<˜prśW”Õŗj™vip īWõŖéīóx÷8˜Ćʦ»ū8cņ0(ҾNō>Š+Iō üą¢0­Ņ³„ÕO<hÄ@ø”k”~žĶw’śēā[ėłŽA|¬–L™īXŅ8±^3üŖ¾OĻ~¶¼°ģ 4’ōP•ÄÅMÕ¼h“»‚o C–ŃÓ·ŪõO„(é÷^\WwMŃ<~=²ÄŽ"­v°/T–ø­ź–>ŻĖ*BłŪĶ›_ߐ‘g3œĪ­ZͬÕ"3zVnŽÜ¾ĻfK<„š„łģSÜŗ™i”¼Ęh=»~óoöbcō2ĄmK‰Ü¦!^żghA¢ŠŽ¾ Z%•pʏѾ§(Īl/ˆ¶ OųĆOWpEirī°SFmYäRx­Ē:s”āę/SKZ'B0Ó|ū6a¤ė?ĄŒ74 ‹õdjrŽšóhų_®vlĶõzABĘ6 q·ī<„ŹFxĪłļ†÷ŒE³ŠpŃĪÉ3 ÕCUżæ³äµš6ļ0×Ó,é ›ŌČĆź}u_³ŌtŪ·ļoß “ä|t%˜Œ‚ ę'މVŚęP¶‡f5ā0 f{i!ÖN²Ń0ŗ™åöŁ0ėŪśżķļbˆéāŻ³Ub÷GØD¹]6]VRՓWEÅøĆp=ELōŲÉŻ’4yčĀ ;Mi¬l 2 Ó‘҉ļ*•EŗģĘę"Ėó—ł,k°Å–Č/¹Jo„1īuŠz/¼ c“p•“wž ­m'–ĮH“m'īhهįĶ7,fŗuŚĄnĄwnĄĻūĖq—Ż@šBĖpāŁĘŌäˆGG?nē8ы› ¢Ņ~¬āGzłčU–“ÜĒĒE;&(>Ń!k…÷§ŽkLq.Œ‚ļ&ŕ £)+‰c„žóqž!ygēׇ»żź×CrÉėGNį§r2‰X9֕óŏ6BB‰u€”Ą¾Č’h­ÜGXĶ‹•ˆ¾Öś×Aė2‘«0F{Žd•:Jæ ŗ–4­„l *øŹōÕfŪ<ņbҶ8>ļķ)fR^LąPę~³Ŗ«¶*֔¬żNĘ2b]Ž:5¼;‚/Ėm³Œ*9Ū2c‰C—”?]{…†cM‹Kgz+™ŖgģBéd¤@Վ’ P¾Ģ° ŽĘēn`Śč-Py±5„ó²#1Œģ’#+VŁ“šģB-… z€įŻt)5jUĄ»§ŗ-SówQėć{K^軓ß"aŠ7&0¹Ŗ"óDłīŽNR-Ø*“™ŅØÄ„YŖåČš–¬/ėMĄß\čMx!ū|༁Q÷0dīUŲ1N éƘ3™#ŠhŌōƃ9‡S'R5H>ŌK~IK’£—“Xč“ķė)VYOi’YŪŖ.yŚ5)0LMŠØ±˜Žu1nxś¤;• e 'Źź'L Ž0•ćėļ‚&Ų1ļßD†3Måŗ*y2d6ćŽEēāćbŸF,‡,‰¶.«fU¶<ƈ_®rÖż8>s—¾KąIzEO°Ś=ć-i"A8l(č@^ÓÆx›%É%¦wŃF;ökFĒwĶ4ß·EĆ Ć’ĪqWB§J‘˜QÅ.H”撖˜Kßs‰“1–Žņłķ “éXĖ¹ÓŲōh˜ĶL'ęȐmš¦Ø/l-•xA)u±””©p‘Æ‚T;VE:p(KRĢžĆOZ»Ū·U{ ŃļY96ĖēßP"9Ģī­ż> stream xŚÕZmsܶž®_q©‰Ž&Ž0i:M§I¦·‘ŅNGŃxØ#%±ę‘gņζņėū,ņČ;H–jĻ“żr$qąbw±ūģ ˜,nÉāO'¼8yń=S –ÄY’±ÅÅĶ"“qĘä"5"fĀ,.ŠÅe$’Ó«‹Ÿ^|/Ķt&7ilø!7étɒ$‰^~sžĻåÅ«å/ē/O—Bˆč»ŸüūĖŸĻ‰ÄIā>\u9[ ›T9’]»ŪVMٟ.¹L£¼+éFE›®=å:zWeįF®O¹‰īŻ“oŪśÆō˜ÆhŅ7!o ÷ļ®/ż]Õøæ¶w„(ŗź½Xv½W±™øigÄķ79MīśŅ öņāäķ Ɵɂ-D–ĉV‹TźXj¾X­O.ƒE?Z$±ČĢā½ŗ^ˆ˜k»zq~ņ7·óeE&bÅ-šj’„³,εČTœ6pH2‡äHb®ōSĐ ģ«ō³ˆ!Ó$Öü@Œ»²ļCrp+1pX”żŖ«®±GŲ+ŒÄh(E.–LÄJfn"mØH3·”t³éŹwU»ėŻSæ»īĖÕ¶j›ųt©‹^~ČכŗōæÆ¶wī.w—¢ÜęUMÖb›¼¾ļ+?¹½–:e‘_  F¬yޟ:†±‰mف›¶³¢$NošŽuųLłaS·Õ6'viDŗ%ń6¬ė«­7xYå~ éH[všpÓīČęi‚U ®žŗŒ6ą1ß8Z†0v)ÆÜ¬|xķR]ŖGĆŒf±ā©ćō{G~ĆÕD6z–SÆÅæĪk1 ÆŻ¶[«™c“p3ĄžC—lfĖ@¤G+ų]^“õź…•¾ōZüĒwæ:ƒf±aé@ąĢ9łū»ŹāĀcŖź–޲“€¦³]YÕ;‡4‚GłnŪ®±-«¼®ļŻŠ>ƒŠiš¶nÆóŚŻß•ya•ƒū_&ė2$0g2–<;Ųž> ”1±”£»’šØ¤/żņēĪŅŻƒ‰žd0{ÉXō-ažƒŠ ž{<ƒ4Ę¢Uk „šU]ļśm4·nÄ(v0«ž¼ æõ“a“b ė°‚n˦½qøy*ŲBѦ?€xF÷ĀŅ…„¾Š|3ųŸeY]2/ū|‹§Ąwb>®;a²Xõy„Čxœ*óŻISāś³,+¢jģēčL>SŠŪ\LB›\d6cҾˆ%\›+ØnļĪ„VŃw% \ÜāJØāĘ/N3±¦o»ąv!źń:äŽö_ņfĄP µ›M |%”z7b÷+5\VUé”VŃ­ÜŒU»Žģ<$abSZ¼¦Ø_BĒÅŅSnüčaŁv—m“'ATź!«é /¹ˆ^ŻlĖęl¬i›ŅM)Ś!ņZ”œG BżÆ+ßīŖĪO¼ŁQzPū·Ü’jæ¤{uké4˜"QšTEt½óTŪ†¢Ż )H˜¢H¤WeG¶ęgƒ­•Ó²Ż"žlŃTÖa[h„åÄNu0ŹĮ€Zڧ`~–˜nŒ°³˜ĢāAĻ8$£ažxJQłēĄ¢ČAš¢Œyę9kBŌ”]m9™F»)et¾ŪøÄ§ķ}Ŗ•;æ[µu=MB×\+ šK@įŁ śx?UcöśØ’ek3āÖ’™Ž3‹ßSŪōŗ»%ėƒ?Ąmģ³Kŗ %]ōˆÜwķ”ž»$T]õ!¤ ‹5C]ȱ—nó pؓōØĖÆ)ĒO£Ėą&ĪįŪ3j·/ւOµž6ÕA’Yœ„|F’?‡ä—tIŻE—ÆÜ`Čn8¢æJgėė„3ù ™WÓMņ˜iAū⦄93-lķLż"Ūēµ Bų0‡~x¤Jˆ¶œ¬õeˆs€b[&ę&öŹb»4‘«UŚ¾Æ®k?äl¹­Vž¹ ś6bå4=Ū,¦p½·Ł€š¾ėšc@3›ļtó€ó+–M·Ś–¼%š“L=ŠqD,{ć£EYĀī³6`…Ōé+H·5j§ŽŻn[ŗj ¢µń†öɞĶčĻŅ…óz‡ōøp…ģ’cńŁó,“}óŻ«?/æuHd[Kʶ–|]<–ä7»Ę…‡`Eµ&£9Z¾l[%PÓh‰² „ē駕4F“ ZĢųM-ß”ģ gČ"•#‡ķŠ;ØW»š ˆ¹°éļ*ˆQćŒ€N5ģ†Zx.Fŗ^蕉_¾ń»ƒŹnØQą°™ÓĢ „¤X aϼČß‹ćI ‰Jć0B l&}€vŠių`o„Ė~±åŅwZ č <éåæNB>m›¶ 5)’Œ‰åčłCąęˆł™FRęųJÉæ 3Ć:j–d†‘‚łō=Õ#Ɔ„ćV¾ §²ÉŽæ¦ˆo¢ R+t {OH͊GO=X'ŚGZ²|>XŠų2f°“I”ŅWkŠ0»z›7e»ėQa«‘Pw–¢aöxŠ’ ŁRŠJeŒą¼€1ŲųłIQ+Õ±†Q-™˜D-XžY¼Ė{'Öv”U›ķ¶æÆØ`¦ņ?K(ŖÕ®`ØšvW6+’‚kąf“włŗÜ–]’åLŻū½š³½j є/Ę\y|×VÅ$2'õ1ą³Ä«‚‚0Č~ŠśØ/k&R#ņ’öČx¶łķŁś¬9+Ī6gĪözv>XÕb©DL~6/īļܼ­oA‘*ż=H~ndq¤wc>ńā…×Āp¬ąO źÕč”W“?dŠĖÜĮĪÖׇĻaĮ.ø³Īq½oĖtcUļóĻgSųn’wŻ“®ŹÆé`(”¾°J#ä0T{LFašĻ.LÕüēāP›V™ƒ,żP žPüĶ)ž#m¼õ޶Ž{nĆųmW–įš9Ź‚ rļcŁŻ<_żš†5ݧaitqjdŌ:EXo†ł#rīloI™éa«¶Yšt׏ūMżYh_plz•,”ssģ*“ ²žÉ9·RŅŅRĆĒK–,Å䈛®Żä·°ĻLSt!(»Ę}@"²4Ś5՘ØYmeV›t4EŠZ[KĖČ ŗj “×-@<°‹ņUölkkĀĒ Ā<ĻŚ:ł¼čI'? ¦ ",° å‚Zܳ`ūœ,8CXŌ`…Ī#Ūó`cÓ;ŠˆÓuL{P(¹—żŹ'T•?VØ]sDˆēgłf“ļĢäx²vš1Ü,a¹4”ļµōų½Nå«}CaļmœĒ)aõ®*ŽįŁĆō`m‰[WŸ&T+÷øO &Äī†Ļh̰[~Zī.uµŻÖž„-p»Ļ²ŽÜŠųš0Ź1Ł…_Š{’CĮļķ‡žÖKˆ¼Dę“m;’·ŪŒī„œ²v¬sxäNSgū…g+żŽĪ®ÖzšC²:#fŗĪ1‚-äF±štß?Žö]÷5čON&ŽYrøŠ˜§ĶA ]På-ŹnL¶x¦č-½WŠęŃ5·ČMāś'™ż>vmŪJÜ·•0F§2ć„I@Ž“J}†X+ńōG-Ł9]ŽÜ– V¼ńCBO!ԚĪ’IPŠ» endstream endobj 474 0 obj << /Length 3745 /Filter /FlateDecode >> stream xŚÕ[K“ć¶¾ļÆŠ‘cøÄ›“+UqüČ:©Ź%S•Ćx\‘£įš"’ڇ½»Ń_I3ń&U¹ŒHl¼ŗæžŗI6ūM²łė«æÜ½zż“L7,‰³$c›»‡M&ćŒÉNEĢDŗ¹+6÷‘ˆåĶ–%I½©öew³BD?”]õįF©(ą—§QIåw7©ˆŹ¦o»žęķŻß^’ÄŌ¼ÉYœż“l†^%nD›­Æß §ZQ«]{8Žl”¶)ģk€·ŒGUS”ŸØžĢ{IeĢab®“*4gRśķ Kzx85»”j›pĆc•ŽŸžžĘJų·°.°vU\Ę·!q\ĒJ±•8Ī6&ĪLBĘ ˆß²X ³œQ:kÅć4;żš…†Åd¬±™ zh»Š˜˜†õÓWÖϤ㠒 VͤQrFVf|ĆoA““‰¾ĮM?Ę’|K…'DĢ…€6ɽ”_@ƒóKā$‡Ķā›­,ŗó›ŚŸŽmó®»aQ~ĆMō¹§bT-µUƒ…CY dŠæ$5č!±’IZ’ųuš3¶n>Ī>7s@;Ą¶Ż}õ6h  ģŁøi9¶õʄU…Ó÷j—×TŌŻi7œ:×7Š>äu\}%āDŠ‹[)b£2ßĶż˜ļ°ćGŽö!E‚öq ’®Ó*õ³J+°¹ š˜D,ōhrĒšä'謣¼«ņwuŁĆ¶jN¶@¢õŅd,ŲJ=0L&¶˜4LXÄY¦—c˜OWOˆøKõb 7[K.7[°8€§łŽ.‡ ÓKł†žfŁ8L^n 'tØ>iŪ?ęŻPåµ³s :„³„”äÜ“sn&*+ zś-GóąFū0¤f”cY,'°<•&5y¬Ń:PjŽ¶ŽŻŌUSę]ż™Š­‘ą”l›ŻŽ«fļŅN²Ÿ`ŽłcYt#XÓÓųĖCIĖĄ”×ĖŠļŗźu½vńŒōŲĻ"ś»…ĢÓšHÆ÷Œ½=Sā?7Ԛ ņCUWÖō åæO9 P*wy\8ØŌe{—“?$¤ŠųŖóÕvWņ ]œõÄ0ŹŻą@+e°iOš?l—F[÷[Čj€Ņˆ…f |ܬUŽĮe”&ĻéŠ'ź×šŚéĪŁõuØĄœÄŖĆµ(ĶĘ9āŗ³üż%Q ‡?Œv’Ģ““ó7ū}ˆ€=+9±.ƒūĮc>9‰_Ļ… –+7Ü~h;Rs0Ø!äŽU‹LŻū}öš ĖŲÓóø 21O̤ēĻ÷zż¦^:EX ™fS#$uČÆÅÅ%†®x6ł-šńˆYĶ?7™­f·”.øƒkĮIŽ×Įe€ŸŲ÷ū°,ĘĢDx¬½K )™ZŚūwk„:ļĻ/ö\ń0Iƀ ĆOŽ>aātZ±sj›ńqoЌ¶Rf€āĶ.ˆŸJ÷cÕ ]® ŒÄ~ōDžI˜ōŻ̓‡‘@Ł7 ėŠė°T0ĮÉž»Ä/Ś&AC_Ö4ŅüÉLö]^T>“ ŲĶXg¬å’†jŒ’Ś(!$Źę“1Œ ,Vl4œ?£{Ž &&™ųĻö¤GĮ–£n?…ŗM‰ĶuWp“~ÖŹ‚¶h 9‚öŹ LĢ&\¬ĆĮ¬ŗ ­‹Eü5,"įā9°ÉÆĄ¦”f›œ_„Ķ™Ē|lā’óBؽČ.¢8ižDżVź™TĄšH.» °™ °Pö%R Į‰C!Ų ż SrŌĆ,V\{óMŪwČ u“/›²Ėƒ1¶Ņą2åE– ÄeŚ(¬<5˜ŚĀ·w@ķ©€(;<ĢĆ7*©š¢tŅĢ( aY¦u9żXa§zضgsc\€³Õ/ßęs: įėŒž¾†„2ć Xgać0b‘œr; >^.$ņ—H¼¤3ļ ő7I©ōĀ.K §Réˆģ³L:śųŃZh’‚OńØZ²_ZĘk¤^$f” 6»|@)C8sƒq™„œ\8V¹x“~Ł:››ß…ZÕKYąwśš)˜€F Oć§ĖÆ2c4e„$·­d¢/N—ƒöa’‹_åŲ"[«żóxI®ō"lBXÕCP  O/nń–+fOhķå, ę ˆŅ@æ:ē”š ȍzzsIMz鏄„]é¾ĻūŠb0 §õ™ģϹķ&…2zęŌBĀ?Z0ĄŅ5ü“-JQŸnšŲ„Göē&AJ{ÅeįŖ•(Čr-a”\tŽUŚÅ‚4gīƒaĢŖ\Pš”&½BtÅ’¾; $»i’½ź j즦qvnXn4UWZ›ģĆ0ė)ńx<㳦ܲ1l¬ųŠŁ®=Õõ#ƒ€ŅøÕŸ§£@iV®kT aXĢ:ļö”;L,iqźĀ0Ÿ„N¢¦ōõ–JÜLčĆfźWĖUū¶«öUƒłzū=@ 6žøģń ټ7ʃ¦vą¼ī!„*¢G5ev'T)›”ūŒŠāŠ„sß9ż¾ f”ŠžĶŠ†° 1w„ļ¢p]!l"SA)yō/{łƒaqšMv” ų|u¦N4I×°_T…U°m÷£§—įXQ¢ęgą`kGw¬Ŗ@½xJ„K<†ösĄŗhc™bه"šœ}©Ų–æ ¶eĻ nł— nÕõąĀž$›·–éāR¢É»ĪšĄnŹ.Į€K{6ČżńNö%ڰä§ŚćūhķOéó±źéŪC™7½/“¾r.š ˜j•»n\œŪU„ū€XH?ŠŪD mļ|ćDG±”ŽćךaCśłĮ;ļ½ņ} n}¼Ž~~šõv"2]j(ųŠU[ē–°.ś,{éšŃį0>Ō‡¶w^vWvløOŪÅ8éåc×6ūЬ,‡ O»Ü ¼Ņ×ķ©)z*8<­-éŏUĀ$U4Ž  湖Ī•½šƒĢq …’Źõc©>“œtu›H`ß§!ˆīį#<.b”Ī m=éczN$6݆?.²#wąņ)-łlld×2™SO| B®Oó±°…Ó»ń Ā–}O?īź[EUöž”ށ ½å¤£ž<””ńY{4x·aÅŽāl}Š+žČ7>ŪNwū]±a Õh’(”t”ˆ½ĶćB®ŗtS¤ØĪ¬‚.±ø„s5āĀū ó`ėC[_}å$ŅV™‡œŽHÄ·Ē[ ć€õ`üV_Ā/‰ič ÄH`--jG•6DĘø®tÄ„)¦†r²fwE'Ģoe¬õ蘛`óõ]µq6Ē/?›Ė”œé938†ćJīÄd’×apўlj~©}÷‡·÷ˆp/ ŒC6éR®(ÜeŸRK”q6ÕśóHƒF8‚5%“`øŲĖV€»V./ś8źm³łŻŹ ƒW̟­/Nø Ä:ńv%…%įčB|™ØĖ¢09iŃr\ĒĖ«›6©°wCjĒŃŹø/üxVōWŖXOk`=T(AšÄRĢŠ-5¼‡Įč2~Īe:õ/әĄe:õ¢ĖtéµĖt‰Ņt™N{Ҿr†Ļ.†±)­)Ž,\]«8õVĆy6Ē̾µäͤˆ~8u.šņ!.<”ŸŹŻÉqyŌ†šV›$ ĪÖ-=<›Ē>Į;Ś:Öܬ b}³&Ižs?9MŅ)‘ogU;˵Ħ§2‹“𻺚LՎōa=ł\x°>—SöƒH+Ąaź59røÕĮ¢t ”Ź”¾Ÿœ=OļŠČCšļ[7īžsī”ń'•£U‚ ļA0ę‚8ļäńk Ņ Æk/ęąÆÓA-žŪ[ŠxLkVĒ“2Eɑu@ŒØą³žttKˆ!f"z›yĄ–łnrųŽ—ž2Kjóóžm¶õ‡ŖŁ‡oīćmļlcK½``Ä\å9¦¢!<å ½xųś„^rŗ?Ōƒ°›=k4fŗ3ą®Gi{0¾rŲĮA 5¹{p²lč•l˜ø»ņцІÜE^6j`É,jP³¼ōeķīh>ŁŽo‡ė‹¹Ą4ĪŲüR–`2āįːsag"b–¬…‰ÕÄŖ¦Ā3ņ(ŒOØīwÆ~Ū¹…ė endstream endobj 482 0 obj << /Length 2488 /Filter /FlateDecode >> stream xŚ­YmsŪøžī_”T+Įx#AL›NÆ×䦿pžŻv:¾L‡!a‰7飨ÄīÆļ.¤D rä»f’—Ų÷Żg!>[Ķųģ»›?ŻßÜ~éLpf¹³ūĒ™ÕĢ =ĖrńŹg÷Õģ!QržńžÆ·t~L)óŒå2‡ˆh¾œóäż7w’^Ž’mł»÷ó„R*łółēūīp‹ß~üxÆå°ŁR„,ĻRڲ!¶RMdZ‰éœ٦ZĮT6Š&A›%;"&®¢§mŃwõsą0Ęp¦ŌųńŻ…ż3­’/uæ¦Mū¹4ɗ¹Ģ“–Źv³ß6»Ėēé°G łĢ0kø§H™j¶^Ź•ˆ cOĶ숪hŖC)ąV|”ž0ŒZW3£ä1C6_fJ'÷k×ŚŽļMRtŽ‹O›°ŌėøgWīūaqķ›Ķ!’Ź!o •3Ć%ˆ„XŖmŽ­¶Ą ČśI`,Ē"« B‹³4•ō}ÕīAšßĄ ŅŽ5»×¹¦ļ^hń]~ä)?ŠĆ“8żfēśż’mO‹j^äI‡Äæójš©ü/žūū›ŸoŠ5ą°™HŃ£j–ęrBĪŹķĶĆG>«ą%ģƔĶg_<év¦˜4†›ŁŻĶß)§z‹L2%3æW‰ä™»ĻÅ„ķ‹Õb»h@ā§Åó‘Ō‹»QīS×/3Ć“ScŽÆė˜$ ”_ M^ę¹N°jŽ¢(Üēy ”°Ł½ĻDX*6ŗńt~+t’\čf.Ÿ¶¶†ē†Px’Į!°² ū“t­ÜŖsÆ ß7tż!f’Öē-R֝+ūŗgŖęج¾2s²WR"ŽQ]HÕ„ši®O‚ž*Ę2Ī8Ėģ„qš‹d×nŻŻjœS‘z„r3į9Ę%cR ŠB 6¾ŸēŹWCd±ŁųūB”ńø^–n·£ūö1¼ōĮ@÷AŖ®vč>æŠ}å:÷’š²nV“yņä+I[Ó÷®£Š"@d „wjܾۗż¾s¤Ų4tĘL>¶„C¦P±ˆX"ÕLń±A¬‹•ŒO^ēĖ$<–mL°–Ö:łžģ³Ęė•uHšščmtxƒmżģ³ nŸŠ®Æ‹M4Ž5Ė”®,eʆRšĒHHePb ”›Ś”µĒ6ƒP†½ŽČ>Dö2Œ‹tžéė%;$w”«<ōŻē ‘ŠßĘö Ū+ļ4›c&8¢śot/nŌ×+ƒa"T†_!z“œ‹.ÆżŠŚsž8okRsæ|–rÉšĖ“¶¦įė”­ ‰™™ic;3&c:”¶Ā—¶ĶKȓ˜*Ų,¤“b&ĶT™-1 NŸ¹|ÅӐ0ŠōK}'mDŌŁÄj‚I€Ø‹BēƒŻ„ĄB•)/gWQ?q$–ņā,”{Ū|źq ŚYc2¢²Ź¢ģ‚Ÿ Īc5Ä*”ĒŃ;ž.ĀR3>ĶKģņ »h€AĶĒ  H†HĖ¢™Uz€>Ž%՗ŃĻwtCe,vWAÅ+ˆGD+žƒžų ?>ü,Ģcž¶]¬§(”óŽ‚[UÕA?ōø:€ņęTœ€“ÜŒ¼Ö ’MZ;Åi_Ö®s'eh+×+u]AŻ5"3ŌpŽĄė§8ĄP ŪbhŌĄŹż¼/6H-bįĮŪāxM.Äaūž_ā+xAÆB§ü¦)6ķŖŻļ6/ˆ0'q€ /Wł| ĪPھītņ8Ēæn¾źsemÄėņ^_b5µ¶¦ĘA4ĀV˜„źóŗŪŒiÓą¾ąäi5Ģfd×¢Øģ‰¼Åńžn×Ó*€²š@K_š×¹L¾ź×uW ß®”į“ āˈ5ĀLį /Oʧ‚0oü¹Ģu]\ä^ŖIO¬›P|;ēGvćiŲā€2蜏>øtŚē2Ģ8§{#»mōüLhÉR;fāķ-7øń~‹¦kšH"¦}źł¤?ā:E õĒ賕€<<ŠŹm470ˆ Ś<żßµ©›_®”9.°}Šė#2¦RyAŸź-ś¬ėÕŚQ×ф„uŲWAÉĒ*REŕ&g8MÄO£!ų°żų-:E ‰œ'© ]!6ϊŸ?ķŽƒŅ pŠžę_€hsŖ.œ…5ķhŃP'ŒÆ” ąõy$›˜ö-Mv>Šē”˜"Ÿ{bn¬čnŒa0­²ä©£į²®Ø¤™ä‘ę”Ģ·¦¬¬¢UŚ”ū͈ō²†¢*|ŲvÕpā+=Ä׎čéw Ū”MBUA— F‚ģ4ā”ٜģ©-°u…ē…‹NL LĮ‹Ö£]_Tķ¦¼­@20Ćm_¼lŚŽ­’>fNÕQ'O•…ѳ.Qā5 æ uSnöŽŽų4“=ü„‹«Mū ĒF¼²SWŌŸŪ“CÜĖ {„' ł’/čań|f /ö}»‡`§ņ ß-vĪ É“;śõ€Ž@ sŖ…ę’ž¹Ų>m½*)Ģ+·£ēżĪCQ¼ ó¤ &zt‚q8µĘŁt¢0£o°®‚»jCķXėüŠŽqõ±Ż7­ū Šƒ‘õ»ØįrØ&ś€c½ļ(žŽPŠe‡CŸńēéžRBˆˆüé’µ[M .¢f©dRœšļÉō[O;ąš©d™:“łnRÕčąbóŸq,-4œƒ~rRiĪĄ  ī’0Ž²Č endstream endobj 487 0 obj << /Length 3301 /Filter /FlateDecode >> stream xŚÅZ[sć¶~÷ÆPߨ©ÅÅD2yé“›n¦“I»~sö–h‹ E*$µ^ū×÷¼“ģ7}oppnß¹€¬īVdõćÅß®.޽Ɋ’ŲCWW·+#bCÅJ%<¦uL5NGŠ?eŪ ‘jX…Į2Ę;‘Cä$`zŲ”$”é@ADĻĆĒŠ4„ĢGÓŠõF‚µü€‘ģ8ł`o"1t:øFźę;¤mq÷.Ā»#Ą0,ż[ć«SŪČOĻ O`Ӆ żč¦šO—w×µD»ķl«āt(½ķs 0³}ÆĢõé9µ©3Õ!ś ß4ŚūąŖß |æ,¢ ¶¤ACnqC-¼½ŠÉ)®™Ä¬FK} ‰YÅF¼üž˜—z‘yń·0/}μžėź±Üļ:æĮüÕ>óh듈ņ•E^fa£P4s*ÉKcĪä%1'{}Ģ©\Ģ)£ą¤|¢ØļØšæĄ•›š"ąMuża½äŒ|ł>1 ę ńā$&ڧ6wO¬żs=Ä ųī§t[Żäiy‰&ŗßguęÓw7ĄK(é47I—‡õƒŖŚ„äY± ę ö?„² |FłtŃpō„Ń”%³tnŗ„ŠŁ€™–Kb#§~šŸY¹Ķ.BŽŪ"ˆ»?¤}.…9”õ½8¤ĪŪ`CX˜Ø¤²]‘ ¬±ü›$I˜5tZ„fÉ 9š„u’`,ģÅcB)€Hó’ČōB¾ā5 ¾h"µ©™M· ‚ą ] ņ.nśķņ`d” ĮąxĀd"ä*B-0q†ó0Čt˜vńn E"ÅĖ·E÷Ežģ«7” FL,xŹt¬ĖwRƒķ€š;WµĒėj‚^‚ĘFńaŁpXEŹĄsĮ‚F ÜžŗŲć¬UĘZŃPŲ0…qp’Š—ĘUP€™2Œ ė ż&u%v.j:†Ķ;”cD_*m0 .ļł©LĢØ|ó ag2?&é 2?z¦^ ŌfĄĄvż\”ÓæGĄ„Ł'Ļ\3€Ō!¹uoź ŻkćM=jĀūŖĪļņ2-Üėü€1ū£w „®†I`\Mͽƒ:ūO ŚE:@ŸĻRlī菏°Ļ涌ņšŲŠ^/°¬*›ĶYÜęOp»tŌē]1@÷mŃ–B„מ o€–ÆļX"ōb„”<Q& •5>ž£^©±¹`™r¬S­,Ģ WĄŒ,“ć/:KČ’ÅT-0Ė}‘³.„fܖj6™ž×W"#嬤0wåą[{Y7øāƒ[©/!3Œźßņņ.“ˆĢ˜Šg­¢uÖh'Žū°ĄfJzRmrjāś)xŖĶ4ī“Ü`/O‡ų ¢5pš(,0iõųĪLé„ćJؒ‰ńž~V‡1Ŗļ9ń Ō–½<€¶Ōź©›ŸńV)=ņŠś/ ¬3Ü|-°Ģ ‘¹‚7Ÿwwrß¾**Ėą­­Ģŗ/ćFa›ßYĒĪ]ĻWß ŗÉŪ:Å֘’kc ®1Šˆ)$° D"ØffńÄS(tžĻīš|CŹ¢1L„”§s½7±u&ēMģCęš`Å)m»źVQø›köN»Ž¶̰(fąqaXõs—Ė’/T@uF±ˆ'ęA‰ŻA5޶·]9­ f ą‹ijÉĪnéõ&µf)jŽał䆞·+ŗ›ŪŖ(\ø’cĮ’®ƒÓyZ[W§6/³ļ&Mö”ŁįŌ8‡øRcA|®š¹Ź}«?/?[,ĒYžquńūŹ˜ () H¤+f ģ¢zµ=\\"«|üiElŃęŽ=`•Éö–ŠÕĒ‹»S Óåi™€ 3Ć)Īædec»õÓÅ…ģ÷‹ƒqÅĀØéāŁē“Ąh£Mļ.ĖĖŻåńņńr čņćõ$Ų»c“B³wĆü± +*ó…3+1)4æ{ēøß¦Ē¾RĀ°Č„£6Ē®łvWM·“馛Feė«pÆ!Į.x²EbŒGuw†arNdV²nĀį9d|ó¦ĀŒn&!åKtļ^C÷>æŪggūnzŠÅ3ßßÕYøšĆd½'Ų…ÉÕxČB-{|s6ļņ:Ū.öé)…Ī88ŒN{VuŲU' ĶøĘćułé5„;ѧłŃ”pæģEē4z¦Š3Ū‡|ŠŅå}xk…äķļÓu“?Zž¾jw¶) 1d\"Ō ¶Ńöcŗč€‚·8Ÿćś‡0nI[zšāÖ\°†Ԋ‰#óć#ČõśųŖĶ7™eŲ®«‡¶ ±—†•‡bģĒ…š5‹9¶ Ę0såŖĪ q*lČĪeTŻ“in»ąų)z J}†ōcŠOŹīC„nĻ"įĢŁČŠlÖ‹¶)Mzšw.½ nݐ”8,£}źÉCœĪ‚ށ¢@Ø “8…3”pž­ ʃˆźĄ™P26 KœKĮ\=œ[Ü4ę3Š섯uÆąaį@«žB„šŒ•ĖZŠžŁkź-Ģ9ęāNŲ÷{’&ė¼Ģ³W !Äłšńøq¾ażgÓM ģŚ ”ģ!DɰלŃ9Ū¼yČ °˜AĒ%ĆQG9YŹ čBKĢ“©^P…G“˜ÖF&Røß»žõŽ=–żį›PM‰¹÷aĮč“.Š!˜Įė©%tu€'ń”ĖuÉ̳õrŠ)õŽžĄ ·µ.œxtp_©ūčŲ ÜwkĆ9'‡ø’Ü^1gɂĻkH¾ Mɤ:†-BŪ‡Ó“ięF£|ķ^°čÆ µ{Bł¼™°ŒłP¼Ā^—®xā¬@‹kwkKmU½ór÷ĒŸTTĄ^’ʐ¼; endstream endobj 493 0 obj << /Length 3245 /Filter /FlateDecode >> stream xŚķZŻsܶ÷_qTķƒńM°‰;“¶Nš<“i¤v¦#{:Ō%Qį/$϶ō×w ~p–ä*™>ōå‚{ `æšŪųājĮß½ų棋×ß ³œe<‹³ĖE¦Y&ōĀ:ńr‹³õāatĄ… ŖHA·™{Źi" Aˆ¦ŲŠÉ&§Šį{Wąy¹­Āk`N„A–įÓ¾-.÷µÉ怤»Ęˆ]»}Bd[0?'aY.æ32øž7-Qē[śń)ßģŖ"̬æ\ ½‘ī€ę²®*Ņ2¹~ JO“š:¼?g‚×āÓ®)Śö˜; ž‚ģaj2c. Sū.įĄ§l»Äc#Üs…Tēs0ąW`ū6²ĢX&匄|~–źłYźGļ%'ĖL(QѽāęĒ€§™įz"Å¶Ą)“HvTó©Ÿ Ņ[ŃĖø½aóYfŃėNĪĀNgń`ŠÆ<‘ØĘ—ĀX&ōaČińĻ’’÷¬’YĻņ·źö˜Ó.RžŅ™DĢŽ2kÓ«|¹É™e¼‰1ƒ?L"Ņ 4…K§ģ~“ÅRqĶ87mU!"ŌlłēA£Ķ˜M`óŻ̘¦_”<eźŠnšĮi®#zI“0}J”¬HĄu¾U9B<ŹŽ ?PŪ}įӟńÆ<łSŽtE[ę”UiÖårؖz-MB®é„{¤uŲ¬C-&Tx¤˜±<ūf,ƒda=łvMaY’QŅĢa_īsÖ a¾Ē„£ Gppęi²y Z٧D+ūØq ˆŲ?ƒ &ŪŽ¾0ķ”"ł+įÉWd ķ~7@WśoŸOąßó¦c>‰IKÉyl0€Æ§¬ ”„ŸC*+”`ŃLS˜j.éļŲh Įkl«‰eĒ”#³b··Qķ(= ^3ʱc×¢ćI–ŽĮöqaTʇ³(šÓrČm3ß^Aމ_CJĘž dŁųī-;,;źėņq'8&1÷˜%šonWÕ~=žæwŸ>$CćŖŖ/Č­§\äg$ dŹ„s"šæGVī2fõPcĖ÷Ė1ž:ypVŅՐ?”z§7©Oė ¹Ā7¹ź_¼†LĪŪ#7¹l4 ž«&ß“QUē[ēžĶV»č¶źš4wXĒ«O°Ū1c_ÕĆÜ1– kĖxz° [ĒĮ„)Gī·¼¦¼ŗ*šcœ-D ńŌ—"¶ķõž&kŲ³W]ŻÜĘJA“v€A -čx]¢ųóźßC™|<½ˆ¤qµ×įŸ>ĢĄénŁ_mƒtP„'Œ’ł˜mū{•ž>„ź>3oĀ]¬÷M.žŻ»C§Šæŗ²vÆf ˜ņ?š9æq endstream endobj 497 0 obj << /Length 3022 /Filter /FlateDecode >> stream xŚŻ[Żsć¶÷_”¼QsJ|ƒéÜLšiÓI§¶©gŚ™$“DŪ¼J¤CRēsžśībAŠ”!‰¾ųŅ“/g\.‹Żß~@—.īéāW_]_żęk®ƒoģ‚+&•ųĶJ ĪRĖ+©™3š>RĖēB'_åm¹^®¤ÕÉļ›ņżRņ¤hZšø­t÷ ¾^f*©›G$Ė› MęU|[Ą÷æä©įÆH6 x¼—J™”$Ļ7Õr%LK•-ŚbŻ•uõ9<9ž<.…M |撇¦“Z —tįüÜ.9Wą« QnpK@ć·„T~K8ؔߧ\Ķ„Ēū„6°Æ2Æpµ®%&õm/Z10yÄÆ¼pbW£øO’č‚_ā°sÜ*—L«ŒöڽPا”¾’Ÿ-“~U@“Ū§„“ [®””p 0ö‡“¦INąQŠ;PGdOd" Ū.‡!üS®ó-ĪØä&_ć²’¾kj‰łÆ¹a™“Ą"cZXbń·¦Fŗ÷å¦@ƒJERÕōޤ»ß·Tx.>¬‹A"‘öÖė}Óś}fƇėz÷·=eY­·{Ō¤ęcƒ”Ü‚S Ų™ēv—ˆŁ­ŠL›¬§‚Sˆ°ͤB8•U”čœ8P=•Åvӆ {%­dfϲ#M—`&±53bąv›ß“Ń59s’÷TRŗ“äŌÖŃĄĖBߊ¦F­ņ`×8—o·4šf ~¹.ó0s»Æ¼ŪŽä¶č“ųTƒm÷yWVeEÉ~h²hJoą0ƒžHʆ£R¦tЋĖĖ @iņ<ļ*½<(>7Å6'ĖQhš$~‡R’oŃ ŹźaßѤ×n¶EP®H'” 9Ók7j>84Ćx•NÖ«÷ŻüA/€ŽN-äéÄŗZ ƽ)ଠæ¶-ĄĪŸbü5Ų”Vƒ…žąk«{c¢)10ł:Ęā#ōß§:±QL(yVµ† ©Fl8mŠ’™75|¾Ķ׍r0‹'@€UkRƒpŗ†Ćhhč¢n6Ž®Œł­ó@(³ļŠĄ³¹)»mūD¶ a– wtD÷å ®8.É-zØoéš=ž%Ė€½]cxė|¤£éŽĀ£Ŗw3™;«{ĻpöEŒ‹łŠo–ŒņŪ@ĒįefÓŽ¤“ É2vŁĖ$ĒÜ2ę2–{ ³ŸEe׌,ė%ĖīNlSBB4^wS@ *ļ>‚z7˜*="0=‡¬,Ę(›ü1Åxų “9kæ€OTRv”ķź¶£™uķĮī½ÉŖr|×ÕDMń7Õ$įRĆ#ˆ!į ±Č±hvaŹC*Lķ«rČyz>×K§ ĮrO[ŠnDZ¾ųšW-‚| ÷„ń˜DpäVŠ kĄNĮ<{ø‡W·”ŸąĖńŃ Æ˜}¾‹~ž®)Š(čBH3f@†Mģš3Ęŀ¹Ż}+A¼¶ēߖM/eo $&…#–°Z§&qgß ¦eJ%†@3dyw †‚ ķ.˜žƒƒŽw16`āSŒx!zM:Ā\Į#®%RXK#€i&źf†4³čYĀ ¢śW„Ęš{Hz$.žģ]ŽČ$snžmz" pc|’åģD“)¬ųAųwq}"|ŒØŗ/P©Ģ€T§j*śq,T£V#ŗ( f Qd›’ńüҳ0i<źĢ…É‘hќ”K f²“DÕ¼L3Uܗoć„"¤‡Õą?ŗZ]ŸĶQaSoŸŖz7dĻ²ĄŖ‡Ü”&YPLBf”ˆ˜ŗÄT“ ¤@DÕ8ń‡‰Ÿ±tƒ’1 śßłCę2ß>sˆ,õ»=øś¬lęrRt d6MŠP¼CX9¤’}Õa¤crŠł¹/}BEaĒųA-³¢µ;c†™Ē’Õˆ źøJ@?y˜In|ŠŖź&!ęė%ų5±ź8śÕÖ”V‚nÖ£Xķót_·ń,Œ9ś³Źœ,¬(ŹŒČŽRMm=ZÖ7†¼æ^żįśźĒ+Di!2¾«ąø„7Ąõīź»ŅÅ^B˜g 8>zŅää\”Ļl’øś;5£Žü®ē…ö"ō‰!“ćƒū}vĀżĄ WĢ™Šś2Ŗ! Łģ(…{÷|‹2ƒ sĘa9˳s{˜÷ųår JwĀŗ„¹gBŽfŚZ <’æF6šRˆDpb)·ćöɟŠńi3‹śY4EÓ]Yo>ɧ™@ŖŻq&0ŻŪJh4ßGāYÜ§ŸPq%m¹{€* Ę”!ą'!² €ą8$›z’2ć źq=µ–9i/¢ö§Hį¼X˜·N63€b»)ļāšĢ!•3œŸ]s#ßb½į’QdŒøhÓvōph›Ō41®PėĘ'×ѦE 5 GŗQ€ł±€ ڤ=W§•b1¢ś-H`l”%ē’rĀSÄ@?įŖcŲ2³“/)£žŹ¦%Ŗļ1H-ūö.>@FT¶ū|!¼Ģ[šļ€š'w¾>Ä'|_Āõ¾ ö¾÷5¾ėĀ·÷aā&oĆ2ŌÜ«CG.šze6ʏ=āüF=ĻPŽõ„„vēZᔬ€O¦GĶ•£F²5TņÅ:)žøŌ1‡<¬ŒxīĆŹł ŌōŌ•;*ĪMßčJå°Æ÷T’ņ Ž.*|Œŗw£†‚InėķÖļų10½mź]æń"¬ćėóœz&iöŪbŖPaŖ|!=®n‡¶~¹ĖļBräSĮu®œŃ‰„bQ}ŗ°6ÆŹ=ÜG¬K Jž"X’%£E Ž-7ÅŪ׫7ķlÄĆ*RŸėŹÉŒ!<ŒčP-:RmāUQo–ŲŅE«Ģ·mMFن;“ŗ/Só`pŸāSśę°„‘•lāēĻÓįLŽĄJB$AķćzĮ õ‚ŗP/øsõ“Źé£¶ūD½ąi*› ź»ŲZ¦ø˜ÅNÕ¾Õi…õ U‡±8śR€6^œ“|NJ¤“—'±}ÅŌ'‹VR1Õß{’,DziΦ”LxĖSG}5;«Æ&’K}µS¶ēęõÕȾšŗŲV3Ģu¤Žœ0cö[ük܍ųØŲs¾ø‰č¶Ø^ŽšŽ"Ń>§­6~Q¦/¢Ģp;Ü&ćęL¬gr…Ņōw<䈐 /čr’¶ųq_Tė‚&üUT’;5Ķ&p³ šJĶERW¾]NTž‚ ææi‹føEé“’i‘‡›ƒXO ¶Äéõ<×2ŠaǦčÆAŽ}Užø'!ć‚ĮSPHµ é„6ą nšÕŒbĻŅ„6X„ķŹźØ5ŖøŠAR—"‚&rūy”Ū]Ę4a=$ŽØüo?¢]UęŌ ū2ŽTµndpBČ5bŁåöPhÅłŽŖO6›®\ļ© :~ĮļšfĘ7é‚iџ&|ğmL‚€‹£Ś¹:Å2k&uŹŪĖ›~Ż+ļ,®&iĄ)˜Y)Ē$„(ŸżOS^ -žŹŚœ>,ē•5‚Éč.ń[?»øųUč5Z|D§ce/ pjÖł˜Ięwź|Ģėœžw>śõĪĒĢ:ózēs^Ÿ|hŽPg^@ł .tęmĘ, :‡ q®m­!ÓÓÓ®õ‘¦{^zŽó3©æaFcQN¾ątÓ8Чؼšy¼ā—>ŽŚÓ…F£ł^GłšÅŖÓ‰ŸŚ“Š,¹bÆå„fξ›åÆ›Ķllæ46_45GŸ½ļŪŁEŹ,}^ņ¶’×`÷lĮy¼ÄüƙĢąL,EOIńFTž,`īye°ž—ļę.ρe>µ”)«tŁ’°ļ}:Słä¼ O³į·Ōś¦Æßżõ”’cؚž÷F’Lš?ˆr±é endstream endobj 506 0 obj << /Length 3262 /Filter /FlateDecode >> stream xŚŻ[[“Ū¶~ß_”Éwŗ¢‰;™LfźÄvāLŪ“ĪNū`ū¹»Œ%R!)ŪŪ_ßsp‘@.$QÅIś°+<8Ī ĄĒdv;Kfß]|s}ńä3’ÄY’‘ŁõĶ,ćqFųL¦,&,]³×“—oÆxņ‚§J3Ł¦į—s’$IōĶӟ^~{9gŒEĻ^½ü÷óW?į^\Ņ4śń•ysżżsS€Z…µ„č?šŸFO_=3 žžć™”yõ¹Ų’ńŁsĢEb§0’ÜkĪDœJa÷²ĘÖiō±­śŖ¾Å‡,*.IŌ`’ķŪž®4…eŽõ†¦üe“÷USw¶=NĀŻåŲöƒW“/Ū2/īĶCQ®ó¶/ Ćē¦mV£N6Ż&_š·«¼o«OsĆkŃ7-Īf7',<3s؛^%¾œs&£—8Ā$*Z’Ł”-—¦ö}½›Y‚ę½+•†¾FśĶ ’滜cŪÖP47† /ŪU7nŽhŅÅbÓ¢jŪAŁ•¦ų†0ŽŻÆ°{d¬¢fY-¾0äå§u[vszVC²bŃMƒĢ×cÕvG_ĆZ„ŌŁŻ½%!3g*Ń"f µ9‰%“†źgC54•4ęŠ½G„g#pS‡1hi`•–Ž$„·`eYœ0āģ2‹Iš9Š¢l«—BF ×(ÆŅu_wMk„t®§©tœ^„ś"4– s$y] fµ¢Ŗz ^°éæ0U £ß&)U©m¤ļB˜Sœm&†6ś)  S&ŹØĀŹHhę+ćcÕ߅z¦č×nV–e#½īāŅ›„ņ YL“cŹR@,ÅmŪ 4>‚Z8•[æ'Q ¼ĒJ„‹łŗ*–÷†hßķI~°s¢ų¼¢-S°Č¶ßŌy_B')‹® 'ĪzWف‹i6µU_…QßøĄ˜ōsa•mB|Ń~9'™Ž4ė;>Ø^» žę›¾šU-ĢcQé°²Żöė _@„i݁ˆ¶b+M#m‘XXå5ŗĮ½­6^Ø{i-E׬Ź;3 ;ŽÕĀKÕ/m£EcBZUCč DŃ®1ėˆ i°ĪtoóŪŅT/B³¶Aqž0ßčöęŃ Ō¶Ø—÷†#¬…6K¾tµ:ø0ēP0aX!a2÷ŻZ@6PF¶VŌŌAS;äKÓ6"¦‚¢1Ă*óīŸf¾Ŗ¢ ™ƒ«sz,&¹ķ¬źœŌóå=ėŹH Œ¤×™‡u»UE½ß›&®iUßAµė,™īH¶‚¾ŁŌ £ÅĄ ‰!\ĶĮ#%—‡—”ŌD1u@–*ę„Ķ<ŖÆƒJ!± āŲ 6”;³tŠŻ›D$AÕųš±Qš¤į(mYķį£õ;ü |YŖ K˜e£óy’}y,nhWA[Œ3ČęŁW” €7ИeÜZ­ņxc÷UkÜ”š£-ęĀę&ģ#u‡Æ”²»» ø¹ā}Uvįu,…ļ!*V6ĄžõrMȦĮøŲƒ“ģāłõÅ/£€łŒRóTĢx& bX¬.^æMf¼„`Cź;ūØIW3"c—³Ÿ.že63£\bčĮ§"Ī2ę0dA˜11vș<š©4Ö£89ėH>·G«c}Į8^'ȅØžĶ£ŏG«?ÆG«I­Īēч%J„ō;ü‹Žćy|"M½lŖzO“'2é\žWššmˆ<)ųOMZšZ+g qæÉg>¦xDÖĀ>OÖ"&Ę8ńēĻZŲį'½ø³ā‰ŻWŅÉ"e8‘ņiēĮĢļpŚąétõLZ‚8IcÜ&D£KŠ–—=äĮ%ˆ o“ÓŠäYßietÆAbF²’'œvƒšį5§°]N„ҧ7™°*żrt½ŗm%)Ä`ɇė06ĀĪ ŁźmŗU{7ź.=čžøĻä·Q­ AD»¾CøßÓróD»(Ók–R65xb$0’÷ˆģķŠūąš„†ūśrĪR¾Č‡ÜŅMøo Bahg[Y (Šƒb™ŒņEæA<ŽĮā@…¹ćĪDtŖ\ƒF–v/÷€ą4½†ś ~ČĶ»*Æ-tJa©bHŽ­čąó Gz^›ķ¦ śŽ,5\;•”qJĪ„į¾tŖÖާ –€lhį»A‰ ¾»8x„ Ž”Į~gœ:·y( Ģg 愯±õ{‹Šƒr¾FD][Į[SE4eĪ¢¾1U&ŗAįé³’6’֔ošö#Ī2o-ו1šĀŅ"³4Šī¹JbEGapeĶŹł—1²v #¬q=b¹-·]iØVhȍ•–^÷:d`Y.ō ­I:˜aޚ²cø‚ö;‚‡°t3éŌNZ '­ˆF'ę·F–šöēžp^4µ­źŪM½°Ŗ€Ēk„šęåJ"³ę@u¶¤YP¶ß (ā Śto(f°¦„üŽčå‰>;“—ś‰Ā\ǁ½QSģŁ?ŪŠę©œy‚|öŠEÅt"ŗņ\2ag“‰<(ūé Åv9Åć‹”Ēi`āÕõ‡%īYķ¼kt^C\^…”įC…oųšč>’ē«ji,Ųp -~pįf·#÷ń*ö좼#bŗģ6 ī†ētš8ŹņLHĒm`ŹGčpė†TLžBĪ€ŸĘ` J ©Ų,J[wg m¹Ģw /Ö,ŒšĒ͈ةM0ŗ+óĀu¹Ų“mYų »FŽŗoߛ¼hŻ–īÓ āż„Å&@T--ÄzŲ““ƒuwƒO«vŸX 2„¦kųUĀ}6cń’mŗŠ 7X«”ś7…Ģa“wgYŗŻ»3 øõöīƞ‰ś‚yI‡ŽŗŃƷꊖŻśüö B¬^3®j(]½×f_®Æ>]Ż{ˆ0›>üÉ|bŠö[‰lø1¹„ÓXd[’~ņĂiw*ŪAj!SÅ<‘/“Ņ ·į<ēŽŻ@“[9ÆN‚īp÷”—r€`óŃĀ3;ĪŚ~M½É% [x·Ü–<–;D’*8–@@–dĻlź³Ļ¦Ŗ?Čo•HGļń| [gśėˆŠ|œ™2-0‘ß3ßæ16ĢšĶj—ū˜O#šĆØh60wÓĮ§×õŪSF¹O®<~ŗųšČ/éĮ­g¦±‘É䣚“.ßF‚”xūÄŠ‰¾Ńz ˜ū׫“óX±$žÉżžķ‰:A*/Ā<;iS’[\l>XU`‘ų ło endstream endobj 512 0 obj << /Length 2022 /Filter /FlateDecode >> stream xŚķZIoćV¾ūWšHŅė·/Ģ!Ėō$A€Į >tĆé-ŅŃ’Ø¦č-æ>õJ¤ōhK–³蓸”е~µ8™%8łļÅw—ļŽ‘Œ 6$¹¼IČh‘HĶa:¹Ģ“«”©Ń§ĖŸ/pų[2į” ¬H2ai)<ÕMU&ŒŠ“™–žŻ{.»¬ õļždļéH(ŁRu5‰ń!ŃŸ*ĘG"ŖXKQēEćC)Ņ‚·T›Ž 7-Å4[dACPõ~DušÕ¹½@Ņe5šĄy^ Ń„3•^ĪĖ'ĶėņĪ’įÆÓj¹¾mŠš8Š{aŽˆÜ žI#„Z‚ǘ‚Ą‰-Éū8ĮHKń8ʇ#Ź·V~°26Äkx_6so•–/ėńÅH1³ūåžJa->; ė?Ź3ü__Ö>?‚,c†øɄ0$ĄÓīę%„ļ„2––+ūŲ¦˜Yߣ æa"²YL\yĄI\ܾ uo=ø^d–öq搳ŸM¹,]¬Ł“ŗZ8yxšm¶r¹ß¦"s.UQcJŠŻĘUSgS—”’¹¼ųraÅĻ'LÄ9¤>cČõtyqõ '9Üü9Į`dÜ;ŅeĀB~-’_/žļa¤’D¦)RD;^ŠņŖ«ĻŲ£ Ū79†§?5^Ÿ¼hŠzY®Š7AyÓOD:ČRm•ćŚ #^G9n€„Ŗ¾r7•ud€…U;1mA;a>ärŽ×„E„ “Ś;Õ@°ńzÓų“Ė‘¶ŃaCeį`®M=ę@(§e±²mF$uŒLZŻx2ö  ēzYäeքĒ|¹Ķüõ²)[JĻ« üĻõ-<ˆu‘A‹åŚ PÕYķ  lÖK$«Į¢"J™–Ø@įŠ©Č9NļFB‚|·įtÓdS+Źēö/+}]ƒV@CŅ5du֔UøåjgĘ éXÜ^oŠ/·…WÉ_«‹Ą›šÖ b˟­Ž/ø’́@D„Ä‘0¤M¾ƒpE§:!Ü×u±Ījē8³ŹÅ£ĖmĀÜÄ¢r‚”&‰°‘ŖÄYŃN9Ōmؓ–†źģkjqēģэq€B½-ĻQĄ¤Lņ w4Ā ź„~˜ÅBNSa[¢²ąŽāa‘Łš$ŗv1T,*›*÷”žD!Œ ČĄU”žŲÜ­<PżżIČšIå:ĒJcMh6c§Z…ͳMÆkll Lg؂jϼ(åŖiC+5D‚]…L‡ŹNäY&‡6Ij/Ą§AŒ“ŻG“AZĻĘK›įć?Ū›;ć<~ ćG<~$®ĮpVf¶¶ģķĶÜón¼µJĖ&7Łģ_ŃĀĆ”*ī:‡wļ¼išĢĆZ0w™d-­»¦{"!=iŁõÄŚ|yŠK«P3kšŚßtøīJcs•oįĪ^‡š’ev½ˆw™Dr$å¶YFµ±éGeāŚ¬^]›rõr}”a±Eœøw‘Ūt@Ÿ6ŽNQ+4ƒ.Äüčc›µn­±w:µĘžz€?2ˆBwW·×‹ųjõé)‡ģŹS/č“izĻØŲ Bś(dī“’‚$ ł£:Q’6”2„E”"'*Õd«YŪļ„yJ­NSƒÄÕ°³.5Ćj<ā«åIj¼Ō3įŻųöQI 8♾XP`”@tØĪ™''Ł‹Āi$WŒv…nėӈ œ˜=ė9Œœč°]K-ÕńŲėN7CĪ2^oՋæCgy½ÕsĪ’{Ī‚ns÷8ē+˜„yĀČP`ķTÜ!;iK0ąVõŒ[YW½[Ļ~ ‰bŠ10 ąŅFvwXa¶Žļ°øŽ&ĆM“yDšm½“ż]t‰eŗŒĪXb±n| .±ōžĖ÷C3;^årÕī±8O„yo*õ*Ō°yŪG×;D)Dż{÷;4Č|?łćą^ĒŠŠJ zÄĄÖ¢M=‘€@>kŚ ĖhTXęÖ|ČEӆčjJožćCóŸŻ5)śäüq ƒŽHĄ†9š¬įÉę å%[ĶŽžž˜’ŲÓóŸ±eŽ½Ž 0÷1,VaB„F ę·^é /öŃ<ī#čHŲUqÄ ¤ē#ƒ¤ Ži‡½WõŃ<ī#˜$˜y @8”G« …ņn3˜ ĪÕ)³ŗƒ¶÷n,+SŽÓÓšž.ĪGŅ-…o#÷š>3i ö-æżįæL¾o7Qnž¾ƒń÷øuä ų‚ahįp[8D1Ą€±ĪĪ[8pÄm:/"ŲšR–¤~ē0/Ē«±[1|°†d½ä’čƒųŗ_xCū…õė{§¬!µ!T6Ē/£ŽĄ"AæH ‡J}®Öē­–YS—ŃQĪ@O° ƒK CÜß|ݼ±ĮGš×‰!õܖĄZƒaÉŅż ā楓£“>ż3€ƒMł³WĻ|0š›ńÖO`PN÷[ƒ~®óĀ%¼1tļQ€ĪĖŁ¼ØŪ$ė9 w¼Ē¦óĒ1Ķĝ—ī‚yü½ …īŻøvHvf$  £Ž—4üÄ÷.yļĶĖA[d?ąŃ=lūśŚåk[ōņ¶(?E—°ĻĮj^Ģź"ŗˆ%LvßĪēńr ģēUņM½%z£ŻŻ†$žĒ”“ endstream endobj 520 0 obj << /Length 2822 /Filter /FlateDecode >> stream xŚķZYs7~ׯąć°–„qNy«œµµ›Te]±UY«?ŒÅ‘4Y’Ć IłųõŪ8ꆗå-=ä…ä`ĄF£žśščv„G’<ūńāģŁ9#‚‘Į†Œ.nF†#CųHj†Ó£‹Łč*azüįāēgē\wzÄ9®O Ę8łń廟ž1ž2ʒWośķõŪwö'ēcŖ“7oż›‹½ö? UŁVBHņų¤ÉĖ·Æü^žū•ļóöµ•žšĖ›WÆ­2g8LįŁ¹ m­¦B8µ¦L -…WnVl?Ī3/įżÕņĆÕģĆ~JŻÉN‘0õœž=ó٤ĖŪliUŻų†Eŗ)óĻ^Åm Ś Eu%ą½ļŅӐ2Š„£)aHpóPÅ/ųjq”‚³l5ž‚}³åĢź©½ž<¹·æ³ėMQĘt!ĢH%ģKP2 ».`Kpś” ɔļ…cj)¤$µz½ˆŽG€’…įĪc‚4¬źš;8&†#ŹėNŸ#JKD™ŲÆ4GŠŃ¶Ņ0 ‰;ĢĄüv‹,©KpבKj–•łżXˆ$ŻäŽKūV–󖬽ulJ•FTœR ‡šĶ«y¶ #_ŽŽ§ÜČds7&0ŖlŁ lŒ®żt¤KSõČoļ²r“DbøöU—DUŻ£³Dåp¤EUėø7 Æ5ŗNēii§)’›¢üd'ž–3?ļEįBe–”ńŌ0œ\Üe¾gYŲ’“öOō’Žų×r‡gl<ó&ŽŽG—@ŌŌ3XX¶ėķ9šr Ė^Ėī~p]”e¶öa],­ī”)ģ· JĮ|éC_U”ļ¶(ŪÕ/®2Oa•®}S¾ģż»›Ų50%I黸Yū.yYż+ßäé<’ +µ>Zżæ4Ņ|ŠØŽ?°AR©&˜y–@t@ īl½EĶ)E”²®}аć•)ģnąJÅYp%DŃu1ß.–k’sŠ…8mĖģ”zŖ!°‘×]¢ćąčķV”ģÜ­žˆ ÅÓŻź6"ĖĘ­,„ŗ²:ū#CZ×Ņ ‘ćjZ[ēłó糨$hŽlF+³,Ś:Yė_Œ5KR·^ęEY¹ĒūīwLäuŽé^ķ…$±Y+x0 ßnĆ·Ķ ÜīÖČ?ŲDÖY n10Šai“¤mFŒ[äö…‹Ū°cÓ‰››.,įVBŖCŪ ń Šķp6ŠŻw„a4}C‡^ Ū&k‚Žī…Ū3]››——›—Ž2„ ““¹ÖŁ ‹ecU±lÄ2$,E+”ʼn”lć…Õ‚ś!Ģ9­¼¦›¶!L-ŌŪćXzO[X"÷1ļį¤^ą1Xw.ˆåAA,ŸLĆpfG [ó÷cŲū'ĆnŃAŹG\öšmE]0›Ō:µvA-mPOBŽAšÄąßŅŠŸœ½¾8ūóĢN<7¢œŹųHĄdz½8»ś€G3x÷ó#™ų“ė¹;zü1½;ūÕDŻįØX:Qę~‘v6XŲ­„ŒŚ–iÄ[ ¤X¬¶›,LŪ'aę‚\&é|›­ćØ|°ö†0ŗÜwm:&ķµĒčą:Ź’?ļWڦ`ÖVŚ/čffŲg¦nˆ’G644Ć9+1d„Ł1=Š”Üßź¶Ė ōĄ¢ēhƒ>Ņ€dw•z…š†żžzt_ŖzšT€XBŻŠğ ČČbš2‚˜0»”E¦q× ˜uru,‡ÅIóīŪÆgčüLc"!aĶ:2éL‘łÜ[ļyėIłw2 9F¶ūvŠ™Å}§Eß}°v«å,Z©vŻ8œŽõĮސĒķ{G9"&žFŒś>ŽˆĮjp¼ĀŽG Ÿ<Īǚ'Ū’I¹(Źl€ą2óŽŗKמŽČlB¶J4Źćł¶MŪü×åq¬ą]Cu4ņvŃ@³>‰Öż7°ŸÖ ©6ĢĀō6‡|sÓŻ@‘gŒ£CxÅföfŠ% æEhµ īŅ,KZLa£7åLĘSCX(j•–·CÉrSQp]ż“‚š2eµhʌ8 p­å7avP°­[YRĖ šŻgå:‹Xx €‰OĮbzɚ)ÜG¦  ¤Kõ8S—Ŗ讵)QŲ%²ĪjłūĄÖŌZ–'ņ!'*رŌn<Ź<*č™* ou¢Ar”•E˜śN¼‹:Ńp(²ŁćLĮ(—ą”ļóO)58²o–×kö>šŃĘĮך‡ŲKēėĀæL}C‹oŃäåŚ×ÄŠį6p²K’>”Čķc‡”ć0L—{]†#ƒØMa”©Gœ@źdßV§@ށÜJœ,PzøP!dnŅŪÉb²œĢ&«Ég³cęsgÖam…£Ł=*±ķ·e–Å«3éŅxbōu …(%Ō]=žbŹKO»Å- ĘćŗN?«øŹv~e†?ć«åQĒPCkb’Ń”A„Ņ“NįL ž#l)wąĄvõיķ g¶ņ 3[ł“ĪlåAg¶ņ˜3ۘĆÜ”ķź)ŸŪŽ8|"XCĖw wČŃ«}ē“źŃŽiéŽcZ@‘øīu—#Nŗ‚`‚uimƒ;¦U`ļŹéĘ’ŖiŌhŽ5`>ńŃ”± ū£CK¹7:Č!įAæWxL4'͹ūetHX×ūł½o0Ō¾” Łr7Ó§¦LØSś0Uˆ+~8aŚā8‡ SqF˜Bõ„OäKm:ȗj„æ _ŗ' OńĆeœø¶8ū»ųį2N\ ŁOąKżMj„V‚A‚Ŗś¦€£ 4‡ōć~@zŸCq»¶0¾šo\鈂y‘β™oæ·Óskß²*}ß|ęīZ9±ž iV‚ä^”P½ڜBxĄČŚeęō:ĻacF%ƲMšĻƒF®Ń<\°³[MC™o‰Ś«(`+(7ŚX©~&šąL’ż¹­ī YąŚµUdKžÜęĶ]ŽeUmųļwõżxŽ5P’ÖsŒ%xģīĒƝ%ĘyRśĮ”˜šł†| Ųa.'1h^Y{ćūrŪ īśgĪ)œ÷gĶ1’>«h[C8ŗŁ½M—į¢E„~ĖŽé ,Y’TW²ęŪščÆkTSƒ†UZ¦‹l“Å:É„į{I#&kä: ÷DŖ3EZ]ų€!·ė¬§ÄM1ŸūŪ2Žß¹õÆ;W+C@»· ĢŃæYchKō¬QÕĮ~$f=Yńn5‹×ÜĢć`[wķ 0wõłŽ–%*כiu÷„‡ĖAm•aIś©»•½­§Ogó¢L=‘`x›øÉæ‘ĶƒŠ†Ą“²ē†“Mßm'_[¤Ą#"ž4i÷€hł‹µ{‚¬]»NŽÉk|r”ÅfGÕ]œ†&ķŠm¼œ§qΆÕüz$óUfėķ|ņģć³?мg]-'~Ł„;,d~ŽāįHŲ;.n›°PĻčƒY˜mü) š‡Ćuå@õygøŻ„˜>¬Ó'”b}vµīśżģĮī ›ķ’Ž5ćÖ endstream endobj 524 0 obj << /Length 2597 /Filter /FlateDecode >> stream xŚķ[Yoć8~ĻÆŠ£ƒ‰Ł¼ō½G/0X`±˜ōKgņ Ž•D½¶”ČrŅ“_æÅC—CŁrāÉb±żX¦ĖEV±Xü¾"“›'?łółÉ»OD$#ƒ IĪÆA2Z$R3D˜NĪÉŌ™ÓĖó_NpųZ2ē” ¬H2gi)¼Tŗ¶Rļ>qŁWH(’†Į÷œĢµöɐf¼‘Č«u=*2ˆĆĄ‚XS$U“‘ØYÓC)bš¤Ö1=®‰«t™V§s*ͬŹN©žeÕ:ƒ…g«Ņ¾Ī™’<_Ż-³ÕéœĢ²Ā Öi—…’¬¾Mk’tU®ī6u¶nŚĆ—ļ*«LĻ›«ŚŠāĮøDJ6£z "$QČ(ģē ĮĄ›F/t3Ī Žž÷Ä>Äŗ# Ņv·‰tŽę"ŅŻPD»ūÄxO—FƑćŲČ)RF Tż†ŽuŹahmĢ} ÖØ!VȶB Ā~N<ō’^×JėĀĆ2/n¼FA1ŅĆžJY';?¹?±ŃćKˆĀ0…,‘ l ,¹Z\\ādž’`K<:Ńų‚*kĮ2łõä_~”»#Š#̤ӄĄ—~y•6ģŖGū?=…ȬŃǐ”ŖźYŌdd»®cĘPŖ…ł8†1”A“AĒ0fĪ$™•UĢ(Š‘Pm\Üʬb˜@Ē*†Āų…V)ˆæ6)>ęõmŌ čĄ4B’v¹)»‹.ŗlÕ} čt.™Ūäćāŗ¬Ŗl}ēPY,ŚßJĮ°9µ7—³½¹|Īa[ąv1Ūu&ö¤t¶7„3„»”ž×#i+‘]Õ„]Ќł”®BJ· «…ĆŪE•‡œoßóY¾öķ7”¹šoæZ%ævÉęu{Ī0Ā04čŪąüTŌ^ĶułÉ’ ŠE" ALÓ×e ÉWŚé"š·fÖ~›LėōęluVœŻŸ}>ūŅ„E`į3Ȋė[ÉupLqJfį“ü›Ā)¦ Ćwļ¼Õuź/ø<_ŲŻSĶźü7Lų•ßC#Į?oŌ †ÕśruČ\‡›•5č«ŪŅ3»‹‡)ÆC,daœÅ"ģļ¾żįVPZåé×e¶Žī„ąõ^ŽZE­aX!*É`I“ĘG7&/^nŽ‚|&ŚŻ!>9ŒHÄ™œū£Ūćj–ßÜŗŠi,±mv±Ēķ`1Üf—ūØTþnŌŠŽE¹ēųN>_Ü_^¬.1čŃ„7ÖÖė«“®ņļ±ajI·Ÿć£ÜBv ņ‹dqŠ a?Ų,k»ø5.¾•y“Č œrŃŖ/Ń~ uQ3:Egźœ`ŋ̼p\ÄH_‚™…A’ŗū\ŲO ’šµIqöĶf-üSĄ–^t[a3ūNlI%ˆ@p ŌĢČ×Į1 ³i@•ż#CKd)Qhɀ£qĄ¶Ē°…FRųĘČ“F4-A“ƒbqhi B9ŠUSŲæłĖ¬Ņš•żŠB€MĒ–l€-µ¦Ą5÷˜‰”Ą'ä`o 4Ų'›[H†Y5/Āsłb 9ƒżßēńõ™’äć_’ Pćs» üÅŻrgy谞Ā øā,:sDRˆYˆ!p€ńæ duŗ˜£lq¶ 0@śD’@`o†ĄžYó?Į¶åāsÜņ\×c+³i橲,“$d«v{]Ä!ŒŅH)9Ža6G@Y"Œ"-‚47[5ÆgH g» Vqy±ų‰ l­żś'ą·ŅśYk¤ā l˜µ\÷6ŽeŒlķō©7Ź«U悟£śą’+ĆxXrµ }~o}É5¤«PnµķæC.ĢŻ¢[ĀÓĀ{Ś]¹Õ>4.VĮÅĻŹ­¶IĶ^ToÕ=”9F`Ų\‚2ŗ©Ā#źŠNSņ[TeÉ ²õpšĢ…djG)ŲA{RnŸ“$īµ9‡LHéŻķ==Ķ{AģcÄķrŽ$cXߘ³x—¶‚8)õ¤` )„Œ#9ä8“#^ėd’«¤73  DJ’¢š÷™ž=ĀīEĀ ”÷–Xw“ųĮībvuąCJ·ŲĄD,ÅbѰ=É[ĖłgoML„Fb^›¦ņ½÷ŚūŽ;å?“ŃA bÄ“RzŶgI1éI]ś™HÆ-ĮšMļ< SīģxÅēJB&†šĒ«×Õ“¹2Hƒ_­*AÉ”Ē,¬C|qj?ē€_Ø`ē‰š-Ķż!Qäu<¬?Šmźp«:Ü6Źšyķīdųü€Ŗ]tDp»ŗ~‚uHi<Ö Äh’4²Ø{ŻŁrē<evīAüņ»ó -ķŠįp{„£'įĢ SĆź«!DOq x°LM!6Ģ+k`§Š £w”Ü1ĪYń4Ø#h©~Ō~ŌžoėG:°y“R‚;µ9v5aŚņŪ‘Š§Ć“вxŹģ'«ą.­GmĒŽ<°Dœī†wĪ!LĢÄŖļ ąXUD­(B'\Z ģ%—ŌVQ—ŌÖ„Čæ„ķ•ÜU؄ĄĆóšŲŖ„Ą„*ņl&ś@VA«żL ˆ 5“˜K·Č§źiõ‰7d„,RŸŠ|ÄbķˆĄŠāĶ‚D¬mø§¦Ą:^ĀŁ3»rWՀ jzbF˜–Ęśeg¼ū’ėOr’{å~Ę`‡Gwķ¾8’{ųśĄP{*ń(_Œóu­¬c…q¾ N_šuČ%Ļ•ķŽŚQ¾Nū&rSIØ»ńqŪa—“ ū—ag BOŲÕĀ.’žŌ„=ŖęĶå`K»Ųŗ²u>µ‡­ģµ}2ī’éėč:LÖN—0ā0bk@ūAt½A3;ł:”ÄÕĀŽĮ×­.Ģå”|tW"všui¦ńuA_ĖŁaš°čqvbÄ(g·÷åģxö1\¬¦Ķ¹ 1³ėMqŽq Ł†­­R$ m™:Oiu³Yu„ZāX’RįŽ_ŚŪ~Ī E›£Ä7.ĘB čQ˱½¾u¼U†䅿­€Ö€ĮÆĖjÕüØR«ØÜŌž½’1<¬ļŅj×¾¤įZägR£f9ŹģP3ĖŅ++8XöŒtģšé"æ¼ųv aHUŻVw›†§žÅÓ¼å&k†™†ū¾Ó*½ŖܶōY ³Åßņ'÷{ %‚‰Š·’.żU¶l<£xsŻŹyĄ_ ̊NAƒ)`ĀŻ”hürs+Ļa•:…U;n^”Üį‡ŠÄā1üŚå­Æøś£g`j©ßb§÷8LY—Į¾Åa!ź™órP+_„bą”ķ{Ē],ÅøŠī¾ĒO=¶ ü·xĮŅ^·éI„ė÷ŃŚ $‘’Q±b endstream endobj 534 0 obj << /Length 2614 /Filter /FlateDecode >> stream xŚĶYKsÜø¾ūWLłD•5ńāĆɦŹńc“”k]e«²vŁ>PCHā.‡œKŹÆO7ŗĮįĢr,iˇ\4 Š@w£__Cńāj/~~ņ÷ó'go¤]ČXäq.ē—‹Üˆ\šE’i!u¶8/Ÿ#Ÿ|=’ף“M)„UBeņDöd)ć8ŽŽØ,ś÷ė÷ożąÅ«×ÆN–Z›č ~¾{"„Œ~õ_¼÷K:zń Žæ†^ÓĒĖoß~@ĘOb÷š÷PöejEB/µ§P®åŹ“hčŖoUQ恰y)µ°&'É$uÕø¢ó™ŹčŔJ1Õęd š“õ]Ó®ؙ“+†Ŗm˜Fʙv’L3 W4żŹ5„kšš†łc-S7m³ģ×-É1\{Ņ„J2‘ ƒLŲ„6üĆuīČr}‘Śš<ō&Z;ą‰C ×Å@“Ć5l”ÉŖ§©¦„ļŅ‘ę^Ź…}E]óDSŅ 2¤ }J+#?3ņCĪŽ¦6'2*ŗįȅ–D?± šƒ_•F°K'ŅˈæžØhÕ6żPŠŅqµՀ=}6-Sģ©5ŁŁ6DŲā•ŠH`AH“*.źp’«Bœ,-lF­Ł7ĻÓ©B–ōį»ŠY$„QŪ8\†%žøÜ6+ō¤>¬o š?ŗ ]Tä’8PŹƊ§”¢%²Ä†ą½e¹HEžĘž$JZ$šŻ©"Ŗż KE¢’Å„ =`Ž£™ĢĆ»†Vh°÷”įos ³C†^Ļ‚ļʑ‘źm1ø’¦Āż|Yd˜ŠķƒGK%¬Ģ÷īf ģęŒ÷œ(«/±Ō@G§yæW0˜śBH0þņ¾›E|f]°±j>TĪ^›VGCżeīFŒČ 5Ē!M͜b…±8C’€3Ģ8ĆrNéĘ$į/¬ļ«uÕՊÓ„¬‚9d—ČxójŲrRń92IÕ¾™Cp‘Æ;«}ڦÆuéęŽ>*ž¼„C©Ŗ]PR”kS»ī”‰ŚŽī¶Ąy¢)·Žf‡v\ ‡­ Č«5qļ*Z ēĀŖ”>'æ4Pl €ŚußŅT‹.F~ÖÕmQb Oõ”FrÓmUVĶŸG“W®q]ŚŁ+÷G&“-Ō¹op¦›³¤–BI—+(‰±Ń+7UŻ/LvČŚĢ˰Y† L„IÓ}kŠ›®‚ą¦ŪĆS½ōų'ŹČżg nąpŲĄ`åēz"š×…ƒ«1‘j϶”T½żźŗEćߌ >øÕĪ3¬`­Ó…¼a…ZCž7é²IɖŹFļ¾h9±ˆN- ¢ÜDmwƒ+EĒ“¾~āą½ć-=©ƒs/AŪ~«Ž!#²‡üD4`Åu›{śčIxšN£¾n?ĶžžŽ3ŽDŅś=s.Ą&OG—øō^ÕQVĘūėŹY÷Ȅ‚¼ƒ£•Äóg³~’‘°Ż=zÖõęRHsMźĄZ]ż×ķé„÷gEģ Ž®LĘ9‚JĄķ6Åœ2T޵Żž¾|ö ćŌ&gƒ©Ņõ«®ād_Ҝ÷6š‹Ņ‡V £¢_+_ĘaŁŻ®Ü†]mr8ł& .ƒ 4†ā?ø®™ƒMū¦ŌRNÓ2Žøü¹r™ ‹^b@ ­Ēw›ą);ż/ Ō×|ŗ£1TC²Õl$d/wHaŌhĪæe[ÆĪŖ&H!®’6g[ įe ŪšzĮp\I)H~dDģR½ }»ö8ÉFė¶ćQĻ„d€|aÖł$ŒHŗōėt ¬Žłµiję×Fŗ5©P]Üķ¦.`¾D šēW žm;D„Ø0ŽWŽŲ»·Ė—\Įד™ĢŹå€­‰^Ņ„¤[8اm‡ĶŠOēvhåĄŃėń<{Q:zQIk˜”’Į }±ęŃčN0Fwņ€ŹźėĶ^xׇøžrĪļ}<@Hå5 c23\Ļ$S›üń)̦÷g0ó j™¹ƒy5åvå«8HĮglؖ01–$œM³„ ,Öxøė3ąZÅw4¦@™‚ļŹż8Z‹¬1ŁÖ™§Żo P–Jhą@÷c!žbwLBõ$o#ū› “B„uįGÕ¬j,łŒtpķ!’‚AŠ Žė±T*č÷Żéበ:ülWÓ¶C»0‡”r‡”3 RäÖzĄ° »Ą£EŖn’‘y=’pNŃ 0ļE1b\@tČόr.HM€²š³j»Īyą CĮ驗®Œ;QX@ō›[ØxĄÄ„ī5}Ü@ÕŖ˜ؔäĄ3ÅärÕėp~G³żö¢¼ĘĶS}7Ūśo»Mčʧo›SĀ͇-›@¶ ĒDжsĻgߓcĖ„Ź{źC8?ä…4ņ7ӕ_bÅÕéś“9-O§–{sśńō¬Č9…śk:…A…(•ĒpŠlS$ “§łXĻĪŖ³1‚õ`ģI͊š˜™”“ Ēķ‰5*¹~Œžįv ]ģ[ČĆ­ēŸX`žßSų1e¦]”‰I2ę•õ¬6:N ‹½¬5*ÓüpeŖęĻ«“j‘ڱĢ»mÕ攏Ńēŗŗŗv=ūÖĮZšÖŅ]uĪ͊‹5);øŁņ·””IŽˆū»/ænó©ĮymqEĀ=tŗ”>ōŚüŗµyø‡—ķ– œ÷ńsóõsłL~}Œdē˜Ä)#Ö$ōģü¬R'«ŠJō‰yˆ 4c…ų8ĖD_Õ’”ך(‰…„Č8zŸ>Æ’.ćÓ,s%ōŽwŃO{u„‡6NĘ< 9Z8|ś&ļóŠč¼½é©ļ£žv샔7(†®ŗ• tfŅļĶ@g3ITĄi‹‘‡,|©å†£E,ķūĪ–łŸ`Ećy##õ¾‘żTÕ(ŠvpØa'@§µPéAĄ† ķåŃd5ų(> stream xŚŻZ[sŪø~ĻÆŠ#=+!ˆw§ŪNÓi_ėl§vņ@‹°Ķ®DŁ$µvņė÷¼²„ÄÉLś"$œ;¾]Ü,čāožzžęķ;aŒ’Œflq~½ČɘX(“–šÅy±øL$įg+F)MĪoķŁ*MÓä·3“&vŻījż·¼±gĻ’õö“ćįg„j³¹‘ĆNoh˜±źžÆRIŒ’¾WmļjŪŲźŒ›¤=[ ­’sœ/ĒŸ68§Š2YļĪVpĆ~ L­ĖI÷?°ķÄkü¼ńæž@%UšĆČŁŹhŠįūŠ»E5±; -ź& ŗŽmöŪšžīŚkĖéXŪT"EŚiūߘEXJ2”ŗ.ė;/«ŃÜšXDs"L¶XĮRd¾’õ¾Z·%¼Ė@M)“|³·1a4ƒ×{Ėæ‹ÉҦ}4IlAøą]§ĒŲ0ŠšTކa ¢IŁ6vs½Ä‹`R”¹²­ŽŁļN\Žųēžhō^ĄžóHš#A$čq$č¤ķLŌE‚ļwÜ*£ƒ­å ė4EĶ`š¼*°Ń©Mī„åCȤ(ŠķK¢žb<%Fö,bK¢“éz¬`,7žcø9£i" ʀ°‚‡|†—JßĶŽŲŚw…·e~ć%‘l, g†¤¦—åw7¦½‹ ze¼·Wa[[oĖŹ6!Ą %©ÓæŻįx^ŖmīÄśt¢²®v’łf3U²ŽŚ¢ĢŪ śżŽĻŅ–miĆ«y>ŌeŪŚjņžnęnČB峊]6m¾ĘüŻiI§źaĀziļ6óC'®,įķŪ.»įB8'ÉäŸ×17°Tču”D׫ Óļ¶ØV± ³·žnaÆóż¦ }œžš”ļ.&I3 ŒH®ż€>€ €Ž”>øŖ˜¬Pfu_BŚ.¬fuŃ@„g]§±Mat'·¦P ÅąĪ•ŒČdUf°Ėµ‹§śstKM/0¦¦żģNu˜ĪG,¬}I ¹[a¼ćįq•oĆ-jŗ+YpKÖ&tsž„{·åÅøķ†éźĮbÅ),ZOc„Ķļ|pC0 9Ņ»u /|\B„ØŒa„ø»~Żbjžj' >*B­D­Ā`Õ®õĻģcŁ“ĖhŅ‹”(–jUCXÖæ”7Ķ~k› įmŽĪ„®ķĘzæ÷KłDo)ƈafj) Į)¤^‰¹ŽM·Š³ ¦2ŽquµĶ‹šĀu½ŪśV Īø =Æö`°ŌÖ ˜WS‘üzŻbYtŻŗ>öŃ®÷>Wq ?Ių‡<ö $ė/Jš}ÄȳZq\J’Åg+ ‰ķš§øæµÆ}Š‚ŽĢØ€vz®š¬Og§ŒŸ³:˜“B1 ©b°@Ģ–Œaqł@¹ˆÆ˜„±g×K°²¼Ÿ ‚ĄīléŻUÅnóny™ŚŖC¹=ڊÕ_Sō3Ōöˆ—(NŌ#=1Wd8ˆ"J“2Õ,#\§ƒ÷c¢uųqÖƒ„)–åÉXeŗƒ<ŠõĪ$M(…YČWW`š²,\•ƒbY¬EMQ‹fŖŁKė„ j0'd؄YžsŪ-<3ģŹˆ’}Øī£ć!a“5ō] ³$ Č | nKÜĆ]°e:ĄĒ<*1 ×;„Šł ü?ŌTpNÅf˜üeh 7ć4’źõ‘„n-šIXjŃF(оŌ|üYŒqŁķ‚Źä·³Lō_ąśŠg1€ż\ #¢Æ)?ąv=eJÜH¤Æųw˜‰IveŽcb)ēóńżīīÅāŅ/üwtŠ5łčāä(^vlōŽL®w›ßūw€ oõ¬ /„ŪĄĢ†ķ åīŽq<-“ä4švæ|æ¼XVŸ®&æžŖ[lüß°µ—ś®„ķ‰J?cėŽ’p»ĶžÓéĮöĆēūØ*†¤“6÷qUš;P¦Sŗ÷—÷æŠv{ČCŠip­P³ź=—’kĀōs¼„|%źyƼS: xD5™Õ8,qŸŃ‡—Šp‚»ź³­ĆWÅ»¼mm]õ±Ū¦Š._ąĆĄ Ė"|Ųš6aW_֓aķ>śąĆ»Ų“©Ē€F!ōĖŠšB„/CY@ĪL ±²bĄŚcA¼Øģ•y*’fa%Åy*XŲč™Ę1Ü t†»é‘ø;–“Ą1łineŻŹs«<Ö­ęµ¹’ŽÜ/}ī÷5¦=?X Ž!n³MŠ•dŁ„±©qĆgĻ7N˜Hæ!q;©(bYj²bCÉęYŌmOĒL#c>ĒÜ."Ģ 8r'±¾€¹­„ žL­RŽŌ€F^ßģ·v²’9[jĄ“lų^|whOBļŠųŁ(`ĪņyĀĶљˆ:ˆ8:‘Ć݇©Ož~8“ƒ“’ˆ?‡Cl/fŲśÉ©C:œ GÖŲč°!Š#-ēŸ}:D\¶żG3Ńž ˆŪՅn¾3ȾHŽĘ +і=~ °¼?H±ł„ēæŗĆH4#b~©Žķš¹­QæŲCcw‡ō)ßų«q Dć@B ŠŽ;Õē_ õąäŲ%…ÕMĆÆ%QĆ1w2]»ƒ$Ų¶ō‘­\ļźmN’ >WĪH»½ēžęž¤  d!gعĖėfāĪ;xuĄbāĄɧ‹ę¼†™į³uwČ­°Ķŗ.½ˆvņ©‰J›—›čē[ V:„c~..Ęų’~žęO»•«z endstream endobj 545 0 obj << /Length 2678 /Filter /FlateDecode >> stream xŚķYŻŪøĻ_±2ąUH‘śBч“—“= ٶI“·pŗŹQ_©ćą.śÖz2mĄ@ūn8'Ū^©Ū¬½ĄyLłŹŁuĪbž‹SyT¦ ncRf{l5yĶŌGc#ń¦‹ƒĶŠGÖJs²Ņ$K# ;’ŠRqŪD żØ?v5 ­ŸąGč¤8Ń“Ug·ŌŚńßՎ¤į„¦™iOŚÕģĄ”¬Ó˜ĮM ž“Ų~dzø9|\Ęi’ÓĒCĆ(s§’~ÜŃėŅQ†Ę 9Ął[5ön”ķķGµ‡—\8B`”Ö[£I'ln O!ާŽ$­†Œ«Ē;ĆčH±ē°°½d©EĖ"|ž³× Ń"Nh‘q6™ōGČ;‹Ō$qĮƒ s¢cćEXn{ Ńy øJ’GŅ*X˜dÜł‚„( Ö°ĄE–Ēe‘<ÕŻDœeT«”<²Į īiÜĶ“@qvŠ#°¤?ÕD•}ž¢MO‹Ķr²KeœgéÆ fiōŽ€@Ęż=]²é÷{ĖįŻ@wQ@F2ԁ¢4LR0½ŗNJ—„<•ƍo9ƒ|Қ}GOic(÷…ŠBŽz ē›»f»]bIŹXNQėq–ł]cĆ\0Œ«žŌnz·hķ–hu$"…G ®]ĘĪAĘXƒõSŅV;ŚĮ_]\+ćÜ[™Kr€“µĖ„€@)"›3¬@ś¦¦)Ź’ż04tL‘›ć2B›aĮŖ›ń 9ŸĄXęNŸǴē~ ×ī½­BĘr;&0ƒD G6-ąÕ 1ż…PNV€R?5` ‰,¢æ’ķŲŠGŗ7ˆwņ,Ųģi āRÄ"ͧ³äõp÷”z{³xŽˆsłh$+!Ą„CŌ8*Ė%p\6Ę Mó„A·²&„ ‹œaYĘĄ’=†ŅĮŽĮ™ 9Ęį|o'‹Eq†ė–Pl·­>ķr‡øĒo¼N—<§L ‡x·$’[ īé%X ¾¬Ž÷4¶hžVtiiFŃć¤ō‰YéåÖŻ@µĶ¾ńT wų¼A ™JömĀ>Ó€%„ŸŁģ:ØÖÉsƕ/h–»mŒö&į"ȓ;Ģ“ƒ/Ēgpözš‹¹Ž+`É ĮłÓ±„&NTˆ™ƒ’aģI­’ņ™ƒVīóFÄԐ83×$I¬Ł҉Įøéʦż9žŽœÄnjļB-øP½>¬æ²õ»õ=[æ÷ŽtžM‡2ZyäĘpĪ}Ob ¤»ēĻ{ź0—@c‹ "‡Ź–p‹.鏛ƗĄbū ģ}G ?Āą‘™» XØŖ¼É 3š×°˜ć39ĒŌķr|a‘²³øéžĪĶŹĀōü† R7Kņ Š/ėG€³Š4¹ĄRż–lwbpęµ”š}†Óķü„Š‘‹lī®õ"¹I^Äyž] ÷š{hą<īŁ Fqo‘ '<ďĆ. Ödłå<õ•A¢z 3§Ėo›t¬G="‹Ó)‹uŌ€†ŹœQń'‘‡…Xv»`dŲyŝPŃqńßwĄī‡Ć§õ“˜~Ø ˆ— a)««O_¾,ńČ$ ž(E}~—[žk?c€RŅĖŚægŚßDū߯ū4‡ŒŃż‚īQ£é>{T÷ vfłeŻæf’ t’žBOHLw?9É`fOcÕÅIŠæŪaŪp©a Ć)`æ»P?ˆ$õāņaq6iļż·ĻŁõ{‡ ©?Y°EøWQŠ xj[Ā~C''m=‹³®sm'] hzœĒB„¢ģ+»ĄĀ “/–vQʐÓļŁE÷žŲÆś¶ķ;Õ!‘ęå©ĆžĖG&ģ¢|dĀ]é5qs ‹/–į_ öOXnÜö®§÷ž`”•Ż\čuŅģĪ}:öÓ m˜·Ź¦}s3}Šg¶½užŅ?8Ųö„Ōah’]±ƒ =‡ŖŸ°!Īz.Ó».Ā÷;ƒU.֟R$€ĪŚkĮ?Œ|ŁDo€Ēm{Ē£Ź,v‘°Ke4o©…ä4M©w^ųŽ9nņõ-×ģ4±Üż+‹”Ć—ŹšæÜÖöŽšKmˆ—Ž•Ҭ U[ŗÕ–”öŒŗ©Ø¢„·ĻGU7ųØ­pö—–ŚCqä«HüK t7PėFøKmP*Óø2ÅmV®Łzƒś“fy«½hį…Ēłģ߃ĢU¦.¶æ„æų~9ĮhąŹc{®P(¢UÕß6Ŗóeģ@ÓÓß‚ĶŻŸcźvŖi]§ŹŒ*üKƒAQŚŲ·Ø"0)( +Zرś ŚŻØė‡Ø¢ć“įŸ}ĆĻŲZį2t6pz§N¤3@Ɲ‚Z§¦EŠ’kŌ¾łEMG[`å¼`]lČ8eÅÓėR65²¬=1®qP©ĮfŁå4įiœ•÷1\O„ż‘“Ā­‡bj\RpR)Ļą«÷*gOņ›„³pf(æ£tFå~OŃ %3VĢų§ł’LŃü Źi*ē’…óć…ó“|yóģ?ϧӉ endstream endobj 550 0 obj << /Length 3890 /Filter /FlateDecode >> stream xŚĶ[K“Ū6¾ĻÆPķ‰SeĮċ*•C²‰w“ŖĶ¾fkŲ>p$Ī ‰”IŹcēß¾Żų(j\N­/#„ščĒ×_70ńź~ÆžrõķĶÕóBÆhLLlčźęne1T¬Ķ åzu³]½Š$į×kĒqō]vø^3eÅ6+6Łõšs}S¤»u^_æ¹łńł *‡Ć FI¬(ĢfG;]Å~žē/$ö^s-m÷5—D'Ņż(/7Ńį«ŠT0"h§xžÜu.®™ŠŽūkXķ-¬YE°ZUīeyēGL«&Owīa›Ułūk)£“O܄ߋGóɄ0ŹŪł®Ļd#Ģh¢cµZSN¤0®ė¶<Žī¼Š>¼*Ž„"‚Évž}¢–“ÓgrVŸ1ōLŌ¼>†Ķ>QŸÆc*ŖŚofQĖʼ¦ŃĪZHX§1%Jėv?‡ p®ī—“žß˜ ŚDĶCŽ‹bqT•Ē&‡łŠĢ=Ūvč±Iw»lėŚóę!$K„ › \Œbem‡Æƒƒ€’n3ÅŅi± ‚XœL¬|¢ŗ˜(Łui2·Ļ¼ÕAŽ Ŗ~t­ū“©ņĻpū¬ļ[eõq×äÅ}pIL’˜žÕŹx ­Øė|ŲY“Fµ¢ĶŲķü̘čĒtSŽęi2Š„“¤³Ė¾‡ų‡&’Æ81R¼c¼@F”I`}·×±ŒCó Āū$|DQ¢8[ zĮ„”\Æ8Ä…Ū÷}VdUŗCuÄ2* /Žņ¶Ió¢v(¤pJDg”{߅O ‰Ī_Ē1 *åYS×Dõć8 ńŸĘē½—Žüėąz(8¹¤pz‘Ęå’_ćA“D®‰œ€ÉɎ®Ü•Uo HS¢ ŗōCYg…÷®DĀjē^Ė‘'åæ\— E¤¬G%$IĢŁ”óv^V,Y~šƒ¦ųĮ¢GD›²śµn: zŸWe±ļcōNŻ{O  ž[ƒČ&—ŠX°®G]ī³Ē‡¬ņƒŽŗ Ōąģ(ø,󫣱߁Ć^Œ)`}\†0VÄQzšį-­j×Ņ”īÓĻąīҼŌ³ßĖC“ļÓŗ=KĄ˜5P†Ź½Ŗ÷ˆŖš~ˆJ½ą“Rˆčć ¹qVŖ¬ Ņ~%øq×P=déÖ÷÷)ʦŪcU T7Y‹ÜŒE‰'2I÷%°šß²-`—Œµ•ąZ(īlæģŅź>¼=Ź įģ¼>įk"‡Ū ЉšN?F”»‰ÖwåĪÆ2/6U–ÖYūä>리Ņ{ßøIµ§*öŁźZįI ZItļŻÆīR¤5q’£ą•JÓ±änŠ0AJŁ3ēŹVN(|qĀiDCĄČŅƽߤ…W”˜tŁ”{Px]g[÷ņ}žś_”»ć¾h;ķŹ c¼}“Öm# ;t)>l1į.āńņ­~9…©?¤Ż=8Öv`l÷¤BG[d‹8`d\Ī÷.{HQžUm'½śžęźŻB$(|Å,į+”[éj³æzõ&^mį¬Žp£W¶ēbSh»ÕæÆžé2å ›6”•“C JŻÜoAģ!Lhŗ[ąƒ=>¼¦\Ōė}^dŪ?yöUŒ¤\(+ź¬mC…ŽŽ¦nČŅ‚„óZgA[ .Gøī9łŗ¬€Æ]ļMcÕ"Ū_WµC`hh!u*~Ab£ūc„o!‡e0č‘=õā.īć+\‹5ƒ&Ć6,?ś7n |™mŹ¢ÜēWębQę š“ć`Ģ[/&ģŅĘ\¼ļĄ¢Wō r!¢?Ćė“Ź¶Ż"ŲīįˆwÓusQog“µN*¢»ćnēšĪ„ou_°:›Ą™Ėč¼Y¦óüB:Ÿ\Dē“·vč.ķR/‚“ŒŪēŚøgČ÷‡£õpE/ąoK‡÷»,õāķÓ*D}C ŅČŖRæńˆ!(~Ø6ÉłG0ä+vžĶĄ"€ußaKÕׂņ…ˆŌē‹_…%§{4””ĘšUFGE/!ü™gøCĆ^jhžéHŁR«³Ų_äėĮdÅĄ•Śś jÄå RAO0 _u…Æ-„F«ml(o]Tk÷¦³Żļ«ģŻ1Æ2?~źwyÓģü;ōlk¬žŒ·:kH4|Ųš($¢MVa!a÷qx€˜—¾,‡%I‡t6¦d@é?b†āŲ+mē1D¶r±(Ķ!Mš¢©\Š įVųTk„#­Ę@ö†īłr å3ö:čl}SĶÖM8ƒķtšš6œ4а֖ŗĄ–12th ćwõŗInO]ŗ`\3·ūŸŽßRuŪq¶•b„R}ŗ\'²bS™B«É.1NŠpqW$:—kl*³ ` ’ōId ›Ę"ĢšųŠ×- ‰%; C˜ŗ3Å\\W¶Z€>\ć·é”6N}ķ}|3WDÓ@h9[Ō–iĖ.,xro†%’p}KCö«&j‚Yӕ‡I‘ zYĒ?³]`nI²lūźd·½öe§i¹dI@Gi’LN<&ąÖŪŽ†Ć ž zÕQšE?ńÄBˆ$B¾”’zķ²Z!<Ć7.rć7HæmiŖvM¶‹_\IĖŗ‰}Ģė7’8lAŅul|oĀG™ -.IČŒš «ķ¼īI=ēŹ„-pŅŚ59žOŪģ ¶I…Cj…äHXœPā„:ƒUń.ļ !³‡Č÷ᔪw~K}LĒipŽ™Ü1ģBė½7į cįаx‘2±e!XŅ~=ѦĆY(³V°P”žžX3„–‚ØīXS•½Ļ|¹äd4 `¬C5{Vdž>p€Örū“Å×JÕļ31s0ńū”3D)9 ˜˜žŻĶTU4‹S,L³H0ÅĮ”Ƭcę€ĪP6Ź:\”ī÷š©4Ń}Ķāäā1 ½XTüĖąā#QķCA­G¢8NXż5³µN«ČŽģĄ“ĘĆr[Ÿ[Ģ]+ æ.ƔŶv­6S†Ļ]yo3į Kąj·śo~ś.HE”½5tx,Øņ(&…ķķ6ļģ6Y?³śŒ;-żż_AMā ™/Ÿł»„cé¾hK÷Łmåizī×®*[!ÜgžŲēňŃף>_ci×םµŒćcźŽ=Ę ¼sÕĮ8ĆŗÄR ¾Ėטūē“®vbl“k ė4Ń})®ū’źKś_»ōMä(Æć!¹Ģ¶ĪĖŹ 19d}Ķ`<ŲØfp,źü¾p[Fė³łJ¤h‚į2t³b‘»×Ē šūƒf”ń;$–#i2ǬųĶ +ҟ×Ķ„_#’”ÅfÉyĢSĢ:I‘%ķ4’Śƒ5C‘żŲ«Z¹¶8—„öJEM†'@¶aøÆ™ūYIO:ęBLOÄŁL2Č{ōżįš1ż44X!}<üxęÕušI÷‚Ā;|&—Ī/[xŅ/|?C\^yźz=ā9q§°d;ĘėlH¹(ÜŲŚ”PƒōFGŒVļŠˆ§I\ )ŲJµżīk"5 µŒžVVŁš2,MŲ«į µzÖCiYĶPŹĮ‚wsl±óŁŽSŪ ö¶+ŌŲ'±aߖnģ–ŪS3|y„;=†h>I‘\®æ†|i^żØÜgeéā汍Ķ4ą³»]6œ;§@9ŖžjŃĖ Yę-›eóĖż‰™1—뤽›ŗ\¬K–n])ĘŻĶ5ļ˜ĘtųOPŒ˜Äü1x€ q¢ž"YžeFxęāĶćCް"mŽUŗėī_ }šŖOxVg<ķŅtZ£†7C“ČƆ(ŗ˜ur›H ®—35jŻWž‘K3Ė‹“¾Äö%šbżd³ŸH ”>8ÖNĘAßżaō!0ж®OƝX=ĆėŻŅaĘm!iQXĐ#uĪ9—”_ø6'×l1c _›WÄ»ĄHŹ:ډ"Ff£š§]œĆ‚Į¢ńj–‰ŪB=³…${ö`ĻB±å6o‹w"&- ųB@wŒĮ!`nŌ®%|•Ąˆ”D./xč$Y.xØžƹ‚(op“v·saŌ­Śį™ģkuų0 §Ųp.œŅDŪŽńĶĘ{WĖį”õ™’SYŽ'|% wČšNģÅ ēÉæĢŻ8•ś¼FéņÅBųćā)†x6äĖ“ ŲŻŪšgęļ3 Ā@¼dś~z؞ø²Ė6€ŠIéKfhuƒ~æĢ9‹<•ŠˆĶe!J„BŌɱ2Ÿ&ä5“hę?)(‘}”£ˆiƒś’†ĢGKRd‹lŽÜ Éš7¢vö$ö™Ė7ŚSXiĄ!Å/ĄŒåø«ŃĆ ·[īf X¦Ÿ_^)ņ/`\źĘÅ?ć’B”=ćĀ ģ³1.: ©ŸA›D ž„r“y‘&ę(’ܔ«"Kž”¹…Rī6¼Ć’éķ…GhNÚ·š·ż„hĻj€ßI˜½µåX>¼aĀć 5œĪŻņĤŖ? ŗ”›Źō’rS†ÆļŠį歝§f=S±%\nW4Į‡“Š6¦µŪ*žµ„÷©æ…/&'’õčŸSŪĻļo®ž¤ŹEC endstream endobj 433 0 obj << /Type /ObjStm /N 100 /First 884 /Length 2256 /Filter /FlateDecode >> stream xڽZŪŽ7}×Wšq÷…b«Š$`ˆ8 ’Fl`/?ȎbŒvē‚ĶžżžjI³jõ“F—¶ Œū"6Y]uźšŁ’9¤ \ƒhl”q”ĄVp¬!·†#ž$ćM«ß× ™p­Į ®…BMu&Ā”IķŚRŖ‚“ˆŁO'ę£ą'IžlĆXdø£ ’‰btóį`ĻšTµ<Młć˜ŌOJ`n,ŁOZ`-čĒŠø^Ć,pEgøÉµa(¼7 Ė8©2“’C¦źm)äœüiŁ_HšTÖs ī܊6Å÷‹7öŸŽZ*~īś©īM¶™TsæĮŅźi9x[uC«Ÿ /©Żph×üAņ;pUĖž_ š`œ4 Źä'„-3Į‹Ø{Zйz‡[»žą;5Flž¶ā]ą”Bč"1Ną!ių¹&惓?hŹĮR©3ŒŒM'ęK0wŠĀ6sß+,1“”„·’0żĄPįajIŻS%`š<Ć „ĀÅŪŌP2ć)ø³t&ĄÜbn/#N˜hĘOų‡;č§¹=ŒwL>:`Z©sDĆ[s™)X&@eu»ńcU„\ėŖī*`·xGs µwČEš0$¬n„ (ĀŻƒē4„Żā\RēhÜ4‡{ ĶJuŒW¼{”5óG{÷ĀŽéD~b@Ma7„\¼1N„ÓģŋŁü»p%x‰~ óæ’ćŸH· cP+1!X7Ÿ?æŸ}óM×ųõźę>¼xęÆįc"ŗĒ^#ÓĪZ_xb”ķ/ģĄŪfžµ»@ó7·«o—÷į*Ģß|÷:Ģß-’¼C½ūļæ–ųańūr6…a—7÷wĮÓ Ļęæ.ļV·—wt·~Yžv½x¹ś3\%Ü0ų·4~a·x¹ ėvߎܬŠÕUG.nĖŽŻļ³łŪ‡÷ŻõĻ×7Ģę/W·æ-o»®éżü‡łóWW„‹ōŽłˆ·@žÅ `g³ŲŲQ#©‡<F†fßvž{ę߯ޭ’—ūŇĻĖ(uwllšp įh96¤5‹ ©Ū‹Ę ­¬Ū"‚•łp[¶†ĘNj‘öūż”{ķ‡ŁōِŹŌ¶ģ¬Õ¶N|vÄ`9 B-ĪgėcžV¢Óˆ@‘Č2ŸFøÄ’ź“čø{ųp‡‡ÆW7±Ę¼ ’SmĮéŽ-œjPØę3S̈2Öž¶åćõż2žm‘tq‰Oū¤ f˜­Oˆ:»Nō‰\ōøÄ™ŒĘö~9¦U˜V>Óķ2 ÷q“KŠ 7`Ų"ĆÕ¹”X]°F(ŖqÜ|æüeńf•t?\šē¹^Ū<7!w¹Ō+ł¢hš¢iłÜhjZ3“n˜JĖęX7Ēu“]uNu£čZ‹Z$W›V£×g5B ś›Õ»(Ʀc® Mā:tk ol )uBņ"—‹Öšcv­äPąJ/B`~aBļŪ’«ĘŒÉœ™£Bøēʱf‡æFؒ'mYžūaŃY’#Oh ¼āÕJ‡5@}"Żraˆ© é#„RĢČ)”z1AŒ”>Š^u\’ōPnƗ’YÜüŃŹ>Y™OV½¶k²‚Z‡:ŌĆm ¹–Py!.›³śÓ” zzŠåĘDŁžŌXQŚ^@ÖŅco^³^¦źĖpŅ+GNzÅöiŅ6ōh<% bˆ œzhąsh(dš%r|ć駛‡ūOeĀ\gĪ ¾ę54„$Ā•!š­BROJ1‡_ɧJ¦ńyuWc*iśW•øŖé\\•Ķ4[Ś”…3f)ØŻ×:c2Ü„˜gYæ"usĆÄnåQgL*vÆ4ļCk”„ ©GLL°*Q‡«UOĀŁ®ŪNØžėÕæ8™·e؊R [j§§śłd78żÉew Ł×ūō°¶€žœ–ĮY[~ Ōµ-¾*:! ta®˜Mrō„C’BhõŌŹs©‡ a: ‹- 0—Ųœցm`'§™ß›aJą-õKæq‚˜€ڐŚŁœŠNą„v'ģ¶%!”Ó¾¹Š ™Ÿé˜Pī˜oG äØzø-Ņ ZÉw@ Įå™ĘJ›WRPĆ·üÜ#£ńz~\éö€0&{Ļ‚¦Į*„ļfœĒ?¾E2„Ø- ß&³Q«Żjpn^ĢdķWŸnÆ-öRŻ·QŽ…iÆ-"}B3CōŲ„ņąŒŠęņyĄęŽ›J²—šJj§ĶNϽ\9ŖÜ;×9œ†Ī©'9g' hżf¾½·>–)'c%ưČ70Q±Ė㲓W\ēaI.żŻœ ēbĢĮÕ·]Qہä ŅĆ÷ō²DKõ9KlĀā Ā’ §M}:f½ųĢņ“&Ų‚żE_ß„ż kō=0÷×{wåĄ‘buŠ,qų>ó™ģĄłK±Ćø^”Šsż‘‡žČ|.!š†ølŽusœ¶T—Õ7黿’šĀKu'Hä\ŽOƒ Ķ0Šę±5_y&ߨĒu-ŃģY…®S®< źH’ŒĘbqŁĄ8ś÷Ś¢Ō-_ˆŸĄŁŻ)śG> Źn­ūÜ!ŸFŁž_łų©~۵ܖÖ"›Õ6瓵)%O?UwµqoIų@]4¢™ĪĶuNžłģÉ?ÆÉæYmŅO(?@'&ØęsńO P•¾"¤É*ʱUSóOĖ@…6ö%g“zm&Ō ¾É+ž±T‰ŽaĄ)^Q8:ވżķ„¬jĆLAHČčĀeéńu‚ Ö»įNBƒ]a•|v>lę<įIæWa‰9ū·vÉ?‰Ä¤S|ēUµ¼ųš‰¦\’.݄뻇­”•ü•ĄI1Ó=»Ē ‹÷!(ņ5ÄēŌü©Cž”#łSó>^¤L¹‚ R:ļåv2ńļWĄ›Š"9J-ć /—?}j6Ļ !C†ģ8ŁY>ųōżvM endstream endobj 562 0 obj << /Length 2170 /Filter /FlateDecode >> stream xŚŻY[sŪ6~ĻÆŠ#5#!ø’ąīt¦īÖŁŁN¦ķ$Īn'“D˜•H…¤ūeūą€IC¶•¦Óiż`œ¾ó#:ŪĢčģŸĻ~øxöüS3FIJS6»øž„’¤LĪb-zv±ž]FRĪ?^üōü…ŌƕLqµ€ģ"5_2Jiō˜ėčßēÆ^ŚĮŁē?Ī—BČč…yüå՜1żĒž?{eæŃŁĻnšź^|}Ž’8{łņµ9ųuāNe]v",…":V(ČÕ| 'å­9ļ‹ł—ē„™ŅŃ繊£¬.²«mޘ©$ŗ®jX“Ąģ'Ŗ?Ʋ•y÷æŻ· ˜N㨽Éė^ŹqGs¼ÓŽą#|‹oļėjŸm²6w»„٬Ķ7y+wY[«NЬ\EAÉ%DÉ5±ŪS¬ŖŗĪ›½U¬*×E¹Įł*œŚęY‰3~_có¬ī6ȶŪ|^TthCĪIøī¼øĪ÷sÅ¢¼\ēåŹŽ`„£¦­s­ZšrdFµż²Į-ĒnaTÉÓnKbU[ XĮ9(˜Åüź¢SšŖhQā}Ö¶y]:IŁpŪDĪx·ėue,Z[gĘGõ:$‹Hˆ }ŒÖÕ”-Ź|T>øĘĒ-ӘHó”čŌy¤([ŲŸ˜ćaøž@m³Ķb·(ūÅķāķān®e“x·Ų”›Ö9,a!G77ø3D ‹Üvü{ŠČ’•ŹN³ēĻQ®6Ć(qv-ĄFĶų@™\emQm»ģ¶³b©‰²»S$°ēvF¼¹ ™欮ńӄ™³“źČ7Tłjå£pe±$qœt‡ī‚Źš³±{mŹo®MQ~½> \?Õ_æ°s‹‰0”Ōg’;čÓ£•’žqŠŗ³öGœ“X«±ėź–ĮSo/Ė§Ø‚¶Żģ÷†œąP‘˜(w'Ż:iō,!iBķ’˜pa” ±p FųL!ĶJ •ćŅCŁ›Ņ$#č¶B—Ž—oĮ—ū“Ģ0RvålŁƶ5ĄČaÕź<Ø, ±f=Læ ŖĮcN$#\:ķīr÷Mœöõ.S $՝sp™q„F—ÅŗŒĀJĄt™x¢Ėށž —½ žÉ‰šGf+ąž0“JorUŚe£ūNO$Ń4_ÕÕ ę9—Œ“•Eu~ŠīųŪ|)„Œšģ:lj]·™p_g‡mkÄ\ąĖ ?ģĖ ’Śęf€µ}–E¾Į€/،6Ģß«ĢRAåĮĻ<äiŹŚ‡CŅ®®Ś¬pK©SĪm‰w›™4Ä訿8‰–āa1 ®ĀӚ÷ĶPMńŁRŲr(‚¾/‚įf6€,7 a¦×}Bžaō¼m)į(ĆѬA%\†1~ߓ'åŽ$ >[ju¾‡Iwæ­ÉSeżŖŚŲ{dÄ&— ]Ÿ/żķ4Æąķ4#s;śiJ”čó:V;‰ź"÷g[پܶ øńŠ —åą4‘N2źUƒ’V;€«1Ä‹,Ē…±ćøĶp…qm³Ŗ W¼toć£%‡Ę)šB1„…-UĢŖü6Ūķ·¹¹#RŪ xߊo*¦Dcźž$ķ#ń;£³Žž„ ŠŸ [`Żį¬-;nCēB"„Øl”Až@i ‡«J‹  ¢ÓŁ`pēĆÖĮóՐūAܖїJ“Š ˜—遏#®1J¢;Ź\sušģ$ębøAL±öœā„<\4™a·Ŗ;ĄŽ‰¤ĖjSĪĪĄzh”…xą^ƒéa;ÆJį"9žA`§\²¤-URĻv¾‰b^6Ū1Ā“øÓ ˆźS5Å?°(ēŻCąIų§ūAĆ`ʱń± y—L3›:G|,ČFB>UßØ:’T-D'AŠ'0dŖ!Gjü6-b“Ėš óPØĢ€čP™Ót,ÓH; Z@0M@“Žˆę²‡^ŪGq©ZGryeŃ©uϐ€7ųpƐ fó]Š= ŪĆÉźlH^óP„÷ĘQ©Č\*•o°ĄŽ»¢ģZ?½Č~ģC]ćō”tŲüĆcAų“–ŹŹl{×Ķ›$$‡żØLG`³mg뻾γŸÆsä&GU„ƒ2"°qµg īõmĪ|WÉu)ŖļX=„ŃĆ4d Łca†:4hZ!G Oéīp`3±GŚ;īĢaKēÓāĶāżŸ®•sÆ[š§ī娿x+ēÓéś@xķĢą+»9xģÓćčŃrųĶ姏'ö¾U9üęńʓÕxoŌ(’5Ž?^%~uUočŁ_ÆŖæ+ņķzŹÅļUėfņĮj)ØAxņøäØZ·i·TėĒ#āaRKĆĒ=-Hb_Ēõ?®$® žŗb‹DóūMāi>¢•`šå¦Śŗa„§ńUJ†9zĘ)…ča3ēö’_°ŽƒŪfj’Įŗ_“©$ėY‘ÅŖ”\?e«źŖČŹŠI!ŠŪč…["TTŪ2_T„#¢?!fXq–™ų GņiWx“¶…ūO1Tò0óYā§ĒāØaņ”ā™ĒD%“FĆ1{ ßŚØ¬£e {cżh,_ @äa6lA=õ—5™ō UY²‘Z<‰Č)B=>V­óŃŖ}ØŲր¤Üū«0ąķ{HåwĮ_19µ•šDæÉF#ż>…RZž&ŠīØ@ĢCƒĮNeˆŖĶ0źV­ lķO¦¢IŰY”Ā ³Œö‡Śńó¦++ĢžÓ²¢æ’žŅ'žŅ[héQnΐ”];Ҿ?‚y©"Ģßēc ŒÄ›ńØ3b–<pI”÷©„‚‡¦E5|ļ6üžI$–*œö ĢÄę'{óÜkŒ…ʐó‹g’ \ endstream endobj 568 0 obj << /Length 2881 /Filter /FlateDecode >> stream xŚ­ZYćĘ~Ÿ_!äI2VmöE²äĮĪzAŒĄ$€×‰Ņ0”H-]’ś|ÕÕ¼“œ—é“U]××U­‰6ēM“łĖŻ·÷w_æ‘v##į"'7÷§•VøŌnāT ©ÓĶżqóóÖŲŻ/÷?ÜEį³ĶŽ()¢Dnöڊ4¶¼ė’uMńa·7Q“­OÜv9wš¼½īö*Żę‡®xæ£/‹K^µE]‰Ż>6vūŗ ]}C┺a* ½¬|Ś©d›Įm˜ćęBs}Ł×21¾~£¢¹Ä:5BĘ)$óR“¼g©'Lā†ßÖ^ŗĢ³Š6C N‹Ų$›½ŌĀĒŪXČCW78—Öf›59uōöŚŌ×ģœuł‘ǐ— tč%įłVŚ>čÆyIŪ×}Ėó36ƘĘÓcq ÉGŽpĄ)ż<‘K¶Q›wyĶķÆ»½ńZx‘d,œ&œ°*aīŁ)lŁõME}ö6†ś¼å1>¬–nŠŽW®Y×åMÅźµr®^™ĀĄ.(ųTÓń›'ś›‘y›ćšQt*¤RĆGYu\#­(ĖaS“æĻ›6_„fED¾!lE4Éó9—‰qĘŃež ÆāŌ!T‡¼m ę|¼ŃĢŠ_[īūA{ØĖžR “ ·+@Y~ KlÉš‡@j¹é€£ÆX‡2‚Ķ“c%p.D€5F!›®ŲAūĄ\2ՊŃ'\<Śüßk²Cū‰”·Š\’Įkģ°ēŸ«d“06cųJŠŲ€F/³‘Ū¬åSßF­±#a‘ C}¹ö]F¢ńÆj,üź‡"óŹĘt€ų!āōĘŻ~"Ķ×!B­P"2ƒ‰QUwx9Äxøń1wõ7[#(%ĖFK“æ9d}Kž"c-w½H¼Ė“bb¼•i0ŽŹ¼ÕŽ^ÓŹx8³5Au`ŻŌē&»\'1QfÕ¹gĄ¦ć4kLGŠL Į&÷¼ę)ÅØx<™œFeńŠd Ģh¶ŠobÜöū°EFē@؛KNI@Ć“Yė*t‡`3Œ‚§°·RS8OģVd ¶ĄķéõGķ;$¬1“*gHršųDÆ4I¾Im7äg<$ öŹšł¾8B֜É=RÖĄ,£]ųó¦ąÄfŹUq­€"øīI‘õx^Šģr“[Č`“µ4^ēZŅ9pهœ²5‰,Ķ_\^™9ójĀJ[_Ų2EÉ2ģq®’¢Z&Ū·=ģ,·˜4f"u9œ›ę<‹I†‰e¼XÖ(ˆzH0‹ąŌx÷£Ž‰-rŹ‘¶µ^ l­H½k? Gė±ŽvH5Öl‡-3aü§YXgʘZ˜ĖźētŠ•™0zŁč4Écž‡ģr-½[sā;Č1ÓqWESŻ”ĘŅŽ…vŽ—¹OQī¾»æ{wG5v£jRB§ÉFőØ —»Ÿ‰6G,šB»tóä·^6Z؄j°róÓŻ?ųjÉPZ*Ę7Ź¢‘*¼Ėtłjń‰ ^™ńp\²Ķ³öƊ§ŗ,ł²eģ„G•ā\e]ßäb­¤\XQ9OU‚9qQ…‡“ēō:‘^'Ā$öwźį¦uZDŅyZ*‰'E}ǃTįŻēX÷ćKĀW^ / ]xY ‹]I_\SėŽ„BF$»…8õž^ūL. ɏpjöŒ€Ņ'‘/3³ÜæĮĮ…[ž+ŖEįÆżƒVf»öžSm:•AšµāÜéĘā¼óa®&ŗ}d:¾"*F4žŹ?ņTÖ™Ļų‘/¢wB½Œ™löš©£Ō×4ŌśŪ~x£jĄsĮŁB”7Ā…Fń*:ćw#>Ņ$żĒė`ō2Ņ ŗ^ņpµ/'Z’žķ 6c,Įō„%«ÅŲ pYDV½|§ds-#YI‘NO§ĶĪұšēŒĢ6†(ļƒ ÓM"\ło‘I%Ά3™5C§BĒę™¶…'(:Śšö9Ŗs—¼{œ2\ŚŌ.‚žXÖń@ŹDđ^0zāXD)”ī.ž2€ĒkĄ/ŃJ\øsŲxkčcD,õĖ0N‘¦ń’ńéPē«üxbŻžiø™ĻŸžGYĆ»9²1“.—ēYÕ>="ŹČ¼ ×ĝ$Ÿh ų™+U“ˆbõ"ģ5nj(yÉ>\ėČ ĄžEœĻŖ7ˆsKĻåW~Ń:TaœqŽUŠ*Ą8Ļś°żcĆŚė©Ęż7ōŗ}ŒóķÕ_źJe=)ččóŃ”bÄoj_„o‚¾M—|)8Ö9 Ę_7ŠŖķč}•Ų8?Š‘Ķa©į”a1dzLĘ˜ŒÅa»‡fżvż°ęŽŹnĪ÷œR˵R×Å>æ„^°Żń[µT—ų‹ćžŁ}€QČrG/ 8’œĘļUŌ{ČüÅõ_Ķ9|;åÆšżEwׅzWzģČĆq釳'¼¹Ė~­Ū،Iz]E‰hż"Ø7„<©)Āü‰ƊżįE+ļÉ ĘĻ&čŅæuæ[kążfÉ÷Ł ČeÜ’ū.‰tÓÆ9+SR"!ˆ_DEOłą· É߯pU©°‰{®ِUæÉ\ *– ÷"|-j’6sÉ9N¼,ØT:¼¾”ĆhA½5e~ Å(“ßWsĖOIłĶĒ7{²å‡#Ÿ93R„Ņ’ćĮüµeŖÜ81’a”1Ÿ”fć"čŲ}N_2Q"IŻRcp‹Ō“Ŗ,č J¶Č ²)„‹äS[dœ.ŽOQqŃAˆ4 Pó“SĪC¶”ŒčP7Ēįł$LĪ_Kō;æaēŅŻ¶öÆp endstream endobj 578 0 obj << /Length 3137 /Filter /FlateDecode >> stream xڽZmoŪČžī_”öF ÷…Kņ‚H“ų·«ÓŽ -ŠĖį@K”C@/IÅēūõ}fg—"„•ķkŒ~1Éårfvvę™gVN&7“dņķŁßfg//D:I\$…˜Ģ–“BĒ…Š“«XØ|2[L~Ž“9’eöżĖ f¦±Ź ȱsĢłT$I½yw.óč_ēBˆčĶÕŪ÷ļΧJ©čĶß~ųńröŻß/ßŅ€ŽŽ]^\¼’ńżÕģņĶy®£Łå‡+~qyå¾x÷į‡é[R|–8sÆ//R1“hŖņŲ×4ĪMʆU‹å”Ķ—Ép²Čb¦Žüæņ”±¼<Ö¹ö3~߶֘÷³³Ļg£6…ŒÓ|b4„er2_ŸżüK2YąŻ÷“$VE>¹³3×ĖLįn5łéģŸģų±2ę©“²hŖUŗÜ’7›;ś[žĖ,jģ×lo6Z’.b-Ó –f‰’Ńą±6iÖ®‚gž~ÅYgņĄSÕnUŌŖDʉVĻ¢W%ˆxaĘzŪ®ŗ Ŏ@(&ĘļÅ+š2™ŠLBBŠøNüīåKŽŅån3ļźķ†Óąö|ŠķŽÖ›˲#޵vņ|»¾ŻuõꆒS5Ūé¤ Ž‹hQ5ӟęåŠ#†g|LŅä5BWaI؊ōĄˆ-#¢;ŗ)­Jsõʙ°.­)~-Ļ•lĖp²‰XdŽÄĹŌ_™m:֐e¤sBS}©š¶ņę¼Ź¢4•=‹%2ĶmFŹ `Ķ3-_f­ĒZO¤,ņXMŸCÆJD¬ćz½”B>Aa€”gĻ‹ŗi»)åĒD³ˆ*Ÿ*vģ'ÜĢé¦ÄĶqÖ,³ĘŪ6ŠĪl˜‡ÕušbŻ( ”WĮBf繊¶ēS'є֖z…Ūŗ+»ŠßtŸÜM{WwsZź'~¾†'ņØźhČŠŹ®~ŅYa]ż…¬ŖÜófĮŸŻ–mKoņČÉåū¦…é-l—Ŗo˦\WšxŹ`UØ8Ļś,’-äÜJÓO!c‚¤ŒsįēÜżØ„‰‹ ŻnČL#¢OeĖ7Ż–Æ·/õĀĶ }-W«­uŻ>¶l_±;·Ż'~üržšØlźrCNģŚų|šćę2®ģ]ÕK§ė““ ą]õźCnČ=ŃÆļDÖi„PøĢ$U™½~MÖie1d!ƒuvXøĘ®•*6Ŗ/\Ģ<œ;·M}So°¼ūŠŗ¦*’#Ž3džśÄ EoA ShŌEöÕp.“²€WūŅFo^ ? µV w»¶WµWÕmż«`¬b£Č0ē l0aO.y«U.ZÜgŽ’Ä[²ØˆY“įræ•uq×Ć}+ž éūyW7\•AŹŪQÕ®GcĆ“ƒ‹]’*tČLwÜKl‚iōfńåÜH@Ģ܊“˜wāŃ}Z×s¬VÉĻĮ+k2”w½vhPSphuÓ ¦Q¢Ķ«¶­ŚPąĄ>“„™?–»°“P"ÖåĘ%$ĘUÓEå l³p{ĄSAWõÜjn±ÉŅdżŽŅ·ómÓ£ßv³°»LŸµ53”UéöŽ&ŪŅDoÆiæ² ~¤EŁkesfn˜ƒ… VMQCGQćʱ”¬×rOĮ‹ßĮź‘Ь·×ĮE{ļ8Q=śŲ/ĻCČb0ģrp’·;מ"”«ÖWv|WS²¢ēĮĄdĢҶtģVYYšé‚Nö/ĒNä1>®ĄģyéFÜq²_©/£'ۧꤰf»ā½*^–ÕvžpM.Ė̾„°Ŗ,ĮƼ”Łž‚tüVÆ}˜*ćŠÓtÜ –Ä g8”‰XÓŪ–G©,Ų÷„Ā)»žT Iš0śs:i•čŖåž¼‚Äš,Čdœ©õqŹ7ĪΊ{ŸÕnozæ¬EÕZįZn –7ŽpŌųŖw ާŚS‚›jUĖ£„k(ʍfłµļး.÷×ÕŚMŗq4dsŲiżdD'Ńą°£ó·v»īOšjŹŖśwŸĘ$ü¾®V ć7Į£m‚Å\žzå“,.²„k,•†ƒģĮŠ•„éø&ŽCåø+ś_Tš Zź™ś _‰rœå}Óżš‚.’²ö¢\Ä|CƗĢ_^ńą•¢FŠNtūøū˜$É ^Š[?K„¬™fY¬‘œ[” čÖl솔óeœē=Ÿų‹„Į§'9ƃ^hżzRzfĖ©Ś{ :[ĒRFĖŃ²ŅŠ²Ęrš194ŚmÜ. ¦'¶įx‚LŁdę6ŗBŽOŁ„O ŅxĄ”ØÓõŠ5@ tAb:‚ķ~c;Jš;¢Įõ ĢUOÜ 3vœ§ZŽ>c0K:¾l‚?Ó}š’PWÄفpTōv ė+ÜĻ…ŁvIÓܟåQŪ¹ÓÆ|ß’Dt‚=ķƒq^æžæÆuZ<Š”"œm’<˜×ÆzTūķŚ;ē*§' 3µ?ä 5Ŗłą ‰Šež}Ą‡¾d_†UŹÄ/š:ø?pIČ<.­ŒX˜ Ģ!ōd™ćō~ėCAć-(Ē )wV]Ų'cõłYwµ?Š8 -Ś2÷äĮźŠ· 3r 䮟M•4§Ņ@Ó TžHč'-7)ņįzŸPGfįuä…öĄZņq„¢ß<]ĆB¦™ŽÅ¾łæ8ajjz ߄’Õ NDž”Ŗ›0`¾£L38 ižˆFĄ†±Bū£|ŗĘ#8RYļ)rö§ ξ?`ų T”źƒi‹ M•ŽX`—ž}Ū.Œ‘ŒŽ”č‡=9ūĆ×É-×Ⱦ”UQ_ˆŠ;Ŗ~ #…A±1ś‰ ł‡č€n]m½-ÜW’5wž £ ÷‹ kŚvēéÉC»M Č]óajģA x±„²°§bVļæķÆyō£öą_t.ö-æ8ś5ÜÓz98äĖĘ9{7<+u_mł‹^Ģ b”EJEÖ’š3%b®Ģx{1½µ]üœ#suFfƒ)o}—L7Õ¦źŪ'DŅ®åć©į'…Ņ×e[Ļ’Ü‹č'٦¬ō’s`GœźšŽõüY®mipl½ŽĻĪž ̾å| endstream endobj 583 0 obj << /Length 2693 /Filter /FlateDecode >> stream xŚ­YIÜƾϯ rbjеEĘČAŽ¢DA`ĆČ9X>pš5Ż“Ųd›‹G“_Ÿ·Tqéę(@`X{½zė÷^ĒĮ1ˆƒæŻ}÷öƒĪGyœ‹ąž1Ču” ¤™Š„Ź‚ū2ų9L#¹Ū‹8ŽĆwåļ»$ ‹ę`ĖŻ^)õ±ķŖįt®8 Ā²ś e;ŪģdU1TmĆSķ#ļŖ³å‘ŠŁc·Xv錯†¶ļmæūåžo?ˆdI¤–"Š€7}Śą¢»Ų½ź„ļ_ļļpK8+ā̉I£DēĮį|÷Ū]”H•Ņ‚¹E~—xūń,ƒ÷ķŻOšē§¤J¢$ĖüŽ’ć(u}Ō^i„& ö źHRk&`‚”Y$Ą 0+¾/z/ˆ”øTĶ‘9Ī,5ÄR„Č““e2Ėr¹c-„wƒ<T°—*J„äk?TDZs2ÕŚķµNĀ÷kEø½¢øĄ%Åatlæ)Ā`/$hŸ0Ą•$ŅŹšuļŽ’ųĻż_ą”8 ū–æE‡ DΜZ¼ł©įnå¾ĆÉĶ×;BS„ŠxģRt®EŹ ßéip“Žąi* ßõT½ÓŁ—“W@ż)zÆZNy®£ {;^Ģ<öŲéŖģ^Jp™±Yk.*"MfČéā·(ĮøĖŹY ­›ąĻ#zę0Ļ;gāqm·Ž…®‚LŚ–ŃW=z{ĢnlmCžJĪTā«J rL“Ģ/!ϜŪĒKŲņpˆŒŽEęą]k”4‘øö®£$ĘČŪGā(»[D…L ˆĆyŪ1^‰Cˆ«€Ģrn š†c<Īi,¢•¢{ꅝM °§›ŚĄ wĪQ&eøÅ$‡¢>LŽp»ķ—K gŽÜōēP7‚nŹē}l€•nrĄæSph™L%=\:ī±ŖĆM0„öž“9„‡sžł”ŗ:W²‘E85žńæ#·[Ņ!§«;Ū²1weÖĀ žāŸ4sˆ@“Öių™xxø‡vß³=·@ @ „hšõAiDæGøø’”†9`pž¼V ‚ž&™£ mä8Ā-Ėgtö·±b-"Z P­6…ZŠ*Ī5>?į-EWņØgJėˆxĄŸ!—ą7¬9ŚĘN!^†— Ōņ©ź-wŃGxUTr¾Æ(õO䙅Ś!ŪTö›é¬6V›IĄ™%֚hHÆOY£Ę `Ćӑʰ½ģX5÷æ" ~lī]ZV¢ƒ#,Š;Ń?!¤ōāČpŲ–¼NWž*WQ,&OՁæƒ7¶5}ģ6°s[VÆgMĢ`XL‹T=“z•ĄĀ,Ệ§‹²ø°„ ć@oĻĢ€Ź62/hōķ怋œ2øŃ '#ŸÉ5•‰XR))’Mļ‚7m¾G„QOį™t‰®Ą Sgj¢ÉLö¾°Éܰ !xB‡5žąAø\UP¬[F)ƒńަ|Ł óxč Ōso¾I’cŁĄoŽm¼Za[eÆy5 (=±ēĶVĆ3ĮƒĆ6Ī2FĶ+¼¾ÖW3»~SŃłą•dd±+WVVU#±G½š3Ųc?ƒ­…”©ąÅFŪ¹C~lž«œš&lbG5>Ńrćčrż†»“§6ä© yjœ ¼šPƒŻp ¬é¦AŒa¶x®#%&¦oĀdŠėd*D¢ŸK  nŖĪ>]ęlę1ęć|ÓR€Aš8Ą–C=Ų^¦¤”µÓfžxMO|„Ūz^Pv7LZŸĘ”cي„žā6rĶ.‰¤ ½č{rÅŖģESS¤‰ŠŽŽĻč—ŃĮ@Xł@uwuL…ńū|Uրq2jZH-Źl7®zŗA'SՇOu`_ Ī1'¼„S»G^Š”Šż$”.Q7QY©ō“,¾ō€½TĄAOńeųļs‚9Ūģä±Ęė󯘔.ĄĢµ¶Üv^¼Øó4§ /慫C{©sŖ¶Mpn+Dhd:›.b£ŅSa€Ś7¹),,0»/Æ69T˜„‹śŽÆ"ņ-Nt)·2s­’żŽ,ólåńµJ=Xąē)ÖŚĄÓœ¼+³ŌzģV p;Ė\™ †ā«½$€Ż§“ķģŠ@\툁æve”kĮp1^łŠ”¾.ÜOõZ¾ČW£P~p«śĶ|ŠFG˜,R¹ö~ŌĻéųźéN,üŲf xšHŖĮģ”ul%9I©©zTŚž>žIutÜ]Ō #$ A2ęŖnöo“ņ®ņ֛Ǧ$’ģQ;6Z8øż«=,ŌH2ŗĄ/EŅs< ēżjŠ"(,­ēćĘzˆįš®”ƒģ_^“„ Kōī…ŪXāBl¦"ŒYꊛsˆxU²£bSBé Mń+°E)ĘČõĆPŠ d€c3 jy`&ž óī»į:_£ŸWµ)œ[+ČU5GĖHg_/ē‰t ŠOÕpŗŗ³ÆŽM1Œ“Ÿė·°Ń>79!c†Ģ9W©÷{Ž‚\Ń~š’Y æ¶ mšžŸ‰ƒ¦€`.YšD ρ‚Ų†HØžu÷’ “¾]ä"ŅB€sĶ•ŒŪ;%ģJĶ7¹T ¼-]]ꅁu±éõTƟ Ń)·ćCķūĒ >ß±§2R*æŽÆį_G Šż-ų—į¾ü5üū—zž-/ż*’ŠŹ¶Ł·õ3ē˜c­ˆ endstream endobj 573 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./tapebasic.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 586 0 R /BBox [0 0 314 156] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << /R7 587 0 R >>/Font << /R8 588 0 R>> >> /Length 645 /Filter /FlateDecode >> stream xœŻVKŚ0¾ūWų+1õų=×JU„Žv‰ŌCÕʆ,]JÕæß1±µŠK/‰ąń7ćļó<Ā›T€R„O~®vāŻSŻ”d'Š‘…(Éj ėän0ėI¢‹,IŅŠy^ Jė;x ĪVg@›*B^ē#’G¶8 Vk9Dš‚č— Ÿ9”żžįą=Q°ėa!h«ü%ĪŹåÓĒ{ś"–ƒŽ@”ÖU,…V@ļGŚAEĄX óä!ąˆš1€äå(+ ÆāžY—ųƒŖB ģg~ÅżBĮ9÷(뜮LdeC!=‚©Ŗ0ZĀZU4lU…Q ®"äõØ«X ³!/G Ā ‡²ß3¼' ślݟŖs²dśšģ "nŪ kĪit ŒRGÖylżĘ³†©+–ŸFĪV“Տó֖ć…L”ؽ$†46q-–ķha0ŠŁR¼®Y5D¾¼ÄKM0CäńłAī…‚ØTˆČo€$šEÆÄGóŖćpއAś/ų„xü£Īæņ«T™:\ÕP³ł§¤ (ZśŌū:‚BÉÆ^Ś>ļÕUF čRš™ßÄpŻ”ÅÄn‚ qnƒ8‚·× Ż%ŽČóEu—WRZaó6(Å4ÜWüśė„ÖĮ„4\y“Ģeqģø±’«|ßš’N0"#›µč’ńŒ° £s\<й͛˜ž_[ٵūöų|Śöó껹ƒ2žL¼ł&¾ĢN›]+·‡Ćė|”]ąś ģ{ģŚÓükó‰³D Ź?£eŚģ3[’ÜÆJŠ…ęju©Õ+Ąfæ9„Ķ ÷Ń£ų Žńk endstream endobj 590 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1872 >> stream xœeT{PSW¾×@ĪŃ%›"¶äŽéĪŗmEEŪŹŲ©ŪQ·RMĮ¼€$˜@"! 'D!@xEƛ h…²«–¢Ū:«ī²Øm©ÓķÖź8ŪķģιĪķ{ćĢīž±3gΜĒļ|ēw¾óż>’[C$‘!WJ+¶¦«•bUhǼL2ƬabyˆU=ļ|¾'<–HńńÖ”Šė}LDįg?Ē·×ćł $'’še¢Zc(—ĖJ“ōk™éŁÆoŁ÷æ• t‘į?;t’“B.Sћ¹^ŖPk”R•v7ČE+ņi™Ā )© Å‰T:–%VHOŅÉr…\£Qėé×_§wĘĒļŲŹu;wÓ©:„“\GĖUÅr•\k Å* }D)•‰i„X" $)åŚrżV¼\õßÓ©re‘®‚~ńd:U@§ŠéR™N!.’’‚ ֫Ԛr­Nü”“X&W(i‚8B%҈cD&‘Eģ'’ˆdā ńń[ā0‘JÄŽW"ŒŠ×ČżdłĻ5bÉĖå]‹ ū!<1ÜĀēæ‰‘ĢYäe6]#®ā¤U^'óŖ°ŁŁęp#8ą2åQ¬ t‹9ē 4į/Č9gņ  Äcąźå>Ļ(‚s~Åū+(„ژ ’xA^SĶAlß\ߗÆ0:(zly¹%£*†»Ń:Ąģ æÅßņ°“)²/ÅoaEģĖ7ć(õō_X„£·?aAU«…«‹[ŲX6üƒƒ{%Åž‹zJ½PuŻ…O>ŗyWÄa±Ź.£§0‘ŸF-ÆbŻ£hÉÅÄ ]ŽäBp¬Åz‚ś©ęP¶År“Ą„ķ>ž^GµŻ‚x/õ[§ÄkæĆaųWxƁæ¾q¬ <³€Zu™ś’ź c ~cÆpčzšŹŸēö°ååķM<‘EāGȋ’žŒüĖ*ƅŁ$ģpŗĻ»Ŗ (Ö P®Ķv؆cÅęF/ŗ±ŒĢĢš]v«[Ōiv×µ#č÷v Œź{äb•6)śŲ³t²ź£§b"ń°u‰!ļ¬ņp+“%܌!æ­ĮY'²®;m³J3 W±ŲźlȎĪ:źõšwģļło.ĪMśFEÕn}¹ŃŖC1ŦĄ- OżBģĀ»ĢQwWqņj“ą2S1/“óó-ī+~ +ģN#’ęYåB¶ µŻl¶htŠ%‚’“cӔą2~Ąn6ƒ«g;L(²Mą«9š˜ź D33į»Ą¹śłž ūćī«r—mōGM|“ü žåтĒLźēB£¹ĘnBPk똄p6@ öA“_,ģ>Š `eė¾¼mOeææ·§ļ\CSC UļjhE-00Ņwq. Ź„vŪacm” ė*ĶņŅM)³K³—z–DMŁ>ż%4†z=ć“Żž•)ģ§õ5fõi=‚%ź±ź@‹—‚xŻ, åw $ĻÆš˜Wq¼šųYE:‚ń‡bšćµ»_Ū-ÅmT³®Uķ3ō¢˜ }Żż×|ōv^N„¬ˆŹ-PDļ@ö„Ū0ļņÅĪį (ąļ -¾Ąż#V`$™8¼Kx|O”źJG…ƒŖ†IŪhżÄKüŚĻ¬ƒå#Ź`~o6ŹE' Rł‰"MJ€¬čŽo0x²¼ˆ‰i{Ē Ż÷Ē&–Šņ«Ū߂/TĒüz„ü‘“ÅMNģzNŸtOövXU>Qg™ĒŚ…`·Æ?XpįČį,M~UVP+kŲ N~ÉŽę£ż–šÄP¹¶{A‚ÓāFĖßʑ!u°ŖųÖy\:Õ45pGõ>°D X¦”Ł(œzT"“³²E×ŗQÓ¦i*ć> oŪ—Ÿ~^J2ŒuöRUu%ŖDzOĶ„J(`“²5„ś²ī[åu?ē ›łn‡ĒъąH›™32€2ĶÕ)vČā)ējŚŠ5Č|Ī4f„ÖdcLäón.ŸŲņŃ*N 5^7gæķĪ֐ż^pU§Ųę†éX‡QīY&7š‚x ĘÖ¶––óż3]ćĪö• X%@Ē,–ōPŽZ/Hw˜ŗŠMˆ›ĄŠĢØļ ‚7|š]+ćģ¼¶6ĶĘ©½ ¬QŁXķCS1øąµ’OßMĖ)KĖnČ™Ø©Ķ»Rą2ēÜ9§8ē6qv䌬ģa²zpFhķ×?jˆųŚ±Ž ž ķó‹” endstream endobj 574 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./tapeadv.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 591 0 R /BBox [0 0 314 156] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << /R7 592 0 R >>/Font << /R8 593 0 R>> >> /Length 525 /Filter /FlateDecode >> stream xœµUAnŪ0¼ó{lsŲr¹$—¼(znb ē pģ¶›øśż%K‘k5öÅŠAōj8;³ÉÆäYČ·ėpÜŗ/wF«ß®«ŅŻ·ĆbærÆNśõįöø„Ūą…¤r­Uińäz”9””H“rŽF‹­ūōöš²¤Õr·Ü?¼=’Ś}^üt_l!†D°»]h :NŲ&±r0*ɳf£P”c2Ś/Ż=ō QŹž¶ĘS‰“E÷hćÖN½VØ 9²TĄU4r•±²yÆ /­2ģśØ"ødš@—?ŒĢk÷ć†vĪsńŽŠŠŹ,؄qWÓĒ)ĻÓĶū\‚æĒ=øē¼žWćęZóG>¦Š®×e 'ƒ_“ĢRŌ…½‚Ÿ±?ūÉ8%HɘP‡Œčķ .O”hĄ c!;tžś(0 GT¢°@vL\Ń…ŠÕ8ū4_‰¢¬•¢b0µĒ÷U’q§4‘ ļ“õGv4$gĪÓ©–S°§™¢Ž2+· ’ZÜė. ©ÖŒ<­žMĪšÕ8NĀyŠåARZ (§vģ@‡P…ńŻ2Ɯ0ų *–ZŚ öRmÉbЬ” ģIžÆ„¬l"ń@:žćVc FžńˆĶ—nÓ\€‚0ćéTĖ©ƒšZ®²įCšÓŪT\‰ŗāOƇęąŲģ| ΃Ś@ž#hŠ endstream endobj 595 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1378 >> stream xœeTkPWŽ%Ąī(RKšņP’>¬ *Z;-ćL‚X+E@ŠPˆMH–&›4äaB“(Ü!‚AäM R[Zµ©ĪZ©­čX+Å铝¶s·³žhp¦ķž9sĻ=ē|ēž3ßwQ$4AQ4"Ÿ” «6åɤ|jŁO¤× ōŚ:žŠÖž•du±VˆķY¢ąŻgįÕgąäj„…¢#_~Ÿ.“k¤H¬$ÖämHHHüļfkrr2qHūO„ČV‘"ŠX<؅™\*¤”;ˆō`¶DB¾Oˆ$Z¹øŠą BĮrY!_"ü€Č$%¤\.SėÓ7Ū’’¶n šm;ˆl•Tؐ%$UAR¤RKš)±W*ń )_ \Ȑ’J…–ŲžDR’Vg“ŅCŖ*āéČD¶,™Č"ņ„"•„ÆųA”L®Pņ…"’@½H’‹ģC ·LämäEV‰„"j䜌‹žāł5śRč+ŠI.:īzgf,°:é8-¶6k;Ą½}1±b Æ®f’Q\Å.l’q½ ćpūä£^gąnÉn#Ä@–Aw`9IąĀŠ›k`‡Zģ§²Ėi„Żž]Üo1SS±–¬ĖƎ v4zém^Ō÷žxȂ6ŗœĆ<Ÿ”Ąp™5‹ė`Œzü'äĀč-KĢs<ƒŒ³0ĄÄ3aļķJTøĻ«y²©ź9p_śųź n‹‘žŌuĮ\?łEŌ­ØŗĶÖ;čxŽĆj€Ś%¼'bŒ=ŠźźrĢøc딄+<Õjh³8܊ Uŗc‡+ĮPų2\½ó‡ūŹe¼Ū˜¹©@-6äėbįĘTN’åį‹_O¤08Ć*NM/ÉīēFĀūĄłżfe§ć8'l«ą§Õe<ʆ&ÓžŚąVL.l—MēWpØĀü&=-‹±ŪYÓnīøŪuŅPw“|J™QĢ{„Yš U"CĪįŲH8`œ¢#üčÜ ¶Ņ…œuok“™¹¦zs½É(Ģ/?X}“Īd6 8fm°5ąŸ2Ÿ…æŽ_>=1āž p ķj…ĪØ±zĻ,žū‹¤sŒŸÓ12Ąæ‹f/ŅŁ×9ŗšZ‹ąJӉq,ĀĄ”ŧw«†ĖOåœ}{SZq–²[Óēīéī=ŽŲÜhē58[÷ų{ĻOxØn6Ęl~Ww¤\ˆ³Uš²2.k¼lf|“gj†Ū\Ō„ƒ Ē94‚3[īr€ÄRÆ®­Ŗ‘Õ«.– ^ąĒĄōč0\5Ž/æļ+Hł!6ŒŅ‰š ĪĮ”rjČå>źŠvÄh˜ĮįLų‘kFŸĀ/.ķ)@‰VH–’g€dœįŽ| bK·¦!2Ęeęa"§}~šģ ˜nYĒv|™0Ō8{VžköFy稻pēm'šĶŠ•t ēܛ˜čm»Ŗ5FŽ&ož08>ܜ–ž”å^ÆäÖjufK%eŠ P;kG58›É(’WVÄĪ—-ݚ?36Å8é#ąjÉXšį“Ä6) t†<­ŽF{£ œjčhlgĮy׀'ąu Ią³ōÕųqĘō$Ž0Ż1OüĒ€A”›"`Ā^Ķõ÷Ł;Ę&ylŲ 9ÓŽ”‹gtŅNn—ŲY ų>J\ŗ—ķqŽA1Ļž†.ł’¾¬«-łaz¬Õźlź°:@¬ū)/õH7Öe.«ÕčĀv7i7q±żPĶ‘+•2YÆŅėėėõy•}/2ųEhŗéĀn˜ßŽæāŽŹžÖˆˆ{]«äo:ˆó endstream endobj 598 0 obj << /Length 1781 /Filter /FlateDecode >> stream xŚ­XėoŪ6’žæBe fH‘zmƆ,ĪE—l­1lh‹A±h[˜,¹•4ūėwLJ,9Jƒ®żb‘Ņ‘÷»÷©·ńØ÷ņäēåÉé =FIJSę-×^*HŹ„%œ0žxĖÜ{ē‹döałźōJ$#ʐš$…{4M4›3J©v1 ’cĢ?»>漘Ķ9ēžŁė—7oĖ_~]œć į_,®®.ß\^/g³DųĖÅ͵ł°ø¶'.n^ĻĻ‘ń µp±Ī-„9I…ČżV6®…ƶzśė®Z©¢®Ģė*ŪÉÖ,W™}w;›lK¾B¶u+ū°0ßģĀļZ٘U֚O%0`žĘl²v„aĄ¾9€]U|ģ$Y(³-ZD3NB‘öZݶÅm‰ē8ƒK3åVöU#Ū®“/ļÆ\©ŗ1ūzmŸ•;_ģģŖUroV…’Mf•„“x‡¹,ė7÷MĀ)½ixgͦہ²€ųiɬ„ģyī·™#z`\#³¹”æÜŹź…y[Õę¹Ŗ÷Ī&pŖFÅ( Ōb“ę›Ń5iäĒ®hdnvŖ6Ÿ÷Ü÷$= J~RӀP ‘”Ē JJĀ 2²œYį…ąž{ŹDÓ*€,b£%=!śnÄIŚO–×WӍ}œ§$IcGhōŚ“ŚLBmZä©”ė…Œ«Ք͋»Cąn‹ī©ÉksĻ­Õ AJ‡‡B3 ĀϦømąēSšEB’Dø³][T›`Tęœ'1” y†}­÷ų„ƈD)åŒÄ.Y’¦sĘåņäć Ę X,"e^†$Œ¼ÕīäŻźåš |’š4ńī5åĪć$ˆ9¬JļķÉļ&?ŽY²(%"ś*n^WŹz ø¦‰×Õ{RmŒGhŽ| 4A8 GhtH?f„·oĮ4fA2bź¬R³ļ'Amļ&ęA H'c.·:'øćĄgaWT…*²²ųWŚĻĘēaŃŖ¦[©®™ 4–DPĒŁ™g # Iõēqœ3©³;uȬMĄ• )„U›ē¾19“ČåŽFī2BĮh$¤bœõM ’šˆżL~« “bu ar*ŖuŻģś¤Ķ…źĢ„æ®ĖR#¹·1}īvY•·ßŹė”Ģ>e1I„«‘“R]čäuµRŸqyp• <^(Ąu¾Īēr”ļ ‚ōóNėšų&lF(ųшķ#·# "6¶ęé©Q¼ĶóŚ.w„)²JŁcźōĄtćźcĶ ^8H‰ĒŻĀŠ0ׯĪö5ĶĶś-ÜŠ¢…®`é4Źźpnģ­°ŹÖä½=²ÖĪÖģ&*ž“ąĪĮÓ^®4NF’?Š•»/ŃQūœ®.@“ ėźŸ!óźY޹;`{k»¢Śwź“ī<žć¹@Zäöšˆ[8f¦oµnƒm•Öšs×ßhÓ÷Kc!‡å,į~źµ¶ŲTē‚l3“Ół˜SčlųWĘdVšŖˆ;|hśa<"xΧÅn»[•ķūŽŹ„Š!eŪÄ9ņ+åRųÓ^~VŽ£&uØ?“o$pƒC؜uV¶ņY»dx>vē]'{„ŁKÆŖmņÓT…›Oåņ·Żm ͱmąĖ4*öŪ±›^¢ČE>¬ –hń÷f[T–ĄQ®;š‡~܂ņn†3OŁe‡wfī‚…ė;õFw¬xü¶U…ź”nÖ5Š<˜uę.(K³Ņ§č:=”Ė/ķ Į°ćVŽ<6;ZšÉ^g>u«›bD|ho”ń†R §'Cur×kąSÅ©ĀaH?®łBøžOąT°{e„åš\''”ƒŹ”Ü&ļŪ “ĒŌTC åż¤ ļźņnzŖøMGhŃȦ«öī‡iHņ¢oYö„T²“3ß¶ČsiŪžuSļŽ*'z‘v'ŁŲ^3N ›„vj‹{›ŲŚć³õ'dŽX½ŪŠ/ZGZ+ˆ1ŒG„¹ĖŃų SäVf¹;3”š@±£vFõŽ0 –«SćqÖŁČöĒÉvŻ+ö«8ÉéöYK, ÆLŽ_)ŠD:„WegŒ oū2Š]PĒž¦¬o3pĆ+>#czČ‹„Ÿ'IqŁÄŖŃĶWĪ%@¼Ä;« gł)C‡°3$eDpöČo7M¶›'8¬FĘŗ^ķ÷“ʦ”ĬŸ‚‹²ģLŠ ©SMį–ųƒän@¼ĪVE ӌlŃh<ņõ?@xXēEžBņŗ«r³,Ŗ;SŽ`°‚–s,z^4śĻ—‡Iį#č…{į­[0M^`VÉŹæūw#ĶLi%øņŃX÷hž€ņ’|6ė endstream endobj 604 0 obj << /Length 3144 /Filter /FlateDecode >> stream xŚķ[KwŪĘŽėW°;(•ąy?ģvį>Ü$§mNZķ’,`’А €–Ü_ß{gOIK¢Żöœ,lƒįܹļļŽ’ÅŻ‚,žrń‡›‹Wļ„YP’ZbéāęvaEj©X(ĆSŹĶā&_üØ”_^SBHņ6’p)U’UĖ"æ¼ę\$ŁźnS—ķżŗ\āOņņGByQÕ%3I[fm¹©ü«Ķ­’L~žl/ÆaަōÓżXٵū^słÓĶ·ÆŽQ9Ž¢`4%šnwĀ⤠x‚ŁzAij„d8ūŗ›~Ķej”³D™t,)Ö³¤åŒ%±Äو%xåX‚æKšX‚yČN÷cĒY"‹k¦R©™ßŻ÷;˜ß#“EuĻ”$ķ}lŚlxļ’öļ–@¢Ģa³y˜ū±i‹µĪ‹jÓv/Ž_2|ō»ad¼fH*“īü깉¤ df°OšČ ļ¦|sÉ@Ų’KхN­&a% _)³ÖO­b«PØeÓņĀ›NQåMEXެ‹Žį¦¼sėś©J°å© f°Ķźl]€j`VŠ ?¼G‹Œ ˆĀ³$½€v¤ÕYÄżÄul-˜m Š'LJ/Ńī“ļŖy”Iń˜­·«Ā3v»©żC{_ʛ¢mĖź.¼æ¤É¦^7ݤš5°q¹A™<ųĻīłZQQ{*Yåßde½¬³ŪÖ ž Jc½ąEŠŽPƒM*a“ÆĮXĮµž– 4iī³ ]ü̜™ćx˜ĄÜ÷»”¬õcČ Žäŗc…zÄį Ēé÷ƒeøē8”X¶ –ˆ²¹$)£j¦ģ=U*ÖOÉŃ¢ÖeU4~}$źMP‘Ō6•ÄX¬]tĄ>i²Źc;½”˜¹ētC*e¼wO4!’"ø÷Šŗ‹ææģ²¦¼†‘åżˆ.1³—*U\Ķ患Ŗ§{MݼĄįq‡ęŹ.Fow+d}µjü6|Dƒ‡Qŗ.]hŸ.t—. ąĮ…äȞA)ā+Š\žcē:ՊwžūxŒpndõ..Éū4ö#‘$Ŗģ”ÅYs¾DŒÆé:2„l¼ē'‡+!9ń»¤ „ćˆe!Oåß“ڼo³ŅiVbģĀ”¤ņ¬öC!pł`Vß9‚ć $”jˆØĆ`Xöpń6Ī«ā”Ģ¢¶0„5—Ł]LX6„š¼+*“Uļ@2€æĄ’ą?rĮQ(]Æ7«8V`€å)ˆlOCd&>_QQW XŲ•Óxä£į`ėq¦aóį^›”1ś‰Y[ļem>“Šf1šÉÄ{Ģ g*·Ü#›Ō[>k¼<‚`ŲžqtžqBĻ܌=€ŒåÉߜĮtĮ­ Œ$ĶnÖk-†#2ŗ¦ š¤žŌv?GHyŽŹ]Œ»ųóĶÅ/Ø.P",K”°¤Pæ\_üšYäšņŪčŒčĮM]ć€x\-žyń½o§L1a)™kYŲuå#bĮø|zxżRˆOBlD“ŻEĆ:X ķ õwQJ RZ?"9·2¹ß¬\”o…—86(ų°ĶJ0„šęš(P*’ąiÜh¾ŃÜ~ō‰x¼„c£÷¼~IĘUĖ®T~^ńX6mNŹn ¹’õ$œÅŃ5ņ(ŗ¦\A©aó\ÅӊJ•×Å׌čÓX—At ėŠ”JśyŅöŽ M4»%JģŽ k‡¦Y\B¾b§ä¤Rł¤Ŗow ĀrjN(ļ8®ĆÄFĻ\‹~aīN§E® Õ‡ąAN„įį`ūĆ`’šæ„[ÜYŁxĻP­(1+œVUćf‰7KBo]a, @Ęq  L!fĖå¦ĪüU=Ėnbāń|!K’OĀ5ɒ›K=°²m”ż»[ø}Ēžó¢YÖå{_}„;”ˆć/uZ‡Ŗ€p€ėf*Ž=B–Z&vä¬+5ČńźK3ċ Œ?ŻĄlņP¶÷Ž1ź¢ %ū²õļœ†…ķüÄōT<.Ŗ€y®?}G蝒'y×­įŖ öՆ*¤ń„X3‡śŚž’¤ėæ÷ņīx·ļBā­gųū ęTo˜ †žÕEēÄ:dzŃ5?¶YŻ–ĖŻ* żŠŠķ„XÕ“£~… żŠ€>Ą58ŗÓ #ŲĮŖćh–{!ś³.72>ė¹Žļšīæ3¤Bŗ?šķwōä0ĻĶyū§ļžz JĒÅ ‚? Ōžt”Ģ‹fÖZé ³ĢV~¤ƒ.įh ćBTBžļkļķ>ąg J'"ē`§œ~p±üÜĮ’ ޟRc )x\K°ĄS/tŲ4M‡|6ĖĮ$„†Īŗö߄¾Ó}6ļ‹ßnV+W5=€¼irēēŁõm¶,^OŽF‡#RI'ÕC,€ō“ŖšŹ*t×c"Ɠ.Adø ĒEF0Ł”:•Ö”}\Kó˜ČšŻūˆÖ(žyѳljuˆųbŗ…¶?Ś§-hj &? m!xŠ®vė«|³Cp¾Oq=$āsēP넦Äß]e‡hs”RĆĪD|Ų=Ś•süzŻ?ģļB›r(α µęlyQ—®Šmƒ’"ä5pu&ņŖ ‘XDćM†ł{Ģˆ³`(@4ņe‰“ āZŌ„ä²ĪÆbtwžpŗB;O˜ÓEl„¦<UŠ&”zJÕ« B™н”g”Ģgš ³ž2¹ŚEé2…‘ł,d™tħd]æŹĖˆ·qE]Ö; m%RMĢ”ö!ŗēüµ}^õXž£ ‰›R ź4čŅźe9Ń2įp­¾»t,!¹ī/= m،1„ éMü.äƒCæz ŹpyĆĮ×¼š¶ w®†ōŽßpœą[zļb²å 7ģµ=æŁ–!ē“…ƒ²ŻĒG#ģ¬ąīŅW‡²%5.·ą·(óEaÅ¢p'&œ¼‹Ŗ2 nu*™"s*BŁĪ}Ł>鳙ēr³ŽīŚvF‹<†PBŪ5°š Y½Ü‚PŒo\3¬·ÕģMo|Ż5Uqµ‹6sŌäØóc¼%6܁ūrĒ„GūX ™™Õķc•Ģj*K¬t¾,‡²FŹ”B½Ū­Cł×ÄŻ(eź;d‡żA»S% ԘFH f^ Č{Ģ!PåüW‡ųÕ!¾ˆCȹ?ō… $½7ńĪ*|݊Ļa”¾cLNFµ©×ć+ڼ»ł0ļėĶųī6~ ®ą(öĶš¤Ē˜ŌĀb/ŠŚß#Ąµ“e#Oąsƒ;żŸĖ:˜°æ¹mžb]žŠj;øØ±éҳײ·õE׫ń`īäÖetē1±XńPē/ģ0ę*\‹ĀZ§,DĮ,łlyełæ¦æf8yuvYģS)Å)~Ą”Ʋ/«—(dU‰Ņ‡µ¤•})70(äpÕ°L/×¾E Vļ®y®ń’pSOešÄÓr üŌ/Ü97;£ 0³Š3 d"Žõ,(”˜šT•„’\N©6h,~5’<śŁ³ögi)‡ƒÆbŅ3$ÕČ6Ø_X[įs¬%l(„H<H(¶ö"AY•m'·‘yv’śŌxł|łģžēż‰‚¾n—ń{ £ »ųĘ ^ęB>Oqšæ“ę,z3ų½į·błչ߅œMw{+ĄłēB endstream endobj 613 0 obj << /Length 3390 /Filter /FlateDecode >> stream xŚÕZYsćĘ~ׯ`ł Ŗ,±sāˆ“T)»+[.[Ś8J^lW KB"Ź A WŹÆĻ×3ƒSCI[RR•r03čīé»§Į· ¶ųęäÆ×'oϹ^p¦,å‹ė›EŖĀ”«E”ȐĖdq½^ühvśĖõwoĻU2Ł©C™¤€cöD§KĪ ĪŽŸŠ$ųē)ē<8»|÷įżéRJœ}’ĶՏ×ßžpńŽ&TšžāüüƏ.Æ/ĪN\_\]Ś…‹K÷Ęū«ļ—ļń sä¾=×|LĮR§†„„ŌaiKH±k-€u±5oø>łķ„[ąķH…"‘ŠC‹Åj{ņÓ/l±Ęāw Ź4Y|6[· ŠXbT.ž~ņ7ĖŖ)zÅ”ŽR‹¶ōw_[^ĶøŹC-{^½}ŪS˜ļš¢ŚŁ“W7öUĮĘÆĘIؕī^½³[f|, cĄ_r‰Ķé1BŹ0ņuX±PżįæĖˆƒśR(a’(rŒų6Æs§Ąéx·ˆĀHö›Ć'—d*ž,4čZ=Ī%%£)—¦č8hJƒ`1퓵Ķö¹O8Qˆ£¾ Ö( “$šbݶ>ö ¦õ )šÓ„‚g;ūļ Ҍ‹u¾#;o‹ŸWymgo*7h7¹€©8įéRÄAŽ-e­[ŪT‡rmǟ°%é¶š|ķ‚Ė”d[Ew‡! īč ©d°7€ŖĀRgēŠ6ƳŚś“€3&ąØ;õŗ:|*="Šķ$ ĒaĢō‹d"$FšXš¹cœ{ĶNŖ£,Ū­½ZĢCÉ{‹ŹŽŃ/Yb|äkŠ/¹%_J?¬Š#£¼nģt[Ł’›ĆnEŅjŽŠsä4†VVÕvhŅ —X ˜u¢“©/¼ó'św§ąĄ].w:“`@œŠASģnK"TDƒś¹„6ßū0qųpóнUĘ=;’ģ÷Ź{bĪż0“ģ±üĢŗŲ>…ƒŲ Ds¾Flb’éyJ‘Œąń&«Dp½ŪżD"¾÷©­Ö!‹¢§¬N&"Ō©\hD+®£—im…LĄź"D<ĄzLkÅĄgx£ĘkwŠ0[O¹Œąö°u¾³±śqÄ®—2‚eĒS=>jŽ)P”Ā$5 #ö2FQŠć)ĮR,~”Q)Ÿ2j)‘Ģ ©ŪtŒ€6hKvœk ˜p/× _:Iæ,¶}VgŪÜųŸ{Ēa˜ź!ķŖŚśā„éÓ®6t¶5„Š”eЮׄŠį?P{A¬óŗųŻ«hH/D4ö¶&b*XØbjŖG>;\°}“~.Ķķ2œĒĄpĄŒ±™’ĢžżN`óU[Õ$¬H9aa„ĢŚ–҇å”+8—ĄøG¤“ @Ęm$nŪē¢Żų¤Į¦GŹ÷Ķ’ēޕ½ń*%̬7dfn]؃“RĆč5K^˜2xńČĄ’,}BØ"A¾=ŸüKń(åćÆC|bóÆ ńŪģī9œ_ÓQĖ‚ĒA¢{üBR©æŹ!ØHHPņų1Ć1ėU_+…0‘>SīdĢC“Ŗ¬”ÖUI>O;LFɹÅõ÷õ†všŁ¾¼Éƒ²:E&žŁZ2–ńlü€ÕyŖ#œ×ĢWŲ¼Mvy[^#óŚęė?NJóī!‘}QŌ‚āņ®&^ ש4ņe- Ų¢)Ö_żń†ił ŠÆžH Iép&!ī…„#KöLŠ¢×”h)ˆUśY¹­’“gpźRČąó[3Ō6_ņg&Y§VHNō,•ł’Mp±YŠU×1Ų”rČ”Ļł€mĪ:™M€‘dź„¢ī–ķŚ ī–b÷h›÷ZEƒÆń€PD^ķ!g–Īj™ Møā£iŠŒhŅš,WDœ̌X(üü@9ł,~Lq;j‹T` Ź«ŃĀŌm³cU9»›ąß$Y„‰“~P±‹ŃĘGU#)•SÕ#ßą\„!w‰ģź˜Ą‘Æ&<™ĪžåL÷*” Õcó‹Xéē©—zØ^ʓH­PuÉÉżĻēMŃÕźÓÜI%óX0=™„hZrO ŒEjó[¼Ī-§§rD‹1ČM{åĘŗ_q’B>}o!ø˜Ÿ] ] E=½.=B5‘ÓżčŃ|P”Ă6Ž6¾TrŹćbå459¼ē oääĢĆĘɜ¢‡Ź >ÄńP©AĪiŠex³3Jhf†żĒŌaó¾ņāfIģĒMՕ7Ć\ŅŧTD2½'žwꤟ„NżQ N_›ćHų“e“07K! w¾Å¦¾1£±-FķóM7pÉq»¢-²ŅĪŚŒŚ½Kģ0[ŚŚ,OĢ59-4@`n” ĘĪ_äĄT4q³ė®4A1§ČĶ‘EĖ—]0ņžÜĄŠ¤z$¦š“ņ髏„‰'īAG`ź¼qåĀŖ-ģu@yšČĄ”)‘‘Žõč*±Ńeœ÷€,_į0V$ĶĶL€C ³Z^!™9ļAYØxś˜Č^č$”N$ź…7éE²2°XāŚMńŒzŚš1Ī‹]V–ŽVų[ } _PB##&_å(¤o %ėä(wĒ%z޾©G‰WtýŽKBĪfr8īUoēUfōåK‚æ÷¾D‰Į›ė;ŁŻģI/W; Žƒj·¶˜ ³ ķ1JÄ(!KC-ā‘ėEuŒøCVGSėŚ¹ƒŚ>“eŚ­U[µ¦]ą‡yAŪ§ mt“gėīm2üŅß܅_µSž”­«rõ¦µ‡ghĆĶ_üܕ:²1%4ŽÓéP;łA:+jMĻTRX•‡µicŹ$p]³b[£˜¼-«Osh²;Ķ?OØ!ĻŽd~œ'…… ·ķ‡¶Śfm±2ĆŗāXGĮŁĪ"Īļ²ķ¾Ģ-E+{3“vŹL–Ķ+xۘPśfSŃ?›(j–Me¬ŠīŗĄ+« ōRq»ĖŚCŪ—HGÆÄż%“öÜXÓ&#,wa9+v|£8]” ‰uQÕ½ä6Ł™¾ćEī® ""+’ÕĻuJdf¼•„bą’ŌČī‰)żIµīS» ŠņŲįEś‚„CéĪÖæŸF¾2ń Ź—•·U]“›-b ™XSó]ę5,LŠŒk2bÉŽĒėąjO=¦ ßżšŃNP³¤,óŅ=ÕÕmm½ēĢdSq÷E׿Z‚’r·¦m@ó}–ģÕ&ō+ė€Ę.¹hŗNäAO M˜ÄĢ F l#Ā"č„l\Ķ]9w±ū[?:Š\RŽYŸ`øó$óŽŠPąŁ׈. ę"ļŗŅ}÷™¾ƒJŠW Ųµ*Übu¹S.­ĆÄęlg}Ņ‚™ V€emˆĮ™]li濞lŌN4E{°rõÅx›Töę·³…ū?/nuŃXæ9]jxųĻŌ•µSÖ„c~\śA+ż©`‡nZi¼žzļ–šž!²ĻŒ¦Ķźö°÷яS®e§¶Rŗtqęģ­Jw]}ź¢ķčŃ¦ĢNuČhLζZü»Ŗ‚=É6kHj¹ Z< SÓYŬ [ o¦©µ"üŪ°ˆĮ•sbSNŃJßŗ~l…Ag44.Übµ+ļķ(³Ū®%ÖcLr;P!ć{{jĒwņ”lp¼ŗŖ©e—X¤)—ƒ}°Äz[5֊ĢŌHŠv²ió®±J­ŗ$ ® æ«‚Ęb°}Lf“¦ —T”٧2ļ0g;"Žé\”W{‰ĖZ9Šaµqf,ĄNøÕĒJ3™ķ»…h©ŲQ;¢š¶JJ ʍ}i¦ƒ4ŽŸņ„µgŸŠ‘ĄŽyRM&BŽXĻ‘THõŅ<™ź1i`qåź²«.!_#H!‹Wć.ša™=„’MWPŃm€œóšņė•˜pŒeŌØ%]Œ·c®Ė:ĪcgvøŻŽ2øįŲ$o¾ŃaN¹E†Nˆ°R7×ÖŁ®¹Ék[xęM]mgh¬u:;fN›Żź ¶'RęlĻŽƒœõ$'Fe91ł‰ŗi÷QTėūnŌŠ<1 õPČR0JŻĒi„³˜ørč’ēōU«ŻA¦”Ūq_›ĆŅū«¬ÉķČä@ŲćŗzóZšÆ©ķ²4ó©^Ś{wĮF,¢ēžŽŠ§9ÜZU’jō–‰{ō’ūn/ šlėą¬³6ssm}XQ¾Ö1V(£4Ń@0ÜłĄ×µ-LēŅsB}˜Ž†ś ;äęóΘ>Rę*~ažŅ.µHe˜Ŗdn…ó:}¶¢^m¢P“ņ ŚĖwŽZDo\:O’e ś&é>š4ŖGõJ¾#»ä½”Ē37‰‰Ī*Żrc’§-^;g¼¹ÕA¦Œ'Ҭ”^a>Ō0¹‡ģ¾ÅäT•ĶŌ¾¶j»Ź›Ęī>øģ~g7ä»Uuč};E–1ė,ŲA”{:@+ķ¦®·‡¦É½Mkū?#ŖUā endstream endobj 618 0 obj << /Length 2253 /Filter /FlateDecode >> stream xŚÅYYÜ6~Ÿ_!`_Ō€E‹‡®yH|d³šĘYdl ޤī!¬£#J™ńæß*©VO4I°0°0ģ&‹Åb±Īr¢4śęęėŪ›—oyń”UiÅ£Ūc”ńŒUeå„d\–ŃmżgüšĖķ?nRæķ¹ß7·7iÄ#Į+se2eE–Euóė “…Žį2r a—'¼ü¶WŃėńę_š',%Ab²¹£æČ%KKeyĘR‘“ž Õ1‰twūZ•±“+XUü/Ūæ_¬ü’” eœƒ/Y™z—”žĶ8)eÜžvȲXwģvUEÜ““!Ņ æ¢Œ[ā«uW/»ņ>Čē’•ų„+ÉTYŃ oĶi™ü¾ģ‹C¢T­­©‰Ōi”ūé Šx\<ž‘¬āńH˽ylnUU±ŽcūĆvž–ķżÅn€‡łWPE‘³Bł$žŪE‚1{M2ĒžšųLĘŖ¤āÆ^æ÷ŹõšRŪŌ)«HA¼UP¾~ž%Xõ™¬ŹčĮ±ö‘dĀEWżŠ¹kķD–²œ '«š5śż÷o¾‹ķ„]Qņvćä#śJ"”¼i~ŸéĘiĪ”ü<QBņ§7~rnU@éWŸć\™¦ Ä]ŸūŻ«=+'"…ō~3ßÖ4˜Ø÷¬Jć³žt×µ‘§öå !U±Eū¶Ą U„6jŸ–ę½/„NHˆ|GLD®!#!ÕĄC9Ļć7ŗĘĀ{Ok²¢[•ĀŌ%śƒ+ĪÓG»M© ĘUT›ŁŅ€ĢS›¶1µž©„sˆˆ„ņõ73ƒĖŻ"ž_Š¢Æč0č:@Y0Śŗ6™MŽ9‘ļß%ÆüFź308Ÿ;8÷® ó]Õ»øV—i|ėŹLŗ–?7ž}ū³“P땳m·4©Ēž¼PžÅŗ"ƒ 󿁦­Óœ(r-šˆsŠ&XŃ>æÆi› ÉΜrI…W~Õ?Zżāŗ"ŗ¬špß:Ā:ō‘‰öŖ°ķ¤7Ū?ej]Ģäü Ōćč÷ųC5åzŽ3æ·nī­[¬ąb0d†M»&g«Õ8¦­“ėeAŒ%¼•«’…k䙹ˆéķ””XźQU¤$ †xŅŗiūœė0”xÜŃź%Ńpi~p¹MņóŖ‚ŗ"øŁ‘ŠŠN”T–©,°&L½Ė<Ļõ5§ÖHZ­q‡p•ē{0`”U×ĀE^BµĶ®M?žmw4–/M!IPb2žŪ”?'ĒNŸ¾|ūī«oöŌēŠ Ö~§Ėiįjļœ’ńJīē„BÉĢä*žŠX]¤Iqö“8@Ħ `”Yńņ¼÷2Pė$–eqm’¤<Ó'lbBQaß$Ī\.GāV\r!æzoĻÓ¤{š`¹ß®[ˆP@Ā/ä8žƒķ£īĻ]{-gĒ“éS_£ó>ąnVŸĻ{f.«mčA”ŗ;i3čmvc%Œ‹5V¼zö„nƒÖŠŻ‡•¶Qb×Ļ¢‚×YD1ĻSD\1Ą²Ā5RYāOEP ”gIÉEß*x ;QŖŚž…²–a°<\hˆ°ńWļį’ńæ¾Æģ(‹o+ˆįķū#žZIJMų„F1Y’€Œ,u}¼½%Ä׍ēŠiĮ•ŗJ\8×c;g×^ńźv@=S’č āɉÅŅäN»įä{­örÓÖĘk.|µ_|+“4¤Ž ¢=k" -¾¢4¾ pJ™ ƒ'õ ˆm2˜ėqkk|A„ŠŽ`ŲééTĄęžģu”Ś u© 'yčGÅ5fĀłH ćÉ̳ƒOłęUŗrūOMQ„:ģ? ä€<āÖ]?Ś™8Č~(\tø7»ų¤oµ» XK$w­qćä‘ ,4“}w!Õ1üBÓī-muq¤i k¦oi©Y¼0w=bVŚGtķÅ{°ę¾:Ķjd =÷É ~$ $åZ×cŦQÓZ=ÜĒ_w·g$†‘²•ˆ=*³t³”Z”lŠī ņłļćš#>˦Ō)ĶL;Œ?y=įĆ;·š½F`ŠPĆ~“[h"Ÿ’TrķŅ× ŃŒįū…žŸ,?Ģ€č(¾ŠŠßqt]eŹŖ ”(,3ˆŲך ĆĮarˆjŚéæ/XšiśYÓ¢Ć"nޚö÷u³Š{zļ»—KR½p)ųoLįūĮż ĖŹeȄɀ“qjŠ«J>µ„‡Äškk 5€ĘA ƒĮ†Ź³š#‡Ōū@…[\}ž ~åŚē>ķĀxP®Ÿb¾Ü“7Sņ‚\<‹rŸåRj§Zą YežžénĖcE•¹ÆtŁ ;²tļ@ńZ!äćī$x„®×1ŒR>>> /Length 974 /Filter /FlateDecode >> stream xœµW»r1 ķ÷+¶¦XlŁņć ØÉ-ųHqĆ Pšūȶüöffg–I‘Č–ĻQä#Éūk‡ÜEųįß_ß¶/v’ńgÓī·ø·æ|ŚĄH»Kvćæ…³ūs{læČI %h#ų>7Żü·žŪėZšĆģą5.  “Łz&K į’•|ĻmD±¬­»ėuūņa’¹yŠ!9: łĄcūL±žX„“€m‚Šźœōū‡Hx'äė…좀Ž„o²­Āʾē¶4MĢ=rÉ.Sr‹Ņu¹ƒY6ōØĪé(ÆwĀ…œ’Ųµ÷H¬céϔĪßß_’ž¼õ 4½<±\D‰i“vŒęČ“ųˆk eöÖ“;H³tŸÖ›’–žė >°Šg½ĮÖŽ£«8¼ŠTŖŠe4՞[®?šī3øÆÖ/ŲCzæX@PżVŽķ U)"^@$I=7mģį•xæ^ (ųˆ“śYŗ^%Sč± Ā jÕöŖ9¾{f&Q×ģÜ“ž ö•īEB8 ¤TĄ%Ž&O6\*ļźz¶€”āćŚnŗ6¤›½CŗēhĪ™QK÷.c(‚»1Ƥ7ߞ–˜FCŗ\ōĮ3ĖÜŗčSo2č>ģ,W²@¼įS-ĒYŽ”Lˆ!¢ mĮȂSŽóJĻśöķ —4,<šK )©õ”kūPĀ%›»Ś(5ŁR`ōēģńė¶9Ē©‘×¾1‡4BŽ!XüsM”AĒ7C^É0x ³¼”’ kA°ÅåS|OlŠCF;VW|žŪ¦ILĮ¬ ½SētazŻwMµń¾RÉd‰Ęʐõ[ś_]­žyÅP*®AG°¶źµ f›ų£¶jńvtQ¬7ā]jø>“‘ž™± 긚žg®°ÉĀņś„#Q†šV65²ąoM vIŖ6Ž_ oü­Jƒéįf:ź‰dėåHŗģp—rźø"ņŻA“„ā{bóW'©Gīsš§×˜Ó)˜%`¦÷a˜ŸŃ…œŽwń«1ŽĶĄōī+ŚĢYeåZ~ńņķōK»ØAńs·ĆŌjW‰#źgʤ/PødLŸ·B^YZ@-šżŗ6@©ŪFŚ@[:³m±-µ»v×ųєD ŗēĄĢ7ŅiŁVnOæĻ”SŻØŖ‡*¶ņ Ģ¾g¶6ķ˜ķĻsŚ>¦`–€…Õ9]Čép×tšn+×HÕfĪ*+—A¾½\3³ĶjąėńßQ«­b"šGʤÆ\µ#c콐Æ1Šį%'ą endstream endobj 625 0 obj << /Length 1924 /Filter /FlateDecode >> stream xŚĶÉRÜFōĪW(ĪEc{š^Õ­RElH9åŲ ¦*Ģ”ŃhU„’Ę@¾>Æ ičĮų‹–ī×oßśįč"ĀŃ/;?ŸģģŒRœ’čd„„„G‰bˆ0,¢ÓXŠŁŁÉÆ»G\! •ˆ3ˆ,œĶ Ę8>™)ü~ųžšÓ§Łœ1ĶØŠ?Ļ!ńŸöypüÖm½}wttx|ųį䯁9vņīć·ńĪæŽ~|?cČļ`Ļō&Ēóž‘9H%±ӭrĄ ŅųJg†ž_3‘ÄśIŒfsAÓdY—em€nŠźĀ-µėó6Ļŗ¢®Z·°ČŪ¬)ĪgsóĒm½n2ū­āĢØLĀ·}YŪS‹ā3&<Ó#¤M~½.š|įŽvµ‘dœ†O ė6wŖpä;}eńē„•¦mŻž²nnŒŗYø…ž®?_/Żq§RäLJdDJ… F•ŲźcÆC‰ TÄæ*F@„åS‘žųųŌ‹ßo 54ś‰„=MŌ”ŸwF"š73PL±Č·jń»e+GŻ,ŠJw¹ßmf$ÖU R_Z•ŗåeS_ŗSotÓå­QPa!ż±Ś½Ū«UŽ™.š•£Pź&H² ę¢ųbŌWN­ēęēnb*`g]Y'rŚ x?X z÷ńsŅŲF$=Ä‚Ń1D‚pBzˆcCE„[‰”L#6ö|3Ļ £‘H&¬ö]ˆȟņÆQSjS±8’ŒMؽi(AI2HB¤”=Ą~PÉ @’<Ŗc…ė>cCh8¢|°ŌmK‚(#4äµó€›¢[…0Ī dŚDBÖ¢)bĄāDȱJbxē%L:(bĄXLzÕė#y aģH½ęÆmr=<ٹŽ1~LF„ƒęÓ4œ"šģrēō G ؃ €T›D7ņ2)ų§‚Ļ2ś“ó‡«'čq˜T‘©Ēb:2$…Æ:“ŗ)E•œ@@½¢ÜA½ ‡¶Mn2ĄæĘŻĘ€|8ż_U ū§„@q°ł‹$2čPŒ" XJ«÷ؤ÷(HަĄd®BŽÅD,TpŁžŻĻ˜:)Āņ@:%[a…AžąxP¦čćŽ7ąś?8Ž7°;Żfw6ę`?„‚>QéÄą,h>ėED‚{ØĮzAK‘āįČŠĻō8ö|Ūšœ”>Aæ)sLż‰Ź$Ūjc3Ea[m Š^՜„D Pš¼+kÓöaף˜w~«/ÆŹz[č…}o ĖYŻ4yėū›jįŗ7XzV sß(Āoį1·+×{…ėʃ&žÜ›•®.rĪōXöŻóąi›ųIŲū;W¦TlF=KÕõœAÆzõ# ŠJQh/)$ GPąˆ&Qˆ‡£gÆD6&5ŗ(Į<7’“ź’¾Ø²rŻ÷¹åŠ%ĶĄdŠS!®ˆ¢n»&ח!\LŁ”ź! ᚧąe©tŻ©čo ĪŅŠTś@gžöŠv‹½>½ĄÅ §>Ō‹Ŗó×]ŲPłė¤UŲępĻŃ2Ȥ用iæ¼Ø×ē„ļ‹oOŁŁkĒĻ|ZZļkÜƐēĒÅ>ŽsĖE°m$HRłtõ3ģÕ«ĀŹ<—2MāŻ]­Š®ŠeńwŠŌDĒ”odJĀŁĒwfEPg”A”JŅĄÉ‰w3„ģE 9"’M5twŠĻ“ū޶×Mg4u /ĶćÕķ)1_Ä|Ń3ø½¼5W¢Sų¢gFڽŠÕęLė>żB0›ó×ęöµ”A»kČ=‚ŸnÅ?šGĪv Ž +½G’Õė.dŹl‹Ū›?hŠQ‚‡kĮ‹;²’"|ĻFeMb Śś<¦œ‚ś(”a”ćRD=C²Cž8dp˜>Cś8Ģ«Eé|2Fz•I5y·n*'Ž %»!ī&7’‡« ¦v‰SŌAƒCsūōBˆ·Ļó(¦ o‰ĄLžܗp;łJ8ń”ė†Y’Ÿdh×:äe>3ÉŠœi\įū7ØH' ź5UŗŽ”åąv`¢;×IčĘ/Uy$usēÖ-Gf]_]•nÅūI‹Łļ̐gĀ«?u?ć÷óÄ)©ÉlĻšnĒā]å” ¶92TĄŠż5Ś-Œfˆ&FR߬r«vՏˆæ]˜Õ8ü§vēfLMk'\fĮvgŠ>`Śģiæ—ßvyuÄNž<Ķ€,m¦ķąkbK?äÉʏq`ö k2¤=Å-†§Nķ¬ą9ńŗÆ-Ę(˜{ĖĀʆ š„©Yaa`Ķ)…N×^i¤ódś¶Ķž `FC¢«\ŪA¤ł6cŪŅĶA!é¤@@ł—|Č7zQ—ZÆŠā”)c°ÖŁF»Ę)ŒV@ŖøGėż‹ć“—$KŻuN’ŌtōėrᾇQ¶ł¹jņeŽŲI“…-ł¢sļ…›iē­ū­jæ>Ņēˆč`3OK·€:” ‰žb×Ļ> endstream endobj 632 0 obj << /Length 2206 /Filter /FlateDecode >> stream xڵYK“ܶ¾ļÆ`U.œ²‡āIåäȒ“”bŁŃųdūĄ%1D|L@Ņ#å×§Żąc–vmT•ĖN£ńźē× nč}šBﻇæœ^¼¹…A‘w:{…ŠHx2O‚(ɽSķżģgAt8Faś’čĒ8÷k}ž¬»‡c’$žxQD¼ļ'SYZųÆpaęןšėéļ/ŽDéśGA˜E ‚=>MpŃCČByG7LŅ —)­:O]5ź¾š‚Nž%ŒD§jĘ¾īˆŻƒ4†XUÖDG>®mŌŽB’ÆŖ«Ō×ncÕL5*cÅZŠXA–dNвī§ĒF—=„Ņ4ˆdüükčÕ0 f ’"÷nviė%Aœ%@5Žū‡ {·7F €oŪ³Ņ8£{O‡ņ‡×o_ææ‹;QG¹Kš€°å{Ž8/åˆTčė‘8ÖĪ8nÉa½9|yGOódŻ9nŸ³bBC–(šćr°Š=`RģńåŒR›ōČŹ­ klP`"½C@æéšZ,ÕfÉ0—MĄÜ†,G Ā —ŃHß4āĪ.įƒiĄKQ®H ž1Z¹į›Ē&ܜ@¹ z:†N 7ȁŒ­tĄ°ŅĮļ,ę¼.,ź1²Įµ3©_ŽšĪ UŁTSSŗŖ8F>§—é ޳J+K×S„,¦ÅsB!]YiąŅf Ä{šé碦LӃwywļŹF9ö†°6‚lVʆ8NČJY«›ŅlO¤ś€Ä½7‘¹±2Š6+ųI]ÄԊwEŠó„eL«j]Ž|–ŲŗĻ]ŒĘL‡j?«ÅiŖšÖ^GrRbN蛆ŅB:­ńza’" ņ¼øk/ö’”PFK’[ŸŠ8ŠtėÓÜČæ]ś†É;XF–+Œe£GēśŠ–ėbM® g¤Żė@ā8ČdņĢDĪ-„Ėq3z„@ĒÄ’ŌØ‘„×]£»™ępŽeÄq¾ÕŠ Ø*28ĆõŸvXOL`ąįƙ:$¤?ꖧʁĶTXc)ĄˆŹøEŒ‚ܰ¬;m|āę3ΐĢū¢ŲچÄCøSw‘鄍i½Ū1°—ā\ś„˜ķ .œČ±-Į8/tµŻö½qįæÕmF5Ÿ±¦ ŽEŹŠå™‹Üø­©ÆY—¬U”ęėua°–“VērjF¾žŻdöTSŸ|€+ę& ZoN%¤HH$¶±Œ¬U?†ĆĖŅz3ĒõŒwČZB,¶(įä·S›ćfu€žŪe 9@Į¬؟Ā»''÷`eł%LĆž ‘¦’cĮĘ•"ė8$¾ūž'Z[b[Rż7FƆּśź+ā;æīT+¹jce†O‘l~Š +÷;Ū÷ Uõ6š°ĀT¶w¼IĄiŌķĆšlś–(Bk ¬Į4Jśįnękd~‡āĄø”<£Ż®iRŖŲ¤(ļφݧ<¼ā4_phlö@Š ČU›$cAE½° ü!ʼn>Ćc–(NóaŠąR+Žd‹7ürT ‰fŲĮł8‚>GDĻĮł"HÄ,嶀¤ĘåX§ ¬>6ʉmÜsŽJļ*žÓę‰;õD¬Żōróń&N6]Ŗ )ƒ‚SŽ7ˆ”ģnÓV1"bß®{ö„ģ"t®ć¹±”÷t>~¹ę¾ƒN (Å œR)w̐ÄwB ¼|é|Į,;ųóžgī@+‚g¼6§ķu÷äć"4Dr˜»BN”ĀwæüdCib"ˆƒgĘvTˆŻŲ~ ŌĄo‚$•Å֐T Њµ¶/~£–÷Šš[U®‚é<*FÕŗgīśŻp Įū‘÷ų‚š_ķŲĪņ9]Ä ÖģųÓāÓó"]†šī”6hD!š»‹éߏŗÕiÓųnU%\ Ś~`ÖŪfžĄŠŪ¦)N©•ĘY]VŻ’ł#MŚO*„+ °ˆ :PĘ„śĄÆ§Ź]ÜÓÆ+ĆTqń8¹Sį~āåKæŌ{Ük1čĆA˜½Ž†”<«adĒ,āŗ/…§ ?µ{ `ų eö2!ŹCȄų9©²ČÖå¬,ćü0uč.W螈„]€·ŖŁ ē ?tžaPĒPš£Eõµķ0 <ˆęø¶†gĆt‘ ÓüĀžÓśkC²ĘN16~ü=£žŸŚÉ+Į”ć’ą -&}Ō¼g€mj¢—>ÓąśdĪąU„}$c3Nß{©Ė©“_ؙ&óøK /Õ§‘XF]@“¹‹ž_ ķ‹‚ą§įžæbÕZ#{Ó¹=‰‹×§‡’ZÖFü endstream endobj 637 0 obj << /Length 1718 /Filter /FlateDecode >> stream xŚ­]oŪ6š=æĀĆ^d fH‘”äµ}š–xČP“Cėmė00c „L’›øæ~wóŃjÄGæžż¼8»˜ =œMłTŒ·£©bS”FI&™Łh‘žŽ“’³ųķb®²CL§LI„R:žĪy“g2šż~õśźżūńDJĶĒq½}7BD¹ßŁ»K:ŗ¼žĻÆŽ]½Y\ĻšŚāśķ:øöߣåŪד_ż÷B?ž^̵8”KXz4‘ŠI l?nŪ¢ZÅŹll{g–·*2yW¾ ē+‚&B2­¦D‚1FXĒĢa™¼ŽŽ”–8u›» å‰!F“x 2&tu6ž(GQY@@DĶXD;ŹhYZÓŠ¹¹»kj³D¬5Žݚκµ%PW‹‰\~k™ ļtfåqź[ŗ“­–5žćĘé ĻMYQ£u‘ē¶¢ÓÖ.ŪµN'•š4LXÖÕ.t±ģZŅöĘ —š¦hķŽĀ|)N%X3•z·›Żv_­T”[ £*ö$,čiMa@ė-źŖÜy,dv?54\+*ŠĒŖ„­i<•ŅŽvžJķÖlč®%Ły°irlj‡’ū+ƒ¾ĮYRē,t~…BPö$D“'k<õ½ĆĄScR§Tō÷ŗüédBm4 ŲY6rS ×:t§‰&NBŠˆ§Ń1p‹)®Žv“”ÜgŖ„t€ta'åų>'@+*IŬ&.Ī>Ć.KYš~'»–(;»ynq" źćŒ|+L‰G*Ż»€pĶćsüˆsbņ#LC5ąąŻ‰‚}ĄBƾ`SµņJܖ9nu•Ńt–ŽŗucżŅĖŌ‡˜»jŹd&zµķ*&“: (Ö¹‹s]cx¶ŁøXä‹:H‘µGõ4hŹśĻ$ySf,†kXėŗÄ¾Ć J‚gJVrĒ'Ģ øf<‰ŸĮš([z( $¦¾##`«H®ūµ…Øš‰J HTR‹ 4ÆŠ„‘®č»a„„Ū¾}ōūŽ+÷™ šęYōoPXxōu ¾lČ÷‰<ŌĮ+tĻ I>°Įi1°FŠģYB0,gŸMŽP-$Ō"xf¬™ ߓ¾ßūŠīŽKuŖ.†*°Y^4vŁ•»ÆKģ0&aįʤ$˜Ų_ÅC>„Ī ŗūÜ8§æeš{ Šžģ44$>¤yĄ7MģōģčŌ'³$MZ: Ń7Ō_Ѧ¾é ŠøD’!g’uĶõŽ6]±éioi\vŠž”ķ}.Ćī G–FwnjH£%uö¹éGa'LY‘ś²s®žøYŠ8ų/ˆ ē«Bćō„kjč+žĘąīłž> stream xŚ­XKsŪ6¾ūWpŚ ÕT0^ɤéLė8dŚōaµ×Z¤lN%Rį#¶ū뻋)R“¦éĮ&,»ß¾Åƒ›€?œ|æ:9}©“@p–ņT«Mj– ˜D1”’`•—aĢÄb)8ēįOõb)“0/7eu³X*„Āī¶ ÅEŻ7k»ÖįĘa^,®VÆO_Šhz‡–‚ńX€–}!Ń wB ĻóÕÉŪ$āŊʕ Ö»“Ė+äpö:ąL„Ipg)wV‚Į+¶ĮÅÉÆSBJ¦,1źC,8Å,‹cĮ,j‘˜j$@£DŖĄ(Å4HÆ/Ėj½ķ$ŸA Y¤£oˆdĪ3a:)Źŗķš"Ūłx©„”ßśx-SĮ (“ īM‰²oGVŁ®h÷Ł`½¶ĖŸ!ą Vd}ź.¶ģ‹×$eÕŃ.+«?yÄįO8)ÕT„ˆ3\9)7^)UQ–Ģ„œIr©®¾&y€å\"—-65źÕŠ(‘Q‡åsžŒ¶KŽFLqüøQ”cöäIi•^ĘqjĀÓSŚ}U•]™mĖæ½ bXźÕ½£Ę='q˜T`ĮŒr~WzA“*e2EŌ ńI¤Œ1ņL”™ŸŁģž’_±¶č¾{Hż’²m_ V5yv¤J^4廬+ß9+ŌĀÓyĢ]ŁŻŅŖ &wZ;Æčjoʐ S ź\{°¼W{CTĀļ2 C)vŚ+"}éžē.”¼m:T5’ ’=¹æøø’W ~u5&¼„•¼"œoMń>˜1ĪŗĢz=\_>vņ;Å{>ĄXśćēĄłt”ŽĻ™Lķŗ®ūĪ·„‹Ä!Ūx=[rføh¾xĻæšZī“Y”-ŲMŃĶÜl’$fģc1 °%)”6$éRd"ŅO[ĢŦ{0®–ZG!`)# ‰õ(eżvČäi~/f®įÕŠ$’E;OxĢ4‰apł§\RTłv€ rö3˜š¢ė›ŠTćĻ|5cĢ^ÓĻnŽÆų‘4Š^D’”·zÆĆCĘčOčšfmټŃ “®Ļī¹Üō²¼éēMńSr¦óūl·jܦvµ«Ė\2ŻmK[ķÓ@¶Ķš‘öĪÆÉ]v rįmi”Ł6ó¶@2²hŹāŲ ø²ż4t8ļJb&·ņ$Śņ†O©˜W^”]% ģ„•r"›=Ŗ«ķŌ•ŪŹĖī+ėŠöAń]Q”~ßf--ŗš(® wHZätąk|^Ŗ §K„9ź­|JAgquw[@ģČčģF‹mīŚxćzšCJŪū®Yjš_ ė™ŸO“ĒKy–īYŠ®ånÆ¢'MA<«ĮÜ3X ާØ#]MĻµķ’Ž-„) <Ūķū.CCøÉ'‘*Š@vSŅē蒕·XÄ płAŻ–čŃ£ż[×½ØŚīŌ„×hźŸŌmōŪĪĶ:\£0·YuS“cļa ;į0YŒ3¢BFd°ĖmM^“ė¦t®åāŖ¬†a³BŃźMŽ*B’WsĢr0H×¶\”»Ņ†€ęŚĀW»å<ŗqkĶ‡ČŽ)²qc“#”:`ÉZ^FjęfÉĄLOĻK'@ߎąŚĪ®…“:ŲĄĶaˆ½'Ą““Ø3źcSZŒ<Øłņ³†4l¦ČŻČJJ’Œvģw ĢbŒm,źI¾Äś mvKé`°é mśĮz>ć(¾e•{ęy‰n‘mé}ßū†_ƒ‰źĘĮ k|<ķģ²uc#4²3qīƒ×ÄŠļš¾łż§ļĻ{_ÉaX’+€<‰ÅēMĮŠ\ĒŚ²2ĄŹŽūāÕoēg«W?æńĀk`&=ø#V<°šØŁeŁ,bO̐„ä¾Ü!„ $éwų’zČģöĄŽ"šķ„ÓŖs[d¹õ'ø…Ś:[a¦sĻÖ=o*ŪkPs›*°ÖQ—Zc¹+ŪĀSāIõf—U”m©B•]?–^[å #ę{æÜŽåĪżģ9-iśø¤ :}7UŅ£*īÜĀW“WōJ;Œ§ļ׆Aõ-tIpŸ4qŲWPLĖ&C[`Ł’Öć—gtZŚŖhZ|3(nnśŹµ€ųöh”:bF¦-ŗ7żīEŁx½YZĻē‡,€¬mE¬›æč-kj–$”"»·AōŻ`ē\=WvŸ5ų3“²Q c’šš Ž)cĉc¦ćtŌ ĖŠˆF$('»޲Ŗ;÷±KŽ“Mqˆē>³įšĶņ›˜Ķ^ŻŌ»Ē~䞢»Ķ endstream endobj 649 0 obj << /Length 1818 /Filter /FlateDecode >> stream xŚÅXKsÜ6 ¾ūWh¦mź„IФ¤<›Ųī8“:­½mIņJöŖŃJޱżļ ”ö9qāN{‘(H<>€āޕǽ_ö^Ī÷Ž…ög1…7æōbÅb”<L‘7O½w¾6“ó×Ē*Śä2d*P Č2…“©ąœūóIų³ßŽŽŸO¦AųĒłoĻ&B’/ūœŅŌįÉńńŃŁŃéüd†Ėę'oOiāĽg‡oßL_”ś=ī6½»ćiæ‘i Yd4m§]f A •,źŠöÆÅę:-X˜~ū§üśņčĢ*:šļ}Ś0Į=Xƒ!„gč„·Xķ½ūĄ½ę^{œqäŻXĪ•00*¼ó½ßÉ“Ū ElXV²Z½‡'gGÆšÜē“Ēķ³™i5˜ų¢kéL—uµ¢Ńp̤¾źVY9‘”˱S iX½Č&kO»Õa^iW1“Bö¬l2UqäĻHś¢Ŗė¬¹žLĮ·U™ęåJ(ĶøˆĄ+l=vZŖ®^däŃEeפöSł7UW¤żl‰„6ÉKšo'Ā_:ŽĖŖ(*œ¾Au–æČˬyŗė8Ł9y Y „7•ŠiķĢ’Sš½ēB•ns÷EA§įJz†Ē,€(;£(Š/¢ĄīCš1L£˜ń0޶-clĢĻ|›+IŪāéÓĮŪļ¹ęāŁØž-SEN«­E䓤„®!gDx˼!āeW.ڼ*‰ž’˳†>ĖŹ-] /—Iy•ŃÄ Ž°U}Gßuö©Ėė̆5hu²[§:ōII¤ śnwuÕ]-‹;Ž;VH³6«W2.Ś.Pīšd̐!ø+V߂ ) SMģA¶nźGEˆ”œElZ”‚ יś³@×>ĮYĖu+|^j:ś8:Dœń’“ź.ŠlL -7bTĒ(’e¾‹˜iĆ«juŌhui“ßVīy-ń›ER$5I“Ń‚µµ”…Ié_­©¦— Į±užy¢Ÿ“šĘcъ.kö1Db?gā˜”k!Äl°=$h I¾96° ΌF¹5ķgÜŖ )ˆ†3ū'eÓf ʘ‘hhĖO@W¤lABŽ.i„ŌŪy'ĄŠf}_q€{¾­c&ņNӞ[ [D„”¶Ł@ ¶>ZA"¦xōķ=ɘEbąkČø е w¬›Ō»†RSłIC”¼(ŗ¦­“v,g©śń‹Ź üģ6Y]ŁĆjC1£õ•ˆ*( ڃī€Å:z\ęG’č²PVØ£’¬6 ­ōŪ}2߯³QŻą|rŻÖ/Źģ†ųq"§°AōīŽ:Ŗ8 RX`ÄćźØŽ4Vō”»¶śpOe3Š…”ł3݊rĖ(ŗ§3€ŖŁ!†ßŸųĄÄCģūÜ[błģ ~‡}2»UxAߌļȁņ,Ms„½¤€b)Æl* ƒ„P#+²¦AĀ)~/ŚŖ&–KXd !…SāY­ū;üDųĆ·käķ² ņ*Čj'“µykё¦mLYQY»tŅ/*üŅ®R µ!x |“6 hš@+‚ üó|•Ū:d—W;bś"…c,Rūc 8t×\>ÆÕ×xMņņ¹ķż]ƒĶ”śķ“ģ_E“k|/aÓcų½į->W šÜum*¤ĀµÉ“fMn‹øn †(éū4§ÉvūrĶ}4Żõu‘÷’l§ļōŒ@Īp±!É5ÄÖc(`Cw@%#‡īņūж"‘eˆøńøĪ_Bc”¤°²tž’čžÆ€Ņ°øžøõ¾ ¤šĘFh’ą€öĢ4hūūž± P†öÅq|FQCkyoŻŚŹ™‘ńƜPĻ„ŽĮ±äŪ½Ó Ż„šóē£żg†’¾†ŻšdL “BŠØŗæ¬L 0®Ōp['ć*° čŖ“"+BIDČģ^ߍWTø Ilč6k˼—_gMW“CSvļ€­›’Ą„ÉM7Ŧ?@āŠ`čŻmѵ‰¶aGKź KGvļćüŖ«]˜Eī\”'“pˆ6ŌtׯI!µ½Ėäm1t¼ÉĖ•ģ ƒóžĄ!®„·ĄG¦4 žf—Ō„k¼h,ŖŚeōĮ¤CĖõƟƒyĆT˜ģX‚KĒø“M5.­śŸ8+„ŃkT k±Ņś &ȑõük—į?§Ņés|\’Į‚ švņwĖXŲ²`ģĶ£°>…‚CÅĖąĻØņčå³E×&cXŖ”W™¹%Ee­,I³³¦o8ø„Ū˜5ē®J  Ņ?  €µ‹n‚^J{Āh*ń¤Ž81 endstream endobj 654 0 obj << /Length 1584 /Filter /FlateDecode >> stream xŚŻXŻSŪF÷_”I_ģļS§#„3 q:ĪPŅ'/ÄĀ–±ØlI.Šæ¾{2–9H t:ÓšétŚżķīo÷nē~ķ¼uśļyŒV$Ķő"<ˆb†‹ƒŃ48ķJD{!Įw‹Å*˳åy/dŒu“åŌ޲ån–wėyjgOŠu9qćâҸ;M{ćчž{"¶•rJ–0}BźEģP6æƒQē²£į€lpŠaFƒÉ¢s:ĘĮŽ}0b*®ĢŹEĄAšˆƒ<8é|Ś!!, X"õ p®@s"v7 ²m”a„‚ˆ1ı°vż”-'łŗqÅ-p$øh<š³]Ņ–#oVdEU—i²šÉb1Š"٬üÅ'+TEJ!a WŁ•ėjŁe²H«Ub£Ē»U=}­Å€ĢJc™µhš~Ƅ/]ß¼ūxthb׊ÅąO””(R"zČÕ QÉ6±ņ8–b†"ø–%…“0F½”’>8œœ˜”TH0Ö6oģń—ߎ>ūŠB¬!ddp,Ÿ†ōY»tz7ü<8 ?ŸX ĢBŽ䀦üŒŒI¦Åś,OŃÜ+Œ!IæG™Čx¼°īAR߬Ln§ÓtęźĀ“Ī÷÷ĀfŹh NźÄ¤(Š\øG‡–××zLż‚õē ¹æA‡ŪB¶ĶžėŚg ŠČķ^ć 4Å(Ā޾ø!/¼‡“G‹Ņ±@ēiżU“āŸīT¤–xI¶łöZÆ5ˆśaĆõ8Ų¤ Ūź1U€sŃu˜ ŪźN}|Ę8\$“ā,K–Vū¾Õķ51Ņ'+łįérš7ūÓūȶ’‡ŖżŸÕFćVØÖĻLyKŃĢPtS_oóė⾋#8…šH° S"8Ł(ńo~ĆÉ;{“ŠT9†Š‡·‚mheZÆK—>Ų/™pŲž™g—iķ…h‚åļ8ļō½Z„|ų|øÓ÷¶šÕvūM ¦”Rųį ×S½ĻĪׄ«Y±+ƒėd±jŽm³Ā%EøóžV•śSoÕé¤n–ĄŚ+Ć®Ņ],¶Æī4Ō¦=eŠ/… ›¬µ½FsƐœUE¾®]oŗJź¹Ņ,˜˜kЦwM/×é²¹‡ØęÅ:w Ī,l÷"[dyRŗ+ŒbGā¬ČsS®6שuƾׂ]NiĪ}ŹˆsG½=+;öēÅ"ķÆ«“Ō}wNĒłä.}&CūL˜n*ŸŌ0Ģ£1ˆ‚Ž\ŗÖą,©Ņ~ÓpZdēai]&ŹwĄqą>zl/³6¶j’ä‰)Äh²ZłīBF)“;ŹśX:'ęī@ i¹]2(¢|S›Ć”O љÖ,)VuVč"@d·Nó\óœDŽ0ēWڧ«yZŗ†I°²J“r¢³bnŸmö药‡‡öķ×§¦Ą ¬²ó’©©L""v ŠDļłTQCs;żP,²ŗN§śhœnA”§¬ęŹĪ&„ūʲ¢9x7_g:ńĢŗ3xUéWE#“šzަ¦^«­5‚fö¹1ÖĢU’FJäł­2Ļa7sõ8±üüF?Ļ‹³$w{Ķ4+Mõ¹éż‹ī»Müźéś endstream endobj 658 0 obj << /Length 2470 /Filter /FlateDecode >> stream xڵÉvÜĘńĪÆ˜ē&ņĄh4Š č½h‰Ģcž‡œŲĖpŠĆA„…F¤”ü|Ŗŗ 0„h1V.ƒīź­öm‚ÕĶ*XżķäĒķÉē"^‰ĄOƒT¬¶ūUł©ˆV*‘¾Éj›Æ~õādżŪöļ?œGÉt§µÉ.r›ōz#‚ š¶ėDz§?½9»ŗZo¤”Žł:L¼÷—k!„÷‹ū=½|MKÆ/ĪĻĻ.ĻŽm/NńŲöāż;Zøąļéė÷o6Æšł“€‘>Ęx#`„zµ‘±ŸØ˜Š¹*ź;åu7Š^—Ż®7”öLi¬%оiャĶióŻ7“¶hj4{ś2&īTa VT·„©L7t&ēŵšj~šĄ(L–›–¹˜N±—JņÉĄÅ,ośėŅųŚ{D©L€RÉŅį:‚ȤĀŪ5ˆMghVŌeQcB°Ī޹CQłżz1£ KĶõz+ļ_f׹C "`Mņ†¾uĆ«µīģxéšxL@ā£{‹7e7YQ[>›ÕČģĻH*Šļˆbé™Oiė¬Ä«‚‘õ8ŽĮ+p_nhŚ“ōučļ-‹ė6k?ƓČóŹ0ņ¶Ó¹ło‘p „åNĀēS† ¤£¶ĖZ'QœdDRƒŲē\ś2Ÿb?ˆäŚįhH…‘uaŽ0æ/ąUEĢs훲lšāū¢¾!H³ŹźüåLõL sSŒżPƒ^€Ij©‰›/čŖMĆĻĶŌļ=Ūžü~"ąŹ`%Vaū‘HW±Nż IV»źä×߂U‹@ /AIļŻÖj%į5 £ruuņņ"s„Ā4ńUĀ]‰Ÿ$Ģ»ĖŹ ©l|€ł·ÄŖe”¤Š|)Ō7AI*ķĒIś%”üfŃāBśją¬tjė”-M½ĮōĮŒœ®¤‰g›¾ŻńņØ«–ī>šT~"F’IŅł"+B•ųˆc,ŃN:ZųQ$Ż]B$X±[b`«1ś©:_¢) üDŹÆ$IŖšNæ IŲ£t8'é|XóIɔ¤¢,{ŪµYēleŁ rī­!ą ŚżFŠZŒ˜2ö~*Mf9j!‹™%6śQäĀG@ė8{Ņ ¶oū²üĢ©XC`Vbrf!śļ³Ŗ(‹ĮB¦ń’¢5įA¶©īu53¶2ž3¶¾…c/rČPĪ|±ņ!֐—%aq[?™xŅp0ŒÓüĪ Ęå4ČĒ? ö1‹ŁĪ§mBų²*žēé焯C=<÷j¢NčVXĶb>rQļ@v–›R.U컌ÄŖxzÜĶIu-MĢ#ń˜ó~Š UVŌ4Ź,ē»ĪdX¹o öØÓ“Ó\…d—Šć'ź"Ą wbŖNęÖe§°p(nXE„ĒŚĆ„µče„WįŠS{§f¦5G¾Õ|ā³;Jķ,ų1ŖH%ż'„½aém„öC™>_Žg >Ć4aR=&ŠčHĶĒŲc&¢‹Ąg5ū“(T`ɶ/;ZŲ·MEP'M’lœŗZĀ=8Ū5«Žå45–ι’įT2ø«‚ |_@V@`¼ Į ·ŃK:ępŅ’<‘$ĻÉU••å “IqŠ˜€•©0žŗqk~ļ!"»”„]š{®t~dą†Ó‘BēäÜ_£ĄCmv¬…1›”]£…ń6¶™ŠŠŸŒ1ć»I 0سŠGXŲc€V”÷†ŁÜ. 軾n!€z|„Ŗ”,ĖI&…u”‹xųÓpŲs•›3(=2ØMKĢ,ģn‡żäsÜhą.¼s ¹AóĀ~¤‘…€¹ØS.H‚ę6#>ƒĢ8Ž«™ĢÆćcübõ(ģĒjZX€| Źb˜˜Ofד[‰ÉUā7c @DKhˆHjW02_å„ęQ²±¦1ē™Qīõ4M€\ä’䮒¬g–…WÆE‡·„4¼Ć5dkĢ9±Ņ’X£hŚU@š‹č  „]“[:ĮĄō†Wkšīįī¾’|ŒŪ=÷[„ć•r;‘&/° × KŠÉ·<+žmhĒżĮ°­õąqłX3ÕąA|š¼š&x€‚.YR©E[·×ń€}įIJ•\°lŲĮķ©ŠÜŅ”½Ėš&¹±¶ø. -YnćĮjŃ1ˆN>”?dø°HĢU’Œ Y £+ŠŃ…IŒiÆķ ØĒʇ6Q:oAAQģi7„/0øÅd¢¹i³ŠędĻ”NĮĮķ7mUŌ5’`Ž©lÓ;•¤cmŪ“  ©a†¾»w¶gĖGĻ:X?. š‚c҈J&ēr4Š'ģåfń¶©ikV5.¬K1T<“sktž2qęō”’~!“ļ ęnDū"ĖČ·K•Ö¤®f9+Ė]‡Ó;Īę\»uHŠŚ¦æ9”ŒVf»k®·›?] @Z żĄ•ō“¼ąCČgøÉ«I…?~/—ų¢ ņH£§ŁłI06Užś!ˆ§}…æĢ! Ł/Uū nŠéQy±#å»öYxI0Ī3%®Öęœ9¾ dt…€dz/5#ńu’q4Eū©ŽĘ TgĀWRÓ¶Ū§eJģej§²:Ö’“ ʀ:4dBńGrLü@Čo#Gxģ‹rTĆgÉń/ųÜb2ńĆhÄźŻ?ßžxvłøW”ķ'«Tū‰TŖSA­@ WŅ|}qyö ’ü¹Z"F E8`ųB8µÜˆ4YÖ' ƇĪÖõI’>©‰>=žæEĒ~Šm-šL*ąęƒĆŠxąn„-qŪÕā›± ±gO4uS/Ź Ö`-ń×ūźc~t „ļŲ>Äü„-²kśÆ;‚vp™v׬_łąS‡^™c|-ļō¼‹|­€Ę‡]žā? d’ŸĀ endstream endobj 663 0 obj << /Length 2582 /Filter /FlateDecode >> stream xŚYIÜ6¾÷ÆØĆŌ@J-JŌ8ŽĢ A²¢ŻĆ.ŚżpóŻżĶŻ[•īT–Q©v÷§]ŖŅ°,Ņ]V$”JŠŻ}µū5HĖŪßļ’yÉ0’{÷Vg˱ū¤Pa§ŠHĆ"KyšWcÆ×S*ĢćŗH÷u{ytµ½Ż'I ībq,tīU¦ŗd„Wżķ>.ć ŗUƒ¶ ŽcßŪ „ iøw8[“–arŸ•.æž<T™Ģ^Ņ *ķU ’?86§,ūRcÉ »H“ °  Ö‘ž˜¬9ąI w'’µ,¤sžÜ 8¢µ[::­ }³ūQŠ`Żgͱ£˜+­ē]ę7ˆ1æ7]Ih l\c:g)ĊCŒå×āuąėdŽƒŠĮf:rNŌ^M8'L>% )xŌ–uÉÓ[„øčĢ…sČI^Vī·HeG²'„g‹GĆ0ėN/Ėü†‘Ćz†ĮōxLe%ä™ Ī8{–ĒĮ;LeCžÜŃŌ<Ѓ/}œÉć’åŸVŽžÜRD`Ü«ÄĒ=“ź³ æ%iҦ٬ŒQa„ qÄ„ Ū1 ĮϦYMĄö1ķ*:2Ƀ··ä5YrJM5„&“pę-xź$ųśŽ¦ZϱÖrĘrøƒXŖGĆ_«Ļ(Q³}XĘG…9VVe`YöŠŪŽū«P*E¾S:Lt ¤*ŒódN UĘg(Ą‘*Nƒ4P1źZ*m*;†ĘT}Óą™UX¦)Ķ †I"Ą ”WEØdŚlCEĘOĮ 0ĻEķŸÜ”3PP7ŠLgaš dqā!ī?—5DĄ‹dtµ`h’ŅöĀmB ±§÷*ćåYż§ĒŅN÷²‚Ž$īćč¢[ųż@™4ņ„Ž&C:¤gų±,Wą'a¤üźB\˜yr#pĪ`Ļ?óįsæü†ŻWUxō¦h@„a”]­śę{ŁAq™ Ćā–‘”ø ° Į>Jē©k/^ĶrćBˆCŽŲ]¹Īb¢‰›×öˆ‹v6ķ÷Ū»÷æüü꯫ūļ€ųŌĒ}źPż}ó ‰Kū‘ĻŽķ1¼?R+ą9Ndˆķ§;KĢX†ķHø š„1īVsÜBG-qKĻn8³JeO†kˆŪGbēÜ3”Ńz;%S-”’Ĥyü„Æģ7PD{LT÷æn¹›}āi‹¬C;ńÄō¾č«£'Ó“Æžö#ųŠżD±’ęžę捂īh§vŗć’~ĮĮĒĖĶÆæG» :į“aR»gR½ģ’P'ČwėŻū›ńMn½°.Ó0ˆĮ¹ŅLL„¶qfIv•¤eŗ62 Ÿ#JPfŽēéŅ;ŁĀk„~dDłrhCeé7Œ”«M"ÆuØ£|É“ą9ŃŠ5!Æ^m&ó;&0ƒ½q$š©ć ,]]€*hā³I–łœ„ Ö ā¹~ĀS+Ü|å{gMŽŒ{*Ÿ Š‚7Ø\Ļ _e“xjOxį¾ébĄø\],»6Xę«ō$ń^ 0)B ^Y™äą(iKdŹb™ę„‡Oå@ņuQŠ[ęéā@™Ž:RÓcÅU ”×1P2:Ė2½ßÜzI†ĒŻё$ˆįģe¶BĘļ­p#OEńŅ\ŻBdźĪw×/¾% Ą³7ޮВXĒ_ų2 ‹¹`µŻęLI˜ĢĄó%ĘłT×°‰1Éy€ŗB•Ų*9D¦±ŌĘļ艔ŃU¶ećĄWßņļähūŠk¦åōĀBä›ĒXī‘%!§ćf褥ę›ŲŲwp±øōįyėģ¤D©g°į…ŚnZ‡n")2}W·Ż¼!É ¤tÅ*4ę‚·QāQH3z¾ 2øO#o@›õP½–õsuPsĒŚt¦ž°A›Žž\×6ž‰;ŒĢV¹žžČxéi÷öøßŖ„RݲŲ|Œō?Ž™N¢Ņ Ąä+fš’w…Jdyš|vž½‰ĘPųōüĮ•6ö(ę3HPĘP §Āō3°¹“Ū~ŁŃP9ŌäxY‰.7ؘb™¤c?“ā²¾„Er…o•q™`°ņKæųné1[@eų |įM€õĄMźŽ« ]pPk"68 ’ĄĀuņ²h¼Ó”r%CéTRhŽš¼U^cŽ„Čé†%ÆŽ]迣֏›¤1Źą²2ł€Éģ ėęHĻ$ŅOfQoĘśVę&üČ%wčå,Ļą °„,ų bĮT}ńƒ¬Gj]>õāa“»ŲŹAœ!Ųź<ųBe«yČČؘŒ¬é]ōŅ.oŽdhÖbCė\ź7Ļį/kcļU–ɇ˜Æ"Ǽ½eź4_‚1†“†;eć–×M0ķ„2Ņ3`1T RĶHļw36_ø§Ó 7œĖ>č“‘›¼–GHĪ*`ŗŠWÆhģĆĒ1>Ī3š”üȤlcūpE+g\’Ŗk]®Ā"›J©Šžy3BüXų›į”Č¢²Ų¹`‰(’ō‚Ā)¦pĄaXśŒGC觏/Ć ES!QP³ņ+v%åv@ĪöW•neųVÜH]žĀn‘VŪ©‚* E¤—vÕ9’‹Å’rXn3ė^ ŽĄŠæ¾p”¢C”×xŚéžEӜV#6/Gp™ųŪ’¶Š5`ōĢg€^ 9Õѧ·” ƒDĘ’±ą/§†)_?µ§āŲ`„ŽLœ<³9qö{Kń¾{n% Š×hńž°/tĀ~Ą•^·õ;“½&N“? ’#²,"$Ž~.+ä’D™7ź endstream endobj 674 0 obj << /Length 2605 /Filter /FlateDecode >> stream xŚY[³Ū6~ĻÆ8ņ4¦EźžÉf&›K›NšĶ4g»ŪDŪœČ’«Kœō×/@@”ģ*™ī¾ƒžšīpŽ}’čļ÷vÆer'CQ„…¼»ßß±(d|—ꑐQ~w_Żż;HĆĶīܽŽóåNÅB†r›ņĶV†a¼y÷į~“GĮó·oß¼ū~³" ß½$āŸx.žæüĒŪķ <ųQČā‡bÉa;±ŲF‰Čӄ‡įüd·»\.¢ģK}6½h»Ć®lė¶³Ķį¬f×·ūį¢;#ŽĆ‰dæÖRe™H’d’Żö›­Š£ 3揶3ŽT0“4[¶§ó8 G&ś³īzƒ‡ƒœ|ÜVF"Ü”żŠå0v¦¼ŁĘ‰ tĒŖpģš·7ŗ+7*ކWöm‡DŲ†&t]ӄć‹3•Łė±hP£ˆYPźĮ¶ ŸŖł÷‚'ś~šöēõćƒ;£ÅĖ”ķ¾š]_ŻDHŖń <½?Ś®zÆ»įĖīE[æ×åĒŻ³53K •yČ1 Ž€ <¤Ō=Ś2WlT jūŠiĮ œ½°COÄŃčŹt=}×ĖĖM?€Ģ“»įĻé§iq¹©tWŃeMB]]ÖYGšĖ/ŲndŠÓą¤Ńˆ_h€v‹Ņ ?;«™ŅžŹyćģÅĪǘ5CŹ,‘ņŽ·Żā[šŻ3ńoļŸß’°jG©DšĘÓWķÆ¬™„*x3CĖ"ė¾O$VWņ€Æę©(ņāZ}o÷(ÉīH8»#Av'Õ­Ķ“ąģóiĆvw•HģŪ¼.”45»˜śy²f©®IFŽwŠ4;Ū”õX™5e`”"Ÿv—mƒ¬ ¾AjG…¹ŗQŪE—ŹvĄ,õšā$kśxMŗBŠ4Š®„® ēĄ7^ĢqdÖI©ķƒh!Ē’GĆŹ0ĄŪYs,Š/,ā[‰ŅxM¦#ą5!†Lƒ4&A‘žå,(D'xgZØą„į8ģ4X•óü“mčןĖgu4ūéTÄįÅ:)”Č+gIr¦“BsjłÓeÄBEŹĒQÜŪ=é‡JØB]ˆ‡0…Ł‹Ō³Īł!ƒ],ŗ.ĢČ)‡ęø³¶ĶG‹Ś„c$!£Ų"Q)ń¹w£G÷Ś'©2š±£²½~ØĶ¶ŖņÓµ«Š¦"³4„:žćžIA«$`§¬®ķ.”Š¢męM+¦—I&”Ģ&ŗjLJz5D£\$™7¾Ļcx6øą–]/KDWW@@Ńv˜?¢,å°.̦ŹžĪ]{…E0i@Ć““¦)qĀ4xZįDßÓ4£$̃Žü0ł-šÖ³©miśNwĻøčGŗ„7ńCæp+Į% Ńeė|Ø2iOoŲ>˜cg€­|@( ¶pÉAI¢8MG™Č2¶[.|*U¼p”C@Ģ∷Ī1y–¼ˆWŸ5čɃ÷]{čō©_»ŃKęÅŅ…e6eäɉ`oõ+M5v¼«"ķ!Ł–esWÓō ŹĻgäB”ė¾ÅK·•»K™}-ļF `8÷±ó“žhövŻMcØ5„ĒéXføĄ “u,²P®Įd N8YēɊn䊰4Ÿ÷N™±eEzbvóUĆS²ŗÜ*Õń³”ŻŽŁ­Ž“Ģ¤ó÷Tˆ.łėʇ_$n‹ƒŹāh‡u9ŻŲgø:}Bź TM·HėvŗŠOž%vŗš8žö-„T.s0‚C?€Cd\ūtY5؟@u„„؏Ž®@ĘB©„_óŁ”®źæQĶÉ ģZ,鎊æWÄšŽóEĪ=č|Ո”>ƒ£œ;«'ʔ X4źXG̙Ԃ«Kóģ¶®u ĘĒMQ`HqĪ æ¦Įō1a/’‡ė­ 9ŗÓ] ”cčß>m€@ŲźĻšĀāgšė:߯}­ĖƒüQ(ȹQ8wœŪ-ɶ­Śų®Ł³Č %ō·’0ښ³®ž²2y* 큆 o–cļÓō Ē–7ĄÕ ÕFšł ’5LB“’k@¢Ķ,Ė5gٲÄĖĢęõŸ’æõœćåś¢¾&ū‡)µP»&k,!§{¦?æzžņ§W«)īnöĖþä"mG6,5›Wx7™ R‰Ä"ąTB)¶Šcļz]Ø@aĢU+āB=»hŖNīėMæH¤Ē }מč`n…Õ"XR –žf\›ŠŌ¢ĮįĮ4¦ƒHå}ÜŖĖĄåėĖ=40āAE;®.f+CČ™ŗéH\Ļ[LmA±,žaÖīé·1„éū¹ŌŽ#ås<–™“‹TDźÖī«M>t"}ż-ģ ĘŽąKČŁ©#ö$;5īÄśA×»«ŅĢMętŃ'£ąģDmū޲HB,€õÖ©šĻ]æBKµŃ=“Ž?PÓT<µēŽ¼ÄˆIŸ‚i1‘¹†TF.8 plÉwōŪ!Ō+ēØn|rą0qõ=0U‹2šJGÓ,#0™x `8wę†Fżå‡4ļĄ·IšT±Smč@€Ź¶9Ś¢Eńs¦k— ©Nķo°ż³ė™Y?˜ó×Ū“×čitŃł²œTE1łj±ōÕ|råÅrÅÆUć LÄąÜ"Ÿ]ĶmC$ÅßĮ-Ņ /Œ=³Ģƒ_lčģ¦? #W/^šŁŽ•E¦Üč(†čĪģ]“ÆŲ³–ŻĶM†±Ń÷1ńōg£«“łķ—ß}'†ĻĆź«Ō:Yī"’^¢ø—ś7«,ń5ĀÓ ąŅÆæ­aŪ5wS« ^Žæüh. eYņg\Zƒ Ģ^ˆ§·•ܳÆu¤™ņ&]I «½ĶV~P Ü“8·8/ ¶gNÄŠøøŠ‡ß7§3†%8ļi=’82Œ(~Ōśµż Š­u8qV`” WIq–;nø0L;öŗ„ÜkĮrĆ@HĻm(īšŸŽ½{ŖoĒ®äŁ’¢§ā!‚w4Į¹’šOÜW޵aK *įwzOsƒ«Ś'ü«_R,^ż`pį.9au‘€Œ^ĪŻ@š×ī¢OŸS÷ D׎ƒmü4ÕĶ· €PC{uL%Haj7sA"Ž2>©gĮqjĢcö„xńŒ' …`@E†éXŗ7ÕŅƒž8Į<Œ(ŻųóRÖĮmKיlE¹kl†xęLÕD‰i9=nŁĆ‘S-½Ū™|źr“Uš+īī8Ę0 ų…¦¼ł8fqŻ 1¦ń=:>‰Ē)ī`؁ś'ųŒ-ĮjÉ †‘B’UIĮzīŸDŌ;ątB?ӓŅ‹ęžĮ' Æ_žī=Žźöa“@6Æ×›E‘g~Æåõް Ÿ”ČÕMÓ½sÅqŁr|ąš[<Ż’:ˆjsČUÓ›?ĘG¬õLÆīżgDEž endstream endobj 555 0 obj << /Type /ObjStm /N 100 /First 894 /Length 2513 /Filter /FlateDecode >> stream xŚĶZQ“7~÷ÆŠ[ RŃH-©%]Q©[ \”€"Üļ°ė;ƽ±g9īßß×c;xģÆm& E-֌z¤V÷÷µŗ5)£‚OŹŲ*2^…ĄŹ9\‡Ø|tųMŠ-~Ł© ĪFÅ 9Ž*éĻŹšä½²d=AYdHtłlŃļ” ԚˆFĢ*DÜe"Č0ų/Dt%ĀSč¶™Œ²2™1rdØf’ ‰ٌIī8‚)*’ CJhdidE9X0±# 3)ē=&œĪĖģŠß%r™”7Š%Ä |³üd”w.¢į•÷'t+] ‹išFV>teF#ĆRXi0& ŲąIKr£ŒÅŹyƒåZiĄ”Œ‹ą” Ć,!8‘!1|†ÅIt²ø“eµŒ;"gĢĄZt++ŻI܃' ~aXÅņLčķX„™¤» ZrŠ£•§0hd‚0ĘŹ°†ų#—d0-lc)Ŗ(>e¬$.¦Č*:#SVeg ī°Ē€aøˆʉ#;ŠĄƒŒŃS3А üÉŽŖDF,ćd•n3™œŒćJ£2°šÄĆģY„hü€aĒ! ć¤fĄØRĘ čĢJ1,’_Ą YÖÅ@~nÖ”ēfpgö˜ČE#%ŒĢpū©Ģ@cż9‰ø,ągĮ¼1q'4‡-ց–8‘śŌ\ī9YąŻx΃{÷ÅCõ _Ŗāķ?’L["Ęd£3“ėńųżąĒįÓé¤V÷ī©āV ¬«yģ޵ĄŠā ¤øŗ(ŅJ, «V=Ą?˜±¼p ÆÄĄB,gŁŅzŠ”x1›_Uµz§ŠOUńŗś\«ßÕ{żæ« åy5(@ÕjRĻAļfŹAń²šOÆgĆjސęÖ³źlTޟ~Vļä† >fziŹžB,äN&“)†zׄ&ŃEBÓā75æ*4ņƒāÕõ‡ŗ¹~:šügPܟĪĪŖY3•}_<.žŽÉ:Ķ{QnˆUłhµĒ’}$m…ė1éÄ Ć5 ¹“ĘüÆTńhśzŖą½;Õo×e=šNtŠł®©MČ'ķ¢ø%iƒČä i8“uäp£&óės<,ŗ8ķśÓ!P'8³Ž²UĄ*Nų³īP„Ė(‚v¶_ŠžĪĀ¦ĢŚ 4w€½…ļņƒąŪˆüu°#H8k·9q4ŲÓ6Ųłh°/ˆ'Ūźā7ō v<ŒŸd Óa!ķ0öM7c½.?Œ+mūƒVćØą²ö²ūõń ‰ĪäoCyŠŌ#ćBÖ YxÆG@{PčučPåńĒé“Ęl•ö[ ū|KÖ7²œö›ŃæCV‚”¢H¤tĄ›±¶÷āY‹@-jµ6I¢¹‰Ž-ŅYÉčV¤“-2§ÆāYÜęY<Œgk–Š8+n;±PSGDÆĪ€Õ²*ŅZīsĘß×¾ģŪ G_eļä¶ģģ±qm¹LÉø›ßdŚq ž]«™ŗóčÅSõčb:ÆēĆŁčŖVIGszĶŖf{yX֕ŗóšod‚EdńTåļ }gĢw{6=»MäõØWŁ®Ŗå|4ŌG竦ЗtV}RoŖŁ3*§I½(ėįÅøśTU€ģÉu}!¢åĖq}QĶž>ž˱h­›ÖŁō²MŌÆwN&gVż²ūõīŻ¶Ķś\?zUCßAńó‹gŹ®zļ—óŖSńēoŽüt’ū×£ĖjžĆK ;Yķaµ°“Ōø1÷bLé…Ģh6Æ\”3”Cƒāi¹¼°6Š_Fgõ…ø…‚øįÆż'é÷ś’Ī5Ŕn$µśų“»«?ÓČ-śp ģż4NĻF“s…åMN&óŃźĘŚĘ ²m“m¹°ķóņ²ź¶üżų˜ū²¢¶Ļä Ąéø<Ÿ7Ö>™…ø T•W«ŃłÅņR¦’>yvP<©Ėńhx29 ō¬«Ė7pĘ£łŗ7ž7 Š·Ėa<ćB|)|¾S”Ű؊Åy1*ĘÅe1)¦ÅU1+ęWå°*źāśīBėÓŃø‚a³Y„ėŹ³Oß4ēž¾|üüɫݜ[„÷=9Ēß$羓Ś|3ŹtqķąY—µŪ×J"%¹{ū󇋄D‡'—r„øœéÉ%@¹&xL˜·³ī|t֝cēė™t˾kÉó‘«fć7W-‡“ū¬šMŚČ}Ł,<*gĀ=Öņ.”v·Nyš!p2jc˜Køź‰wŸŃ ¶˜žź2¬īÉ"XAKĶń‚w^§x *Ą‰œ§ļĖÓ¶ģ¢:怼ĢŃnŁ`¢–÷NkQŸ Aąpī·W[Üļ,ßv‚õŹp#ƒt»Uå±µG#=÷{Zt†MÉŁFN«²šY–ĆÉ]‘?l"ŹīłŪ² D‘œ{¦Ųg½ßrd·ó»Ļé×bŽŃĪOŪĪ烜ßK!n/$ĀV!qy=®GWćźsufæĮj¢R<tėGwLŠV ėÅ[„Wõ¬åé>ķ>Bļ>wj®ö©y;‘w”_u¢Ī¶`IīؘDŌ뮽6’ēØ}šŲź°ū6gY[ļvÅ$ތIä÷‡GKv¹Ė! ŗE5vŠ—Č`óŚo`‹mŪp><ŲuF^ØR<ģÕL;tvnö’ķ¹­×•ņ2ūˆ0(uæėźNŗ6ū–ŁŽ^uÜ^u8–eĪ÷ɲeɗY·(ųÉKuą}Ćā&Ć’AõFµļuŒß†£ßŽ>lĀŃŪżƒĢŗ,IīŽĄįČkłzf§šjJ»}Æ0t§ČŻåqĮēmă\°Ę Ͻ~°ĄY'’/ŖHĀĪc­ęœ‘48ķĪ“”“ÉŸGŗa£HZ¾Ēź1+^ŪBŽõ]Ų®ŻKŸp@%ŗ.‹µźŒ%KĢrüē0¢Ü‡ķ‚ šŃ¶; ż 7½GźBt8ŗŗwĶv‚²nČVé: ;ÖŖ¼]c³=6ššņ4©ß/C‚A2iĀMä+¶@QĖ7•D:u7Æ}•A}~•±Üü-2l–ŻßjłX•`;›ŌD Å”ž¼]ś{c‘ņ~²°šói?Čvœčn “RĒķ€éhųń~qł›–æżżĄQŹ*ŅņM)5Æ?K뵋įvüž-Ü’ŚĻŹ, endstream endobj 694 0 obj << /Length 2281 /Filter /FlateDecode >> stream xŚ­Ł’ŪĘń}æyćā,ęĀį¤R„ȖĖ)ĒNJūfūabID Ą€6ņ×§{ŗ)ˆŁŻų…čé¹ś>†I“‹’č»»æ>ÜŻæ3y$Q$…Œ£ĀˆBš(͵:¶ŃĻq.Ģj-“$‰ßv‡cŻŌķnµÖZĒ®ŻšCŻ~`¬‰ßŽæżź+Ā’ćŌķNīŠÆ~}ųŪż;iē7%E’I Ä_’J\t—0iŃ:ĢÆµyjiÕŲW'8ZęqŁ­Ö*· ‡Ž¾żx\ÉųčēŗÓ@H×4¼ÉŻźŖ'L÷Hß7ßüōĆś-ĮŪ ÷gqÕn‰)\×ņ={¾ščNC]ŽczŽČ*\ķ «ųP·ļ%`g-µ°¦ ×īF·«HBž~ ˆ¾Oe%.„qżżöįīßw(¹$’QQ™¤QšäBfYTī~ž5‰¶0W ]äѓ_y‰E p½æūēēgŲL )õ­3’Č«#å#ȂŠØEŖRT«L¬HrŁ<Ö²Śžģ¶]SŽū_±’‹gī‚ ’IńZ l6£@)   €«T˜,p¶N #U°æ]Óm\C:ŲWnėķ óK"MĆŗq+°Ŗ+kcW7n¦?v'ZR¹ž”F˜īŃ.4­ŁŅžD)=#h­P”s‘¢°)Ń÷gKÄÓR&¾nĖfÜ¢M]¹#ŒįĄ“1 óīɌs²vo“~ b5£ģūņTs`g}’ēe֌£«Ą^4a§Ķ4māģ%=D*T¦"fBęņvp+„‚nl”Rā3ŒömŪĶ ą— %(£­öŖP‚ßXüBdEaĢ+Iø*“2‘HB=„~n™4s 7Rq`‘ŅĒ£ģ…fr±fćz4wĹ)¦Šø/Å$€·np|‚÷vbšĻXHŽä‰_VĪ0V¤éÄ@Łøžk–ōĻe3•ĖD”PžKė¬l½z_¬®›S"‡ļ’c·Ŗ0"·ź68WĻ0\IgĪ wpG€ĶMĆ}% Ė– _'ęu–  ~Ū’ė`¦Óݐ!ļ”82ŽĒ8˜N®¤ēų–fēfģwW|ꂍN†dꝁŃ*–B£ ŃĄõ“‚²µŗš±*FóóŽįŃŻ†b=Ā ‰Éa°c É@ā,ouÕ®hWäļß®„–¹ž k*’¹*ÓśüPÄYéóžCJ%ŠB‡#ēyŽ•†ā˾śr ]t4¬D_ą¬7*hYd"ƒ­*³B‡@}(¹‚ž~)]/WÓ¼ƒmM{)ŸAYD£¼ī1äŠęÆsģĢü UB3BĶ,goĪOØ0OØŽzB[Õ.›7hšI „4^ƒ&ž`Uļ?|*‚ųHJÓkzüö@BŲuąj| ˆ±÷"8uup§£$»LG=ßķ[;X6€³Ź† ļZŌ”I¹ń…fÜG@Tm?śŠ q{7–ŽsÕVP öŲ†Óö H˜:jø”,” $ńĪN?ū3 r”i–J4Ą'„zŠ@iõn]ØŹüŠ5ŅmIĪ­‡{]ó‘ Āt2×ø\^L>NVK:ÖŚiÉ/¹–5ā\?%ųŁ )ųœū:­ĻÆ+•EXøw_ŁŃwĀ'ŲŠŠŠQŪL JM§ńß?×£ļė”2Uä•<݇p'l{pF„£ĻńT}¬»±o>ŃxWµÕ‰»&Īb¼vō­Ø=mFXI°HPųHåUF²„‰Ņµ¼§¦÷O„7óCłĮį°ÜčłlSŲųĶļæ÷žRXŸLžöä–EŸÜÕdœøˆ: g-ŅĖV¶ēL ¼ÓvŗŠ„^hsõžŅń*Ŗ6 ‡0h˜Ū%śwģ4éü Ņž…Ļ„—>7«(®¶œźŻ>„_NO“ič.MŪ{ŸŽßawÓńE Ėŗ§üķłŲ ÓæRčt’/py~ČÄB5<8ōW’Ā4õåėŽ<ćä‰°ŅŽxŽ›ūžĆŚ=n zō,ńå½Y=ĶzĖķdķ’źŲāÜ endstream endobj 701 0 obj << /Length 2532 /Filter /FlateDecode >> stream xŚķZŻs£Č÷_AņĀuÖx>Ir©Śų²W»µµ©+;/¹½ŗB€l*Hčł#}ŗgņH¶d§*y0 CwO÷Æ݈· ~<ūėĶŁåG¦F‰¦š7‹@K¢™ ¢D&’ą&~#~žĖĶēĖ2ĻäBF,d&%ē3F) ?}½¾9ODųįĖ—O_<Ÿ ē_°'’øvc2üšĆ߿̮pį3źÄŁwüŪĶŁogų"°@G„Ē<ˆTBØąA¶<ūłäpļs@‰ŠIš`f.É5į‘‚ó*ø>ūéłJĆ*>“…I$Ž#·„1˜Ō&:āZQN8ŒD\©”µÅŸÓ¼®²ĖrÕĶ"͊–ÜżÅh:ф3E“”§ŠO bp“DƒR91~g· 6x4QÉxæiė¦>ēIx_ęE ŪĀiX®p —ŪŽuµ;ŽvEÅĘ`œ(©ś%fÅęÓs‡MīC¢…ģŸIW¹oaŲ>”ū9Mq_4mį[‹‘HoUjźMW®zŃSwœ§m™į³ĮŒéLGF“ŠģC÷(-,_Ö«Öŗg½°›My®¢0ķJ;ĖŽ/ģ`µńzeē~£ŠĀć,, ;p]dĆ]·ŁŸ¬ü\ŒäŸqJX,Dnļ¾Qū¶ĻNuŗfõrŻ”­QŽpõŻwVŗ« ;‚†5'1$ė¦kŅÕ,K«*WNĘ^)6ē,4ā—pb ĮĀ÷•·\eÕ&ļÅEw2ŅŽ)˜ŁaĢ8ø’˜(!ś§]TµėüĄrŲŲ7_;/g*0ė÷«I±ų]œN§ÜŖ2Gk>MōūõĆŠŃzWA§Óeæ žŒČwä9Ą(Ą$%¢Ę•€/*yÜFŒÄ ķA1„"Iō2ÜŖ8pP>»ĘŚÓdšb­J@a}ŌJŖĀoLČ"mŸģ‚,7mń{<“!źƒ :فEŻŲ9m]Ż—«[{QÆ»rYžŪįŽĄ«ę3vtźŲU±l'Ą ĆU½Ŗ.ÓʎæY@kGˆVø0 Ѓ’>žŁ÷¾Ä,~ „£wßėÄJĖ·…ŒÅō»šā2ąA„4  LŲt+|ȹ'ZNŌ-JŹ£ÓĀ…«ÄĀ)Wz7fø¶G7xßźgGm %6†šf‡¹ĶžėŖ.»Éź‰}F!šž|1ŌvĶ&ė6ó<Ėdų9Ķźy™zgB$ŽĪÄT3g‚ÉūŽ&qĻHœĆ¼$a<0²C~Ø!?Ļé§ąK ?šē”s¼ÄóhĀžg” 7<[O­±‚EF‰tÄĮü`Ÿuz °†ˆ‰sÜt܋uځ‘ü`~bXјĮM¶nŠyŠ”č‹G<+?vłīCć׈£qĄ‹yņm嚄œXvPōö"hJ͓ث@3ƒęƋśW(D‚ęIbz!ӈ©ų‰©m1oN3Sšø[65uø'›ųVõd‚ÆÆF(Į5ŪA œįG %IĀ’”Ų†“½9‰’A?‚pn/!ˆˆł«*ń«SQā@€»ē^ßfŒ½->`öfJ!Įµų+"DbÜ[–싐gåŹžš8MJ€D QRœ˜(µQ ”…M‘0j©ŽLčŽ2ļ˜ »YM abļ+ßød”1€ŃŗÉK/_„ų¼„L!Ц°i»4 bį÷ä'Aų’{ ļŅcxæŌy¼»{ā:o[ī %IĢßhB$(’*pp[ׄOU݆Eōų„ąņÄŚœOjsørEžŗņĪ&Ų€¶<ē¶7ØF½AC8ĄIwåķ]įę4X—Ü…†¦clšŽ/ÅŖ­ ĮÅp1”pŗ!Ų žpb‹‚^äā²\®«23Iī.6«Ģ S¼<ƒ©”ØŁWī &½²ļ½ “v:WĻ(~EąxōZ‹·«ŠˆŠÄ{0]EPuOc5ĶĮ6uv8OĮ‹ĄĢ£źō$m·W÷Ū‹#.ƒĻöłqČĶ0ŌŠ‡Yļ¢Znó± €¬ƒ8‚& —©ßń!µ»ķ²ī®éŻ!xØj“˜n9h^oŠI=F‰ ˆŗiöŲ­ņś›ˆŽźiŃż_!N‰J@.“Čq3óEpĒų`y)ĆOĖ5ģS‚¤!µ 2I֎õ0Y­{bZ‡ĢöS>Õ“ŽĻ‹ pŲę‡b !˃™%˜“ˆ%pˆż!ĻmM«š§Mš7)vZ;ŗć5("€‘e–¼ĮČĒsd’½ƒö<²ÅÆDŎe_oÖĪmŃ;]ß°ŻäJ·H ąMéŌī1ˆÅn»āvį{3¼•m=”Ū·œüŲŅ¢G’2؁–asIų½[ OLķ·bX- "”‚M–o-9SDźT ,qvł§{u2ZŽš’ N˜vŲęÕ69‰ Ü[ŗoŁ·>M”iécĪ· ~ÓŌƒ¼“Lī]vP)•óČdŚ(…@įŅŻ¤©žž·R{ņŅĢZp“ŖģM=†ī‰Ą®±=%ģ¹DS'ć „™,Ÿ9ß6i…V“wž`_ō8¢;źN—uź^—˲JŠ K ĘĆŖ@€ (‚Ē8l§A#Ż]źęXźC}ü€XĘqØk‹jįĪ[;×®04·]`sžŚŁ»&„”yŸmpöæģģŚ-~µĶ,@„¤ī鋑9¾¦’V!!kFC5ÓĖķ1œä$ęŪV‹±‘ īŹ õ½ĆKjØŅ¦3pW©=XnŁ”‘aä”ģÜÖlp‚Ąūht„‹UŗōK+ čŌ[§æļ”i'%ĄžnUZ4õņ(iLėHv0€‰!1öˆØģ3ś’i4yQ€IĀ8j:›¢Ć]Śåā)Kłž(°ķ¹mwį“ƒ”©$ŻĪŚ„ģ¦>”•£-’öm|Ļ\e0’bŪ+2“ÜÓ@ĀĒѧ”.&Į·š)` ŁŃN›}ļzkcŁ¢EJ„Ńļ,=ĀĮÉ{„cļõļˆ9TŁ 'š‹æ ŒA· ØLx[¬ @Ÿ 0嚛0ŒŽbx^¤ āķjYōŒĒŗŚ»e–Ą^ņnCnY¦ĪOpٹ t'Äŗ)²Ātųy,¶šŒwŚĀ•eVDaŗ#}ļvYäPj¹5ß³Me»Bī’,qBb­§‘Ń£b[Ī{Õżēc®,e}Óɶ‰;”`[z 9 Rćłjūé«3š¬Ŗ>ą aĆG Ī;N ąŠśł¦³ļ[Õ½«a;¶—א~8¶X%Ū «a}QLś?9õzĘ endstream endobj 706 0 obj << /Length 2188 /Filter /FlateDecode >> stream xŚ­YYsÜĘ~ēÆĄS «Ņē&>ŖYrāRÅİTÉ~± e,@XQü÷éžĒī,Ķ’ņĀ ÓĒtżõ&÷ M~ŗśŪĶÕõ;¦F‰”†%7w‰bŠ˜\%:„‰<¹Ł%R-6æßü|EżgÉVrFhʒ­P$׏­źī6[Įi:ī‹Ń6łĀz+'F%[ŲAIć^=ōśāS½«v`1pnzĶä §›iĮ ŻčĘ»źĮŗ«jwnQ×NŸ¹ p”Æį£Ź½?ŜĀ9Ɍ:Śćźļ£ĘHĀf‹!€4ŠĶŽļ¾>˜ˆ Ģ6GŠsrr"u>- Avz–Äp}‚šˆķ”Įéi§Ž»fW•›-K›¢wĪaéĪŒČŃBø£ńyTĒīPŒ5fóō l 8č“Įo` 5–QM„Ģ_š/BLZփßhzņżõ‡{ÕpʽCz·neį&īŽm9Ö]OcĶH&ÕĖ՚–ūīŲx“÷öš¦ä…™¶óŌ”dZ®c{_;§®H›ŗčĮµL#2Xiˆā™[łO›`°a.’q,Š”Kb²)xOŽ¢h4(NKKtī~ėņJ&pŖś¦+l2Z.`Äč) ‹g%'\ĢIÖßU‹rĘĮIĄCšfćōŃO×mŁQ ė^n”Öi ÷Ö­s­Ė|!ĮĒ·ŲE’äž->Ā‚Ŗ©‚ŠéŻä[–nę6ąõrĖ»®iÜŁŌķ½{wpq¹«£L–n2üu]˜@KŁÄ5‘™tŚ2²^óa«(M°Z9Y^ØšŲƒ`Ą¤Š ~7¬źTFņĢGė„”ßĒĪ%“D*9“•ć~¢ĪݱiÜØō¦ū» õiŃ3‘ٲ,'¬AÅŠs䓿QEŻ›æ8ٟa†EM€K•:Ń»p“ˆŸścź­|~Ļ5†Ķ%$1—DeډØ>•Ɖ«·7WÆČiĀžałą\ļxåįźĆļ4ŁĮ˟ †ēÉ£]zH `ŚTm’_ÆžķŲĪ ¦gšPą/ŠB įżńXģŠ1³›¦Sņą…Nś&ę„-S¢!_[r³·›ą&eß¹”pfŚ ³£ė|˜›éØmŹŲ™ E æ”gĄą¤®Ī»˜ŽłŖxńŲ“¹Ŗ` fKpź%Lń5>ōÕ”ųcĀźU@Üö‘42 ‡A,5›’¼Š)„ér-Ś4T^ĀÆUé=rsĀŠ®“ü‡`Ó$SxFP𨧸<Š’°>gį8ŲŁq0Ė%eS ń ­$”Ŗ‰›żšć/ļßDĀŪ’ϐŅ%T_Ž‚BP˜Ģī؏Ęßæ?—*ø°ģį’"ŠWm[I}ūßżņŸē”gŖVŸ >³…(āŠeH~kå:Ąī> ŗ&#B‹SVLŃY¶ę^»Ż ņc1NUģEhʐh˜5ÜõõT\Šs,FFxoKč*E/f„Έ†s²Ņå"tLFƋ°äŹ™ƒ ß~ŻĆåv¶}YVÕ8‘sŒŅ/$>BfZŪW}5Ģģc”NŪāąUĆL Æ¢ķ"Ҽ¤—Ā ; ŸŁ)“Ÿ@'€ĒVq½Ā„®ėęŸ֙Œš¹‚¾¢…Æęē {¦LoN > <ŒHø«©w›\Ų¦•C‡Q}.M…•ŠjĖŠH€s•įž8“‰ ģŽZIżāK‚9£ė!y瑸’­!9Ė×qųēi·*Ü@ \"ųˆńbć»o,Šk7ų/¦“ʼnWųĒ}CWøs)Ēqż3‰mIJM‹ęõ/ą`˵łöZė|ŁkāćI±Š]³I¹yŁį)¢•8»©µb lvq„”µĮ;ÆłõéUĪMW öÉ!ŽöÅąEµ~ēWūä«ürĻäĆEƒŹšē<~Ńq9µŒį«š­r‚VH’6°C ?žn¤h»Ś=öž¤Ž„_^UlÕ÷į~•­²ńźdx©*$“!®  d*ĆŹŌŃ[m€2ąao„€Ķ2•¾AŃŲ’ 1» tŃbJvš—8YøÄ©¦Fxܓ» åˆ6›ji¹Ø5^Š‚×=n»~×s¤śłšöU°ÄĒL݆żģ”Šž:-s0Ąp¼õwN=4–]¼uÕø™X÷#[˜#ģūklņ¶o®½ˆ!NęsŪ¤Ńłæ(\ėŌ}Iš!³4ģ-ö±)ś×؝Y¼_ߓāLSŻnŌįÅüč餀Bxģc}ĄƒńAłøÆK<¹½½¾ZŻTķ¦@\s²C;Ēź„Å$ ÓPļ’Y–d endstream endobj 712 0 obj << /Length 1314 /Filter /FlateDecode >> stream xŚV]oŪ6}ĻÆ0²‡Ł‰Å©Äī%nÓ!kƒÅ¶„A Ś“ĆM–4IΜūļ»)[Lwč‹-‘—ēž{ī…{Ėī½9ųqzpņššĮ(Ę1éM½˜”˜°^łˆųQo:ļŻö6ø›žtņšE]KŸDČg €£xąŒqņėŁĻ×W“ēū~’üżÅäF>ĄĘ%ų {„ ˜sŖP¼Ęó9ŠnĄ8By’¦$Ņ"U“/²LfĖļ+x y²IVE*ōĖG̱&‘® ±ą0h‰V…Ó8hVśˆĶ*ŽóI{€‰±²“ņhDĒ!<ˆ‡T[O„ž#&¬¬jõĀśbĖvÄ怿$]'µØō~ŻžZ–É\Šl@£¾9šds½µµ¹U%“Loē‹g»‹u6«ežiŹw)“ BT‰”šļ“+4Š"Ā[ĘN(†8ć­ÉĀ…ŖŽQ»p¢Ģo6nź3+żZV¤¢8č)e(bqų(šM|­¬cʛāŽ"bCŒD m‹ĘäŸVžį9$Ŗt }mų›ƒF„Ø"ńćD›I‡CŠ¢h+ÄŲ©Ä”śĆQd)f9T‚q "„¶ægõ`äĒ1€w€ė Ć*)(Į¢(¤Ÿ„„’ÕkóR>Ŗ*e„Į!6«<(ĀĮ¶„LY×. d¤ak©ŹŻG ¢„¶F¦h>Ež®\5}vSHIW ?hNy4F,6J|'³YŗžC¼&Ń(™ēéģ~ןR^ ¼0‚±sr¢÷ו1T ©žčĀG³¦UfC5“zؓBi •Yå@ėe×JqP»żo(ųĮ> ‡“¤z2¾rż’”‡†“†iÜSŒ”8©M¢…ms§:™žė†a’±ŪVˆžÉ÷„„Uh¢‰Ü /Fó²\!×ņc. ÅU"~;ö’øH(Šf7Źį§.“J~÷õ–øÆź¤®no¦gÓū›·æOī¬S&īY¾6GF#“™›ėÉäźzņīŻŪwonōŚõ/ļ/>œOõ‹b{vńžŹ;×ļłl½‚$‘¹śv}$>Ėœī³õź“(m}e6p1ĪE«Ācż¾«Ū±žūAŻōļu(3mūź•ŃÓi¦»āH›l ĖK&žī¶Īmv·Ā0z²!`ع’‘ŲnŻ^“żnŪÆ…Aœ'y©R*ĒųT޲Sy|¼mølg¶ł¦ø•wlsś˜ ¦†OŌ Ųc©ŽN énTłJ“)•µLRł9iæĄĆ]]&3qŸ7=B $”ø3[źdi萔~ųSˆ®©ęł“‘`.É:­_ ė:ٜāVĀ6[)F£q[,°vŖŸė£vk·óo'`nyjėӜz*Üå%RQ‹[ć~sśU‹vĢ8ńŌÄhF#ōp7@Œę<ģH^ ˜»Łņ‹!hr«ĪÉŖ–³ź…‰3®’Mŗ½„G£ĪÄ¢w°æ§‡ÕLõą{±3‘jÕ#| “S"‡Ļ„ŅE®śjĻ/æ„å»×fĆM1\ł¬ūcūÉѼ‰Ēę{»ķ7+Cėr¬°Ū5…½JŅ4Ÿ©ÕģHŻł¢c” ¾Č8’¦¶æ„ā?ƒŽł6#@-~ĮĀ&į,ŃĪ=mt»lu‹;ÓćŅö×:I«Żģɼߤ >gĀJ¢¬öĶē±,ķ„ĆxöāøSńł*_ŠLäėŹ®ś¹X–ĀĄō?\=> stream xŚ„WIŪ6¾ĻÆpŅ‹œŃ$µcftI[ sKr %ŚęTC¹ZĘvŠž÷>nZXł6¾ķ{Ā‹ķ/~¹śįįjõs˜.FĪČāa³ČB”‘p§"Aŗx(½ Ń„O0ĘŽ‡%M½Jż–4ńx½ōƒ šŽŁÓ¾äę厚ņóĆo 9K&8„Zą¾:p`Ał~o)'6ÄeYęˆA1T$Sш œPGGŠč Ū«k÷CŖČÉĀ"”Ę‘aŚTµ2WÜć[q'oÅõµÓ¶ …QøšI€"„Éy]o—~D#ļśŽ<7lŻ( Ūā³ŚÆŽ{X(·KŸĘ@°ZĀg&E³ćyc’•§Vä¬,OH«óĒś¾n–š÷E#-×#p=×ć®hŹ%6†B+|ūhXÅÉp…¢V›åŽ•–¾²OøZ#˜üšėvó®ū<öńń³Æ\Øü÷čü§ˆžqķ£ DALēU×¢»;ó<ķ}²R’!ą×rø¼;m`QeÆ#¤5©“y+*ūö‰”|}«UćI`^ź2ćīī²ümĶ Įe{QžåK žėä•lDÓr™Ÿģʎē~S6ø”$i„ūørY˜ÅŅVZ¢‚˜EUµƒuѐ8· –v‡e@M;€„ŚAŚAJĘBIė4¼Ų¦&Ä Š”xæŃ|’e(V©McAoŠŌ;®Š1ń.+Ō:öø³Q q×GĻĖJ“ģ–Äc­*YEӂ­’āIĀ!Š‚¾³É9³Ąhp–ĀowFĶēĶTķ«ŠR ™y­9+Ķ˜{¬l]ΚBhŠ’AŃqĪ” ‘0pĀ^ø¬¶–6]$(K°¹YŒpš+QlIē“ĘŖ*9Æ5Œb§õIŻø+[±/…oė:³½y\cLE¤Q˜B½µā9|©yŽÕxV[ÜC;zrk^”’ ˜ŽąGėjÉ„bjŃŅĆŠūCČܒmm—¢1ģ•,OV tG²ąF”Œ•eNLʘŠÜĢ1&K½z>Su’e^Įka‚ŚׁżśØ&^eę%ƞö]Ė wd=ō]c.ßsTc: ™äjŒQŠū’ŪčÜ«꟩ ¬‹¹ą)¤‡Y&‹YŃPŖ“ÆĻš?óŗį³Ņ¢ƒ“ˆQp„V˜ĖōžŖyYŅŲ °ĻĄ™§²ŚŽM·nų_ jiE9 H 4 . 0؟Ąöøļ 7Ź®ą¶å²¢*ó•žG»·K?ĶFŠŽ5|Š…ßæo?żžŽ’Ńa@Ėė Ėyćņƒ&gvÄѝ*kMŖz”ĘšÉīń¦dņ×ĻrnĀżåžĢ!Łöå[<–ddtK[v™uĶd¾³·šCžĮ^ `÷rEo‚ą‘ųvĒ,YQYņŹmš}Q•œ»é+ųĢ}ǹ³³Ä$`Ö1n«­‹6BŚÕ+ų}EĻ«čĖ,¾Ž]JßøKæŗķ| ‹fåoG£įټVó¶«eo‡–‰ęlz1dö“Yéņ÷ņL9I“ū{ģĘĆćQ¹›sY#O[3m8Å8Y¾q­é}˜ ™°™±­\ūyÉÕ`“W{Ž^ś/]śæAV£tņåt4 )žqv/Ū§Tµ—ćW4ŹÅžK«™ė˜ÓĘd†™4š6Š2ŻŲ2Ӑćį°ļ³ÓY#õę5Ń õ_]l=°8lRj Zؙ(d\·02*HŅÕՓŁo‘U-¶Bź¶;YˆO˜€µ<k³ŃaŒ"v§³ŚÉų4 čŁø¬hwLn Rk^h1ūH)1ĮĒלēĮ'čQŅfš¼»RŅ[jpĆŚA;\N©õd3VV³–ÄjŻk`—MńĒ=ü6zĄ!&W”’œęĮĖö‹Š ”’3wźłTV PęeF¶‚óō(øøAčD»–—ÉŃĢĘr=į$Ž&q•ø7ö“1ģŽÕNn ¹*K““vŗ Ķ7Š>Ü×|O=żtGźŗFĆÖÕ3ŸmņŌ”=Ŗ9œań ƒŽ=\ż r›^Į endstream endobj 721 0 obj << /Length 1560 /Filter /FlateDecode >> stream xڵXėoŪ6’žæĀč'¹±R”,­3ō‘lڦX=,M ŠLŪDdɩƎ7ģßń%‹6ó(°”…E‰÷¾ßA½yõ~>z;9:9Ēa#o„Fø7™õF7ĀAo“ø7™ö®į°3łõä<ˆ»”Ē $ˆF}#„œ³Ė7Ÿ¾|<뻄ēŻÅū³Æœł)• eŌ•āj1. ½xJa,Æūnč‡äƒ:™ń+.$ø˜x!ˆdiŃ(ŗ×Æ_¼»ųōå÷ɛɇ‹ĻņŪŹ|~v'æČ՗‹?Ī~“Ėļ(DoŽ_|tßÉ÷÷EŚ,i^Ó©|?»O–«ŒžŽI‹Ÿ†įĪPæ,ņbɒL²O鼤tü“R¦˜ĮŁ9''Ź·|„ĶÆTóU¬Ō6H!VĒY.INOå3—–łyAč›ÄZ_’eEšŌ¬Č+õ!ŸjKX ¦³æŌ.åZeM‹ę6£/%Ū·k|cĶĖĖo’`¬Œ£åą¾Īż[$ į—Bø‹qŲ ™rAk•T[«—uR²Ų•oV/¬¦]>aZĄµF¤£”Ž×e¢Ø`¤‚É×YQźL•l Į[ÓŹ¦ōņŻĄC3ņBႵÖ4kņ“n„Ɠ¬”{<ņ™t6c)¼>Ø›ź°‡Õ±²Ŗ÷Ųćz–BˆÆ'6FÆŲkČī+v|Ģ+GŠb 0 ŒD  `l1Ŗ)”ʽ •]iVP^ŁpÓTŗ¦Ś”„ šŽ±|®AZ«šęé֊š«gŚDĶ-­7”IŹé^Ł•tMĖŹZą‰”,鶃{ī‘¢]˜¦4Ķ’R$im©ƒ'Ā-³\ćMon=q®itZ9ĒVN„ĖŻ—`qjO'­E“MućS¦ļŌdēvÖĀh¦z“móæÉÕ#‡Bsž_!PyW•cb²\)<‚œ'ń(ąu,N×2tX¾ć›±ņņ¤#Cjužbv걂Ңö‰¦V]o’l³¢ƒ…÷šHQŅŗ)U¹Śļ Gq×qŻ— Ėå…ɼZnW(’¾²<Ū|C”XÅW̚āŚ!?‹>Ģņ@ąūā@ąŸÄ”ĖŲēBµÜ«Aūåŗ5. ¤Å!6®xAą2ŅW¼YĮ™Ė ’Mś~ä”S›ŸdčłCĶĆ­±Hö‘‡‡­ąĪ “/Ģ ąŠˆ†±üEĀmXóŹ!K ńE•,Å*‚Ņ䔼g5'ŪŹ]¾ ¤M&pŹi-ģK0(ˆÆL"Z(ī9­°Į‡ģ‚q3°Ćś˜Ē–sˆū‡T©ÄepŒ‰ągÖsʾ#LhŁfˆ ‰°N>>…ßy+œš!\«,Iʼnȉ”ķęz=ˆŲb@GØĶŒÄ„H©Č(-­É„čGDóhƲŖļrbēߛœµ°Ŗ•]5­jIØē¤ ŅGf lሃå|1tR® Ęužø“ŸÄqkńqä{~ż(`#£č)ÄBšššˆ%7 ۈ‰{ĆĒnyF ܹtˆŒC’2r>ärSffL ˜'*‚ų‹¤ćp×(4­leqč!Ÿ˜ā›%’½•}€ē*öÅĄFbĀ{ (^I0·¢R•äB™¹%2×ņ )¹^Q¹huGŽŖ“RņIݾ„7‰ŹĪfĮRĪ·PŖ“;Ņj§”ūw%ż<›ż 4ŃŠ„ endstream endobj 725 0 obj << /Length 1641 /Filter /FlateDecode >> stream xŚ•XKsÜ6 ¾ūWģL'3ZŪ’E½5›dĘm’>¦Ó^|Kr%®—µ^CI±ŻNž{ZI¶l·'qIĄ÷Įu77wóóɏW'Ÿ‚d#\'uS±¹ŚoŅĄIE°‰ß~²¹*6Ÿ­Ōń·¶p]ל {©+UgõÖK¬~kū¾o}¼ĻŖ¶”ų#°¾ø”»żzõčMēzA™ć Ģ•(‚mN޶,½š"ņGAŠ'HB„s O¤N¦£X£Š‰ĖĄ6vą ĒÅĘöC'‰B’Ņņś-uĒŽVĶÖöbš†~¶Zī„Ī®Ké°Ķx#„“†”‡6]Š8‰· Exįœ_ZāpF ü˜hIÄ\„ˆ]'šćgiY:ÅN{ÆQc{ĄµpSDNņFś”ßmķ V){ ~]+$VSo…ÕįH0’8Ņ“Ȍ¼¼o±D%„€ŹŹņdŒ¼Y-YwŠø¦}yVęC™õŖ©Ļa&q­:«$ģL|‹'śĖBĀČŹŹĮˆÓ\³g?0BųNN¤-’2HėĒ4Ö2ō̰ 82pŃØ‰¬lźä@UlŻuĪÖNŅŠŗ2ŽĮŅĪ %'+>¹+ż(²ā‹oŻ©ž0÷N§cGlŹ$½4²zĢĒ4&}8Qe½V÷4)KY±õŽfTGR‚L{·Rčpœ5ŠvɾXʁԶߛ™Ą°Ų6ZBXø”7ū,ļŻ™=¾õ‹¬sŽ…ŪW 卶ūZvąšŸxF•s8aÜ*©ä­CŁÓ²ā}2ėBĀõ·¤łÜš “07S6٤s‘Ō$Y«eÆŚģb^¤0&ø+8äTÓ|K•åŠõ:ėeGu‚ĄĄŹŠń`š“ŠEŃ |Ē Žµ,+šjĖŚ™…„Ē2ihiĻź‚ ”9\&¦i‰™—½ńūøųŚ""@AHó±łAÕy9`é ”„½ēŹü‚]tļ·vœ@įŗø uƒPüBbØo¦ …Möx/ Žžb'Ķc†’@šf!Y;šģ†kū)(Žøbi4WŃšCp'ZöƒfHp{Ó(ćŖg°ySÕH@]( čŚI.Ēä"ō¼IU¦yŹZSČbŌÅą6ø}ƒ0XO’k™,ĘsłłÖ_wƒæÜõ·Ō M‚Å8·Œ/ō'…Ü«\})q:ŽcĖ&Äܾń¦(t ĒĎ):Ņø\·Å*T8•&µŽ¹;õ¶Ž©³³y*‰ ŸAЊ…ļ“]µ²H«7ć¦÷¼«]5¼ b™™ķK.Æ°Ų½Ÿå29c]§m’„H±Ÿˆ|§"“ĘŠ<›Ÿeqŧēą?uó”«dńye° …³#8öSģ Üć%#jŽ…e!XšŲŸpįŽżš;Ēłü§</Ę„S’ŗŪ}ĄŁFj%Ū…’Vģ^ä¼Ö­Åż‘M+ā$œŠƒoY†õø”pł²h’%v®}; L‡„7žč¤4żaŹ b’ń Ū ©Ėś^ģq”¢>ģÕŖ«hꐱöŗ”.³ÕĶõ_h„…LlFü‚ąĘ.mš¦&eC·¼½XŽC/øĀų±‰ķą5Į=o75ØfŠhu yIæø)¾øĀ—ZR„ ­+hm?Ō9=9š—¼ĻeĖ}łūČEc>’p3Zٳ€éŪø­ēĶŗ©ÖŗĆĄõMOāg›C{”\boV[Nω…ų/gčøŃQ|H¦_E<Œ£'pbFŗ‘‡Tgśa½ƒd4¶š°¼rƒQĀŠAc³Ęs†^¦+–ą…œ¤GJŪUK@ŃōĒĮ!+ČTŻō4ø&°²&ĖS ‹s\ ć…¦jq»Į 'M£GR?¤Öę%-üźk†² •C64š”א,0$A`Žķ1¾Ūq-oąŃŠ­= H£ysuĢPĶ'ē”*|Ņߌ’n4š‚­ÖŸ ÆNžg©’Ę endstream endobj 731 0 obj << /Length 1574 /Filter /FlateDecode >> stream xŚX{oŪ6’?ŸĀČ0LN,E%Knā y8k‡¶)Ząƒ,Ń‹tõHŚ ūī;¾dɑ»‰H÷śŻ)»½UĻķżrt==:»CA¹ĪČ”ŽtŁłĪł½a„„£Ž4ķͬaԟO=»ó£&'F‘ƒ}I¦QßF®ėZ“?®Ž}x;éŪcėęžvņIl>rµŹż¤ŽšRm#Öʁ %üŹ’M•’¾xå8(óÜ0°ĪĪ).ōøąOD(į6ĀNŅ„ŹJőŔ}vž‘¢üŻäöŲé`=ŠĒhPĘ+x>²£ó.5 Æōʋ 5ßÜæūšŪōjśęž½¢Üß©ńv2||÷ężÕūé'Ev]ŻŽæµo4OŖŒ°’¤ź}ņ5ζ"L’Œ°Ļäćų’Āó”äjĪ—&eNæŖłX ?kS“h5pė0dC’ņ厂žÕõ„2Åpy©FÖiģUĖFž5˜)Ær2cóóŒŹ4ćĘ© A¤y”—qAō±ńJŸ5‡ŠtwĪčq‡*6nF“زVÜ’V·ßöŽÓK›‡š.ć’f¦k×l ēŁ‹®ŖQ«löz~r żņHx¶åģe+©5®ņ8„u‹æ~YœMŌ..@y»Ō×õŻnŲYUĆiŗœnāŽ-³lŖ|‚»€>Ē:K%'e•ėmŻ)F 0j\0 ]ī®iźÖپŸ‚8>ä×ć<…Hå"¬P ·p# ·+ÖĒdĖ}įVgˆ|Scõ"R^éPSƆFõ O ģr’ķ¶ĖČ!ŲęVs—Ų1ų9†“÷BCÅż¬cĻzī뤁9œĻ•7pń«q¶”ŒÄšŹw¾Ć[ŗó]¤ņčd终ÉC\*ŗĀø–]lčźAīTļ—`J©~RK𔵩€zÖG¾0YPČ-C@ˆn!V·9—79I^Ń'é1SkTsæŽi.Z,*\L~ļGwŒ‘ü§BQ”e%T“Z”±FęX‰˜Y¹ČÉDĢdt€”ą›JśÖį“IZų,-Tϐ;‡ÆIß÷u/Õ%ßløšć™²•b+x•'z9Ńq¬_³m%/ö‚±.‡„ē9)Tżp–jIX7*čĢE]G2³<·õqBb…uõ~Ó<~/tF”+Y'ō{V„ėœ÷pSN »žŻ`óō ģb£ķM߃:üØ£†ĪlŠóo¤Š»¤łNˆ1”÷ŽķUēo“éŃæšf/§ endstream endobj 736 0 obj << /Length 1505 /Filter /FlateDecode >> stream xŚ•Wms›8žž_įé}ĮNP$&qo.·ÓN{¹i=s¦™‚e[) 8©{s’żVŅ‚ !NĻŒVūņģjõ@˼>ŗ˜¾rƒ£$¤!ĢƒŠ%!sć€ʃĮl>ø¶BāmF)µ®Š¹L£b;“9ēÖ„üB…H‡N`U2JŌ¼kMæm¢J™•„8ń=Zē‰0»¾PofoĮrøoŁq<ĀCÓF³¹€]$Īsn¹éłÄńZT2#ż})ˆ€øŌ«ÅĘ”:¢}÷ŁuČvFØĻ6÷H0öŒ’_d'›9ć9žuͳ$>…’Ķm"ČźåŠ]Z§§f}S¢`¶0Ļ(®ä=Ī™M%.¤s3Ø¢\¦Kå)xe3Nœ' c>nkŚ^Ė,¢óI ˜;딐L„ź/ņG7ŠuT|­Eę"š—V&6»× ’¢U“i—R½½vnvUplL#µ0RĢf§[Ųž$6h€u 0:Ś6VQ1ž¾ā-lz¤Ökiu:Z;ŃŲ­ba74’/_NZ'@Įī5Žŗ ąŖŽšµįī˜ĮZZ,ž+¦”¢CwsĘūZ»j cB)7JfŖĢ¹ļZo£8»•‘ŗx|®Žš­źån%¹\ ßŖģ•JɕrŽ«Ø4ƒ$R²KœNÅzŌ½ŗēpFČ„¹÷ī‡žźbQBkį·V2VVF÷:śŖŽ„ykČje– ęMīD¬Na…J³ŽŽ9q†ļIį˜8Ü3)ō¤Š%>ēƒ=)ŅĖ‹ńaĒw”;ķĪŪ¦‚Äü:×HTsÜŪģ^ōµ††CØ£­.ŒgØŲŽsœÜĢÅņģ P:į½ū+7„īńĶŪŹ»Rµ®8ŪT5‘AŽżžźņĶ«7ÓKóśįźbśaöńź¤ŻÓ33śVŽMßļÕ>;¾ĢbčŚi%šJÄ/)ĻĘŻōÅĻ: ¢CĆg‘nXz\÷&Ķ.~=¤[¦5wØiĄņYtG£O}Ų~šØx‘Š+ÄÖśs@ͦ£Ų^¶Ų“ŠQच •ēéŁ>ńdŒø^ē`’9éčŽ× by¬Ķ=r¤ķ‡Ż§¾Ž ?0>ORńŠśš]§7`kv^<æĮŌ_Aõ¶ōG‹(6:ŒŠS¶ŸĄpļöÅśYAŁõņ)’Gż¹īĄŸ»Gž<źYÓŁŃIÖ[p endstream endobj 740 0 obj << /Length 1563 /Filter /FlateDecode >> stream xŚ„W[oŪ6~ĻÆ0ņ$£±BŠŗ¶)†ÜŚ"Y—!q·®Ih‰¶™Č¤@IIa’}‡ł’*é€Hńܾs%³|Ü9ļģĄŃ#?CŒ§ƒ,ō3ā”ų˜¤ƒq1øö4¼ŸķÓMNÅ~–‚Ćsyśįōņō·ćÓ+Ķ»ƒœŹ6…F„„>J0l"?#+üķšß^߯¾ģq8Š‚Č+d;)ŁuĮf·ļ“>Š5Āď@™8zUĄœü31¬ūūö›‰Ān¦R•£ а¬b„p’Fče©g@ąųEˆæGļųxĒß¼OlEž6ūanKUKĄo™ŽŪÅ(q'ī­5żbģ#»yė8|Ī­ńrĮNKžÄģw3w› ­Ż®’\4}¾|ÕAEŪø R0’f”¤]PVŚĒtYB€Ģ>—l:å9g¢éĶxzīü*‹õ\ŖęZl¤–µs5k즭ÜAEUĶ›„ƒ„]ŚŌnŻ„¶Q4gj^ėHć½j æJGX;nDŠšŁķå§+»yäĶÜQél :~”(dĮ¬!±5¹÷µ³“Ę\.Ŗ¶q¶€ė‡šÕ}Ź{`Ŗ^i7śGxļŪžxrFĀdĆȗNż”¶%h“^Čgłć˜Óģ1HóÜy³¶u“²Ö#ĖÖå鹥®»BŠ'¦œÕŠ6 Sāķ &”ŲŻRżŸ®rRw uRwNjÅż ¦©L+»[氍~&½ŪyŅUm–%Æ ž>šŠ5­®ØśbņņhZP.ģ€Žå „0d«`¬“MéāoE"¼)c?I7ÓÅSŸZ NŠ&nVXՓazĖ>ĶQf|Fėš‚É•B]ö™€;"ÅYĒĢė­+åÅ«%Ķ|9ŸŻĶE hPŽŠG”°Æ`;b°Z ?yĘöį„ČĒ)ī‹{{Rń““_Æd#(œü4 A÷¤t暆,ŚHž™%½)ˆ|“¾Ż!Fqc}I¼š.œWģ{ĪŖ¦#Óę£`3Śš Øś£Q_@6Ķ(ń Z¼Aõ”Kż0]1Ł…AģGA¼•µGmŠjš$ōōņ¶DĒ„qą…d~ Ń4B‡ł`ļ^H½<–¬˜±€&g'rOŸ䓡UÓļƦҳ–„©'§zM\Dąąšäā×ѱŻ×²U9³ €5ń˜r_ėb†½RĀ}§‰…•r鵌D”˜ń„Ī„¦ET=ķéxcļ“āµųšūó{¼a†xW žš^=•k]ó’‰{ÅķŽ)4׿ÖvQRēÜƔxrĘJ®Ÿ4ńžŌßĪ_ڹDĖŚĮą¢`“Ęŗ“xøLŖ™:–Ŗä¶Öž×Īšx˜†ž\XŽÓŖ2„©r©ĻĻ‘jsÖ×äĒsšµ–xCz'T»õĄ5Ž {©«U¢h›yg-+XķhGŠŗćsŖ*§ń\ŗPqGj'¤lØć8’kķ¢\łL” JŚūRÖl”UNŹV³“y'|Aa‡cļjĪ•5ubҊ3ļŒv¢Y¼ †Šx“¦†ć¹ęh Ö{Ė762‚)ĒrĘ , åKsoJŃą{…%“T0»żĖ”€źŹž½šhž³²ābfÆ .ģ õŽĖ¶¶¶wu-/»ó Ó;ŪLŠÓ]›@‹,Ü`±¶H5‡4½“·†ÕćH:›¦7aµ-ł_fĆ%›B‹ŠœÕĻžęl„Č>ōX VšßnI ®GBėŖ qč}ņķzÄk[GrŖ£ž`=U`,m"oĄöٱŸĻiĮܱ–Üi‘-ķz—Ś£•čaŁŁ<¦ŖdĪ÷mŻiģ“xu œŽ ›‡©ø$† 7Ėž½‹†Š„ęaėāĀÕq ņfJSia·†diڵ¢Ż¢–6YڵX ŗŠežŪoö½*%ļ3PWʀūS )\X m9ź+ĘØÉõ쀺åą!a¤~[=?Kü¬ī^=óBā]T _š§UyAzŌ+īšĀŻB®0‰w%§ׯrböśįśCåķY^œe±ßū :ļü ÷ń’[ endstream endobj 746 0 obj << /Length 2058 /Filter /FlateDecode >> stream xŚXĖvŪ6Żē+“¤Ī‰XwÓėéŻōĆåt>žėžö§k®»_(ĮCs˜Š Ž9zĆüĶs4Q\‡F©Ć$Ņ4ś³ų«7|ōy¢ .ŹżĀŽ'22ĮåŗĢŖ:KóŖČCZ_³īśœĒ°eÓ¬7Ö<°[V8aAŗ@ĖbæŻoŅ:+roĶ—Ųąmw9Ö"HkK֍Å>_fł}`K²•žö“…į½®Ą{M8ƒixŹP+C[ŗĒq>nÜ·: *[fšį€/#.ĶQĀńD)|ÜĮRŁĶę„ f¶^a/ć‰H‚eEF:‘”Į¼XÕcčų†?ii©›Ÿ%üÉØ·4†#¾ē'qź„&B„p"|ä >ēUeW)-2‘ ŽŁ/„ŻŚå:Ėaē½'ÜXŒ'dļŲénMˆµS椎`\5xRļv·Æ³¦o ±Ć0ĪĆLÅ'@ĻoĪg֝=döA„ā?™f ~ųY$ĢSĢ“Q0¦OANƒQÖCQ½Œ¢‚3ōQT ÷Ø`ß'ēPq]šu™żÕŌy`§eŗZ¦%Y®Ų8Ļ—„M©ż‡¶IŹAhe…2J·L’dm‚YqšŹc‚‹nĒ'ŹY.ùMTĆr¤tØŁe®ŌĮMNOČĄŽr‘UDdc`°5=ÓMųÖ[–4‡Ņ“4”hQ{¶1’#Ģø˜Ń"ąŲ‚!””·8Ŗ0f'8®wūy‡U†LFĶV¼˜¾’p9ŸRˆDM–Üķ|üISć‰FH™ų!óRĮśPō”›PčöƒK³ōś$ø¢W‹N„YrŽŖÆdŗ§¾¾²Æ J»t9g˜Q“]ŚÅ~Š<ÖF'ėGēPŲEIØŚ*ėe'¬Gą|+iZš>(“œ‚čD}؝rĮŪ1’šĶ)ņę,õz[‘ķ“}ļn‡k`lc¹ž8Ø źõāNF]8­‹^\s6ń䎄½ąM†ź§§šŁ;Ō3ic®B/Ö÷jA½—Ź“¶A’H—Ī9S≳X¼„ €:ń«49¦SQō ‡Š¬Ä B`…õ•,WGµcGmĻ«-8q"j{H7ūԟF±ąŹŗ’čpō4T@UQā! ¾<ŅjāoiŁd 0ģHč))?4et8@!Čö9¬čHD—/Įū÷%śżū’Š&Œ˜é"ŸĪRš…KĆ®žn-¬ž;9żms,š w¬ČœqøU>q.ٱŌfƊLócĄń~Óœ,žt„Ū/ÕA‚—żś÷Žbs°Xኸ­pŃ7[ˆCWÜGÆČļ"_HE–;nų°a,OīFtļlż;7܈ŲPvXžsRĒĢ„üe3lEĻ.NSĮ4X: j8ĄkÕĶęx›D廜‘føüXBéŸ.šY@Ńżw½£‘’ĖƒHćÕą„hqó¤ōQž±Ų”„:a gƒ4™–yŽŠĄsæ¤Y‰Q‰mGl¼såu‰w’“D8Š¢2ūwXĀ”ZŽ[÷́.ņ#øŹ|¤@Ķņ“|$Ė3ÆoČ>żgļ““N'īv7`ø ‡°ž°PŸüŅTL“ßŻĶØÜ¤>Č.ą… ś‡‚’Š—Ķ?Hœśņ ¹„a%ĮÆ źé_s¤Å¾^’‘¢nZÕæGr ¢R”5½ø˜ą$Ę"@hżä2£öżq°ŻĀCźm3  „¶Nōœ€Šœµ%źłr™UPö:I°ÕĘ>"č^Ā é€O”łĪ¦XH·¾Œåėx)~ _Y/ÉzQ żnõ“čž„<9^Ź©×W{ŠrŚu¼L”éՊ€×Ī“NRŠĶŗtUpÕu1”äüÄs^#z…Ż©<’Ķ €ÄæiĒāĪ»ž¼¬3JįžKI#æShžÓū7’GXxc endstream endobj 676 0 obj << /Type /ObjStm /N 100 /First 894 /Length 3206 /Filter /FlateDecode >> stream xŚķ[[‹¹~ļ_”ĒäE­ū‘Ą,ģg ˜Ż…MbęĮė‚É2ģ1lž}¾ļHŻ­šžž©·—<*µt¤::ē;·Ŗr)bœ)„Ÿxm&H6ÉŒ‰IŁŸ½I-a<˜«)-š’qgj\½i"›"ŲĒ{4ćCj¦T¬Ž5 ć¹ ¦šĆ—ŒNƔ4v0ÕøMĖ&8½æ˜ą=–·‚NIŸ1G:9qĪ„Ųx‹hB.¼E2”pĆ ā :XŽ„1Ń{vŖ‰ F§™[و &f7Leņ›1UŲhģ@&ⲉ5't¢Į"Ž@2øŠä#`.yœĄ—h8ĆĪ p'ā‹8®xL„J 6`ļŠŅ“2 +č!ŌTqń™ŅĒ-‚3ŁUŁH€<)Q”`*A3˜üČ`Ė3:8Š„hrć±¼ą—„jpOÜ+bŸŠć@&7±3;ŠŽDœß“C*&`{‰@(\”GRĄSI<`‚ōsĄŖD`€ń a•6x›R2¤‘ØWhO5…dUgÄ) ‹FĢ©dq¦`‰£ =%9–¢8ÄīB9KŖ<vŽz$ ł‰S‘„)‘K7žAP€³4ĪSg-s$˜ź*;Ą\Ą|M5mØ«‰<ƒ®y!˜F RUM„ {ēy£ģøyI¢]C+Ą%pG ą4>x@JJB Ų¼x±ŁžšŸ_›ķ—77·w›ķ÷ŗÓßywóÆĶö«Ū÷?_æķ`¢žjūķöĻŪÆ_{üpW›ķw×oļĢėP“U+b+PcµŽ¢HĶfļA÷„yńĀlæ7Ū?Żžpk¶ß˜?|ųųÓ,~w{c«õ4_|±Įæ šŅÄ2ąAlƒ‚bŠ6"°. {˜—ĮH»‰mԐŲ@§S«M„\š<,»7?żrmóĢĀ7ęuU:󝣾ķļ’0-Śęż‘up~7łåź$mRZ ÄVŲZ؟õąyAūņöęNy}Is.uÕK`7Äøū‡ $ö@tlŹ7曁Æ·ÅęŪWļoß~ Y™ķ«o^šķ׿ޙ«„ų_½łēõfū5xø¾¹ū€“ėĘņ‡Ūļß^PW¬C½žłŻ›Æn5ŖBvIæzókiŚN5śweÜ /ŒżZǵõkóuĢ׊ÆmŒƒ]]1 @-w9WK3Mжoō‘ŽVŸž2¢`ĆåŠK£”Ź1Ł Ļ[° c9ĮØ\üM ZA XÄ/½vŻV©˜R¹¤5'‚?0Ѽeŗņ4rA„H„2ĄD –ł "Še²s¶><īŁ.é`Gƹ諭,1ų~8•§°ķ]’gEąąåßDßlÕ,Ky{Śf.(—Hߞ˜Āfė4ü#š eó¹XäUOŪĢå’B²9”«Y“Ą"—Ž,r¦õ2X“3‚ŠL “€”+»b™Œ=Nœ¼…uė"źQⲂGTw'CÖ"J-ć×"d!³«»(…Ō4 EūüĮ 9ęq0kĻ f5Ž •Ę5kW×äj»hšņéŅīˆ+Į‡YQC;į wxĖĽsV„13XfŌ(-2įĢ$čé°/źJƒ;@‹M•åŒyhfNŪÓ¼\Ņ bTĄ?CKāA1aŖAĀ“¼äKņ«XD(<į¢²Ö …o*p›¹<-—K¦9€Gc5ē€Vdw„OmŌUAŅ,Oó’.ÉKVyD¤5vž2Ģ|šö4/÷+>šXė““Į#ÉCłQ°$”xųįˆ5•é'–³^øŽ…S^ųį@?v?Œģ? Ÿ¶ģÖ 0÷JįłīŗÜw×|¶ņįĀ»³p1zŲ5’_Šv į~¹æĘ6Ułp+=m`“{wl`÷Lļ”&ž-o9–w~¶¼Ėņ.ĒHwķŲGžČ? \hb„š"ž¤ś\A,Čö\A†•ŃęSž'=ū łč !®:Ø„ćƒ¦õˆYŠ E™ĢwŸ 1W<ĘEhg‰k t”~Z Cw~ƒ‘…¤4$°Įš¹LŹśX5…ü` {ūīīŚ~ūćżĻHŽ¢{ ”Xˆõ³=*}ÄĻNwŹ>=ʼnĒ)NLĻ5”˜Ļõ+ĮæĢ OxČēŠ ¹cŌg‹ ²vüt0o9¬¢õØųhm@MįŅ%Ń{:AæĄƒ’t ĖōlX¦3rŪ”×eX§hŅqßVŃęę,ß®¢MØScZE›„•™_G*jpYEĖW¹­ć—O¬ŪżK'htWņ²ŲčŹ:Śąõ=ąŁO Wć÷uöÉó{ūŪ^m² ’ń:%dś^sĪa¾XDŖ… ,ģ§Ŗ}‘FźNs īmDŹ‚¶Ö&ś¼'ķļżŃĘd”ālƕµ=<­¶5Ž‡ÆĄżŒĀXų!­¦:ołõ€Fxo‘jł5LĄx…Kj LøŽ:Žó«œ½ļ‚$2V]±K#&jD„ĮˆćHŅq_1.|Ł¢}D_ēō.XŠ0D~X$A>·ŽńĮī‚3›\(C>8ĪŹY€›S9ĮŃ4ȌLeÕ¼ü%fOž3÷äC(ŸŽČōG Dģ¦o1įu„T~ČB©Q'¢\ņC”Ō”ø5j)p(£ćR=1;ZÉśWŌ>o«ZϚvŠ½÷÷Š;ö¶Ŗ,½×Cģ*Ų1äsæ<öĖ邖:FøEßõT뻃RXŽī‘K{`•ƒĆŪ,°4c`jg¹öµh€Õī!÷½æ¦¦:Ī™‹Wm=.§gę{/gK—c%5¢\ŪGé«J ­»rŒ=†UVWYļÓÅßļ­iU9yü­_¶bSmŻŻļ02~Ļõ )æ}ė”'̘ ųphŚv =*ƒź®˜ģwø[Ø)t±ühŠ!¬ƒ›Ń»0‹CLbpČŚ–¾~qÉąH¼°A£Ļ,M½–śēš„‹z«&Op×9„^*lĶ_˜÷P.ś®³;P=™ŌӍD pmŸwąyģŠ!  &ƒb§č ĆŲ«÷Sއ›¢,UĶA÷ķ1éŲa/‘©7«ėb$³é’¤ĪjČ| ÅLŖŖŒŗ!9Ż;źl7¾mÕHƒdTQ«ß@k¾«'ėµ»Č^OTĘż,)` ¾ū©¦Øļ}½æŅ$Gō¶ļ8Ļʬų»=Ęéšvģ9µż^3MĶżÅŃ:Ē™3=.ŃUrP’͊ ÓÅŖņ”&lČEAqŲ©£J׏;µLÕŠøC§Ō¶5EĘ4Ņ5:Ėu–Ź|¦>B©Žö憼÷cóŽvĶu äLrŃż‚ßkl 'īV—^¼JŒŸÜj©EK¢ ĻĖo”g)ūĀ 8-Z2: łżč³}Śł=<ĆU` V2gKе'g½ęLZø`},ŌRįg‹÷£¹6³Ÿć×īū€‡ņ”ˆ{ĀČ.ž”“ž›gõ‰µZ4ĶVCŃƼ‘½ö„M½KG»q,㤟)ńŸFÜ2(Mõaj]²Ż«Q"YKÜ¢³eįķ{{J/år`UĖĀž:źŽšTš •b“Ōü»£f# (étüæUK`šŖµrŖZŠŗØiBŃ"×s¼0³~MT—JI{hŠ"Ć©ʌ¢°°ß’~ÓæCī2åµs8"ü!ÖŻū«N±“Oļg.ĶĶĀ5šƒi„.sjń™S—ŁČēŌe$ń4ńžrōc©ū FŠ Ū…ļĆ9ł›šœīÓĒzz×wļ颊|ģæ®ö·Ļ»śpŠū½IŗŁ\jå*:ŗŠj8ģQē‡6{źNõĮJģFWČ4;rŗ©h×;_mž NmŁ@ endstream endobj 773 0 obj << /Length1 1476 /Length2 7777 /Length3 0 /Length 8775 /Filter /FlateDecode >> stream xŚwT”]Ū.Ż)ĀŠ C‡ŅŻ!  0ĄĢĄ0tH7҈€ˆt‰" ŅŻŻ‚H+ ść[ß’~ē¬uĪz֚ēŁ÷}ݵ÷uķµ†I׀OĪn V†Ć|‚ü@)€‚–¼©  óBxll†¤+ų›1įĆ¤žD!ļmŠ ä=R Ø{ŗ…‚bR‚āR@ @”üGHA^{€?@{ą±)ĄŻ|G'ä}”æ?œv\AIIqŽ?ĀrP0b‚“@H'0ō¾¢Č`·ƒ€‘¾’JĮ)ķ„DŗI x{{óƒ üp„£ /Ą‚tčƒ=Ą/°=ą÷Šmü÷lüxlC'ˆĒŸøŅ„ī ®;0Ģć>ĘfFīĖ Ō4:n`؟`Ķ?¼€æv Č/ųOŗæ¢'‚ĄžŁŁĮ”n ˜/ęp€ø‚:ʚüH$/³’ ¹zĄļćA^ ˆ+ČöšGļ €²œt?ā_zŲ! nH~ˆėļ!~§¹ßg%˜½ ƐxæūS„ Ąv÷ļ+š÷łŗĄąŽ0’–˜½ĆļAģ=ŻŒ`wO°šā_ {ŽlŽ`$@()&&*»Ą>vNæKśŗ’p ž6ßOčļw8Ü„8€ļ_xž /0‰šś’oĒæWx‚‚{ˆ` v„Ąšž“żŽ vųs}OÄ`¼g  ųūłēĖņždöp˜«ļąœ²€ŗ¢¶ž¦>Ļß3’敗‡ūüł„Ä|’"Ą{Ž $„D’NōĻü=žV]äÆöžWF5˜ łē÷Ū÷÷$^‘ƒó/épž]A~Ļi0€ó?°Šķī’æ…šGČ’’æ³üæ%šß-){ŗŗžąü ń@Pˆ«ļ_{R{"— ģæ”OĮŹZīj’ß>5$č^&r0Ē{Ŗó Šš…E’t@<”!>`{]ŅĪéO6ż}÷%\!0°.Üņūņ¹’Ėw/?;—ū ĘćžĢžpļÕõļĀJ0;øżo ‰Š@Čļž÷+Q€æą½^ķĮ> Ąƒ#ļC÷#ą¼ß'+, ø‚{’y^÷¾?ĢB’Ēߗõ¼žĒ.p½ļē_F @ yzüaųWwvžĽˆ’ąŃ}믒ø1Ą`°ŽĀ,ÜīQøsMxĖå{9:o¾­ŃĒSl[O3¹ųü­ž×DŲé\ļrB×ēré$Ė›JœgOļü÷ė°£šRõšon­“õ'¶šńęĒ){Ē ÷åj{āŅó>łpē`ā‚ŽˆŚ®Ī–ēī)A¤›Ov鯭āSŪS¾49»„÷õ˜žmł$_‚Q¼EHÉ4ŪŪW3ŌĢXH¾‡8ÜŽ|ˆ§ĻΧ¼ūÅØžĢƒx \äo¶.ōüjĘo„ŅPČ£ƒ†•ĘŒś!śe=óGī–™r=ķ½ąWrM}‰#SxŅ/*¾ĖJģ/ǐļ®Ų£Ÿ‡źŗūĪĢ’ĀüR[øé~dÖåŪŃ׈‹­.l釪ŁĖ’|Č­uö’œ9ÕĆ\"ū6Ö’yšÖZ"©ōŗ*ę§ÜeU(ū²ģ­ :ø7ea‘Å…†LCīyz½FŹĻµqA¦ķa„ļÄ"¼©›6øÜ#²ą±„y.žł$źÄ±aĀ#“øÕ}?ŲŽŃ«^_“"ž _”¼żŁL"wlØ ö5ąĒtĀ*鹥>¼lšsNnS–Dt6Š›‰Ä–2³ę5iĻIgł5€äŌp܈sÅóy”s‡‚+žü'égš›IÉžC. õEu©ØqEEņog¤‚SŠO‰×tvŻ4s¬©Ūūfń?Ÿ3“ ™LķæDķ¦H"hdƒ†mĖtčĄXōŅģŠ’Ūt{?æóroN²Å]ņó×ĀÆ_ƒ~BRŠčēl`b ŌČųRGś¹S×½t)5ézzdЁd ļó¦üŚć•ń˰šP '”ČEźKƒ° tFŁ`W2„‡4¾&”‡½RŚ2ˆAŸ[Å­X”7sGåńRÓŌb®¦§^ 舣öd¾±‡Iq˜Ļ`†0–UĮŸ½QĀąÉū‚³`7CģYlŒm┌Åoy§żv KÖxs•Łļ "ųU·e‘Ÿ¶ŗšcó"“–sBw7E4ŹĖķL'l-÷ē&+čÄ¢÷ĪzŖHLYt[!g–,Żqr0ićZĮõµwrļŽoµģ3œp–;„“,¦„āų²*‰©³OČŽÖ ?ŲŅHŗD*Š×k¦&4öryQŗv…Q”T<ĀžyōˆźĮ+Ē–ÜŸķÜ·Qk— %H Ŗ„J “9F‘JfRYŚs§¦B hÄĢŠŌF¹ņų8E ņ>ONłčuūŗžž\ĆfÖÆōȱ]ÓŹņēŖö_ [ļndTCń°Š†%„Tf”rc6‡įfĻłEC<˜EI5ńŸŖ6,¶G–^¦ T‰6ŻbNJįļF3W 7žG2Ž·Mć”&Éų4ŁĘįŠļ–5Ņ 5^Hl©āē$zs-=P&‹{¢a‰źĘ=M€lŻČTµ!MMĆ:UžÉž_é£;Qac±‘²Ó÷y%+Čś%‹(›ÄqļsÉÕ³[jµ›z¾›šl¤Kå[/tŁO)ÆÖ£«²ymz³Ā< 4$ŠŻRW`ēIļ—o+np°G QCĶõÓV'~Ģ6ßΤ¹WYc—š²Ī6W~4nłõRʵ‚­F+‰lĄ‰"³H¦/}E ·ž&įżśŖÜ>æüFĖńŃ-Ą‡×+³\»DÓU>gąč|s–’˜mɦ%ĖŅ14åeóĮ{ōä—w—jEų&ŽāC5ońŠs9¬dpēs{܎ƒ^ų”ĢĘrNÅń7”6Ķ{·Žģū īéŪ!ūAq=˜Q٧ޘŽo¦p’Ҧ¼+˜~)IĪņQöm'M†*qģgudwŎĪ;r ŒxWl­ėĢńÆā)u7+ķ1¼6śY ‡®RBl?¬Ā®Lń5Gūʈ±Ī»UuČRŒÜN_W¢ń„®¬¶Æī7C%›śõ¦Ā@¼ż\ÅåĆČA =ō׏ĆS)õŅžf<ö¬P潩\œ}ÅĮ<Ś/3Š“\Ŗ‘ĖŖė[wŅÜhO©ēj<ųO¤ófNżØŅL¹‚š?×õ„4l+šfłę°g§D¢”£%Öėξ čä£ _Nßfhx¢zū¹›6Ā:ī0ž’PĮŚęĢ2гŃTØē Zß0NŠŃŒČ“@ɚøå(5KīņhD#;u­²¶IŖŠBä›R74²G¬łĒęÓÄ]ÄZīŽ‰Bx•6}Ŗ &Ś‚}ŠCæI«µŽ$xźŖoLH.Ķ:·ŁŽn|µ˜ĘŽśĀĀ!ź” ±¹T)yā…Õ5²lšc‚łŁŻ’IƒŽøLłāśÜ]¶³ä PžszųÆ._©‰3¼ŹMå˜°w£ĪBa ©ć[¹m¬ć‘iŗĪć‡ģ<¤{C=“WÓÆ·ŠĘ}?ö?Oz³œ Ę+=Ąöų×čžW®Æ"?Ÿ$£×óØZz˜”Ź.ĶŻ1dC’ŒūHk ”ŪRo—,)1ź É`(‹mĪ÷ÅąH—ė·ŸĮĮR"Œ¹\%CŖÖ\z»dA®FŸß­īLCr“e²Ū8œņC ØiŅxļ•D¦"ÖæcŗĢK‹ēŹ—)MU,n¾|ķ’ ¢k_4P(„>Ęnćž5B·:8T¹ń„{’ǶōädłO6;ĻŅŻ =­SūlµŠ ē3¹ƒ•—Jrl(ѤJ%rN©8ΦŪ•°Ē oPł:2_ķ6Ź‹aGéķ}®Ie“żšĄOš(š“TIJ/•ńy}Ōō ±®ĪņĀõ¤§^‘‹õØęŌJI‰ÄMK ))ĮB’%²[¶“2uąījrCyKó=±U™Ś:ˆØJ¢V[ļĶÜ\–7°NST:ŌmĘĒÉ|R?éO<+c€UÖŁ{­uzŃżÜ~Ų¶…ūZ-Ł¬Aq¢±(Į|ųba–­F-Ę 'd‹_7cMę~au©īrł$…øxl/0xj6Q®qęrżāĀ’Č3‹Ī ¬Ejffõī\ä<ÄęąĮZFƹGłē!.E Ū$yØår'MeŁYńX$Ž'˜ ĄĆizÉĪüŠi@…Ž[|ĮNłxlPµ2œßš£4äqU˜›¬‚4Y8Ķq©ņnf_źn”²×čų)¾źPĮiä•mƒc‰ˆrLL™‘ļÜKļoĢ¢m÷żW½ĮiB±Oµ¹Øß §,nģe4×h¾ąŗp’^óǼ#éy3H‰Ģēo¹ĶېŁõČ š ĢPÖBĻÉuåż™”••ų›Ņ^>š #¾’·6;T‚īžˆ_ššA'Õ½ŗ®äWīć>b©”9NA'u™EļPŚ-yqT9¼‘Ń>ތ¦`Ś·|V7ÄgöZĒ_ą[0*õJe8Œ°+=Љ£‚ó«uĪB™Tz…ČL”µˆƒi†0ģĄ~Rå‡čäg‡ś6ųeąW lÄE[±«WĄüpī“c—eµ†YⷌżŁ—%ŠyĢaS’Ī//I×"¬ ĪÕØčJ°?ą43Ž=ņ§„cäL¾¦Iœ«-"9‘ÜŌ˚ÖUę¢Y‡Å”¦|®š9Æ …XĮN·Æ4®:N_u¶œh,6ł¾ÆKUįĢb/ŒŹ~Ņ{Õsԃ?Ń+e²uc'ɇ7ā“Ģ<ÉØĄŁ¢š¾W<™§ICN ł…ģ™bMēNŠsÄēå4±åNżvu±¬ńFLGĢų "ƞ«sĪx°k‹ÉATAȤųģ ēÉ;©}ćāœx3Ūmē™+eO˜ŠC­ƒĖū“96D³—¹Šx× Ū WArĶĆzsż‡ž­Ł‹Øą«$Cn’­`½:z‡1ć ¹VÉaĮŁĮhW.‘aALļP }Gœz› ·— %v¼½üŠņ3LXčĆl¹¾cŹŠ.;”®r7ņ¶vqĻåĘĆn9AswųĖČ"3q’t“śM«‰ļt]k™óō(œE“/’>;gC^pY!:„=Ą%ƛ¾ŽY“OūxüA•%­š%•@q“ŽTŠmpžĒŠ8aÅ·„b‘„Åśüż_Š·ńēżü0ļ¦Ų”l5ŽŒĄ)®M^ԟZ››<ńhŠ['¶F?±¾Ģ° ”ĀčN~0Į†šŖß Ą&w"eŃhŅ2X±““Æ•hvuŗ³Pķ57i{¼:A żłŪĖ só‡Õš _·Wea»N3+ėFégMœZI6£} uÜš” ŹĢ×·x“.󹎏I±Ö'Ā3‰2HWA'õö„]łĢēńj@”Üe&—…KłFEPŁhwˆš u/­łö™BåGų'ōŠ_”ņß2N/łäS¼VŒv\0šDCC5³äj3_īF՝†) ޼śeTÖūŗĄwūķS'¼A‰!Ƨ‡b«”Üm µVtöĆKj<ę?-¤;$Ėŗ…įzķŹ¶¦iwU¢ÕÆĪ…>c‹T×Ė«Rœ‘Õc ŃŗųĀwDZĮž—#€’KOõY¬7°ŹwńŚ-ŃĶX O]v¾`'N!ĄŪŠiŲģǁĪ8Ź ŌFOÉ:L©1‹š›xhŽĮ„Y«}PŌYšK‹ź—I/×±Zö  ¤ŗ)$rBf铎ZOGŸ·s†ē6RåZ}8x wrģj¼  TH8 IģØž˜Æ™sŚ'ē²ĶœąMķ=Ź¢ų¹K ©c^6;?Éō`&0—Nךh„Ó:Łjń¦ū óSĮÜ»)hŁ}2Šlóø’<č?"°¦eœ'>wvņ ģś±’õÜå“$Üē6ŗĄÕu1›iāÖ±DH‰ń‹å€żąŹiQöLؓ!ĻØü“®Ü‹Ź·£B&"ńN黆–Wū;ųĮѾĄ“ž¾„jūRāśż¼IoYļ£ ×\ ®øWšĘ®+EąŖ§öMńk‰: ńQ źö,ķö#1"©Ńź/ļ‚–^wĢ£,—āŃ,9 㭜7±rĘ÷üĪĄYMµ‡|ēW\‡•S¦a›?f-IChK8„w˜aŒ'.ß/3ĢŁD,O"Č~|ĢģŅ¹e„:ozńßāš×·n&¦²6)ghMPSČĆä50;te1ŠwwNuč¹_s¹½„Ž«t\‹ŠK»9Ø1©9(ź×öŸ¢ź™:sėĒ6ę=5.ōVÓEOłx‰ŲŹ-ü2>µjųšQóS¹|łƒ2ķqFéŪ%¹ūl?‚.«mó4jLfžB×WĄ`&…Ÿe&TbēŖ²!ڌõo©€i“˜[^IæWÕ,†ž“ÅąGęŽĶvX«™ēQ£‘R`ĮćĀØšĘŖ‰V£©³1ÕZŪ ±ÉģĆ!‡óoĒß;^Ü4÷/!qXƒ G'м oÜŠž­<ūöĀMEOu7gsPē6ČÅłÕÜÄ]˜“W $&'¬–„zHX„āė§ššÓÖŖA­’ŽÕŗŃŁ…@(˜œÉ£ų]k®0h‘‰™7’āĪł®āõ¬Q½‡åĆÖė•­Õ•­“NUrüņŅŲ·sE©Lm~­žĒĮRÅĒ%–1ü–ŗ D”e–=ĢhiøņÓØxXŻo½+JBŽY·ĒÜ2¼÷Ęü…wœŅž*9DŽVx±::š1­éīxŚ[,Ił½–=óHzćhpö+Łv™6w1!eĖ<&ō!Ė2)g½…RŸŻMT­L„ņ9LµxĶӂ\ŅĄüŻdĘā„>š^ĔøĶ­:ķTTh’Œ„rr½ öģuō«į Q†q?waćņŻž;Ą‘–õEĖģHÜu&B¼ćÖ'ź'éVӹĊ®čņP8ĮšŽÉ}QZLœbJ¹<ŲāŌEźPIæ»vqć¶É§ż!wŗ±¤xИõ\]Ī­¶‰äÜȾ‚ £tśÕlßéLµĮ% ˜“ėŖmõŁCōCQS.ēRī÷€Pę‹öļ*£ū¤Z‹E TY£®ū ę?h]A½n23A p®m@äģ ā`—ŌŌCoR”žI¤ ØG2`MZ1+ő%ō9šĖt g'N”ÕLzńS®/?qG©óśĮ“ÖŚ?_Ćn=?ĪxW¼}ū*<ļlnŗÖR›µRō|Ī ÖŽgŪ†|-Ēš‚ŹN[B‡yņ•ėCÜEŗ¬…ā|7a¢·)­øĪ°D—’u‡Ŗ%ödPо^š]-‹cĄ‘ÓTŗøōūĖŽčÖ¼õ=”¾$hŠą»‡9oÕĀ÷*Œ^Žś¢³A ł®"=§ ųeoĶJ{éXLEz…wė`"‡4ܒfÖØĖ@ö8 ÆŌ’øįūÄąpr~°å—q;_²o°óqųs¦lݶwµ š››BžĒ<ł8Aµą©^ģ—F`¶‹õīąŌ€ōųk ģ Ó w2”ŗ(ćó×q¶NyÕŃ„æ0×ū”‹ŗ>¬ļ.x™­”pLł~ć<\o[bĖ~~=¬#˜ųK«S€Ļ#]z酘cun<ć`OĄ@E : Čļ'DeĄŽ„TU?÷qc<ĶȶܑĢ;µ6J—‚%ŗ šwt”ž C*/N6o³ąE®Ā½ęIA˜śPW #wūĻŻSŌc’ę&"’f؋UŌĶ3ģī‰duаŽ* Yu­2_'^QuuöĻ&żņ÷­Ķė9øĖśŪܽc/E'öīTӊQ°¹‡Ż袜5JųŠxż‹¹$ ž¬…\S¢Ų›‡dėŹV“UTŪųUę悬Ŗ–²f‡Ńϱ kķŗÖo˜ FóKį74ÅŁ…”Š8~3Źŗfsą'ś^~Õ§ŪŚ{+ė?ń-# ār…löCŌ ė“E²{iJ7 ŸŃ¹3§³c,“*}‡tŅ vAŸĻþiņ§6Ē6¤Y*{ēŠ‹E 1iģc¹}]"w7Æ,˜ŽI)Zē›ķڌ»F9Š~½ŽRd/ÓĄwĊ+'‡x3x+Ŗ«ąĮp÷|]‰Łƒžió„ā ³dŅo5_¾>„ż2›Eųėå<“?‘ōĪdžū’gøĖöą ?ŒāŁÓuŻH§ČÓĒ夅1 ~ŅĪ€ē9ļk‰ż:¼IbŒr^°ŅEt)›K=Ģ‹Ža½²’ĄxŅĶÆ÷=ĆG{ ¦į刻.ßußNWC eÆÆ“O,Æis…r£AŸn­ޘ%ą4Ś‘ö+”4%‘/—ʼ3M#Ø0·a=°É-+¢Ø“t±Ž3#Gėģ^F„Ć:ģ8čm=u#×'%Yż4\)¢Z)™čy~>HĢ,RĀ)śˆŽ˜~§ūx éeK—jĘ Ē„ŪĆs“i7ē?•ņtØUQ<‘)ė©_d“¬D¤śKū5#ŅŻ%TY”t<[ä|ūł!šˆ]é@ģTŻŽ¦łż6ƲW)źø5xdńj$Æ:EōŠÜÄVÆv|Š1+÷*ްŗ1Šķ€}}|W,Z =ø‘åĖ”;†¤1UbÅÄöwdm”ćV†yų›Ń!ŚqóVŽÅCŸ’H`Ó÷ƒ½ŅĪct;#ćY -”H«I ­s{MžNżĮĪæśbõ"dKolGˆY`›”V1¦‡.Ęt$½ß·‚RWævĀšqü·ü‚Š/ßń:>ćjkū„ļŖŃ~/čą;g”ę2{ÉWzžāI–äžX˜ń•čE&2ź€źųaöGT«;œ‡ †ĶČäƒÜźŠSV)nE©gźUnóöč³J÷ož;­)„¢ŖMĢ ‚åÉR©Ī,Š+Gd¶6åņß?9(ˆüJŁNųŌg›rĒɎØyłĘžäH¶u¦ŅaUIøżž×®jƒ“ģk—iŹ€ŠlŠV£āKsźā¢kę÷‡’³Xe$ÅŲ&'ĶŹ5ü•R>źŸFóŌĮ3½@~’SKōĒWbLnqQė¾]C’t3AJs†”i2 bÖ£ø8äV‰$ßPe“bgUįÕĮ’YņĒDé³ųęÖĆĻȟ¶¾»zEšiˆ{ j8Ē7£Ō|0’¾}#I›ķÉå"Į;}Ōz_ĮE«bQ­t Úåh%x€ųõęQH]jdÉ%׈.ß!/ž”# ŖÕļO|ņHoԚDö½ó†@ėołJ_GEü+ŒJ)“hۘYƒBMŽ„G‰i®Œ%+. ½xt OwĮņź™”¬zvį„•-X;d~iÄĮļ}6š"Å|ąšEŽ‹\¶Ģ £Mož‰DŸõvDōK’·Įŗģ×`ū©ģ'Ē/³—hzŁ‚UGGXnG’ŻŪø’^É{ endstream endobj 775 0 obj << /Length1 2341 /Length2 18700 /Length3 0 /Length 20050 /Filter /FlateDecode >> stream xڌ¶tœk6ŪhŌ$Ū¶mŪ™Ų6Ū¶4N“4il§QcŪvr²÷‡īļ?’Zē¬Ykę½n]Ļ­ē2"E:!S{c ø½ =#7@DNX“‰ĄČČBĻČČ GF¦jébüŽLčälioĒż ' ‘ˇLŌČåĆPĪŽ ķj`b0±s3qp32˜¹žchļÄ 5r³4ČѤķķ€Īpd"öžN–ę.<’yPšP˜øø8h’vŁ,MŒģrF.@ŪF#€Š½‰%ŠÅóBPņZøø8p30ø»»ÓŁ:ÓŪ;™óSŃÜ-],Ź@g “ŠšWŹy#[ąæS£‡#ØZX:’K”boęānä|l,M€vĪ.®v¦@'Ą;@EJ ą“ū—±ģæ h’.€‰žéæįžķżW K»æLLģmŒģ<-ķĢf–6@€‚ø,½‹‡ -ĄČĪō/C#gū#7#K#ćƒænR}dųļüœMœ,\œé-mžŹ‘įÆ0e³3±·µڹ8Ćżu>QK' ÉGŻ=žŻ\k;{w;ļ’ 3K;S³æŅ0uu`P³³ttJ‰žŪęC÷Gft°122r°s€Ž ‡‰Ć_ŖžĄæ•L‰?ršõv°w˜}¤ōµ4~üĄy;¹.N®@_ļ*žĮ11L-M\Ę@sK;ø?Ń?Ä@³įž;Yzt?ʏ Ąų×ēæOzfjogćłĒüļ3Ø)Ź‹ŖÉŃü;å’*……ķ=Žtlģ:f6F;+€ććĮ÷ćü·’Éžo©¢‘åæO÷ˆRvfö®%ńQ½’$āöļÉ ü÷ŚPž—AŽžcžŹ?ćÆĖČĘhņńÅō’{ žvłæĶž_Qž?Ē’’<‘ø«ĶßzŹüæōF¶–6ž’¶ų˜gW—Ż³’Ų»’ÓTųƅ¶·1ż?uR.F"dgnóß2Z:‹[zM-]L,ž5D’éĀGpK; ¢½³å_€Ž‰‘ń’Š}ģœ‰õĒ„āüŃ«æUĄ•ś_J1;{Óævł£ļFNNFžp­’@lo¦%5zü=Ūz;{—ĄGr¾3{'øæ:ŹĪ`śKō/Ä`žƒ8 "'€Aōā0ˆżq0Ä’ fƒäÄ`śƒX ŅŠ»ĢōĮ.ū}°ĖżAģņŠ»Āē»āōĮ®ü}°«üAģŖŠ»Ś×ŸŃōĮgü}š™ü±~Dłøōl’X’Õ9Ó@&šæš£1 ’š’0룗FĪ*ś—£ėĒü 󑊣ųa`öų—Ņņ Ė_Šķ¬éķ]žīĆÄüš#?ō¬Űšt°ųx ü±ųYž~Ō䟧ū(Šķ?N÷Q‚?¾lÕ“ū˜ąč?Žo’‡īĆŁžŌĒuų£žęšńƲ³šż)+Óæ„N’SM֏ś:|\%ö:Ąś‘Ŗƒ«ó?ādūZ0}¤öGĖöŗż#w¶sē‹łĆÉŹ‹ŒĮÅĀ ųrœŲÅŻžpżü(žŪ?ąGžī’čå‡÷?Ș?Ā{ž~ŌĘėOn‘¼€N’¢śŸĖĄÄÕé£8._×Óõü÷[ōšĄ-ĪŪ›š[Õ·?Ō į¹ÓķNšĶķj¤SŃy/:żt}B‚N”ŖÉž²īt'”2܃²²-Fy+øDųź}ÜŚö#I©ķŁēÅ Ayz· ī÷Ō§Éāc”†~|ŲĻtŖ‚{>Ǝ>źÖą­ ŅdłŽ®œHŠ…čī} żĖc”ó»J{5ģ2š/æčbŌ¢uĖfÉ Œs갉”\čšaØŃ.<goļfŠņ&ß „hą|ObXJ¼µ7˜cē¼V«T™»pHq“±ńĮoŃƦɽ…R„±¼æ–FÆó-ärDÄ -÷%ĪÉØćū)b;—ÓńeČv¢“v幛d9ŁØ›LŹČ)`¼CȾJ˜%U“ 5Čłlé’ųJ‚Æ’Ø jJ󳛠ėäL­“Ś'1››)fĀ–ąŽ}«#ĒżåŠ”ŅhZB2Å ddI^įÓÆq•_1åaē˜Ębož÷śŅ{:+p«0ŸR[Ż5ī>xN,ʼngcÅʃ¤óÓגĪx‹a¦ZŒ[Ģ )ƒ®šķ)ę7–¤ļ—Į“RĢXĀH§•9œCŅéėŒs¶ĪŸÕĄ4¦”žL5Oˆ>O÷ ͼętœV,+”°ž•£$cąõf"é3ü ¦Ę? dīpžårŪr7«įŗ‹&iėŲfč3 5ͬģłĻ³¦Į4ŁÜ°%Ī}Śu‘åõ#'ŌČ ©r—5ā2GS„év“ŲT ȜȒŌeåV=Mr®ē\ēØLü:U3Bņ<ėĀoNy|…Ō–ńW”¼HpĻ⽓.¬ĪäĮۘ¦—÷;.PŸ©u„‘•¦1˜†±ši܂syÓr“Y,$ü Ōu…ɐ½PrŒåUO”šĮ=zä2j‡6X£ ?mę’ Qo+yt³Žvi”ūģćUŁ©]h™Å“+_‡  CČĄł„C|3R.)“ÄŃ1/ĄO\™[”ƒår’:ģĪC=½nĆß /.Ž(¬±óÄ¢B@ōÖVĢLŻt‚5;nˆĶÉ­’#šŹF­ŗ%XŖšF@ǽ wkĢ–\{ß° gŗ<Æc­ĮŁT(^šFń©…Śyļń×T Ŗ)׬°ŃFqŹ—%Ų1£ŅTóz¦¶3dh݃hĘCXŽS#åI}TŹĢY,+T’Q"[÷5ę6’6»Q§MRŸØ÷iU“SYčä$½)ļJĶ2Ć÷'Ö~z‰wōļU;Ė>ŠĢĀGę+ī×ĘÖ]āµ¹ššņUefV<±¦$ń6Ä4ģ'•ų=ę`{qŽ·ØŌkg§i8Óšč“*J;HĢ„m…ĻUä_ķ¾įčÖė)Eq m­¶ö°ŪąŲ1s…Śźµ_\Ņ3,}-ŃÕ"eĒÕ” T‹$h‰–+P8”Dœ¬§}Ł”­ŁŖĄÖ½„Ž|šb”(+%ŸJa/ ¾`N[Šģ$ƒ¤”L¹É“0¬Ē]cØK±¦DNŒ³NGqØAr1¼Ó?ī} ĆŽš«Ó• ō;ŅB7ø+Ml|ƄyF7!ėBö£Ä Z‚“v[pFBöMärœwß›ŚšŽĪgE«žpžHB• Ī€} W¢ėuų²OA™!G^Ļшڊšź¢½ž ”ė„ļļƖ"WÖĀFÜš…ŗ£¹’d鈷6z"E46ŗ¶MöŚĢŠ&9įd¤ćgē(čŻqŽp±cϽ xåŗ«Žą’ļęĮ"ń|ܰ©T‚5,-ĄŖsOoÆß¾ŪÅ£³ö<ŃZ¬[˦°¦Ō×4Œž( æß0x+Ÿķ_ŹGX.³ż©IŃŹ®FŠŲC3 aEō»Ļy{Axļ­5’eN{Ļā ŗGmō±q«k^ičt]ā€6ć\½Õ9Ē«+åeWČŃæ Q‚`”p€×Ħ|ą|ņ;—Šˆd³)xlĢWvˆœŌ1—ž.B]°½)Ķü!óYš‘ŸÖ‰zZTóN‹·œē?ų×78$óņŪ Aūb”Ūż)ś¾S”:ĮżŲśž+¶!Obx¾¬¤\Ū/Kd? .JQ,J¤m“%ŅwžćUŸŚW¶%†žPEō(ņ¢ć16īQm×#āHŅD¢jłƒåĘņAcįŅr—:H@Ępi8· eńļŻ÷Мg¢3”¹*I°ųg4’¼dM@U÷ńóćył²­×SĘ]Ųżnž3f¹J"hÕi?b/¾‹< KæÜŖē–Wišķ¦€öE³ąŽ“2†¢°%’õĪŌqÉłÉ²[øŗųœ®…u}ś÷jČ ”lNB(° ˆósjØĪüy)\%·2.V0ƶ÷օ{Ū@d€'¾hĪŃŗ±Žąb.ō;ļłø„łīķļĒ5ŹbC擨Ö×bģe/cHĘmųŃ[:lUõZļöŲÉóų(ż0 ŗšąÖbZ,ž k“üe`§ė)üS+?'0ƌE)iŠ.“‚Ńszż“;/–äVFĄ³¾ŽĒ”ū‚ęrĮV½‚Ć“ĢGŪ;юóūÖWäžyåĢĶ:~¶@©ōąŠ§ę[‹j O¢mkõQ•”jŽ0)ųU‹!#Õ¤[ŒUūćįĄūąXŹj Sg5©¾s½§™ 9ŸČĢSé]­ e¤J ĻäfVSJ”ułøķĻ-ŽÄŸlu#zÖC՜źp ēBē||“N·õ}’;ź][[Ją}Õē+>݁‘Z¢Ē·ü^įļ¹ĘœS­Óšˆóråµ?£æ”ż.ŪB³„sˆŻH¢t:/GČ÷ŪYeŗĪ„ļYˆĖ„ęåń7„­ŃŸa/Ł5Ė”Uģr˜ųźsQmŻ®Ģłƒ£é†€ß>*ü{ ßܐ#’«š³`[­ŚAŽaŽ°xXĒ­,٬­ŚēģöōFa`@;5i-”½Ē&‹ å¶ēZ“C§P§;ś5$ŻL‡õ-*¦>G ŹŖõ:ń)ø!!ʼ-ŒŠ/žųYą‚!+jž ŽŪĪX6üIöGŸcnņ Ó¾›~x…¼²zƒ4ņž7 ęĘU¼]=ŁÉęd-ŗÖ@ŠėĖ¼*Į2D8ė@KŌ6Æ#±†‹°.OŠ×H½—¢"H‚ś[<3ģawOOIŒļ£P5æO¼6cFor—ųé ØgĪĖ ­æ7 ¦Ūūž'ęųÅ'¢śŅ"Ż•†­óŽPqĮŸŖsŲ1ÉrMĄIŠżšāįÓ"Gö Į`æ"Ā(ŒU˜2Æ&a€½qxWDg}KbģĆ£ĻF÷xŚä¦ ?X‘‹’Dæ-åDĆvZ¼W+⠚Ŕ*ėD%6¬ˆģ©  «Ń±ŠKcUŖ3ää|ā˜Šž&÷ĆU·ē†MR,zÖ£$jĮge8ˇšIFćž-]'Ų.$”ŹŽ mŽG7šŠØY‘¶” šÆų˜`q©Ÿ=£č=D~-ä‘éTūšā»Ø+µ‹īD˜3ņ4‚%mއÓµÉ½·,*€[>H„¦ĢŗĀEķ¦O=Įg‹ŃTF0dX~śłÕšĖ°šs9.j«oIM”\ö˘ĮÜżpU~¢›ŃцŹn‡٘5ų¶,‚°°į™‹u±/¬XĻ.rS€nø¤2āĄ8±xĘŃ©&Jm˜ĻŠē乫߮ŖE„u§«:ōLq>(ę!šŒĘ‰ĪĖÆÉž=,č± ĻØsZ/śæčNå)}Óń}įē’čÆ4,+1Šćńŗ• |®ÄõĖÖg­œ5Ė£Œó{š¬! ƕł…g›0äKLVŅϑ Ū~§ć˜Bų”«’É|žJ}Ł/–×6ɰ‡ūƒżHē+‚,ŹüŠ}K7^³*ĀÕ LyxDr=?_;Źåo΋ń¹y¦»Qä$Œ„ÓöÉ.®:3JćcĻbjƒDŸ±ūGu ×āŃŻÅŽÆŖjOŲTj,ÄĄ‡¢+qĀ"ž6š"yؐā•ĮĶß|C9ó¶ŲāŪo,\'fÖmÕ£ŻńŸ©tR~E²ß§īŌāxYŒYśmX _ē "@Öbé3õčā¢s’ɘ÷CŽļ1ū–óš”]ī—)”ļÓī̬k( !]¦ Ęg¢~:T5Šę¬e,Æ«ä ņA=dČ)ų‹<ߌ]’öAÓøA£±ŽŽ0{|Żå21Q@¼aK&«ŠéĖÓ¶­ˆ“·cy£Š÷æÜ½yyĪŪĢR½æ×–/ne Š'·ƒŗVÕlķeœĮ,2ƒ˜€„łRälļ{%mpćš¢ÖŻŸß.‹?ĀęŪ÷\ō””ēīHČ"{ŽØ.q\ńŠ-Ÿo½u9Fhų‰4>Śjį\óķ·éMɞöłßKyÖŃ;暛Iw.õ'Ąņłiµ²éńşW’‹A3óČ@“%z±~`XuŠ’ƒœ}R#ŸP©Ŗ`D>ŹĄ‹®LWł6nŽ”»ŻŅó™q¼: AcĮI†A4\Ö(šĪź IÓ?6|S~n*26_ĄswL Ń×Q[P<ŠÆM"Ԙˆ]PŽpž č(ÖŹ Ö©,[ūå-@ę· ©Ļ¢ØĘ·ŒØ™Eł(ż©jF™ŪĄĆ¾×•f*ßšjéC9sā_¤lOœ—ę•"ĪĢ"M“29yČs¹0m“Tł{)į¬kOH+L$ =ö?*S[›±0„5MrļūE43ŠaŒ®¾ģč—ō³¾b³ćĻ$SYį+”.aśŒõķ=_cōó+‘s”ƧEÜĀģV’vņņŗo}å³Hž_~³¬Rōłl}÷ɟµHüķ$ŌŁ—Zóµ÷·L©UYʵ‰ƒžæ_'o—ąv|w:Ė÷"«Ö]朰/d) \ņ¤^~ńś=Ż‘`ü¶²½²ņŪ\÷žĒ Ż8”'0 £*ØIBµ*Qzńyy®öœ3Vå;ęŠóŲiĶÖÖ1Dwde/<ķ1W*ĒĶ oĄśŅ- ‹Å¶ŹÉzÖ¾"ęŖčH¢'ĢĢILŁ|ZĻn¼’ļ¬}ߘŁT”ß¼YŸcöĻf é¾Ź*Q"ķåŽ9Q¼į_&Ż÷G”»¼…šŲƒńŲō9„S’‡­ˆ,’ŸĀABŹ„ćn{Ą9SHF ā”iZLŌ6+ńUU7A)s©ææˆÉč›.“5v_½©DŃĖōWä‘ūp8†¹ĻI¼āüĪzŹ%ŻP˜–/čųżfcū‹Ż‘YW*Ō#-śĒ ČxēI1qø  U\><Ø<ǁ4G!Äģ&Głī¼L£µöśćČ86Ŗ”=™3ś°²9Ł',Ļn¬š M49õÅZ_‘ņńGĀńŃó΃r3rŚ!Żßóē×¼ŗ }'Ėš…˜ßŲķ'Ļz7% ŽÖņ_ęm/’šļźŚNämˆ(gsRĻ•ŸgEēŚsõčĀ@ļwÆĶØ(NÜ^X#'+»Å¤Õż'tø:mKxĄĀOœā‘œĄˆb€'ć'<śæĪ‚VäƒŅĒ2«¬84JH²~%BĶ@'/Œ4 žV— ōß°ÜĮŅŁ‘*Óāl9ŲĪā«eæØA?4A&ET‘(?F+d”w–e»]™8L%¼v¤‹eŸ77p{ƒ“ݳ/«i(ō“¢j”!bѼœp’‰"«tæ‹ę}ߝī2L¦Ē»3Š„ƒ)ŹJļ¦a‘CF÷Y­ß^—;ÜŌ9c¢ėsŹ0„?{R›3$Ÿ÷}]āØ:R šZbčX %›ō½jøÉ”Ąā -óŠŌ “²įˆ‚ķŗ[AŪ„’*m²Å=L£BŠŌE H;p0*[‡ >rÖ#O«YŽŅ˶¾>ķQi”=÷+ŌjH!+kq\”i¼µ­ü™9šØ=Ž8ĻŲf¤œh˜S]•WøĮŠ.^> 4j“®ōšōkåÄruh*ōAü!Ąv^‹óNŖCåü*oŹ›C[3µqØV)7KÉ9…Ha,Ö©t,‰¶ …āBßcƾ{2_Š«†1öa0z·ĄcŪ2OĮr!ްىA×Ä~2B…{ŒB4šžOPęNh—9­¹t'÷į’¹,¾¤­ĀbzeE¾1Œb|~.tĖ3”}Ļ`Ź4\ŹšRš”†åņ€Ō×>Ī\e5•ÆžŸ˜¶iģbˆ’’ČŖoÖ®¢ ć²Č7Q5yg}ć^_]†…¢2:ć ē8Jī@Kśé2Į"ĢäKéiefЉ.¹]9÷ģéS‡ĒV"f¢My°¶Qײš±/.QÅp„Χ‰ŻUŸšz0‘:é† *ĢRżmx©QĘ¤æąœ¶fw˜įĪQ›8")ųāżńėżŽ¦GÓl$£hĮIėf*J\‘÷ʑŽŃße›¼&łIu—#:Ż;ŒBel™»@©°˜ae»?[ĶN™MĶ7_­Ą†¹‚X¾2ŹXÜĶV J²@ٵj_ćģ€ƒßō£žk|tśšßdM‚¢'˜ šP‹œ(Zfr>łŒ(¾¹*Hū«‰™+7&s®<“‚ėĪź’€¢„œšÅ \`xęBP—īų¼u;Ų‰t%£uü„|•_"FlņP ˜wtÉAšÆnģ<£­}Į“Ÿ½^j8›źķcŃĻA.Ōż•\ŠŁ£`Q­ā”ć7£\¹$j0&ž[ĒU=‡ÉŸq£xēg.ˆu7­ß)Ӟ­åśæßņV_A½VLb6ÄśPŪ=MĶū—&T“įĒŠ„l„V³µ}2-ózŗ»k±Äś„ ¹yń„RIµĒ6ZgźPާĖóŚžüŻįÉjߋŃu€£ŗįÆß"’¦Ł²-ĪõÓŃ;ģüīkÕ@ć\Å3Ź-óµ`&{ĖY²U–ü¬‰²OGƒ1…5†¹naNĮ˜öhp4JŒƒh„̈­œ°Vąį°P™Õņhō“ć½.¦éÄį[WĶpö§,Ļ›"”Ŗļ”×ļ?”X„Ö/‹śJCN“ń]œ„ ½nT|Ł¢?éWĪ“ól#ęūˆ$Ó¤Jļ±×µ·} ci3{ ½”=Ļ/Oā„Ž-®²NPaē˜[ŠŠž¦ß ‡²EĮ±‰ķR~ēü5œĻŽBKp~P‰Vŗcõ’ø@‹0`“ņ3GGśoęĒ—ūōÄnœŗcŸÉM‡yc¬‹"³Ļ°ųĢt—lŽ¢ÖčCįHWƒĘüßżDvƒ¦ś;ĻVß"żhža‘8gö…ņ¦čI 1‹“ –Lö œÕsćĖNł2ŚŻČÜfĀC_ƒĖ|@Ūqō³Ż¾¤ÖtžįDäēåe"—ŻŪĢćö3¦> +ĘKy»¹aXŚśM gļxA¹._ĻŹ®7ÖĆĻRe‹gl…bß~p„ÖXõ—4ü¬…\ͬə"€žĮ„Z>ަD\,AŖKę,ėŽ8²vbGļ%5Ś5ż\¶Ź{N«®p,v(¬×qīįł-©×øČ^ńiŖ; \]ž;."96ZŃén§ @»61QM|JāŖą«ó“:ja7kƒĻ­§1ė$ĆN4Æ%Q»ā5e÷¼ž(Čņ-b&aD“õk8“?ģõN’Fź#—ł“ģ4Ė”/ڹó‘ĖFCaĘjrz?ó-°°±,¦¹Õ‘÷Dßų[v:ż:ÄPŠhNUdˆ,&|5ņ^ė~ŚOÓĻƒŚ—žeałrY)sąč«õÄgX7³UĄ7²Å!¦#]ĖśT@G'č«l \3ꓤ€[lSłzœCbG9é X 6s8‘T®ƒ3u”’²…Æ/ݤjBØŹ„ĘPTk[ÄKU.‹,"fČ!3j~5ļŠY³?±>æ“ĀĀē>©Äē(Rˆ )q8_…x$Ž†ĢØ-„nßȶ ©sĆ„‚O\GŚŽĖe¾ZŠQ?Bń l‹Y÷'ƒ!5įōc²„_Ż{ĪĀį€Ų½»!GÕÉKwōĢkw×>ÕÆ°ž$}оüCĮ–'ŗh hąįĻK•ŚkģĪ„±TXźš:RŻ æŁfŌ‘‹9•±Ķųœ"Ģnž(€)1‘Šj¢°D…,QčģcXöєøńŠ·Ŗ¾œ"–­ÕäKĻR†˜ī[ Ę±(Óų§{lŃānŲø#–·%Žą=*ا ī]3ŸÓwP1†ŻPirö–Ś»ׅū°yū“ŖŻO/Мuąp÷<™Šs'ę{É,0× ~FDā&:6oL[ņ“žJŁ„āļī±Ā)&+ŃFü„ŽNf7ß#7ŠmŻŽ`Ł\#@Ø2žKcņ(¦8nD“B^P¢nśM+"Œ›r“šq³¢yL„/Ė>åEʼłĢNЧ żV6%ļj‰&ØW¶ŹņPh(Վ—6ł-į“]¤ļPÆ)ö§Šy"NÖN”Ś”ōĮŽ =_×ʧtÕ :žkOÖÕŅĶį=bŲH™-w#”›$šŸ9å„uŃ9¶ūæÜŲwčeœŽUB”éqRP /„Õ–Ū‘¼›>)ń£ģµ_D=ĮD&z¾2Ą–nś¦ā<ś\]žQ?y?†ū=QŅkd«w„„§:T*ž"°…āŁļAy]ÉVƒ“ŖbauŽńoÓĮn)’…HØ"«Žå:ģ›(e¼4žłų‹Ūץ–ĄÆåxĢwo _ ĖĄ‹A®BUģkNĆUĀhU ƃNöü^¤^[;quŌ"2;Ÿ‡méMÖŹ]‘õ¬ƒó»żŻŹorŌÓĪĀīš½@ŽĄ<4­ß<ńßéÜČHö*#Õ.Zš|æ o0¹1“ī(żw§–nE<åosŻØhŹ—‘~ņ2Lń €l“Ŗ§ß^¦,ū¹ÅM'Åž[;¬aøRÓ²gŽ]õcIóøÓ'2+ŁÜÉX=$hå^BaAäs|‰½¶y‡ķräĀöl!č5īŸ ©JĆƋMė,~%>³l”Ó@P!nõ†¦„ćĢńӱƊ…Æe”ö(%WŪą”¬_ZŽŻБɸt3(xšŠaO\3u¾9ŻÕŒ‘\#R5¤čźEŸ–gŒõ›üķŚ¼AtöĶČėŅ}~׉r¬„TRĘäų§#‹½¬§oن(]£ gƒ_³MŅkŻ·Z+TJ“A&¢ßŗŻWć#ŹŪÖĖĄ›kó(ŌjcŗčR †ž^ܘĞżfœ˜Dē@­ż8’cC(/ČX¬uvX#SÓOˆŗĘ‘–3ų~„ņ {"‚\yK£¾ 1²˜ĘLGqՀ¢² ©™ó™Ł š¢yKdĻĪ&žFmēÅ£©łvf¢· ŽĖ^•ź3ææ“kž“9 š‰Ōɦ*ī†ēŽoC·c.ĖÄÕ°Ž4߬LÜŁhŸ ĀH†ėą{āšłĘ3õ‘;¤J~W–›„ōj6Ē!ˆ`rŌ‡uc…d{U¬{ TšĒ/ĢķƒeG‘4³—:ߎšūšeŒ:"ćć=õfšŚ{B尕‚{³åļą†Ļy׎‰9īŠÜX'ZŅŻń1©a:ŗ•=ńōōFk 䞅*aó³[¼E¼_²/z-L)v“¤õęŅĄLĄQؐ ¢§lü¾åĒ9”;øŽAr!n’ƒ¬µŪÆuåz}wų}JQķóF1H"įk2]¶čzH£s -šMGĒÆ ĀßqØų@‰ŚļĮĆb`éaĆ^lƒP“jbF†  ά’̧Æ(ŹŌy i1ĆW%jõ<į/ŗY—Ėp"š×„PŪ=ßɓԹą9ˆŸJ;Z‹k?©µ5+įöeė÷ E9™Ž4Ļnäb­BŽZ6æōY­āŒ¤”’ś¤ųBŅĀ» FéOßҵüq%*TiI£ˆ˜oQ|;b·³+ĶՔ$d¢Ćź$6c ŗŪˆ;u9„f„ˆŸ\'y%+ó~Cš*°Õ2†UŁŖ?ż}ä`M–”=eF{`ų„æ‚’Ž”™ņµŒó€ÜŸŁ7Ŗų#ńØĖ59šJu-Ņgık•„„@”1¦©’-„¢*"ØÕ/ęŠŃ!s{ŚØxhżŽĀ; Ä#ŲćÄŁ¾Æd:ićĻnNG·=Äræī0Ž"˜µ3»ĢžHŁCŗ‡É‘f™§.UJŹ‚a~‹`Qq——j “ bŹ;čDęZ1v짤ē÷«®čGŠVŚ'p=:ųÖĆ^P Źčę°5“uķU¦āљ‡m½¤åäĆ3üŽŸvƏń…š±§£ŗæ£?}.©‹«€(»¤«€(”ž%š˜Ųsuł0—>u6ńœÄ<2”ė©zŖ†œ§Äj,z“£JĄ!łŒĒĻ<9M¦»ŅÉKļ>õ†–ÕÅayxk&NtFHäŻŌ Նā4ŌÜ×m®%ƒö©ĒūKf,Ęż-×č¢NŸJēvŅöŪ—„oæ2™tµ«yĢT×?R¹±BąKtĄ•Ÿ¼‰y…ŹŚ’LØÜŃžĄ ąsĶ·¦č“91[g`¾«™«ČœaM@*šTIŲČHW8dŒ)Æf8ÆäŻą—Ź?ZéØ¾Ü tŁn·^ÄRżŃ W$™3ŸY0ŸņjĘL†õ%*µ±@°érmī…JĻa׏–š°Ų=$žĄ„8xp +8•)LÕV3ü!Ē”m”YEJ|¼@i{ߣlšr„Õ:j!lžA8§r@ššł‚¦‚ ĘČUµ3°4 ×~o×4dēgüĢ0‘ˆt²k5J¹IńćL[Č ”†¹<ķØH]’ģšN{€/—æżK^éD¤ŪRČÕ)ŽĻé.ńģėiÕ ō&Ž ?{Ėv*MńqŃĖ\ū›V†²¼Ėkķ~÷c·‘PāÕMö»-œAŚÕśŚmūø•\uš®S+Ÿ=æ)e‚'ParKĖ`Ź×Ūe}b \Fœą2b;^s„S†ś³gī%Y·ČŠƒÕ„fŠkŠ;l‚åZg¬¬ÜÜŻŠimxķµ<˜–¤ņRæŅž“ ™r«c‡Ł!æŚ(ĶÉńąśØĮ±a&;?Æp‹Cf° ŒÜ'?Aāš¼$Ĝ«¼’Ān¶§!-‡ąÆžv¾ź»ŽÓ‰^y1~“E:õ¬ż5;–=Ó,U”€‘F„†ŗ¢nOļ–Āģ',™]čU!Ö-²É #mŽ4}ź•£ēsĖ ”ņ7üNV?ekoÕõ“»(Ȓ¶įź:_ūųøÉŪČwÕ̽]fÆąźuøŸ£ņ‘‹!¾® -IßĆĘĖTįĶų¹Ø¾·‹Tø…€üJõIņ™¬1fļ'śĮÆ8·n™}³€‹wŌĶUPq#`JIwĄ ÅĄ-"§CX¼“¤Į" 5*Ś œźŁ”~“LĮ_­§@ÄB.Q-ģčž×5ī. +0²ˆĖ·øåUæ97,&Ägƒ?$†Ø×„֒„{ž×¾LOŹ~Ÿ[Ł#Ś€į2¦V]*kRČÅĘČqE†GBną•æŲŗ{KbšdĀkå(tw4|³u¢ š_(?m:o ЦgÖ¤«Ø ibŠ+e$§÷yUé <$^’ś]ž3œsš§'ŅFٹęn­Įć ;śtŌXu)X>=µµ.ÅįõŹT[š­†IH«ĮŽ:€śrA IßĻ|x”8vĆĪTKĘcī6q „<t„U哘WćēŽf¹u·^m+VÜ>Ō‰ž#¼ś8Xē4ƒ_œq¶ƒAļąø×ō_Ż )‰š¾Œ`~“›¬x‰ź>ŻeŁŠģ5†ō².˜“†)åĢŗ5…‰$>¶ćKqyę#½-4ĖbN'8]ćŌGµøKčEC#¦9+ŃbśŒڦ+°č]˜Z¢„FMGézĄ7čć(XÅT»å/ŹC–,b²r¦†ņĀ]&`+k¹g ™S]&ššīŹ™F]–XzģH̦…kÆŌ<]8QČ{o£ ÜKÜŃæÜEĪŗĘūmø2hÕŽNÓĢ”kīļI9.Łfā)÷9älUĄ”ļmŻ[9­Ķą°ļ–øö m-®„łĶ Ś kWokĖ,,ł‹ø÷Aį¼/æ`/,-pd±~ÆĶv‹ņź0ŗķ:E¤œ1!p•VXū»Ļ6Ćeāārbūųń·W,,ģ/‰}”.ćWß*T»œ“™ģB˜Lv€@/«rV‹<“Oøcņ+a¢i.“$ę(„8Ž?ā¤q«GJcušĄkkj®įaųķT§y”›ŸkÄģŸj×öR ¹†‹”®Ų±-Ž|d3“į+’EķĶ»vćOų½Lł§¾gŽ&@,xéG;”Č7ł‰Ę:Ļt$ćĶŖŪų++¬%čøV†8ņ šK?E1éI:Aź·ņĀs¦Ź¹-d"x”µ™1#ė±pūp‘'ž»yfpXķ»é-[8‘“;ę_Ö?z{üóœwĘęp5ŗ1~i¶£dgĒę7ö Ê Ćė…I3ģ°Øžzęm½<Ŋ„ÆŠ°ņį„ ųū|u•Ų…ó09ģ¬:a3>n‘<Ós#TZ½øOT­…=.$g™ ’§h#öl¤ A¶– ī²–waģ<*TßnÉ<³åC'%nėĪņĘ:Vā’cŅ5µMq9tĘķµ›m¦kŸģ˜ 14ĢSŸ©źńōøāKga²šž[… šBu„zą#_¢"ło;WO­źd8=YDēZ•”W[1“l¶xÅΈęGńČö°”]źr]²żø±B…‹Š"wRŽ _.ūń 9ž“Ā›”©cQŖ’“y–Pā·fD…€ŽŻšĘɀ–DF&ņš¹ `IĖ–ū4vŪJ!ŸŅ„H4“γ|¾4wxåvó{ėĀ… Š –YĄa 0ƒ@o^īX Æę* “¼pŚEMn[“P²ź˜GNŚQuœśEŽ×źgN­<ļQ&HžŽyįļēĒ?*ÆTćÆc,± yFoä¢)ß×YķÜq‡õ3¦)/6’'B° 4¾ö–#)gšģĶEŌ—†ø)Æk³8‰X9ŠėQvßö[‚ÖÕŠAū©&šy¢-Ŗū¬ļO†Ź=ŪŹ’="¬ !ƒļįčśŖį<HUł;„ó¶ęT/^†īLĢ.ć/ķ-G¤‰ˆ„žV/ »6©„ƒØI Mݟ9ś¦»ÖĒAz@Äŗķ#ėiņnö×{ɬ,<’7ŠźwBĀāw‘ÆĻĆr–ge QZŽ^9X]v‹ óé­-”Ÿ®Å„F‘Ō$EČ;ĀŖ„¹ßózꓽ‡aO%䜦įqIj5®ŃGŃ#֯󈳚(cŚūHkAYĄ×!É©ĮŖ65Q¹ÖØ7ĮūŪ=–Ņ ü³<ćĒEĀqщ¶@X4ę«Ģ2ƹMYnŚČĘ+ß m] …©4¤Ö:TÕ²¤õ×R-1qĶqtÅļA”1Rf„Žoä”ųLĻWÓĖ%ŅĄé¤ć_éŻ{ !ŗ¤~7cĘŅŠ¬#*8Ń` [ćŌ­Žhļ²–ØÅ-ä©2ąvīu7}ėŗB-"O­ź«T ļĄƒ£ošż¼ŁĀźģZĄ½Œ¾1šSŠ Ū¢gÉtĒ X1,ĢĢU¶¢ā‚—¤5Vį¹mrEĖZq„×Ubvc)“Žƒ;Į š\ß ~zy˜ŒL›Ļ\oÜĻŖÕ2œóČżųēā‹|p¢[’„Ųc3EȲ_¦‡×‹¢ć{«½7'kÄcÕ%µ°ōyŠaŸwŌė¹3.¬”T©½ TŽÖ8³¬\Wœ&M™Ÿøņ2–ŖˆŁÅ½$õw/—¢ä‚ń‰?ĶĪQlkōx‚⁠պĶ}w7?¢JģĶe²ˆM²±¾Č\„rźŠÕ™ĄfrX”s&hõĖĀv·Ī38Œ“üĒąĮÖ¶‰ŽOƒ–™JŸœ•ŽFĀߜĢ؈óĒH&žn”=ā®x+ņÜƝ5ątl [_‚×R5<ŽäŲŹ«4rœˆŹ£”ÕtöÜM ó-æ Ö¾ųš›N@`˜-ˆ€R+,‰Ė¶īԚŲqIyhfx8~“^A°‚”Ÿ¾lš˜‡>k³Ń›”“L3J–QpĪŽv†ŸgŠÖŪqņ`KĶā{a }[4S,ļŻŽ¹HNš¤–hł•y;¬FĒQF1Ē驳ŽMZq2){°ėėŹō³‹ØłŠ¬4»PqķF¾Ä<Ė&Vīb<°;|ĪW½1Ū Ź Q•< {ĖA [ĒžĮülČkś,—IĄį¶]BŚQM;øw»Æ\ZšŚ¬63Šž ^V“Ūõ•’q“'sTŸv‚Ѧ·V²Sq•gŁg€;iT¬H/T—@0h(wō'++c3ĪČØń©¶ćŁ<*¦®ču[««yæūˆx‡÷²į«>> ž”L’kµ•ASJŽåŠå3š>ˆ\“Ķ&~yJ!\YkKŌU• ¹ 2y£ō×76 ČN™Š0!³ß^}“Yė>ÖćmNKżxźˆyŻ”eP§M Ū¼ÖX˜oĶÖwEäwÆRÅ †$F©lC(#ū5ēÅ„bÖ,ŠŁ?ڽ½Ę ; IŁm4™āB "5 UzŃŚ¬–±˜b—÷nz;PR5—°¤uäÉó)Yf5eĪøPé V‹äżŖfĢØ ›Ń¢ī uZŁQ5ņhŗ+ŖEćysCkö@¼O-¾xīŲ ķł±€œķĖÖ·“°ėł¾¾óµœń›Oāą¶Gʰ-¢ėłĮ3_NŪdæVg\>…G\ŚY„‹ž-¾“dhŹ‹®Ź\¤ÕqA|¦v‚: lBŸYPviÜõµŽ3ŖsF·āĶļv.Gy@“ü%‡šU9}ŁĘ’ ĖĻżĖäčYuŪBŲžégF?“hrdll–āŸÜ8ļ¼D8–E«”Š?é” l)Įx Sl|+ōˆfnēx½®v?Ü~:Ö“[BÜNæ‚čUL&’y©W5Wļøś®Œ×aO®ö^«õ23GbWīł„Ė0Ģ␟Ų<»ƒü&“yo 4bBõ„KĻKgéD‹GśM?iŹé‘e#Ģfr°_¬*T·d~`i?ļ%x¶L9ٜB"žŸŌ†ņŌŪö³7łĄµ³‚_Ó@½w…>ń#œ‡n¹øZ_ųW×Ģ}ÉtūvšžjĆXÕ1Å¢l×äI—hK½×\ެ"šĄ*2½±ŗv¾Mņ֞«ņ¬€PY-9‰jFóƒmĆWŗ³Æ„w|씫¹źK k”O$ŁLńó‡w/į'„sÆ®j«_ƒŁ$M®3mCŁfóĘ*LSÖ3P2~”ĄOڽzꞗ|U%ƒnŲ&Sb >Ż}ū­ RóB kńk1o/Dxøē”ž½&Ö>€żžŽĆ “ÄY<> ĀĒéśŃ čķšŹ:ŚrŌ*éB`ŚÓO h āßžŖLؐ‹p¾āˆy„Q’`|Žld„å'ŌŻč5Ž˜¦éš šöÕŚœF­‘­6pxČ“1F-™!FüŅD_0 Ž6ŁOsÖˆ†Ś?ąV%äӼϤÄ.†¤oę›Øõ@x\%’V7‰}zGß JO¤: ž“ŗœĢ’s<ćÖKiēÜģ×DźƒŹŽA˜z”ĢUŗĢ1EΈd=>u3Ō±V:¹Y Īė—Üš[ įĀW±†Nš~ā Ź0#7‹žƒ;ĮKrNr:é¦!Į£§BPö6½2½rÓGø’ˆ—jGė`#üO?Źeōq ]v䚼„˜ń!zeGļŠŚ½4«×źZæyĖpdAók Øß@‚āBį”÷ęØc-’’”iI]'ČĢYōéš5œĮ{hˆUZ6”ÜõuM¶“„O7×ߣ\NRaś3*b»ŻåęEžkw7°J8väÆk!Ķ&)ūL5p×lF²k5‰ąŃõ§8T<·ƒĒѱŁOõAwēßDÓ- ×&_Ļja‡<|! ņu÷ …ßt€HɀĻĮßėr/“]ä>*SŸ8Āfbl4Æe»”1 uF$×NœC6sLŲŖŃ6ŹuŁ’4ŒOC\¦ā(™vY*€`NÆYóclŌČ8r|›YĆķ“Ņųc<ķ06б”E o”/;µ’«ņZÅŖ©µōF—¼¶ēøĮkųGõœmĒ›`0¹”1äg„‚Ś+”mĢk„8YNšp,`UŻŽ ,;GČĻ„&×VÜŁÓø”UŹ›ž/HS(‰fģ¹ žė}Ģ BƒĘyŠ42¢-𦐕śdyæ |…›†×KqĮ¶ Ł’k%b“”dQ'ćY–¢^“Ŗœµ1Ct裏¦‘_—‚ēœ”Q}f@b£Wxd ™¤˜–-æ-m H N”fŖJSźÄJcā¹ł­]:£ÜVZ3iXPsŖŚ…kCcDøN_€Č}D9xß&ŲŗöcĄõ\–£>ÜāŗüIŃÖŹQuXźc>Sn•KĢRJn¢Ä<ł8ŗr×PwGXŽ¢!Z%’ģWÉ@ōz”Ś ¶µK_…¬wa™āš-ń}ų“i”khń+“,Śņ@gƒMŕżę¾o~ęˆ7üü‹%6ož—āÅĒ„›†Żēˆt+YĘųĻ‘6 ēżIŻß­3}9‡šc¼”ĪMäj.¼^ZUŽˆ²¾ž£Ę‘]ƒ&ˆž °Yš¦ä“‹®Ģ߈Ф‰°ž³ĆFż£|F2Ńm_~,Ņ—īHĻ’ĻN:š3»?æp6įŹ“-xę¹imĪk«ģ?ē&šy†ÖŲ0ŽD@/3ʞ@%ń‚­ŠŠ“Ā€‡-Š®µ LĀÓĆŚTį{6ŖT#]xnąĄ:É·9]ǟ c „I‡.0]Æł6…½†s¶ƒę…0*ĘuƒŠĻĢī+Õg²ņŸŪgūJˆ¹6“ļ_Mąē­kÆÓ>t[N—t‘2’£æ•Ŗö\Qõvõē!7ŗG‰ŻŚŻB'š{ŠVŽ^Ą¾d\2EÕµˆwŹzjĢīµ9įŠ;MŒféńTtjT™QŸ˜-©Ņ„ćĪŅ(Qfk‘ ģ“›čŒńzŽźZ`žž6鞔ē y6œjŸ4ńŗ7Žp›oć‡O~03õ3¦TÅ܆µHŲ$!¤¹!³Ź;cģuģ¬äĒ’ro+mĮ“Æ>÷Mė­S©3éā_+E °œ¹»RӅ"z£ ÜĪń££1r³ĒͼsČc1V5=K, UĀ&†t+āć4_+ µ AŠŗ¶²—óžroĒ@¦{U™P·°gRɕ•›ŸĖ¬‚ę%+tøÉKł)łH–+„m(7ŹA…CPš"żFįLćąn*óQݶćΟćLą8&ńsq¬½>B‹CqŠb“Fo˜p„:ŗUłÖ3Tuʞ9ķ}Pf><X Ö™=åą–ŻŽ¾×¾b†ŗznsż}Əńī¬Š@‚S:“”Įo(^ŌąCµ3Sy3 D6d&æLį`™ÖóĪĪg`e­Ģ×(>w}Žē(‰7 āüŗ*w®īEūéõėŌ }Ū9j(³)mmp{1Ōs(IÓ8ĪW»‹=P„Pk«Šß!3¾śńt,BIqbxv“×؉Ø0%‰m"z¢„5£GS:¶Y6Äa=7ś€4RÜ»‡Ć±Wy֋<Ŗ|9.Į¶œ¹„e6Gаk¢›;+Ö.åąÕ34P¹e||=©gĻ÷č2F;գЭP$§ų’lMn'@?ūóĖUģÅŚķ/€u;įßD\O5"Ę:§ž¾)¾‡oS1üæ„Ā–œzŽ ĀTH`HV·CåŹā–‘³Jā„]Aæu£ĪįbĖō•kPÉvĀłĄIiy­Ć ’( rTĒbĄ’” µø?t˜4ÉPŒ`}&l$ЦĄ€ė×$cx”Ā8”šØ~Ė•œ·” ēń2øŽ‚ƳÄhAF›½oK3^*ŲĖ”0Ööįõ­VQ€°ĒC  –Ėņ+—rŗzkA Yœ?Eć)š >( ['8# +Z:ßĒTļ æŁGT?‰Rŗā->ÉzlWöą‰ܔžŪā²Q/ÅŪ{P^`ķx찘š”ydč+…8ŠK®ĄģcI±rB˜Ü.GŠo§E?7dņ3ĪĶT²K¤jœ³äā4„ME¢:ióŪmŽDäēó»OįŪč S­ŁG RŃt\ūւņ÷¾ÄŹ©ē5x7½>T,b¢¶#ę~šņ!6Ł^ ūœŌĄ„éŁnnŌó_PÆ. b¼ó ŅFzą ź˜B]ŗĀ˜ÅLÖ©.B‰˜Ę›l{(,|5Būq·Śœk:Óś0/n†ME™\ž,«ådŹāĮ~ŽČӇRįø*—ƒH™c.²€8•ø4m©mŸ-o&±dƅG‘Y6ĢHÄŽęŁēx˜}#Tӝ–J‘¢Šæp†Ä3Ųa!²˜—'1Cšļ(Ź{¦`éy2ó.ŖÅ’–?øłč;*æ·×cqžv°Jŗ¼NON|&VŽõ>&Ų*ƒt•„ŠäƇoūßł\ÓĖM&)T޲ó+–>=³A‹YKHq¼ĻųĻ,£ęŽŚŌą,s¼Iī±>l“Jrķ)%łaē‹Õ¢‰ "œPōÆ ƒŃϲv ‹ńĖ/ęõųĻŲą—`ÕźBx{`Īń»ćĖį†iĢŠE||ń‘H=|N0‡ŸE!˜²2”ĮHbźŃĘZ½‘Ć¢Kœķ¼Œ9·oĶȑōNAåE;w¦Z!~kopNĄž* ¤¼Yq$¬÷“fJ>ž-M­õN»G7ą²—õېSh(LŚŠÉH`4¼§{Z㊠ 5¢•µĖRŗ$:0ÜžvQvņg®?zœš­ŚPcƒ¾ŹsāōŠYó@7å~jåsbģŲłå/ņ endstream endobj 777 0 obj << /Length1 2450 /Length2 17980 /Length3 0 /Length 19392 /Filter /FlateDecode >> stream xڌ÷T%l÷Ą ēšlM8Łv“mŪ:ٶ1aād[“mN®Éšģ&Nvļ¹ļs?’ļ[ė}WkUæķ½Æ}]§(H”T„ĶL€ö® ,ŒĢ¼Qy-V33#33+<…š•«-š?rx  ³‹•ƒ=ļ?,DĘ® ™˜±+ČPŽĮ ćf `a°pņ²pń23X™™yžcčąĢ 3v·2Č3dģ.š¢Ž^ĪV–® <’ł@mJ`įįᢒŪ lt¶25¶Č»Zķ@MmŖ¦V@WÆ’ AĶgéźźČĖÄäįįĮhlēĀčąl!@Cš°rµØ]€Īī@3Ą_-Œķ€’nž fiåņ/…Ŗƒ¹«‡±3ŲZ™ķ]@.nöf@g(;@UZ č“’—±Üæ č’€…‘åæįžķżW +ū杍MMģķ½¬ģ-ęV¶@€¢„£«§+=ĄŲŽģ/Cc[æ±»±•­± ČąļŅĀŹcP‡’īĻÅŌŁŹŃՅŃÅŹöÆ™ž ³ø½™ØƒŠŽÕžÆśÄ¬œ¦ ¹{1żūpmģ<ģ}žCęVöfęµaęęȤnoåä”ū· H’Gftp033sqņ€N §©%Ó_ Ō¼+Yžƒzšóqtp˜ƒŚśY™A?ą}\ŒŻWg7 ŸĻ?’Kš,,3+SW€ ŠĀŹžOthž/æ³•'@—“~,ęæ¾žū›>hĆĢģm½ž˜’}ÄLŚRŖ::t’nłæJO€€•ƒĄĀĀĘąā`ųżoœ’Ną?Ż’-U2¶śwuĢ"JŪ›;xžÕhz’iĿߛAżļkCųß  }Ø’¬æ3³)čĖ’ēKš·Ė’æŻ’+Ź’ėś’ßŠ$Ülm’ÖS’Ėą’Golgeėõo Š>»¹‚č†Ų’_SMąæ.“ˆƒ­Ł’ÕI»ƒnˆ°½…ķĒhå"aå 4S²r5µü׿ē@Įm­ģJ.V=8fę’£Ż9SŠ£ā:«æU@Š•śß”āö¦fŻ=VN€±³³±<3hĮX98>, Kjōü{·LŒö® Ø9?€¹ƒ3ü_'ŹÉ`žKō/ā0‰ü!.“čā0‰ż!“ų‰‹Ą$ń‡XL’ˆĄ$õ‡ŲLŅˆĄ$ó‡@Łåž(»üeWųC ģŠ’%nPv„?Ź®ü‡@ŁUž(»źeWūC IØ’!P-T‹ę‰DĘT™ÉUfś_āéLlA‡ū ;ū_;»?ž:“Ł?T?šOP’Zø? –Ģ’ ČÜüČžZżį挒 čm”ū?ā’„wpsžGx‰Å?ŠņOł !Yz9Zķ’a’ż#!3h:6’@Šl’ łŲż£xPļBq€\ķAk’=Ø;‡?ŁAĪ’£UļųG ęś˜³·š’™;Ėæ„Ī’3FvŠ`AļĆŸŃ³ƒ:w“usłG|ÄéæzN™œÜ@OĆ’Č_3’ĒY@óųƒć/ŗ’c` sŠ›’ß“ ®]l],’Tܟ W“ÉÕŅųSuźźįšP · hčī’@Pį’X ·ē?Žėš©÷Ÿā@‘¼Ī’Jõ?/©›3hØ®6€ž„’šßž@Sų•EÓO”Öõ”µĀ=ö§ųē(ö5Óh|Vœ»Üža“ij²‚7ļ„“GūQ×vÅ©o…V‰_}NŚa#Ś“”;ž}_ Tfö;ą—§±‡~7|'ü@Ą &tąūźä«dŁŽ#C‘ēäʍ¬T€ńą1(飚½āēDųā¾ņA §,ĀKÅ,Ćõ½ ŅyŠ|“ģ\RWB8ZōKO”łŪ»9ōÜļÄ2 tš~§_؊}t¶Xc¼×橱ŗōā‘ćéąBŽ¢OĢPśˆ„Čą,ł”•ÄɄG—˜,¶t”;±×‘ō¬šUŒ’ŲĒ=6 ­@Ł 3UŽ”=¶UĶķĘEĻką*}e1,„wQī>|ÅöŽ®šĻr²q=SbHH“% ½„„é>Š8JYā\Ę+śĪć?K՘ų ”°Ģj’ļŖŪēcģ‰tÖ ĮõšŪļĒI{øŻ5ķ3µi0‚Q2ć1K’ÜO0Fg9š#CÕčļ6ąĖæĢ@ČZOŌmŹōx#æ(䜘†®š< !Bl-9©ķ»….›Učgb3¬yeśģ”ĘeŸ£ČXU juæž|Ļ1Aœų&ģZĻUSfl\”Y@…ßaqSzÆDČ;Õ8S>ūįŲ¬FÄ,ŃwFŗbśGēż‚&Ł•Ļ NÓą¬ż-)Šw©sŌ“[©<ŸKZc!čzq?Oó½-SE©)‹gZG'“ŠĪ×Ē!4¢.>h4XZĻ.\,Üß>żėÆż3Ä»<™kĘ;meе˜nż*ś,Ļŗg4Įį\-wĶ[ˆ»×P4ņ“UÕ=éæõfš‡¾$oō”l+ƒÄœĒP@éWœDQł]•ōņAFrsģ>{R'!·7BŽN÷ śĻ ‘O€^ʿڠr\] Ę }ߊ'E2—Ó0”īĒ|L*ėCg¼]†ÕĮćT6 ˜s]rłéĶwŹó‰ Į±“Ü;J:ąvGń0dv@1„›™Œ²Ļœķ¾>ņ”øó[Š÷jQyŇ+<¤ĮRóą—ā˜q,ņlh±W@wp`Ä]"j‰fĀԊÉÜÅVv· ź-Ļėkåcā¶§5Vg¾¬ŲҶĪO|äÕ&hb påŗKn•kn^ÖÉõo¶½}¼ż…Ža–ĪR4ÉĖō° ”džļZóū’¬Ė<Ń “.āßĻģJĀ_=,Mz¤Ł¬ÄżBƒ›tQŠķN½ļ“U°Č ē^ uÅóŲ}0½U˜4‘>t•JC4%ŁY&UĶÆØ:[u2[Jį³E™ŻŌ ī O»(+öŅ Ļ|š` „co ß(˜m+Jć'« ÉŅjBtŠGÖøBŽ2Čt}F0!œ*Œ(¼Ö1‹»,·ŒH‰ÆŽšT8+/Ųp܍s,Én“” \Q,¶øĪsųr3w’W–ß ¶*óéR†NĻ~Š˜@ļ™w¬ß#vŃ.ˆ‡F`$6Ū§Ūu 8²äōšF1åćߨv÷˜@Q-Ž„›„ņu^J=5—¢»©b! ŖśRš¤j’Xō}ןģK€!mø>aN“žÕ% ֣̤U֘Óxš @¶`Ž•÷Ł‹VõŁļ.ŅJRƒÓĆøg›Ü®>ܝÕ[Gł£ÜĀ!³Ā/§Œ;’Ÿ“\£nrŠSü&“žē/†ė2^Eƒ„ł8~C#Ø!z»”6žł¹É„Č/Vt“råČvĻ!@žßv\ķ…Æs{)¢}®®ā‹|ó܍hˆśÅĀ ŲņW’eɓń0 >¤w裟3Rf×]²Åp:¶ęTŽ#“ŠūՐš'Lė`+YOB(‚^¼ÄōäŃTy¤–/•æt.d;›ßH–¼čqpD$“ķ®øcé†i’h¤Į:ĖŻS-6 hō·oKƒĒ×z¦ē¦,ä2F2#K]OF0peŅDZöśŃŠ3ˆ[ wż½UYևf…,LS¬ÓL ĆųkU'Óq%ß*”ˆ"¤”(÷nēūķŽĢš”³Gö ²±’Öų¦· rI®Nøéģ½ß{Š ŽÜ²¬¹"+ŹzuŠĪ€Za¾Q=¾†”ųŽås冨RŁę£fc‹-ŠNµU/u6‡øĮ3Ģš•ę±ēŁ­¾×Ó¶Ńģv½éøÕ»ÜTĪ%" ūAMF—ś›ūžKŲAŒ f¤ĀC“<m;R­“ÕŹœłµ¹ÄńŌ”i—ä›ań¼ć7–=ų÷ļ·qņļÖ½‡°e¹ˆĖO)ā% p4BßW?K·Ć©ņnšŹU†&šGQvx2+ĮbņĘ׳“ļuķGR›«n†7 bOą0ē¶ŗ·Cø‘?õ‘į¦łŃl›o˜‡ę§ÄÅäŽ#T£—7"*y|oā)½żA®ŠŗŹWšZöž™ŌZ ŗCĖņUŽł—xMćiö‚Ü éÉ)­9.]& øŗpdĀ1DzA6ōŽ]O®”ßœd{ŽI®£ų?ļ’`<æ"Œ&ŗćD›“2%mJö4¬‘¤”īõŹõŒL¶wČļœł»i&ć™Jšļybł20DŌQ¬pU3ęq”ļāŠ4ļŖHŅŠyŒIq5H0v) =ŃX,JO¾9„Ł$󧄟Ę0tX:ĆæŌt®Ké^TgģIC¶«ŗ ĶZ7{Īz‘½še¼Cō_„£RøŒmśgźA#ęō©c/Vįy÷ƌYŪ‹g0ÖÖ|Āņöw%ssą„źy‡ņmæ=}w1>ą>Zé–lŸÕˆ2ļø‘AėĢ_ė>)žē3j;e<æÕ’Äp}‚ #é§JNdģ‹xæķ€øŌlćFuᑉśZ“ź&ń+-tĆq ‘•³-iŠOšv£GDō‡€—`†¢į(8t'{*ś ļNr‰ųaž†~(Kó¬Ęå£ }i„¬ƒ³™I¼1~ū)ŽūDī†9»¤ĮÄ7›DjŸĆIŽ5xøō¦· } L˲ ~ņøiŠ‚ V]īĖ„åč½ śTA@ŌӐa“Kfΐj=Nö!½±k™—xŻļ™ ē·6ŠĘ+ 6¼ ŌāÜāhŹyæåŸe#l¹b6#–F_ōrŻĢ6ŗ·jžhŲ}‰ļ a8“njs«9ż@loTšä¾„µ@ڑü3=qœģ ‰óqĘēķī„ņp§ŗYOĀżVżT“”'ŠöžĀZ×¢qõ,̚ӿ]ak41ŃĄĘV“žĀ „}‚ą˜fšĀ¾YsA"K‘ S5Ż«*`sžŠ’ZĒ©ė¬|•ŲJŗ ,ˆ¼$Wt\-“Ö3¤ā»žsÅa Ķ ±U.8ø+»NfŠŲ¼¾Ż~dĘXĀŖāsRP`õm'˜Õ[ü„ŒśPž®y­š×<#~˜ivtœ:Ōgś{K® nłöæ>xńšīN4l[æŁ9»ßf*ŻÄ’! $ęĮ™z^uģŽw”ŒĖ “ę"xU†W$…ŌŽüą@™Qbņ1?QżķWi6Ö 7²tēæ¼ėÜpLRÉŽńš;Ūc®TčŠrŲ#?Gg@EŸ†|ĪiČōSÓĒryrōb”)r&ćׄõaƒŖßģŪ™L„7ŒKxŌBó^Ōö¢5·²ļL9'a=0•YKršh^oU¹u/kƒœĮÆĆ‰„MąńCD4³jÓžÓ²:ĀXOJĢŠqĮ02JŲžŌž<;”Åī};ļ¤p!ŠŻ4]Z‡ł-!fƒP—ėĖ)¾°@ļ,ŗĆ°¬Yø ²s6pIŻ%`Ÿ¼]7)ܼöYģ(²–ua®t›¬æļµ}wĶ—øņŗ:hŲæżMyįs픬K§%“XąŌ O×¶-„p±kgOæi-o/n.h‡P¦"IX£UÕØ\ĆŻŸń †SVųž-‹ÅūQ°H„¤ā;Ž‚`  VŌÅ!Ւ0ćMÆŸŅHŖą>9“IĮ.…©JcPų¶}' mČīUF>&&wńšŠ›”ZöÆ –fDbŹsZh`‘‚e©›“ļķc(Żū"sy)/x¼Ž*ģeUe?gµŗĒ­"©ųŅsįōåÕ æDÜßqʌ.i˜'3&Śī+Bś­ŽO𗁛 bĘP\Ä3īńaŖf}“†ĘfHžń&»G²šó•'źyŽįWąwŃc ŁįwōŅ€ią¹Õ‡C[ę—ĆŖmÓŻĀš^h:&[‘¼LHļ°{†ƒ<„nč,M, MÓēøiŒć°HœĮ€~ z³@p=ņO%ß\ ŌTz)0å¹ūÄNZ§år]“}"ÅÉŲBÄ|ŒĖõ¬?µŪ£šåRMNʊ#¦P9&ķ#ĻŻ­Тဳ,š!#挽‹‹#Ʊ“ö”šéžżęĶČE±Üž~hĆÄ*ŻlIUUźiĀ7!’Œ~ē;üI{'”ŗĒ¶WĀg¹‚ė.렘ƒŠ^ Äö„ PĒÉIØÖ;S4ŗöœ™oÕ÷JļØ^—uøÜē”ub’Ąēʰ “Ü¶Łŗ½Ō·ikāßvĆā³(eI™]i¾Ē£š_Ž.Ģ_s%ĆÄŚĪŲgČ{ģkńe!ųŽ"õ<ä·^nxą²’uŒńśŽOwrnä/±K=ÖĻŪ8’ö—-¶»™’į^YcB߯›įY“=‚Ŗ&Ō’¶åL ‡ÓŅKõDĢ6ĪkT,Ģ%ēÆEgxÖ­B&¹'¬1čŖ%¶a†ŌŻHņa‘9p‡6Čmś§÷ÉNmpZķĒ“Jg홳’z…ØŚÜfŠė< 8°«|u-JĖÉϜńĖŠŻ‡×O[óšS¬u«øńąČŽ’5g/+…¼Ł©Ź×W/ó.CÕwҁgF £;|NÉCųב‘d¢—3­óų&ĢŪŲ6-q?°ŗ¬³°° &z‡įQ®­­r9ē+Œ•CYhP¢_C<>Ū|ś‹äŪśŽö†2ŒĒīzHō€O&„xU o ?%ņųćļ ‘²ŗißādų\’…ÕĢsŁr+Ļb@ܹwŸ]S+aŽķi„ĮßīĢ^„”8 e×¹CŖīÄ%e5rõE§t’[#”ž[Ÿ>NI3–%Ķ`Ą7Ó\W «Āv-œķgИīf„÷ņw&LéEˆökiG ż‘ŁL„Žu§Ć—“³šłåŽ£6|ń~n0É]ŌY dóĘR/”@.-ݤ„?̉j åü ŽhÕģ¤%KUX쩃U÷¶× õB«pīJÜՋFN}ƒūƗŅß’BÜPĀh3Tųś6ÆvšI/x!Oü§Ņą(«žĆWšŌ>|“ūØĄÓ éĻOg<ÕeœĻō“ŽAŻ’ß96÷īĢSaŁścä€p§Š¾k–A֟omÜ3mĒĶĖXģ·²)÷“ż#yŠ®aIpUū›Gx¤ŗnŸ¼ŁįىrwśŪ†yc$ģt“ļś:Ł82„ž‘|ū§LŚ΄ۗłžYÆgI³¶[9‚RN’z "Ł Ē­śŒ]{Ē>l"9M1:_—13MIĪźz/X“JLX-vhYÉāz²Įs®™C¶glTŌvR{¤)į™ėō0ÉŪÄXŸżĮćÄdĄĒׂuJ¦?z˜x^wž`‡¼„ök2Ł%÷õ }Lßźdq½ĄĘÅqׇg‹–_ø¤3ą¼_žqo™ó½›¤Q5@zKN­µ'ų‰Õ+˜Į¶b¾†±ź³¾Iµ»ó§®mŽČ›ŗvļøųķNJ{YMmv؝Ó'l¹NŌtŠ„¬e71”éK74'™ś˜Ļ‘.H)ŃiPą(4r&¶Aņŗ¶X­“‰aĘ{ŲŻPÄ0…ƒ~L?µp`G=mw™HE"«ż Øæ6«ŗ»$_}7ж«82Ž§Ø¾ŠÆic`ŠWĮ\¼hŽGŅäq“Š·“Ė£|żÖxV<ųĖØŠ —K*[4Ņ1B2Č’žŃ2€å×ųöÜ%„Š/2)ä§¾÷ßāß„năN˜”°:UäĀ A„³ŽxĪbXń'7+ļ:śkŃÅĮłÄäZy)ņŃęįzLø‰U“ *±anęķAŲŅø–Q”Śgq~j9$E,Ķ4²KJŒH£ņ˜v'3iĪžPøæwźīūB}(.OŻ ńĀQė t Qį›:±8 żŲNX7όOŖ¬ŸĶŌ¦†„S.ėoõĄÉčŽ¼Õ®ė ÷P’Ip[ķ~0ąÉlęKŠõ˜Ņå3”ڶt‰ä›eeŗc\쉔ĆƳ:né’ā`_ćZ/Õ¤ÕÆžŗŲ„¼±3Ć`T £ÜT--9ä¢Ļ$Č,#ÓŃĀC¦WŒk†-!dva•Æ„]tmon?{écę“PŠ6Vc'Ÿ-iōRL­ź`CéļT‡³vÕn=ĀBד+¼ß$éYNBĄ³öZŁ7_¶Ļ(”nPqēdĢŒJ¾/ü՝ī`ąžz>£µķ ÷Y2-z|JÆAÉŹL,¢%¼DB3šō³#”|ü¾'"|æ7t³|>ų7R×S”žĄ †/°¼¢Œ*|żx£pu!r‚iG¶4įčrfG…“ī<¶eä™+eŃŃ>o²ģé—pDĮ§n{ćŖĘÄ#¾ś®?ĮNś$ =Ż£†üYŽ^ųėŪĶƀ­³“µ2ĪņvxĖķm‚(®Źf½ÖZõāĘO~蟔ÅŒéP8£Ŗ_³䇊9Āž/'¬ļ2āŲhČŲ~ŒŻN%“ݰlD§ļo;f1Õ/? äEž‚mĄOÕN~Ƨ…-[ZUĘń÷Ÿ}ÕJś ^ėcģxtÓ«Jt;UIø''™ž™Ą:`6Ņz=MˆÖ/|ģ×ģ•Ū±”z{ėq•õW£óÕ¤𳛩%Ŗ¶ōܞ6Īq0|łÉµÜ$ĻĮn_=ę”Ysßi·¦c›śQƒ¦ĘņZ”V^ŻQńźĖ²;ų9‹šfՄś¢”© Õܗō†-•ŹŁŽ0Öł¶1,"su©#©_E#‚Æ#X~/vˆ~ōFg4£Ó®i\»yŅpüŽO»ˆä›‘R‹¼ćeQšQƛ¤TĻ vRdčV†Žśå5_x¦/{}b揿ZfYņ#ĘöGR·XēÓåvŲDy¼1¾÷C:ÖŅśAY”KOڬ:ĪTÉ&2&+9ʔŽp¢Ķ“ z¦,÷ …@—Ł>£ŃDČV5–¢ ɗSR>§ŽÆKP¢MҦ£$%ĖĄ³ "hS`ėķ•“šēœhE*‡¬T°IN'g՞"<čÜåŁ¤›_UX\”Od„ >Ѽ±[ė„ÜŲ ¶w >Ńīž&n(Év4ļTØfļ.+:„ŒźGÄx1…–öŒŚ1@Ć»óżŲø@”rAVVó]RŽ•“‘ZÜĀó!d&y?$TF\K+}z;¾“vćlrēÖŌÕRŪć|ĄŽą†æéō™wś%4dؐ"CĖżĀ]MDŽį8é•R˜õ×­"d2¦ąĻ ŸŁT;_›,ōhó÷OƱ 0WYžŚ!Ö»ĢÄļÉWĒא6 1×SķaĄĒ‡yØļ:-ˆ_<$ˆłewpmcįW”ܖÕ/z§J¤ŠäžžŻ8ŌvM&֎9„ļdEŲ¶oŽp\­¹I‹Ńr’GqĀōÕfzŹ“QŲKs ‡|ě”Į0js]ó:·\™ŗö~G<Ę;DSyNØöž¤›b,ÆĢWē ś6ĘHTp\F”ÆQ”߬ö“9PZšÆsR¬ŚWP£m?ĖĢåŚįUQólƒ‹+Vž”{@ŹÉ7Żßģ…›ŌT-ā³Ś°“i­6_l’ŗńąI‰?·ęćīDB½óĻ@«'ä·fŖŪį^ū“h+ßO©{õRŽģż2‰–ˆÓ*3ņ"i«ĪĀHEZVµĒģūf¤ĖnĆ¢eżµØCfō=4‡ø5’ė‚ŪИž$TT†]…_Ć{7vµ:·m«™0żB)&R»Ļ¹¹­¶ČWOz(ļÕĢVs×kŠr1Œ1–ąiĖĪ æµŲ¾­>veÉŪ§ī¹Qw‘ōMāēetÖÄŻ”¶z®ž© ’×u›«5iż'=_²jždūt™åFŅܔļŸė¹ łāBļŽzJ¬żpŪ YZH:u§ āUµ i„v89˜+ŽrFpU”¤:”÷IeĀ *Ø(?zq7‚?”e»­Õv~^ŖŻ)®`\ÉRž>¬§<µŪ†öd^[„Ž·ŁżÜĄõ<åŲĮk‹_ųg’Ļź/‚gŒŒsbšoNˆ„ęœ¤ĢŽļ¦ė+€<ż*@Ļ^LĢę ģ' Æb«u!QĶrrM`ĖTXDäQüĘGŒŚ¶­$ĘG5<ÆŽ ‘öO0Ņ“üŸŹ§®ä śQŗ Ę į[Žn[Ērł(IhūM£ÅÓ\Į_[Ņk~Kø {-¾³§’†kĒÕs¦„—H›pRž˜­ķ²œž•”-`åć‘™>*×ö»„€Ż§uø€Ļpś‹ŗ;±’S÷Š,XŅsT¶Lsū˜“Ó/XÉ/?~%-Ć0)Ŗ;—c„'vUj7±¹HL^‰TŒś™VXµŚ¢"Ļ?ć'fv6”„ƒ±ŁŚ=bÓgÓ"Ėlxž ōVYĢ‹žÖN6ĒÓ-jQ§ēĒ‹¼Ä.§xēKwqo‘”\ƒń³X9½=æ^}s ;„cȤ²˜ÜŽR3DŃ4‚Ōī'ˁ®„›x„Ÿ'8°sz`_×nŖ]ųÉ®D¼Tdņµģ“_÷IŠ {‚ÆŖ%Ć„łä3Ńa[)„ˆŃÆEļs­śJ•†ÕÅq<Ć_‚Į>†Æī\ „(*;źVĪóšYś'·ÉPR÷ä–`óĪk~äŻI?%]X¢oĶ·2a|§ ;(®X'㤠³,> ė°×*ž”ĻKwN Ī9žŁ\ēn—2ÅģdE’˜¢"öšŹ,O÷1š•KMČle3ʆ5˜#ØĪ?1ł=@Œž &: †;ĒoŸüRĢ¾Żś­;I®¢MHęn{y60T¦ö½Ę[7W‹Ķ³ž‘4²Š.b;™ōTˆiDܓ Si a Ö"Ö C#Ȃ1ć ‘„(*č#׍øY‹0)ń@lššõŌ>™!śīA"o§Ł3z¤ŁBє¼…ĮśĆše Ą¾Oćõ†u*¼‡B#šrµM])Q]į1Æē3#ĘÅÅR0$Uüp‹¹ŃśŽ&Y¹ØwāźW‚7OŒw’8pq„ļŲn4āØ,ĶŚĀHOw¶¤P&ø›n7ĮęzĻx0}ķ&óho®Žҵ©c”„GvsøW=,x$ńb…zŠ*·KɕkYø³ā£°0”_¦éĄŌ¶R1¹®‰4Ż„’¾u.bĻ&ZTL(Ģ:ƒ=ē‹|CH܈Ź[v.8²6Õ{RµēųĀĶ”^<†ūēOł\#jØ ½[ZgŪIņn––©Mz„ėNõ¢ģ>B–‘3įŹu&^$W`ćGŲ$’i¤WÆ|F‘µK](ˆč[· wøœMo±ßČćäd>g¹ö=7ĀO…üY ¶`rTįÓJĖØg±¦ÉĆDsUµĖa{øffėļƒś©tŅģnÖö|±Ur”ZŸ„©PĻo ĖE¾ņD”éŪĒÉ·TĮ½Qn“S†ŗ„²ŠA–˜*OKnĢRž„4ŌG;.‘‚œŽ¤„Żō|uÖ.œ²  M[Ć]u÷ą©Žj)ÕīŌ„×œß§1ŽčŽÜ™Ę.»¢(h¦ „ŃĘ뾓1. Nró ÷$TGžKõ刓7óĪ_”wŒųcV‘9fjŲŅ«ź ¤p‹r“ Ģ6,e}ނϾżu8Į+–‘zAĆĻŻ. eų44\Ѧ³&e’‹]9ęti)Ļ×Ē:±›h×Åi|­”dļöÖÜ3†j\<7—j°ß”=ƶŽEŌ)³ą”tš·µzķæ‘CÕW>ö²eŒ*•‡¤Ó¹˜ ³X'v§ę%„mĶL¹lšĪŪÖÓų‡:ĘENĻq…$Ž8.+|©ō®›™äŗŹūˆ#»å›Oś¼ĒTž²õi8Cńyół—g„·"Ųł²]§v–+J­Rk<˜™ę»ÕŠįņĘ{o:²Ü„ó¦R˜ź€V 'o¼ŠbgqĪaš`¦b€Ž|’:*÷Žlƒ¬fʲ|$T)•dæ gi*'*ŁÄ³ˆG½Ą5 Bž÷ĀīƒÕXŚäž/¬r±“JW“žĪ!°W™¢:+óFIdōKŁ>…‹`K*ė 1Ž<ķ”B¦XvĘŠś-č(srBJ`a…ģkcń–tõÉøōžö6ŒrÄ „̽Zūdēw;Ą²­e%¾GĶ\'›Wķ5ŽFž‡†»¶+g_œóüZŅė{>Z(ˆĖ-3£DwˆÜ·ē,Yęč -‚w}łmŅĆfnWōó$“q ¬˜Å=ź¤;n@ƒīq€øŠ”Ś6BŌø·ærµ§Ąóõ­×±siļ:7ž9Ņ“Āźqw<ćXø“įՄļ2o™—ŗĮ™¦w²$é™hłā˧Žź7¦¬‹ Į½Ē7²Ÿéß/Čś±|ß?Xn"b+dŒ!ėqĀA_Ux[ÖѦčX÷l)ĮĻŻ5\°Uc)^qK’×'WæncRĪgēū D¬‘Ź_ę§G…ū•­e·„\¹ē©|Ė(”1v Ž! ¶0Ž^ɒ% ¤}2žĻ€uü…x}ĆNT1ˆļn]ÆŗŃ¦ƒōŸt&NĮ;[¤ąę_„”žŌųFUüi1äąaŪ‡aR#i6OįĀe ģ€™ēbuo§§![¦LßNł’Wv”F5ćsŃŠĢn­ōÜą{]Ę@8ŲŚL`ć'K “v›3‘ …QHš%õŖLōĶÓčÅļX"Œ_LøƒÅS3ŖU¢©c2¤HźZ©cJa%Ģ>K§a­2yÖX[g ŚeŚŲPõEƒī'„a2qõ˜^KJ1“Ü9”ĢäTøĄ6ArŒ€Žūō:®^« Ģ϶ĮcĀŌpØ·©Ÿ ējF‘„ŽH¶¬STŖĪł€”ÕćA%‹/p„ÆŌ nqåĢRb|ļ䯸ąĪnčė*ĶŹa)žae ɰŲø>”kkØ{ õēv»k—]2;@Ņ÷剓š! /ˆyÉ  ­„YŁ!Éez‰jȓĮc{¼’6ɏŗżQĘŖ”/W„^M’±Øžšž©m®‚a- Žŗ¤‡QzŌ5ūMj:u&Ź7=„‹ß^ėI¶Å–zN!÷L社ž_“=Ó'.NnĄ„ģšž„&¹Źõõ]„ķ…Šˆl1=}!ƒP‰jdõcÅ‘2t°a‚X_å®“–­lRģʎ:TÆ{Y•WæMŽ<š`(Ÿ”¦4ų59‘&³Lg!ÅÜĄ{±j |ĮśPīÅT°8Ā­& –›śEaEAĻā¢ĘOÉØ [ƒd„F¬/`«tvSÅĒc0_yHzš»Y¬y‡(œŪA1uQńŪZ“Ćņ\<4csˆžÖĘcĄĢév05§øÓi»(æśĻśJ«Ś’oeÅūI‰\DbR,9I ś9ĮģhÆäģ2>ķ(˵dŖf›N{F¦øY’p7lņł8Ó„ņkv×N¬÷%¹ÕÆ6±4sĮƒVhLY—uv@ké})óŁėåRžM!|NX»²Šķ³y“FA ųwfyBŖą£ ūļ„Į4–üŌ{!Šėõ”F55o3”ĶŃW;2h¦Ā8Ķ+ø%wąŁ/µ§Ō¶Čź„ĮŅTŃ·XĢ뾓hŠFw—„šƒ{ńÄqō[œ=lį§®NO?£śŸ¶Ēg (t3į`‚­[ģfæę²¾ś£­ ‡Š9lVĢp¬ 6/Y[“}ńDŚŹPŠŽS(Óā%1™żŠL!ń7Ōį™·ń0‰āV“Ęźg‡±ĆŗTŽæˆ|.óh؈*DZ QK…ĶUļ¢=Īo&7ÖR¹ŻŪ6pLÖÄ!„=-\ „\G‰įt…~fD,Æ4„—Č9¹Į˜ČMY¾ „@éjt‹ŠæCYÆÄė°½āŃC³v…³aµTœŪtµ#¼iPņ×*Gpߊŗ”xb*2¢”łm;ŁOĆgį>S${*35õ#ģSŗÆ­pūĻÕ=Z¬Žcß²ņMz϶ܷyS—ų~AÓŠ8€’ÜÆo³#Pź¶²„ķ@cĶÆł†4nķļ”\5N’†CŠk »?A©ö‘%!ė×n&ļįżįl²KU‚²R“_E¦ķŚ4ęī;÷FČm OæeŽtójǦ9^®“tu#ū!ŹœR%¾7h«äā˜"r^ żÅ%ŸóL½e¢XÕŖ+ÆÓO»XiXö-Č·…•„©w« Ź[Lłž¤V§Oøƒ0å¼”›€ęéł]7H™ ÖhaA“Ā.^TG\q"oŽ0f^å”u»ś/9āń¦FĻiSĻz@‹Ä‡05C¹@…ŖmÖaYźų،dQö—¤×;\ŚFĒ€h–śäØvū²„^ØŲŠ–†4Ņį°’ U”C¢ļ÷z“ Ńq‘:¢Ż~ńxüršżÓƒf#2šÜśŅ Ó(}uĮM÷|"7 ³‰gć)MźKĮ,}c…ÉĮÉą`Ŗ`utóē̹ѩ¹‚ŒåŻÆė¢dbįų+,ķŠwa&\īnoˆģŗ¹%;bɓś¹YõŸ¾P[Fs×Ó°yGóŃwįzƟå"*plĮ}ßw’,kbłķ¦:pYÉɞ%¦ĀŸ¼éZ†<$X¾“ßNž"ᔑPņó»ń‹3~-ü7u%Ż٠ųLĶ­Ø}®-’üjy¢+ʰ‰īõyƒY¬B§ĆµčzCĢöŌŌōQ}+Åuqƒv³€ Ļū§šLۜu[=ćŸN;æŽ?fāYkļŗ!FÜ¢6Īa¬ō›Ÿ6g‰~M©7O×·€ ŃŻ*ĄńÅjH/k{°›iūk*4PŅ»Ž÷=Ģ`±n~T“SÜ­‰cYA.Ó9Ö'įŗ(_Y£ÄÄćler8Ŗ¹Ųk£!莓XmŅ\ÖPąÜšū ¾³ƒ‰p®5å÷:ŹQGšųŸwžšY¼­ŒõDy(eÉ'mLÕ=mrĀ$„/É3{ ŲzXR®ˆŚ²ąęģzŲĄjĘH9"h %’•^ė®jĶĀė€ŻF²m]’^SœGČ:ćĻa„•/—ä¬G!0HŽē]IŘĶBøķågĪGq,“×fŽčéŠÄŠģ3N€J>]å>l48 ¹ ’]Ł&T‹ÆØ‰‚nZāstńŌnN+ć¾€Ć·±[c”-TÖÕ,šOīH”=™ZęTé w y)‹)÷Ž<ł,x8FĮłgdÆU+ĘU[ė—`±¹p˜üõ”jėå|#²U™ŚĀ„ń“©;üö"ųó|Āy³²$ÉV¼Č¼įž cįi±£ ēön¦NĆs™x¶Ń®÷č¦#+‹•vW¢a²œх/jĶcёt(§=dµŚ6Ē¤Ń P;Žķō=”k[ŽĒ:Ч›¹x†JĒ&$…}ʱ¾pÓņ¼IāfߟµčWŒØšĶ^Śt‰API7ĄI2{Č>м¦ @Ģ’bÕ­'eŚØ”ޔ䱂Õifl·Ś%R•2ģȤ¬•AX³ ˆŽŠNĻHڶŸŚyūѵܗsI;g!ŗp=ĄłŪ«…Ūѳ‹pž·é“{“,·¤āźÅ:1OµÓRŪs ‰0zsņ*ڛͻ‰ODtOGJqŽ|.‰XŠŠeģlļ É󁄘śEˆi@µ °™”/§)Nm±šõū{ŅU 8åŪčŚÆ½žy2MČOn¬ZvyƒŲūņ”Ņ—ĻAQßbJNeĶYœo“Tt>Ų"·õŁ€ŃSmva.—½ģxś}Ąsķ[ŽTĻž³«Įł|wŽ®ž6ĮŻõQm‹ hrQģXŌ ŗźTĖj)u„GģPŪɋ%:ųŖx/ĮéƒČ_蚽ˆ`2YÕĖØ—@‡±ī=„ųńp;Ė{^ż ĖÜ Ļ“śąļ]šŽ¼jÖJ³ņ=S$īŪ„«ēčcuH”k–k׌ˆZÉ«öf“'į©»ŁQ 9žómB |Ä(”‡Wņ]Ī`®,»Y~*½“iłÄoχķ[7$2ҐDo؟U·¶.,BŻÄpŸ‘¬š Ė…Č" į¼dRŹż²Ļ;Ā‘-_2˜7¹¢ń©Ą`æÓ$#Alņš‘õUŲj±Q) «ĢiyĀSh1äB[`Lž,ÆF .=Ć'PˆUī—ŖæąČø£C¢ŸgXKū5󷔬Ż0Ī*ę0|9>¬ģ€ė)ß{_™x­ÖŠz e‰ŠŽn!)ż R\Ļ…D^üʽLSĒöóżL†Ō\“’Ÿi’ča‘V̉ ŪĘQ¾4Öż¦ńłv–ū©ĖvŚ”6ś)öŲ!ÄŁ ó<üĪ‚(߯ÜW)@¬+Ūżō:®Ś1Z’œBÜ8›¤g/E]”ƒA ŁŁ’ɓˑ£u°¶’^DNl’=Ū’GW}ėR.ŠĀeĄÆ\¼“„/|ŽYÜ{żPÉęXlJļ-ŗ?ĖīŲf-²SbŽź¼Ž¢Ćx„r˜ĄŚŁveßA ĶrCq˜†@†LeóČĢŚēņī VõžZvŽwēóU„¼== +ÉĶŚłį]¦q\I¹édcŌOgć©[DgŒf[͌PŠ“śppōV‡&ROfž]&a pé‡_®W}©-į #WĻ:÷U ‚YpT“Ģ^ŃVźU{©ūT3ķQ¶]6ųÅ«½Oŗ§Kī!Ęaę¢3†{lTąŠzaźÖ S7ꋮžnV?3äŒÜB['/`*Xēj‡‰*õ§s…āwNƒ…PĪ&Ÿ—qŹ2*H*"ēŖĪc»¢ÓżƒF„11ŌÅ8i’-“Få ÷8ä«[qõó5p`Ą@Ósy<’XTaTö™÷wUt§łT±ŽĀšŠćŚšl/œ(lg|Ż+4ćéÖve…cA 7ēJ>3jlHŻ}žŽŌc‰ß8Sx¼W ¾Će™dŠ}ģ$Ų:‘ķ3¤fƒ’’Uq[,׎Ŗ[Hęćѱ_¹ #”ģh"ķæ“„Ä/G"ŲĘüf9Św­LŌ‚:>L†”Ę'[Ō 0Ōķ“Č7:Ń TŠ6±ż ‰õćwŒĻF¢~żō;‰µ“&/©Dg›ÉY—ź÷¦~䮞Ś£ „KUĘÕ:F'儿rŅŚ²Ō!»ö©L’ūa4fM„kĀĮŗ]ppwŅʏi9¦c—ÜŽX æĘœÓußAw.N“W‡c¤ĮĻE#?a8Ļ >D€_~ķ[ ąFŌŪke`ó½9qö¾Å5‹m ¼“¹kŖ PnĢ’āČLGü“ą# čū@$ŪĮV$.0T’~™Gāµxļ”bo}’¤FÕFd½ZUS¶ó²°ĒÜf„©ż u¬ūĮ(½#ĀŚæ¶Šä²×J=}–'‡Üā¬bd> ēŻ0Üś&;9p õ3¤vN¶ņž+!kŽżG £'֚|UH ä”ßšŠŚģŽO˜uT°¤¾`ū“„C̃iä¦ŪŠź Ł6U }K| źK‰LQśņøēŗJ hE˶+ō¬ …æR=pŲK4M×§¶Ø‘öå«~ĹÄ楃·›” Ķó³” Ū:Ž®Dk3żĪ¦-ćųuøĢ"ćDœ{™¶IQźķƒó†^+¢ރ½ļ.›+UĶ!ńaŹÅā-h^w#|Dœę쭘’$īär „ŗÓ“ŽļĻń¢"€£‡œ„š ;ė`“é‹HŒ"ōä‰įĒv ß®øŌ„wōŒU¢Ō@ōÅ]ˆĮ7Ё’Še±Ęāhß”;hQTćų Sz&gŸp{l£0aC6ȊŸfSŽ7–ā– ļ%'Ä{Żī-E)ƒk%oź9’X¤™ĪE£»}0r'ŁŲ+żĪ€įju騀o4š+C.jü %ö3)ßF”³kŅĀŪ®ė9vŖF-́÷HšO‰”‰8&ĢBÓń“ēž«éŻsžøXTĮÖh²fbŲ']Ž×Ō"Ļ’_XŠ'ēN} ®Ć3ĮC FīȎ "ń2ć“SPįæŖż8 fŽYE¶āŸC¬ÄŠģ1ubŅNõkÕr®­›źŅóUĶ„ŃQ?~ą”9óČžyt˜!9nĢ1÷Æ“ėöĖn‰߯‡¼ABy2ŪW:iĀŌÆČČT•é3ø1i¹Ą·5>Y> NVīéQį„ćÜw.Į%ßāŖ2ü×+¼’śĘLm0#^Ā•A^rµ%ńÕjĀØÖ£Ø'žmƒåŻ.9Ō5Ą­(4%®šŒb!RšsƒJFZYHl³°Użd8ĖĻ,\%'ņŖ“Æ(‡l¶ ?M^ļ#³UĪU°wéq·¾ü‹ļ¾n” Õ#»äĢ͈¹˜’' šõ §Sąg¹ƒ;VŚĒ ź…br{Ģ)ŃĄ%3,5 †o3š™pOŲ>r÷{œĶ”įC}ŁEš¼dɦ «kWOŸQ82UtģŻ†‚²-CJ2É3/½łŗ/…Ø` j|æ~š× D1Q{*€ zT6ŅĀóĶ{—źĄn5¢ä’Š/ wäŖ^óVtK@ƒ@ēbxRŽ:ŌJEŅ»¬¶āĄŻeD”„•ß ån4“pź¬žk5;{9B“@Ą‰ÅÕŲA•J xTLJäā“7G8ń™\„[’ŗQĖwówiž5s±2j…[J`ꬆNüo}ęYķŲSė;·: ”³B7MÓž|B²ĮĖqšŻ':‹0qȹ_·LB‹ā¶„ ·d}į‘xó•)^”„ąc ČŃq„1¢ŸZg ŹāØe;HzrwDńŖ· †h]īó×ĮPć(<næÅłÕ62µ£o½ß,.UC°ÄC¹Ā5’ż~ł’ohIwŁ m,b'“¢ģx·¹Ä”\”\EĻz‘¦žóų²LI$µ+ŁšRõ%9ü“ķš8FŒ)»¤sÆ »Å’ķó1eϣ҈Ģū"%ø ÖQ]ĄŸĪ„źĻö¬#~āŪ>g‡fĄ›ó!ÓĘį±>5@‹øŌ„°ż,.ƒŹžfD łœĒ `*LOŽeåĀĻūFśf~&”dW» S)ƒ¢(±ŲC£šLV#ł‡Mzs‰y×5ŽßvŸƒØŹ  Ü{ūīˆąČł8忈žS+cu>¦Š“;_ųrł–Ģ FK2#Z`c N# yĮf\¢’䣇µ9aŲ5#¹āŹź62-¹½/MĒÖń#½cœž{øcÉ+æmüČ” Žb²ŸōgĶ)„ ŸüLĄŽ’ĢNüįmņߜ+’TźĖ#Ļk‰n#–Üs¼ŁPPæ¼½^‰ 8#DI=\YÜyɁ†ć…į}’„Õ˜ŻĢˆ®Ūž,,œ?‰qƒr‚żĻe1,'sĮWR:•¦ZAå°P]d%ˆE $‹9éC’)Óf­³ĄWo³³ćõ$’½k‰v`“:ŸęĘvĄŽ&Ļźšiü0Ÿ˜&V’,āeori:›˜ŽĻ”Ą(q–ķ Y× įž~¢ń»N[.d„µfrјA–ūŻ„·zÄH* "Öo":nŅźį鿆Tś_¹‹¬‰*Ϭ—5Ć(³6Äk‘®TĊŽĄĶ„xõCü<ļæ M“tɰO6 в7ųe+³a4Įfä²7©²EĄJŲĀ©F[Umėlõ‰Ü¢Žßåx’“„„o‚ą?Śż7×¹'% ģ–Į2_°cŒhėōI5(»Ł¶ā÷Wku±4vÕ7ģ#…­Å v˜JmĀžŖĮ6¢Ź4kĘr(@rož¶=Āų?F?ģÖķ£W=4`|ȉ2Z¼>””,ÜSóDUŠ"©Vc·ń ›Ü®“Œf)Ņ s¦üŖÜUuiŠ»­<Źóe’ėŠC Wü‡·¶s(Kˆ“4›]-pųB³–,ķ³kS,7Ąč”‰ˆ#Hų;ż-*ķ:ŌEn:gæåż*–¤„ʰ.W WD’yꋈ³iHué3ģŒ<ĖyfåƛžX&oæöÜŹaė’-æ ­ųTłØ±ģĖÖŖ©†R؞!-B“ZŸ‡a2Ī@ėdS<ŒÉSéi#ÆB¦x{FŌ{’äš\žāū)cL­8š¹`¢ĻFuŸ?pž>‹zpp¬LČąHń·ž9ąMĶd&…†—<÷ćū†ŠI÷¾.ŹÄč—([å‡ó¼b7’×äpģ”Ž±ŖQ}% š9$6­«½&Nyļņ+vc³Ą×ŅĘšƒ•ģf`sōžŸc†_ @Ń·XĮ!Djļ³SĪĒźwŒZ1°L½Ü “&ē5ŪG–į9kWį‘•±qł£cīF F˜[œ@ōęA„ŻU°uŒČąķaśUJŅ­ßøēJk0˜Ļ{i„s «ĢoĻŹ³†ÄąĖ’%µæ)-»čݳžnMė(š‹ŗlüdŗęėžvP§īóq:’A~fŻsNÅd-xAń"õ¬ §āeō¬øć˜ š×ļ˜LԘ‚`—a{_CzŌ+²`¦›ÜP4—ē>slāęj{śŅŠÄK1‚h”Iș1¤Ź>Ž|žĪN˜ÕīZÜIoąh„ˆ$.ˆ©`lQ {)˜óĢ$µ«Ÿś½27MžMaN8•lrōM5§|X¬¤wŻ?€š”!ĆtäŅā€š%1ķZC›bƒ[ācØĻĆÓ':hā×U'±LaOź'éņŗ YÄ$³YÆØķ3%˜;K0#õŸdœō™FĶ©Åä@ģ‡ūOt4i™;x©Žli錄xcj“3ü>§UŪ xjį± •ˆK!ÓĀ&łĀ !s¹Ė\h3 €ŗ×’v¤£Ž±ÖLü4Ęn¼ßčn?!wµćGC¼pū„š+·É}ذ#RŒ*ź°z†eNöpÓīcćŠwu/śEaĮłZ4÷N9BÅTøgĀŖżćÕāļžzŃDGzČŻņAl›Īä‰(ópmµpžWÆ}0ģ\‰«lX—„_L5%SŻ~jĶz®¤åčsd&žÅÄŚˆĘY¬Ŗ-»øJnϬ&ś²-±śŽ#H#Ī·UŻ ¤×Zd‰o“ļ4VNŌ(ŲJĄ¤hčd ÄęZ26īŽ źN_“/Ī,Łl§©Ķ°2ŪµŁ]1ĮÅă¶”`M›•qČšų—˜(ģž©Łv٬ÜzĀ”×.iĘ.uÆ©ž–aĶ8ū~„ēg ü†Lɚ'§X3`7/±•é®Fņüś«6Fmd āŒģŲ(NŌÖGł>t7ǚ™!~REbĮd„Źo)°k esš» SĻŅk7ŌD½zRoŲūˁ3@„ĢÅÕ®h&™Øm4Žź6„Q/Ļ.lZ/‡Īxm… ģĪų<«°\y9B¼Ö§ƒ Ū‰£liŁ-ź6_6ų2™ Õ?.£.øF%4ņDX]ŻQl”ų~„epÖ Ż@K9[ĖŽ©CĘ|,ąƒń›8ŖĢf51°I@5§óq£’”%¤hõĢw1ēB{bįé`Œčė“Äiš >²ØCāf"u·˜›R{bM åR¹ž«[£¾÷ŽÖā`t#U•=€¦-żco]‰ŌÅ<ÄGć½A#¬×ųĻ, ½ŹŚM0ŻÜ‰©Ć[w\jļ–ąl³J@>®N­¶ŖķEćCќ¦ ŚY endstream endobj 779 0 obj << /Length1 1813 /Length2 8269 /Length3 0 /Length 9388 /Filter /FlateDecode >> stream xŚ¶T”ß5L ‚t7CwwHww× 1ĆŠŻ"„”” %Hw ( Ņ”¤tƒHׇžś’~k½ļšµfž{ö‰»ļŁē>ĆH«­Ē)cµ)B!pN^.1€œ†‚1/€‡‡Ÿ‹‡‡ƒ‘Q wżeĒ`4Į<ĄPˆŲæ<ä` üĮ&„?8j@!UO/?€WHŒWXŒ‡ĄĒĆ#ś—#&zķ\U(äĮ(uó…įužz°Ų²xEE…9~‡d\A0°-ŠĀA®m.=Ø-÷żO  G8ÜMŒ›ŪŪŪ› čźĮ…9H²r¼ĮpG€.ČóŁ~Qh]ARćĀ`č;‚=žō öpo x0ø€mA‡OˆxØŠSQh¹ 8«’įĄųóp¼\¼§ū3śW"0äw0ŠÖźź„ų‚!{°  „ØĪ÷s€»_Ž@čC<Š vŚ<8üŽ: (£>0ü“Ÿ‡- ģ÷ąņ»üāČż+ĶĆ1+@ģä ®® ÜćמäĮ0ķùūr’Ł\gŌā’׏ ±³’EĆĪӍŪv÷©Č’éó`ĀųĒę‚yDł„…„ wČĒ֑ūW}_7Šo÷—łC æŌ `’@¶=ü`ų{½@8Ģč’oąæ+ ^^€Ų°9€!’d0ƒģ’X?ōö˜ń<ȏĄóėó÷“ŃĀģ ßÜ·˜[IYĮ@K‰żOŹƒ²²P€?'Ÿ€“OTˆĄ+ (ęž7ŃßGšżßVm ųĻķż+„ Ä żƒÅĆńżÅÄėOi°ü97¬€’VŠ„>`łG’ę<‚<¶_¼’ĻSš;ä’Oüæ²ü_õ’æ;Rōtqł³üįšą@W°‹ļŸ‚ö„? ‡ōaD ’ėjśc¢5@v`O×’EUąĄ‡!‘8øü}`E°ČN ·uüCGõį!½ ҆z€Ż9N^ž’ĮĘĪÖłį^ńxčÖoō0U’-©±…Śż?>A!śb<4’a%šē}˜S;Ļoyø¹ PųCą^ Ą ĆųÕS>!· h rŁĆmĄæąßˆ Čæųßömżcw}øüžųw*øŪßvч€u`@;°‡› Š÷oģr{ø› V’ŪĪ+ņ_ąDHąßČ?ŪųwÄæŖóžiž­Ä’”żä_5’ż«ČbžUEäƒŚyŚĀ’—"ļĆėƒ“ū%oŁÕyŲ°‡§«ėļĪ’Äx˜3ųCæ=Ąæåō łOēm=a’žĪ·æÖæoaČd‹17 µpzŃ~Q#Cį͹>ņt‚qŻ(‹•ÓÖįy…–Īś6'l v&“ž±w~UåTś+Ķ­’nK=Ztės¶ė€«gŗcėm³£Ä_Šweźś©Š)9õ„7nŻ C‘[»T_¹{Š`k\xæWņ©ė/’ö9jz]g㭐ړ›ņqĪDƒóŠŅIĘ›Ü)R:T8'Õc6ü#œÉÓ³ üü/÷4ŖĻŲ1÷łKüM—ł’.§ü*õł<ŗÉČLI©Oń?1łĖneؒĢų—•,MŅ&Ł»Ż+I™é‡Ā=s˜‰µ0µ¼?†ĶøŖe?ʦļÉBy҆±>B)‰‡żšĪß„8­”Ó°SC£DŽb27Ń÷§÷ŖÄrżhGUnU Z*Ądć7ė/‰|)œĄßŸK,Ęä©Y`!»†® Ā{Ru±˜¢Ž{1kjŖŽ)Vx_žVŗo–,c™ńåö +fŠ,“g]AwXüƱīv¢x6Ż€K’›:5 )9ŚaIqGÖĪ)L%`Ė!ŗ(Dē ĶB·D˜4ÉĘQT. ÄWĘÄlŠö(ÖĄ)ķOф|LojķØ3Ü]mo–čWU°ß5nõ­+žT®9cōźPØņę0#h k›ŸüKlibģ}½xŖÆ{w-¼“¢„ŽāMńæÄiŅ«T3#š‹Ī{¼ī‹Ō®FvK>¹{Ōj½Ó®ŚCaYćū¤łˆ ŃϾ¤šĒŪ™ö”gfRĻ‚/‡ī3ƒ'„5æ±ösĀOY‹-+TX,ēS5Ģp–ćĶ»śöef»]Ÿü¶ż_Ķ?įŹMóUw™œŲ~—ė/|TŅ_I]…tiæ~Kréõ R„ą /ė0giß”EXlTł$·“_mĮa³ģy“5ū$Iqv©Ł™2“~_łšęܽŒwVėÓt!{r;χŲ`‰•óR‹ĘĻ^yÕÓ®h¦ē%Æ>bf愹~Śadčh‚Ƥ{ē_EĖüm¾}‹yW&Dõ±6Ł&ń•s±U8é×7c«·kīˆóIŗßÆģ2wKǐń­š7ųciØ-¤„X][ͽW.čwÉ Ū Å ó˜–ÉśÆ`ŁMÆw ņ©žeTÆI^„u'ĒŽØU '¬ dĶ$§<›%éŃĒ’P³µWÅn&"{†@™ŽõŲ] H\ųUŻĆŸ%äH#)$½ó6¦žō²±Åc3õõżĖг#Kf’„mVĆĻõA²ټ<¦Tś×‰Sr|„ ń§ŅĀ‹«·Bdł§SŌó x”Æ®ĀŲ‡ŚߞXaĖb“ ³°>‰ŗŽō!Rz‘vćŽŪ§s{Dą² FRžś£µūž¤ļ!8’ÄJ«ØEx›š»†m—` ‹Ē©½ÄĻć6eļEÓ]I‡śŅ÷ĆŹØ%Ä:¼4šń¢“ėā"O¤æ.½ łRɓƙĢ"ĪĆÓtTvdļ,G…Fhš_1ļC–°ĄüŌ'ŖĒ(XłĒ›'ą ģŅ8|¢ŪJļčĖÄÄ¢:­āŽƝź˜Hpö¤j”ś2éÄcj:™’”ļB’"Ł Fõ,ÆŁü]ßa.ŽdŚ#”·bĮ)æĪ•ń#+ĒĪd•!×ϐ·š«b!?›5PQĪ\˜ńläšL^)Zõ½Ćxˆ"EłTDšÄżęEMŚüv—ĆT/į21t…›]ä¤:tErŽ$·# ‰Ü8‡½śĖčNMÕŁxdglg˜=I…1žFĻüvA ~i5Č'įżÖOŪ2örkeŪgk^„t9ģ£Č“«IČT.ø¤āŒĪ[#-Xōa /½öčŠĆšæi¼éE‘IšŽŅōŽüĄŲšn‘H*żĪZ|CRe·½n£h`Ż”‘6§@N¼5Ū—µt ‰s!õƒņæņĶ 28Z(œ92ę?"ī“Ēü|9Ö¾Bz%ū…×ģ÷Źø;ÓŪ·NO4eßY„—qł6ƒOųū®Ńżc>0Š!ˆSlϘÜXT$Yæ¢óūß¼«5Øąœ TFźqx½šļ’Ī5teXe$œ“’¾ĻŖ,×µ™1éLWōŒŸ†pśNšM×`†#iZ(fM‚‚^ Wą±u‚üĄŃ{DؘĀ4üµæF„½XtfTõK ļĶżÓl9™ņ¼tf'‹‚§××j1~R(Čō=-®ū¤”5 g74žh¶śŚ†cŹ8ĒÖGš:,$šiWc1TÜÖšÖšzč‹!q<ÜėXq«Š{vĘĒ:0JEK=ͽƹЬåU+ˆÜ×#ķü&>L`ŃJ?z83öįņŃ'(ŹįżS‘ßG S„ShÜfPÖ¾•üH§q9(oØ·°†q¼R7&ĄS¬Ę¦Éx“K…]įo5Īd3—g“ \ƒ!…1PķuSž¾æz÷#µ ÆK€ń„ž&©¹å'lŌÅh7„ø½Õˆ‡ģŃ­xHĶu^”r¢&I“’ņąž²#Ež€Ję<½ øžpĖ·ī9ÉÜc†{Į’D=œ,;lŒģ{µ’…•/_ā¶.#4ųķeXČpl²ŹZä֛墄„u TŖÆ¤5=Ȋ'ēb5ʳ©Ó.&XŠŹzĮD`ŹĻČćŗÉÄŅ•MVŽF“žPŖCōŪGˆõ72EŠć5[{߈nLW†”’uˆØįJĢ®«¹–Ō¢‘6³’v譗:Šž“×dųé]ęxk!)d¾ÜŪó';†īÓP#?SŪļA‚“[/ō‰[[ź4Š+¤–'M=1t{‘²;āzņ“s }åÓ«ōčDŠ5…čśÉ„*є)āZžÕ$jü@īBŗ“Z£łQ›vĢā||{]2‘Ü!2Ć)"} sq«žuõĢąž½'NйHŖĀ÷0ԃ/ćlÅ]ķNč/Ņ0CÅóĮģ,¾öĖަņ˜Gv”-­Œ  ­zE‘a%¼«„Ś}®~,öc„weµļR m¤ż?,–”AäŅ‹Įśh/™ķ>S/(Źä^ŲģJėė'ŠR®ɬG£ ž”Ēs:XĒØ~RŅ-Ō€Ci²Ö=j©ėE«ß–zTO¢y1m8®26ēĒŪšŚĒ2W[f{dź~)Ørć"O-—ę‘'Ō9—½©b‘leĻ)`„ExŗÜ¦¬©źŽ›‚§ź0Š*0¼æ½\äI—°‰¤łųmAõšė,×öńÉ#äŸĖ£4JP³3_ÆŚg\*¹zķģ)ƒ¢øDN#õźvģ1 Ļķ=ÓŚ?•¼rÕ)ص§īóP:Ö±eŻŃ5į[y/YķĖgū„9|„¬Ķ'ż„“æ;{ó£A$JšM‚MŖamƒö49…kĻ7ßBŪ1‰Dsz“bŒ—ą³{HßįĢ„Ąįą]FR½īąwīxlüŒŸVĘgGÖŚ:wažĢ2Knž öOäÖ&h’īQ£ĘJķBv‡1ē¦ø©X]ĒÄŲ ¬œu‚čūĒai§ĒW9ś-…÷­¢#{,ć97Ę˜Ķ Å_"-Ó"1­µ»I)ƒ¤“ņąŅ”N~?qEp„„40…Ū +›syT>ŸśŽ–RkM‡9~ØV}äL: óĶ,­Ļč ®ÓSƒ§#%ņīµjƗR™ņ*ÆšĪoLŠ#žKUžW—'b!®²Vģša!=ʶ]e”œ—}ö(d±ŚĄ¦+ĒÜB”ĢĖ- OJŻś®8I«ŗxņ<ؘē“>Ģ"ėĒ»rIdŽw%ā†Ī•K~dB—SĆØöŲ,Ł'Ś#pnA„ŗ¹†D"Pąwźė{&—–õ!:-4~ć}ł¤ h+v›@J’ƒ}IšH¤AeóC”–ēøŖ'iĶ@ź­9`Åʤx¢c7ś\%¼Ųu(ó” ŠŚ‡ģū,AŲs>wS1§ÕŚ×Ūp# ŅŽµrń‘·Æer0=ö˜ÜoĢ”īe­I†NtŒąj~ēŠTČéÉ))3aßÓz¶> #CCĢŽW*ĖŚ:"»¤!?Wo‘%'—ƒĮ˜S¤6®č½xÅ®ąėąõ—Cc\ŚÖļŒx†Ē˜łN¢x6¦ēF¼®½]ø,@ń./FƂ÷©.Øśi«M23ż²§é>݆+.9ėæhœYēØziķ¼ĀŸ„āi¼˜ßé~ö$µ#[|„5,Ÿ—jŖŁ3y­—tu]ĄmdģB¬µŒ]mŃć_ꔂŃ]kŸ™c됶¾óŌT+{å½üÖzW£U+čeĪu“°ććH]Ó†ßxė§&#örų ńFåYFŒĢśø įJF€4–¬=æWłj(o§·zšŹłMić©$&©—Ę/ͱKūü y×l»ź¶Ød2jŅęĆö†ēÕńlCŪ€ā«5˜°Y=Kģ(o0꧁Öu)H±ļń²¢D‹Ķ÷{Ė 6²É'‘^µÄ?õ įüĮ¼-ƈė`óŌ…ģƵåŗ÷Ÿx²„ŚžkcKŒŃ ģļLÉ&Ź—Üƒ”Ō“wqwžŠ_öŹW{OpŽ›Ń ÷³>QIü"›Ģ‰$Ćd“ä/ėŃ͵żh~Ń(ŗÆ×_9wї/·}ź “źKĻ<×ō„[Jgć=āŁīēļ{³ųØĄVœ¼rĒr={}Š ń^ƒ# Ąąg MB ńGvĪŠ‰·ź…ąėw„‰Ā®?Ļę äć_„¾yTü?źZ $CĮ»üź„“åEt}|~ \xīņé ‚±ķ=ēT-™3>öжЋö`kšū/ ƼĶ—kÖ³£mƒż†R\z:{ĒG4Ńei5ж/%¢vT§¾W’Ā.’ĒĘ-Ļæ®,Į—<“łĻ”Ö„·8BE‹üɈœėåXu4<³CыĀķźw‡™Ėd¼l’l”ņJ ‚!ŹøĘćLĶĻH½?°_d¤ö~Z§ŲYó`©J¤×–ė8BµąŒqŖÉm}č}¤žcgŲ‹\b7Ē?3b¾…‡cŻ3V×=Ø=Ž*¬ó?§³½øÓŽÉöJc+q¶x,x† -“‘(Ué³Įæģ’±iō­ĀIYŲš¾ūÕ½ÓĄDŁŪ–Ņ4ķ¢pjM³—gOGß@~ćiĻ|å„¢7Bõ*ɖYģ*°ó{ޜ«¾ W:°Ō¾Éõ깏ķH¦whC­ˆLøU›ė>@>øó$5<—Rj­g&gŅŻ7¢§¼“UęŁĒeS”DgouĻ]Ō JW\¤ņ84,˜:Āq6ŻPv¼q:0YKĒLSÕ2 ‡¼kψڼ„OXØ_Ąn•“īĄ5-§!’œž0­TšÅ„%ĖžĪ›ödĀōŽļ.°/ÄēŁØhõH„”6ŗQžG¬ŗõer_ĻŅł³ŒĢd,B"ļM€«æDź.bŹp‚ģ揠:ĘqGźb8^‹œ÷,‘AŌÜ cü°tŹ XƒÜĒI”8œÆ«ųŠ],@<ģŚ%e;Tߌ„ß ŻŖµt2N8ÖQTöĀ£%j—žÄˆOżœć,ˆT©Ž«;ŗ{”fCÜēāœc‡īÆmø ģ ܽėF©Õ3ļÜŁ•^«æ>0»ˆHšØ]qÅ?ŽŲąČIKö%“鉮JVŁR•°å§9ļ2“kéܶžÄzÓ/ÄwɄ뵅ƒķiėü•7€QŁ/ ė?äjļWÕYNˆ9Œ’Tֲެ®ā.d¾‚ōļs˜YF ŁG§÷šŁĘø©X^3f †ā}1 ų;Ė04š ĮK0_|6øš˜³¬OźsS«Ō0bŽØWr½ŗw[+#ļVĘ;°†“X©čæÓDŻ"=ōł¼¬#`w Tønä’Oe”/čt@ū>aŠ,Mb•;ŚSiĘ“æ÷V`qĪdÖhfč,ŗ“•~ža,ōg?ww UŲ!cÕPj8k`G ŚĪfן£¾ĻÖn×į&|Cš9*Y’6|W ®YēŸ"e‹}Ā)=ōav79öāFHL–LĻ󶯱•Źõzæ)4Dg߉˄ī2}²²Š¾q ™AZC¬AMXj©eøXŠ’ŽCĆ2sĆŃtąKšÕ¬ ąå+·ß™6¹£Ŗ+{©s¦CCo½kD\·1i_"v¬Ėæ’Ą$]GhÕI4nźY Æ!ėœvc{&VĻåڵXkv2z¦‰¬)Lµp ­MĻxD~gó·vąHW=™ņ—~’…ĖqŠeź„`³,]ärāgéF?QRØž:įDĪ÷<„) {ųk 8dųÅ£TQū MPŽÕ$īUŠŌēqÆS'ä*Ć5o o›Q±=©mqŃw±¾Ģ”¾“žF®\BsÄĮc’€ ¹yץœš–ŖĘ$u?NĒ“¶ø˜Üuėś9•Ŗ«ˆDÕų²`ūe¾žä¶!ŃĄŃQŌYXU$~I  w–(Ku‡!Jū•̰P(tŸRŠ+%©č=/|FYēĄėøg\Įõ&'Pߔ|ż3“šö(nÜ,„¹CėŻ„ŁNĶFļ Į‹eĢŖ÷b­;-PœHT mŽL™<•Ļo­>œ1jĘ©~]PÓQ®«a£Ž<ћ}§>ĆŲŽ[g~WuŲę,ü)’…ok‘›)zŅsy’¬ŅšęÉ2±ėķ*/²xŠÓ3Ń“”m†Ō 2--6ÆÆ$:²œ”Y)(īq)D²>;3„¹ļMņQ²Ę3"’D4×®"A&Bˆ‚KĮ‚ĻŌUėżm+bŠS??…±»Ńļ–:»¾¦ˆÅlĻĒ>Xö.³¬;”I+¦ŒęŁŖėā6ļ„7ś±€Ž5ąl+ÕśÓœõ™…į^Ė4;Æ¶įœ”Ļdž»@Zō^6"°°ĒQ4¾čŃ«9関č¾ĘC€ĻĀR¼ŗģ²½Ž$­”÷ćœBÜg4O©T„Ā"m …©3śœ*4b2ŗI=¤–KĮj~¤nq25:'ćź1o˜oŗšÖ)ѾFŻūѽHNÄAd:~"ˆ°¢ØÄs«³ģ3©ā¦gOts¼żQā±¾ČėÕ&%ārĆķdcI‹ļȍĊ`Üģż„)E®f 4ómSN†ōx²xšŲ ä‚l>5OĖźõcŹx(³2žŗsˆŖČ zWH^[t‰Läɹ»m2ĪGj:“:ßÜ®wéqōČ1æ*_–d64`Źé­~“šź1ś½7s”–¢YĻæCįŲWż=/mĢ~V–»uų%Mh%H†-īō¹Ē lŁNN —Q†»§fŃZ1£śļ=V'ÓK[׍Zõv½ņ›“ō—ńū5U ÓĮģķ—Ÿåš½lš7LŇÄŅRŽB(¶|,™ˆ™ >¶FVJ¬»|ųPŃ'³ƒÉ,ēŠĘ@m=Ū¼\jĢ8d4ņz ™5›~āDķG‹¢ž5Z—ż,¦°ēŪę/^¾ŖŃ4‘zą›,%Į‘ī'Č™d¬µŽ­ttē褰JćČų2ūGBøwĢ·¶ś IžģÆ +µTŻ:ĶłGŌ¹ņędĪĢ]­ł2¾Ó!JL÷l(Ё£gļ›*š Z=y…-=‰ØB$ĒV:e B\{į Ekyņ}ĢbĶo{f¢†2³>0;ēÜnĒ£¶–‘ß÷ŹņŽiėļ.ć 4ڊH‹ž“€UŃ endstream endobj 781 0 obj << /Length1 2195 /Length2 17019 /Length3 0 /Length 18340 /Filter /FlateDecode >> stream xڌöP]Kó‡ ćNp·[pwww— lÜŻŻŻ]ƒw 4hšw ĮŻ.ē¼’óžæÆźŽ¢j³ž™žīžĶtĻZ”¤Źj "f& I{WFf^€˜‚‚ 3€™™‘™™’RŻŹÕōŸqJM³‹•ƒ=ļ?,ĜA@×÷1q ė»”‚ƒ=@ÖĶĄĀ`įäeįāef°23óüĒŠĮ™ t·2(0dģA.”bŽ^ĪV–®ļqžó 1„°ššp}ü{9@Ääle “(]-AvļM¶5S+«×’ø į·tuuäebņšš`ڹ0:8[Ņ~xX¹ZTA. gwą/ÉE čßŅ(ź–V.’šPs0wõ:ƒļ¶V¦ {—÷%nöf gĄ{t€šŒ<@Éd’/cł|ü{s,Œ,’u÷ļÕ9²²’{1ŠŌŌĮĪhļeeo0·²”$å]=]?€öfm]Ž×݁V¶@“wƒæS$ETĄw…’ÖēbźlåčźĀčbeū—F¦æÜ¼o³„½™˜ƒČŽÕįÆüÄ­œA¦ļūīÅōļƵ±wš°÷ł™[Ł›™’%ĆĢĶ‘IĆŽŹÉ $#žo›÷!„?c W377äyšZ2ż@ŻĖō÷$Ė_Ćļü|ęļ2@~Vę ÷>.@wĄÕŁ äēóω’%€™•©+ĄdaešĒūū0Čü_ü~žĪVž=ę÷ņc0’õ÷ß'ƒ÷ 3s°·õścž÷3ɊŖ(«ˆŅ’[ņ'EE<> l¬Vf 3;7€ėżĮļżüwž£žļQe Õæ³ū‡G{sĄ_!žRń¾}’QāžļŅ łwߊž7„¢Ć{Aƒ4ź_Ÿ™ƒŁōż‡å’sü½ä’_ń’åå’µž’oF’n¶¶ĻÓüĖą’ghgeėõo‹÷‚vs}o‡÷±’æ¦Z u“ČĢŹĶī’ĪŹøߛDÄŽā½ŠXؙْ5nå"iå 2S¶r5µüW1żē4ŽcŲZك”\¬žŗxŽW13’Ÿ¹÷Ž3µyæ\\ŽĻģ_S@—÷Ftżūx’bŠ{«żoö¦fõ$+'čģ ōBx/‰wāų°¼7ÆČóļš01Ś;ø¾/¼kö˜;8#üuМ&‘憞Eœ&Ń’3€Iņ±˜¤ž€Ięq˜ž7€Ińń˜”žKÜļ>•’+€Iõ½ūTūCģ&õ?ōž§ĘzĻSó½ĒÓžCļńtžK<ļńt’Š{žĄ?ō¾Ī佯3ż/qüEļ÷ŃėæN‹Éģų¾ ’"Ū{¶ Ē÷;ķż`’˜¼Ė3’¾ė³ų³×[Ž šÉ»Ėą»j«ą»lėą»›ą»Ū?īß³µż«’žĢæK²ūƒļķĪō\YŽÓqü³ś=G ³«ŠÖĢŹüŽ÷ŽļĶģšg#ŲŽż8Zž#Ė÷w(“Ó?šŻÕ?²¼Kś“ēū&ŗŲ]ž”™å]¤ė?š]¤Ū?š=÷ą»&?Čśž‹ē‘õ=²ē?c}ęõ|WģżßĆzƒ\’uŽ’Ób¦nĪĪļ=ų÷ŻųŽ’įæß 'Čį碃)_Øuch×}½ĆŽ?ōYę½6+ĆT‰!œėÄ¬ŃV²Z^ī²\„äĻAICė^EQ§ūüõ„+ŸŻ&’f/ö[ÉC “ÄÅ·[šłŸ;B²E”v°"­tQbŽrē!0e¢Ō>x!3‹!5J_źĘ)T˜’\²a]Š=}õ¹ņŲ„<šæ¶U];LFÕ÷8®q© ¶ķBvbõ£2³Éäų{’=źP7GĘFWщśc‚d݃÷Ī)Ā]Ń$ųF ÅŁaė4W?}x.(w?ÉF÷1‘Ā>1ŖŚ MæoT¼“ܽ<1 „Iķć²4N5ełåż@„ęøŠ)šé\X¼m¶’AŁ6"˜rē¢9e%żu½f›ČF6"LĪky~`fóŁM.CFoz8”ę£B²Ąkõī/æŹī8wópˆNźśt“] zģ\Śc?óOƶy«·4aóZ¬zܙ–]ź‚e«<”ŚhllČīV™µ˜ZF`Kun}¼Ł_?]õōˆR-;ÕÅŲĒ”Ēzo6­śf—=ž±0}k6Ķjˆóö°Ūŗõ­óÜ2±s(õ«ńī²ć8Ż\B‹uąä>īĆeģŒ"«YŁŒ¼!®†H4«P,¬z¼ĀžvčcCpÆŠ}<ń~9Č("86{CW*cńiĪöZpŽ|B„üłńķB°3C)P–ŻN„yāE•­u±ƒsŌ§‡žvē.:ŚV˜•ŪŽ“Bź®’0Š„Ę Mt67°XėֆXT|€ée1ééȕ­ś÷Xʕ›Šö{脜™źQ1[§ž7jƒqyŻ[ `dZ⩵…}¢‚šCw|e˜=6_4Ÿ†lٽ5®ķUÆ6{‰Œā@ĀuMt޾éIiZVŒm<“ń#Y9¢įjń.lÓ 6… cM’³Ļ½Ē;ą€ˆćaģF¢0;ĒŠč«OĆS,gō3Ėhsą(æ“ZYĒrşr«¢ {<ĒĢ—¤›õH Ō%nū­³UG£ż™čŸww±Ł™Øk¶Ü»ŽŚ«ÉŽ×9yҤšw«Af­¤­|f쟊ÕKQ~rš~ÜytĒ$7•K []ä£÷žĘ‚ÕŽ­C÷F¶ą”ØĢmx †M8÷Xād;¦äP©Ā„@ßī’"Ķ;ZłĻ­åžćē(lŚmo×)®ķ( P³xvC ÷pl€ņćų«™źÓŹ,>߃0š1ķ £āņ%—}LŌ»'ŗĢaĀ·O k|¢ägOØ"ūśĘ“óxvĘŹ6ļ~·l a,ļ6«žuų­ź‘=·Å‹Aœź8C`ŗ„ź<$"ģĒÅöz:m’ąZįŗæ¬ż)¤“Œ+šŅÉ5tÓüŃÆ}&•¶>œJMuN;Ķ ?ׄ™Õ:Mɰk+¤•²)A#Æ3lÓGp>Ž©°ŗī³˜ĆĘóeµ_‘ć ŽŁ%6»`4z4¬”‡xٹ0HåŚģĆ ä1ŠŹLgĘpSø·EĪɊ°1HtØC„ōōDwGКb-U~ŖŌ‚‹pK8#ßȌ ųń“¤w*EYO Ę&9HŪ%sNO§ĶB"x/„Fæ†`ii¦&:ŹĒ“4›”ŗg/Ļļ­Öµæ3<‹Õŗ3!õ½Zhķq„:ó5ƒe[ńˆ`čIF l€a…zŲŽ«ę™ čKę2tkzęx čŲls“”]ŸkQSœ*k[•h {õtIcńˆóOd¤i Un[ˆT8n‹ŌqM俘§8lŠįŽ Øx|RzåĀęxŽ$'ąM[śųIĆ[^Y(©ed GQ¬v_MįvĮźlyY0ķŚšō]äŅŽŻ’5¹Ö@žų1÷a Ååœļe>i›dōĘŲDtū+žŃ²| ŸQ‚™Jŗ¬ Ekgś€Ī(Ķ\l;U§CŒ»bY=ÜdóETHžéUœMŪ8F,ÅsžÄ/'Ÿ Õ>B ±$…Ą!^-ŠĢmxŁŅļȃwL»~)$<ÓHD’żė¾ÆŹNx–ū)Q“'qE¢¢TKɂa9}±?„^śČq÷P†˜ Nß»äå+*Óģq؄µ&“OKŌĖDˆzCš¦üĖ,‡—–œÆwąģÕNƹļr«+l‰µØŁQ˜¦@­÷O¶å>õEY’®}½Ęž–×6ć÷ĀWG{ē $M­Źœ[Ę ×ị̀śšFVļ¼…‹¤ŠR°~5NW–ŪĮ5ć/&ŁūŃ``2'Ų3DF“yŗYWóF T‰j®Č„¦æ&Ŷ„c‚†8PG<åÅ'{E2£[^†ˈ¾«ĀäcNs͇=÷YÅi҃'ģ —sW¬Vć*§g>Ēŗ üģŠ Ł~dt^‡«‡$¾’ŠūĢYżŅöėęĆaHEwwś^‚s-4Źńę,E©h%¢<Stāo»(ö `q}‰*PŠ vŠÅ“ŁĄÅ8!ł:Ķ7»3…¦›½`£œęč\“ń…ͦėKGžpŗMéÖõÓ9āZ»˜5įu£źż„>ŻĪ¹>tøŖ x»yq=Țø¾8G’ńóŚó(DķÕ‘n;ļŸ7¹Pf=Š|d»Yžø03É=Ž]·XķxbReSæŌĒnųņä`s¢ö‰lÜĶļöXó2!Bą€é6%¾½j”QŅ=rč’øjŻßJYNā;ŽSŽ„p„“® ģ>ņp £·ŖX·Ŗ-‘­œĻo{žtk”Ÿ»źtęY‡ł}BŠ’ź*-v {6ö@œÅ„ ¾µų2ļcÜAŹ‚¬ę/Ŗ#č9ž~ńżŹč“aZa{Ļ_IS޽ —I’{’°š§nū«#€źXŽŅL!Q™,)gF»³^Ā]ķŗ”ŗg•cKĮLéiCś"–ÅČst`4ÅšÅĻĘ_~Fųą“ś+ņø”Ą a•åcZ›ŗœ+xn“¹¤{aCœ{O©7ʤp8”\„»šlݘßÖu;’˜ź«]ߑ?RĻBšUWź]ĢS›‹K~čŪšŚ°84ŠļĄELģo@öKG˜œÅ|«uŗ  ŃĘ8‘)ĪžĻ„rīÖ_iżüķmūIä`ģž¼Õél†ć(ōkz¾¶.×|Al ¦įób‡ō­cųü• ̧©Q‘BTšŸ »xKh(𨘷«‰†A53 Ji ¶kÓß½Æ+ ½9$bƒš¼)^ƒĒMOיĒmŌ¢ŗEĪ!,Ė]Ćŗ#”e'S^mbŗ:&¤$,ē©…°BĀÅ›µĘiy;Ā<1¤™śĀņ)@õ UWÄ_(޽uŌųtżw|į 3ų{a)_ŌM¶×z9vėŚzŸ»YS{«~Éy:± ”n~3r-'ŖÉ9Jüī;£µDÉ\c… oĮŸ4kmXw£mos£)&śī+˜réŻ5)®xå˜Į•%ž>ÓH’ xZŹź‹ĶӞĻĢŃLŖCĪT!FhĀä0äĪÆRn)J“(Ē©®o'Ćm ¼siö/_)LÕO8H+“ó;™Ó¢·—…ĆHÓ[żwÅįēȹłŠ.›ß®\ ˆ ė,ÄĪ?%5­ =ž,yĆņŤt9ūƒĢŅ)uQL®ĻˆW‡œbŸ¹¤,ā;2¾š¢<ˆ šPÜĄ^ŒœąR䊵q&Ż<ŽZ:£Ü†Ą“€ŖłĒ?Īj 1V˜łßI½2KdnMĮƒ•¬ ³ģ¶–ĘyZÕGkV:!%M“×U„Ö .:X”(‚{xl,źē®ŗ°:Łż~ŹgüQ*לxĖēss£ŽĮŒŽWš5”\ńÓŁ<ź&LĶÉę Ł¦g挄„ĄHHyd©A²3@=¹Ļ¹ó·LšÓiė^-9riTÖėń|}ĀB²©Ū‹W‡†jĶ&dāūIĖXAÕdPoxØo—¶ņ|”f÷Ķ‘÷śĢ±{wü€¢+]ĮÄE¶)*˜xVĆ~2¢Ÿ«Ķü:CNŽ1;eyy+“dÅĆYŅżŚi#>8¤ˆRMmøĖ7óJšÕ'Ē)ńi2V*čLĒhD¹3’ś(“k6R7‰+•£Ō 8šq~¾&ėśĮ±¶ĒŸ2{¬.˜DŸZ7žDš-Ā„R&ÕF¢M‡YēŸ;—œŃĆ×vøÄā ÅD ·bė1֜gŒÓ/1smjhX Öz³Ayr‡©ĢMDæ„ŹgYŅļ. ć2/?`b”+ū«½‘Č­½ I<ģĖääP5Ń_E;ėS°ĀSč-Å2y.:²õ€lėhU;…@·ŠA:>߉ Ö¤hp 9$Ņ9ŗ > K”ŽŚŚ”›Ū«Š_Mš©&ÅŚē'G±zM‡×a‡žlõ#žr(wōCNS=„¼Š+6?ĶQ‚·Ēc,/[Ā1„` z@@ęę(Ŗ\vÄųü[Ŗ6­ŖēŁzņQ"ä '<Ē ć²e9\§ø4ŽqĮOęQÓ’žlŁR¤šö³ R^'(ģįQK/¹µęWI>~·‚ļaĻž¾—UmšóhןLν/e$ug"ƒ&Ē]#ÅĶO»¶Õ”¶Ž×ĢŁ@—ƒqe1Ev9żÖµĖ}! ņ UūŁ»4²ć-ņµ‚ėdaµĀG_YDŚ·ki}(L揩³īBāü“ćég%9/%æÓ¾œ'WoÆI}AėOkĖV§8”QøŻņŠĖęĘfgR ņ­oė%/0ęƆ€NrEʘā¶#¶śtĆoņ–[ŠްS€IOĢ'€œ%µąĶŹ„ęģHŽHes³;)¼×R–TŒüšŽƒI>Öņ}ʼ6©Ū&ĪBDr•ąži`Ī‹ōž;īQ"¦Żpś¾‡*™ę Ÿ®TQ,ąŁXŚ9³Œü£ĢhHą-õ…>£nV‰g/\Äo·HqĖĖ壀§Ql•ō—„¾"N%økŃån”0”Ѓ=qč/q`I„zń×^ā©?{aķ“ŹŒČ“Mb€o龓h2ʛ(5V@ /pŲ„›Q6OŻ‘ŒmTD˜jßKøū{{.˜ & ¢/݁é6ĮuŃ1ķź†~›Ž«õLzŚč^…’—ÅŻE)°#D¼iÅf#ĆLŪå1]:¾!ÄĢFĖ‘kĻÉKu–„xĖQąš!×=źYjÓÆ^§ć··iÖüuŻ4­ąęāMµ|vśŽ–EĢgšWē)¦”^*Iu? ƒ‹.¶¢r5JB*…vÆøb±’Tx“‡ö²8zx,¹b„»naMR.|±ē.‘­–s? ūė½Ā˜¾zd–?u¦{ѓŠ‚õfŲ÷ü’­Ō€~ÄL_†zSyTØŠėfu(“‚ߎž£hh¹oņųį\ó„5Rōŗ}㢱 ѽĒķptTAź\UÜž‰ä™³›Ć½¶i_¹I°ZI‡ŗŪ-eŸŚŹś ?ŃXǽ™ģŃa ųŗĘ|4MaFb¶m;«ožtį×ģō«a™M½+"”#IÄ ¹Ģ`ØXiz@ švą-]­j2«†D•Hy£Ą ž3\^r ßĮ(Äܼư°³¬f,†ĢåRĻ.Į.ē7)Etttml[Ÿ­wU×R2'œ=ggTņ¤šLö<@»ˆæ×nĒ+¬·ą–“Ā4śĶÜD“čpķ]¦r>1nÅ;£ÕE •!×ŌÕū¼ØåqšŁÅ)B½ŗĒ2˜ÓyłųR>…ŠWK'z°++ °cQYŅ"o&!›ƒ,üĶ ’[M‘—»Ø›ŚźØlNChvw^ՄręiŁ!¶-0óP0šygpğ6^)”źóˆ¶Ē$Łų–ÆMV ‚ w]¶ŖG ±}3…xä¦?ŸYįʁÜŅqFżˆršrœAµF°”nź~¶ā×(+G¤e×įY§Æ #‡[汊rńŻb0­ńÅē •‘Ö#šgŲ;öÜ“&ĆņõŠ`L…:‡H"8):c”IUI… ä́Ą×… ‹ųcĒ>óå {ČW°Ža³ź’ޤS¹Įt=yÆv'ųfѾVŠaj¼Č1Ī#R­“M„©ÄG ¬Öa™Ž3ĪūO2źżqÆS^9?#~§€K§;ZuģæišZ까R­lI¬ńv|EU*9¢ †#ē­‹A £¤…€Åāīä(x¦¼ŒŽÉg< ~5C§{äXd>c5ąņ¤łÕÉīˆX«ĢŻEGČåĪA”ļ2nĀßd ÆĪ|Fwß*wš¶Dß&,bdXv؜K8|Ć«ÅCJ/“C=žŃ÷ĒS„Ē¢ppH/ĶZ¶߀{õ z8.<b¬ųڤР²¤Õ.†5zšµtēh$ĆRv%§¾ ßėéˆb—ś$ńNMvZk‘|īn™ķ)Ŗ{üiFt-u²xĆå‰h­qĖ]‡¤*6×+T"’ÆĶó5īy­‡®ūKˆŹ{• Ģ-ł¶ö-ÖėĒj!$,!é· ”Ą%<²Ļ3a«fISDڜŗbø rō‘T^«|dŁé™’Ž«~ œį1$'BUļU+e c€ĮåPdģ-yĒ+—+­Ópų( ä“&Ą'H’BĪŗD;ŁŻ?6‡poŚ?9×_öņăóšfĪ­upŖIÜxæ·Ą§¬6ßc–ĖV3™Č•·G,o)»’ö^š"é‡@uįŅLo˜d¹7ścŲC×¾²gŸ‚[¼rF'­”'„„6·†6Ø8ėĪgęa-{š<¶XŸęā6x%l‘¤Ų–XŗŃć®ļE“¦ī =Īάo.1].u±£bˆŲA–`™ĢĒ{¾Öx­w 8öĢ ~BśqĄSģ*Ņę6öM†ˆPŃgfø<Į=|vĀ+_/ĢGmƁ±õ™3C»Éqģ»Š•£P›”¼«ųw¢_G£ÉC/…ö6(÷ōé,w«8AöĖ]Ę&ˆį·f¶ų~ك Ąóh]“į~tĪ"µ[ź5|]Ȃש¤Ö,ećVO5'r½6źŠ ¾īģ 9=Š’>U¤” 8Ų5ĪžHšSņó啣ƛ½µ!ÉSąT|µ÷C: ¼Ų›QUO"I”Ø/)µ ±+÷wR-?|-H“öl ]nįKĘ\ķÆK ˜æŌ“wØIÕģ3‹0²lƍ9F¬j@čj¢Ž$I«Y­į.Ł4Tߞ¾p’b„c³3@R–ŗnŽTܗŸŒ³NÅv ķž‘›P\ā+1äüŅ'“Ķ‚ĒiAę ńå¢É-tb]Īž9|YłAJöx«Cęež6-×ÖmwĶ’k Ń6&ņš©įµ\aœ«FƒdMł\zL•ĢcBf;ŠxÉā =`©”`Žś‰ńy­¢;`ą“n#W押*?¢±ÅĀŻżČ©L·hl%¼¾ĒŁÜŽ­ƒt’å¢ē4}m°ĻōóćHw35¤ŽĖļ‘ąķ# 4 ¾v‰˜éM¹eņĮÆ6 PŽa@·o&ᓱ^A.Zl t÷«4ž§_#²=üQÄץE°bו¬'ĒeĘ۲Ê8ģ‰"\~C‚¤BG›}!ŠJfLų(æDOĄ'’“ ÕĶ_÷ ÄåPæŅ•°¤Ļ±³Ł¢×ü¼ÆC•ņ`It¾Ę0c½|ĶåĀGĮnĢ­ß5„® m[Ŗ)ź¦uPėnŃwĄß§Ś€Ģ>iĒ€ĢåA8öEÖ'Y_÷·ÉŒ“d)ė~¤"wŻ’_;ĀÄćĀė@%ß\–čÓ„€Bw9-°RşKüa¹įžeĪ!"Tųƒ}Šo¹*Ģ[Œęp(#™bź)¬Čī.$)IźĻv ķkĘ>’éŸR+lIFx0¾X¶įe M ņKśBćŖŠŁŽ8ß“šO£iYė„4õ"b#CrlÓjtµĻ6lČ{Q౑’Œ^Š+$Š(Ó%×hś`pzh^Ķ^Ķa;ŻńYmBļl]•„ēńރ/>‚H!Ćc“yk£f6Åęw:ßųü†@$«”$ōeōbüõƒČN$-µß$Ę'čÆĪ?ą ¶“÷Ŗi¤ )„(³’аBĄØ÷iÓZ²C#ē˜3ēD*Žōć+˜Ÿż&ė{Ė©Bį¾#õXø¢ŁB…XŁęÉĢUzF £€õ¬Ī‰e2t9@ķģ¼4ź>ğ+ż,™€„ódŻÄÖ4pv¤z±§Ö™ķM—–ȧ}Ÿ¼įp.WĒY;Fgī“Ļ5ėĆZŖ=iĮ}¤%:Xƒ9 ‰ ĢQ¤}÷ŗ'ƒ/‘0įōGZ‰‰"bą+›ėō>Šž^“®wgęźĀ/ĄF—c &-ņ4D¦rć_ƒŪ/Õȳ«Ķ&ęO5Y¢ų¼ą4óbä ¶X\QZlÖS|Ū \%­±X”n€T!‘.’Øfö£ÅģŹŽvƽ£ØÄ“ x5JߓbNn *_öd)özzåŅx^&Į.Ÿž@Ō5ƒ7®fŲnłĢc¤"WŸts½¹;„:«yŻį½Ī”(õĢ#s=7ģ™ļO҆’sŗ‰%Ō¾˜¶p«ļh§•“‡ß.ä±®Ŗ*°µf>ĢPqś“œąŒż’Ÿŗ¹Föś9£ )tō«Ļw½õc›tŖą÷°†ćOėā™—ŗźūu2Ÿ«,üƌŃJśdY‘ģOŌ —Ė |aÜ¢¬‡JņīōhŻNN(™#Œi¬ĒæŸĘźxǜA›Ō‘F-ߏʯnZJyį+ĆT¦_·HaŻ9²ę$„ĢcįĶäȝ’Yq†#CŽ•ĀƒF-靉ūŌ,toŽåZvĆĶfŽœ \b »c}!EĀ.YbBĖ·ļ‡}¤<|3,G§ÖZžĘ±C1•D_}”0‰ =҇‘q—ÄŽī¬HƒĒØÄG[«sÆÄāē"ҵĒ(½V`\ņJņ~Ķ8¬\³GS}$?Eš!!q_£‘ī<ö-Ē @“åŅ¢Åņ7PF:=™gĶ\Ī2ÕC…ōAU7Į)ē…\ꇩMPœ%“u™|å•8 ‚•#wŻĢ’ Įģ2w¼+Ä1-Sže7²GG*µ‘«…cųž8¾²}ĒTŠĶ*SŪz—łčĘξ^ˆ-‡ V‰‰›„å÷Šå~mœNü{Qļó7üŃėC/bž…x2ģŻ-­lĀPįĒEČĒ-äA XuŲ!ŖP{­„š¢źµI+VœÓŠ ē \„’—©<łŠ4„žS®FXc6¼Śaē©X“žd­óģāßč™? .ZcuĆnN9õ!˜p<óľ컂:y®Õ9MĻ]Ö¹\ŒĄDĻ_¤–æHˆR±#>†ŗN{ Ł×Ї@Œ ˜ Nvņ˜ż$]/?Ō³ŃŻ—¶|¶žmŹ*¹hŹK9oŻõ¹aū©lż4tŖ8³^š³Ś@3ŪY’T_šŪĢāöQJó#½óMV?ŗünPĘ[šĪŌ%Īš”F±ŹęÅ-‡Jōčä ģżć52ļ=-Īł=†’›n²ÅUåø ėˆČĆég%Ņ ƒ½Ę³ā™Õvr‹‹ŗ› ‹p­‚ˆČ,ŁÖ.Eīé{Ü*g«:uZēŲhSüę=éHeWŗÕĻų åŁĆÆ }JjšŅiOZ-ņ–™-£ÓōEÜ8m£Ē »JåuL#ķōht®įQJF¦ÜzęØ÷W!DŪók„Æa=Ǝ/»¹@ņx_DŸŖĢ'v*_ü+Ȋ!õ½žx6˜Öo™3Ä h„LK7xie&ŚU]r½y¼ÅŒŗ zYZ¾]ń”ĖŠ¶aoč~ÄĢ+¤d®.tč³ā÷ŠÕPS²”Վ qr Kć¾hŹ\Ynt (cdŽĖ»Õh9ōÄV|Iv)³•j®é * ź&ĀNn“Å”S“˜Bé/śĶ oLŃ“łł·Śą+ۚ‚&UZw b·Ķ*’Ö—ÆDžŒłÓ&VS»UżHPs@ wŌŖ_-³_¦»r5“–„tt­łSČšZŽĒwĮ𠢓U¤PPā³ż4¼• oxFhWņÉDķĀJö|9:Q牨-ϼŗ˜ékܚ;źóüń+ś~”™]‚»įYĄ¢ÉuŻBšNj/6īż2éES&öb/Š"ĄÄ½ĻŅīÕ’²ūŃTö»ō„uF–ŸŠC’°ø—~{d o³Ķ€ęꊷČ|‡@ƒšŖ[_²x0}#Œh…*5’ā&k•[1¢Ķū×VP.«ė®«ģ*¾Ćs­Ķ«*×^õ\ 1œ¼+%X÷ä@·Pł+į.u,6?V҉–œ¢dwĘĒ!)ÓńiĶ}‹>Ū 7ŁĢ·­`K<¼GDQ2„5 =ӘXkÆaĄ…poŸ®4īķ>0“Ē7ä' yŁ“÷:3“‡ģńÄuŁ\­@Jē¶Ņy~³0ü!mĖ Üł™p™å©ū%Ģ=ڧC4’)”/ ^/ہŁ{æ·žĻX©F'ä é½8Ÿ~Ņ=Ŗć˜~@ŌV'ļ!č‹,¬6Āćś”W:čDG0Å ļtY6MŹ ®¢ņs{ŚJ6Ą-”~Ć”aŒ¶p“†Rϵ'‰„@>x°×ģ&ÓNJzČ1”™³ Wߓįp„# 7Ś4š{²į‹ųŲ‹ć{@ī$“æģOg”Vž<Ŗą¶ģ”ńµšē”©lč jī7~ĘwNŅmĢ8ŲÅąćS, ī ī“/Z”gC—kAłZÜ£(Pƒ]Ć­v0”5¾ś“/żF\Č ˆ[&¦&Ś)éø’W£Š÷÷gs{!‡ŖŸ^÷uU:e‡°{P8É14[Ļ9ŁfĀÄÖīā2ˆ »SkŲ«Ÿõł³`üø²ĆŚIꙄ*Ÿ\|ØĒÕĒ8`zż$Ł^1C4 ėč„ŅYÕØ¹ÕCśø¹q!€v1×pĄźF”ó(z u)2™”…čūĶ‚/l‚Jb U®£Ÿ:sĻYw–"|«L×ꂌŅō/ƒdlxĶךcбøc¹°gĢVŚ‹ƒ“1ŽV‹ąbš‚Å÷*Čv¦&²EbÓģĪ¢oĘ ²Õ^v÷~c“&.Ļ/ŖjgAæ“`<ƋU„ĮæŪq©Ę%ŃL}Š-‡QS˜ˆrjū/ĆY¢`”~ōwå[I|6€ZķBJšÖ³„‹ŠWŻkšÉ°ā9±Bݵ³öN(Øń¼­Jé„6ZŹ·“æ¹BREwó&ł¦1BScēĀĮų;āés½YZ™žż„µéś‘’·j†„9ÖøpBy–}kCū¹g‘ļä(K©ęIæxŌԐ½…t‡WąŹĀæ¬*É:ī0|¼“˜Æica)4A'Ā9·ƒń÷mæ™wś ²`Cu|މśČɧ˒±ąŒŖÄēź£.Šn!T•«‚øķ¶ 5ģ¹»R‡įˆcæ½Ŗ3ōbPŹžL>Õķ· łI`ó–Ąæ‡ˆn¶ńM\ću}³BŚ“,KbUņÄæ–cī’‡©* ģ‹—`N.Y}°\åėd{lK_5Ŗž<騳elŒC0÷lŖUå2 ØÄóԠ汁ļC°NŗS”Hrł®[ōżĄ£Ł½×Y×PGÜ©č€ābx`G’łMv“&ø)· uÖQi£†…nuĻōJ?Į-÷čt2¤”p$LŽ$ėX˜|4MQn'Ž¢&f»£ąĖŠÕ¶į@“pśƒ:{® £[;ī)+¶CmŚgąū‡Ø!łzčŽē£^Ē_Ēę9zw¤å „ɆE ø!~ļŽÜŽ“ Sė&)ß h —ƒF¹ĖųK¶xōś…Dę­rÉ_šŽ¾ĄøCĮ‚bæöß?ræ]„#©ąŸŃ›±‘Å÷ŗ2“ŅQ*(±Śu³ų}žåp‚Ō)Ē̓īÕŃdؐᄭ¦-Ŏ¹Cż‘Č ĄDæa ų¢Ī$å?óš{Ž tü6‹†Ź4lÄfĒę5©Ž˜ ×ĖÓAŻtÉŁ:ˆžŠˆkGśÄ¾’ÜĒž!2XņöžÆŹ%^…#@ć«›cdļ!œčr$—Č¹?ö}ć~Āx%bŠ£čz2Ėäp÷«8ž@Vb³ žƒ2¼·]œLG®K¹G\Px1d“­Āh ßčEō'ż¤fØ÷†:̱ćBŌž„UČ`ąZhÜÅź.Å\oåéĪd”¼fi öš2›6:Užń,ꓙžē©’Ģx;ß “p Ŗ‡VžgÖQw°’7™6Q °Č)üOåsɹŌ xRE¹ę‚ķŸĀo'¢É¶”;ŻźČmg2łv…1ļ¤8żóŅ+Ķń¤8”‹«Jķ7ģ·Q©0Ü¹Hā•™śų~8ē¼½ĪŻü*¬³_FŚÕuﱫκ¼O\/Ļ¢`ļŁ¤$}ŗi.yÄ·”XF{VB‘­) ߖo)ˆLģ{ ¦"/~Äģ żžl¹d“³—³WL¦ Óóļ, ó ó×ffń˜Jė'ņčDZ.w‰gÆDÅ#T”ŸūśCßĮˆ\Åńō׿yŠ¹Ś˜įnh'Ȑ¹™׆¤¶«ÆĖ7x¤ž$L£–ÉkŠļŪęu”uć²P 1`ŒB°“K73_<·×Įk -¾1˜­ß)ŖųDiAUM¼–¤šWįÉ·”!(>¦ū^bŪzŖā'ß×V»qø&ōśĮJ¾”ē µucB—E—Y*ÖŅtń‚¹ś<Ó(Æ\õ}øo§KJ,Ōy}m~½³š“.ÄRčĪ+'Q˜¦€”Šī¦yl¦#š “x#(ń°öī©ćv։äMUTR«łątüµRć±½į…ß÷y š¼ŸvęQ“æ†ĘˆHų ŒWW@<‹ÜUw=;m~ĖryķŁBģ¶žx<=i…,ķ£ŅćšL%ShŌ]^Vjü kūõkłh„R„ü!Y>öōœĪdE„H(ķĒ(ĪTC’+ Ya¹īĖc¾ń5ÅÜöń|ˆņ ĶóŒ d’[BĻĆ'S2ė«Å‘…®ač^Ł3n”ä7ōĖÜ`ElEÅųœæˆIņ<–¼Ŗ–Č%R^¾rZżŅŁĒĀ>r6?Ÿ*`źĶĖ |ĀŻ÷8K}3KBŻļX½ƒóu †x“#žp—4ΚTS) °g 79ĖĮ5ߣS¾Ž<^4ēGo#—ŪķMrµDó°§źÅ£83B>(ĹāqM L[†TF¬ńžČ»‡Ŗģ“W՛Šü”]DßŗĄxĄöóZīćwH“łQŠåYÖ~~śbņƚ`āĮ>ŹßĖõ°č5:ņ…҇r!śÖVźžg?q†ł­>ᚈwĶJ@†<Ā»VD=Óą=Ż=‚'Æ-ō”ÉXlz†Ø0B'V'˜i:¶~ aΤ‡ļ„o#dPņ^É£?÷]śJyŽÜ(rPŹ¢¶EvōĖ7żNᆣ6źŠÉĖÜōL‚—W˜@=·¹Ā#Ęī:ްDyv­>žE®@Fę &Ü5·³!ģāPE„”h“ɟóĒI»u+VēÖŲ›;g³,`ĻļĀCŻéŽ /č˜BĖĻq±_yfg†ŪȬō -īm”8Bó”£$™yAqH¾ŌŠÆ€F}esaep…¤(źš+ćsOćó°q°/š•jĆX t¦£Ut' ŗäNEĪ3RU#ü"2Ø»ūӑčĆė@„m®¢UćZe|źGÕĒ·qa ‰ c–¤6…jēÓģļDčC<źb×Ģ!Gш‘„#*­T«(ÉdhXlB)QÆ=EJXžŅģ?P ŚļĒ6¦ü– ÅÖeuˆM:¤PĢ5ÓĶ[؃…xż¾N°+ ĢćéćN{ļ%zÆĖmĻĆ4ūā%¬! ć*Y"‚żF଱_^Άz20Åäcƒf@µ$Ų¾ŖæķEć£‡$“ ŽJĀP+ŸJ½åę؟™Ģ]ęXĒ Õ5%†ÖØś"ėQÕķīBn!6Ų^'Ļżb¤äSƒEėŲ'Ō/ż.Ģ¢„‹¾7Ü[Āč|}æ®īƒ ‹æÜ1õ¤{w+ÖUĢyÖJŪōAe˜Ņ&²ŪQ Æ’u›ļ<ܕī“'üYš¾š…q+ŸõϵøyG£ ”“Ņ!Óé0ŻĘ““{ōż<ń8õ"Į¼HÖC¶¹Ō¾Cį=®5X`EÄžįŌF3ūź“JZIJż×‹¶/;āG ć#Ē!¬ś”ƒDę[oåģ•irĄj$– ĶP©ÖkģĮže ‹–5¬ŖĒ(AB_ĻM,]3ī9é4/]ļÄĢ6­Œ DE¼¬Żf: }šĒ«“4”m«TF„›¢ÉNU»’¹ęWz~ŃŌånn©-m ‰€Œ3‰‰}&C£ō¶mu‚ļSq"˜fŒļ–ÕęŌŽ&i»(Ć5ļóėąU:×”Q$2oĢįö³’IDŚ<„į'·Ošģkó°5s:@DZ¾w•ųŲ„#^sWm~~ŌoŗŻdŁBr0Ē5²ł!šČL©—Ņ?–¼ Ó¹é%™ŠX¢Ø gš«%ėŹŽļėī"«UzŽ­!fżœPŲ®›õXŲ\lm“}Nęčć…ę¹m°“±OUśa~§ÓÅXdÕT |zœlĶ/]rjĆüŒŅŽ÷© µ¼ÄįÜ3·0ęĢŝ<Š”śžŁ¶=}ę~Ų+œ,·Ń$ŽØ&_&Š]?œ*²ā7L÷H‡į“(OŖ–‹mX®LÉ^ĻŠō‰céźć™~ł¦˜Ī-˜õćõŽ—-ŽļJŁøĖ$ģQ[XhB°Z ³œ`ÓłʵŒķZŖšĀü<’r²dč&Niš¬8 0šžMµ§ vČ”kŻSTÖHāv;ĶrÅÕŠwü,ÆŚ;˜ü±Ø[©TŃ łõKćŠ×k¢ø#×3-}?„i¤]9˜}KŸŹ|™*Æ;²æŻ’»{ō®Ķ]@.ćA‘|åW^šQńæx=¢ćöM2Ͳ3Šųč€|Š@cĮr» /ęš2~- (źw¢‘³¤ŽDoP [ŖÉ2hą¶0īd˜Õčqµ¬’X@d‰éŖž*‚1LiĪą W·”1ŗ»8!µļtķgnž‹#ŠEIæEK¢`źeWęP?µŠˆŗš@ƒ«wöwOĖČD œ==»[v–’Ó`Įƒ…gœC^ÓiJļk¢‰€Æė«rßŅ(luŲĀ NĢP)•÷ƒæ&Æ |Z7&|Pįfj„„gµē›År¹Eć‰ĮO¢°tłŠĮtŌ0%WģpL/ŽÄ‚±Ż¤ÄĄÖe½å²&M\łų™š@U~zˆÉ+_­÷u)˜#@ݹŽßA»…/]ŒėĻ +ȳųŅD~ŽumrżŸ«ˆY. ģģńĖéøŖdp;¤“Mn’„Ö;`#Š6npš»0u"ĆĶŹšķž-ÆIégzų‰Ø4µī<ĖŽjņć 7ų*īŠŗ©•Ić,vó(+_/M|7~µ kr‚Öxßg—_ōn n?Č}^äļäNFĒwn??†Č£.i¤ƒe&£ę0uX ׹ņn óŖ#õ…:—ĘŅærC&=cˆ ń~µąwdøoR‡‚¹–ŖTј’62ŸĻ6Ŗ-c_v’VcÄk™f#„²ā_÷ž™Q'y­r”ģȅ] \,¢,a.±{øĖÜ®q˜óÕbŒČfżį-ĶIå9VŪ Bž~jŒ]>ö‰nĀpČT̆įŪŁ/…Ķaåč›~sĆĢÄqĮ$ņŠIź ‹įńArł„љ‰ƒeõÉÓš ævŗYĘmš…Į÷8p{åT³@ izwBÜÅGo˜šūwĶ-'M©—IfšxpŪÄā+źā5Į’_#ā’ĮX€ éÄ£+ sń$ ‚Œv$ˆŌCSy³1Wгų˜„f†āćŹzkś~ž¹įÕć-¢,@¤¤•¶°°ķlnzIŪMßÓ^©×³}›AŽ­o G}Ś’«“ŠÖ‰©» jn©ł•ėŻ^¤%eœ¬~ęęn7kecö¹ˆpÆgś¤c0WÉ‡±³ÓMfĻ =ŹpZ%~ųWī"rXyD˜Sų§™Ø£öJĘć­(ļž%“,|…3s…{JZāāYH…T”²ĪZ¦ÆŸēy¢IįĮ>+Ó®ŖŌ&¹ØBĄŌx®±#āšvlĆ[“U©M/£¦b=HŠį5ŠK|BŚ}µ5PšVŪQ±˜>² ›ĖE\Ą–†ŒęōT®Šė¦~A^÷ä„&ßo3· ģ3¢ĄĮOŽ8“qFķ· ”H7˜=”Ą_z —yž·ūr,NĆ^ö-^*UōęAīE¾‚0JĪŃŅ*÷Šč©k•¤óI@›Mņų~b™ų FO8ķØ•’Ņó,t §0!£†~!¦Muwˆ ėŽėUlŠ4R¶¤²‰®‚—É—§¦œ]ąŹ•sv,ćŃ/÷:ö+Jc©$JÕŚ¤Ę¹3Õ0B”ļŹ‰J­[B¶©v¼y‚B©7ŨеÖZ Š’j„ĻÜĖ»é3x•µŁ7憳ŗ(C“/ ¦™=V‡&u]Ŗ[iĖ>Cœ>‚¢@o irĪū°g<\sÉÅšvōŹ -Ź$D•`ܚaLœOOIĖS0€qų±,~õķūQļ°y“ürHž»X ¼‡ {)ÓÄb“o2ŲŅ“ŠŽóö°”‹om”;‚HūµVŒ­ĪŲ XAučLf)h VöįūҘi̼ūsŁåō™ŚõMi‰½{QŻRŪ]ō#d¦I`eĒeo*g¤Y5 LņA`œBĢŚ¶:ān0.|–iü\@žœ¾ ģä«;fŅO—ÖAż”|\&¾ڌų(sŅģ©Źļ¤`Åt·•š‰_ņyĒń9޾QžoÖ=Mķ–ó „‡!ųDX PqöU‡I·æj6R\w+QZ%£Ģ³&{ŹąH¤Ų»Į(Ōō[ĶÕĒ«0/x‡Ų”āÉL½ÆĀ±z ńĮ V¬¶įówiabį‹Uf~LŽ“ChœŽ‡OĖźĒĀØŪ-īŸ²ÄŪJōić6fčB™÷ķĮP–2¹7WĄė_~k㺈ZZ;b›.»"GÕ¦p„.‰&4‚Lt‹æX¹B0?JŚqlŠāG‘VA’‰ņ Ŗs’r†ü”®.”/‘ŻčQ¹Ń˜†LéŚēT1OÓźĒ|Ū¬žĻq²”’9”Źļ}>)õÜ.ėāōßĀ£¾w": Yy iMGŠŹ„¶¦ß“ų$śˆ÷š"Ø4 P ĀŖk_5ŌēKķ/Aé.tŪZo.L¹)¹ ÆŹˆ™G_0ĶM/ӛjqv4jUŅņ“~0 ~ó{9Ō¦ˆ‹Ķr?GǼõrŽ {ŃČ侑³åjzœŠŸü6x`ˆiMŽØŗ®Oė‘•ī•CADD—äŲµk4;3Ä;XTr^W®1ęŃ̇ņ}¾XŠwh×mnm3Ń7w×QĻč ÜS’mAÄoĘ(‹Ąī’Y*Īøæ>ō«aPłI(ž “łg¢G é'n’³gM¼)z(@Š£æøæ‘ŽōśA #m8‡kōĪ”ž2b C³N(Wi[K&¦+U4ŠŌG2¤3æ8¾ź“3š±Ęžšä±åıVŠdJė€?éÜžĖ_•żkŪš;9¹RpµŲ=›/šĄ3moŌøŁųœ÷•VéŁmŻŽ6ņnĢ?6ĄKKp"˜J¬.P²Ņ ›»YēĪĒI¬ŁqÜBģsneÖó§ń㹫D{<ø"~ī²&UŒRҶ©^eęxŲō9åR1Z's/Õwķ«ųŖ8F™Š¤®å8ŸĀ©#žģ .*‡üö¶sŠsœ¤S·Ć:L®dy1"LF™*h~ōƒ£”ń¼~¢Źŗćŗ-×ßā§P’*ęæ’3VØ{Ŗņ“^!>v ­wņÉT|5}f@š.į oŁDŸ²š!¦śų@F“wz6swÜ{ń1­3Ø–ÆuJĢžÄ‘ićMv ·Ņ+Ś=Ÿ :d醬0—€æŽn/črn£ćXćJÖLńœx™-œhę‡äqĒŲ”T’I²LS›³=5łĮScō¢u”” Ū¶Ŗ'Tšż]=fēAó=MƅäóĪīa½59ćŁJ”MÅXDBƒŖŹ’6!µId]Ś6”ŗ™g×ķ;Ź€Xt•@Wj! GžwlІ|BĘPx_ œ&ƒ¶LŗV«¹ņĶƒF“”š5ļNՅĒȵ;Õ6z½ÉT’m2|źLŸµéZ\Ę>Œē$ķBÖ%’,Q¦śTnzb §`й`¼īŽŁÓ9ŒŌœ‰ż„CŪPĘEŽč›%öŁW’Ąˆi\ś;Ō1꣐i²»™>µ:E?’¾Öē#÷i¶|.8_Ł ’Ĉb„¹»ĪŚŸ3—ˆĘ7Ķy«xč<ŪčĪ"®‹ląüAF$·¾ŸC»Q~KÖ­žūŹcŃ@źlŚąWö­«!—½=¹(Ą‡›¦:r½#XŪ¾0›•G(ĮņcSŽ"aA¶½Ńų£Žµ śŚo¶JA@—Ū(qī¦ē;ŠĆ+HÆR3”ēˆnÆ•Ī H”8ēyM°O3gÅga„¹ŠWŲ ®e>“l€¢°į¶©zĂ$^‚gcżŠÄ”Æw“Ä- œZ-ʁµ16(}YŗĀ7×œŁ¤PŖ’~'ŁŗņÉ$„¾ļIˆÕĪķ®Ņz•VŁrŠčŽĒć[+CÄ8H¬h÷€Ņ”*’.¬±/1;'Ķ䬂„óėüģ’aMJ²ĘļĢš|f!‰ļ$z„ŪŠ6ž$Ą‘sßÅ$›ć™XĆ„¾>wUj³=5yÉ6ā@}U“ųj©õ±)”a '2^&ū/ŸęĻQ2 ¾¹©¢0& g““k9ļĪNDcYžybc<^dŸ.üjÉńū'Ņ׳ŌEŃHĀ#Ó>HĖ8ź[¢2įHV²īÉiæĪź}rϘ’Ųw97≓xąōjHµs„•Ļ{o” Q~Įp’%eŠk™$•՝ŒąÓ _EšHßµu@F²“‘+1Źł@ohu›ˆ»63&@-ŌŁ¹§gõÄ×`›ŃKeåŖY ™©Ö«2ČŽwÉ؝€šdtš¦EV÷öfš™£Y©:ŪRŅ‚ēŻRß¼µŃ~µLwC†rdI‰"mÖŁ²l ,-ĀV¹IĖ;Ā./#I‡Y·™~A„‰üߥH=5i?“v6uˆŠēĄ(wĄĄIÕ©IŹużWƒŲo]·9|s2KbįĢ‹«Šü 4<±FÉ7ĒÆ!ŚcIŸ®Ē·ĢŲßqż}Ū–Ŗ(q1BBž{óķZD+˜<~ŚĀ½*»ąvč3DęE§¤Čhłž. ½Ė0‡B‚)¦ł“OˆeŽ=Dæ:H6Å[ūü>Ż™Ÿ…%ŪLٜĢ?E”Ź=/"āWĘ×¹’¬K«Vn;E£ˆ£ endstream endobj 783 0 obj << /Length1 1407 /Length2 6093 /Length3 0 /Length 7046 /Filter /FlateDecode >> stream xŚtP“[×.UŖ¢ōN–P„J é  ’”$B¤*Hļ½$4©‚4éˆtAš4iJGAžØē|ē?ß½3÷NfŽģÕ׳׳6·”‰ˆ e£(P ¦ÆÆ- %D@qJ>>SĘž—š’ĻŽöD r’ĖA ‡`š:uļ§Bt¼\ HZ$#ā@ŁæQh9€:Äč‹tPHø'%ŸŹŻptĀąĖü}@ YYįßį78… śŒÜ _ q˜  8Ęļ_)œ0w911Qˆ›§( ķØ$( šA`œĘpO8Śü 0€øĮ’ „ä˜:!<’čMPĄ+\P8Ņį…„ĮŃ|q€‰¶ąŽ;łĒYļƒ0௻€DA’I÷WōÆDäļ`Šrs‡ żHG€ĀøÖÅųb„$ģ—#ÄÕ…‡xC®{¼ĆļĪ!°Š‚ų€Ēp@”)”ˆ¹üŅQž+/Ō ĘžM|Ńæåß+‡ūĀ””Ó“(Ø|øsMxĖÉ 6‘•aŅŻŒKq‘įg÷É1=ć¶‹I&¹93ŗ8št7|ß¹Ż@Õć$ļӇż€Ļµ\u~’G"\ąuG.ū„É‹#Ā÷ÉĒģ×'i žZ¤©rŹ• { 9¢Æ¾¦ø sģ1į£yĄ_Ó5•ģsƒž9XF'¢Å ķõ‹ē9zŒģ²ę[Kʘ&ū~Ó©fžü%·ų°å›Øtƒ¬ėŗ m§”I>UWśśgÆustD‡čx‡®|å}„¹¦!ßĻ®.IVe>[xå,æÄ{3‹6Ą^“NŃD’)·13eæZaJÓ.³Ķ™„sN”S2å&3MkaÖÖ œ~*!Õv+=’żõĒŽO` s`ćą¶¦ʙާI>»R½mČįyąTž|ļaŠ[“hēŒJؕˆØE|’īi7ķM(źøI”®ą›×ól/£-BĪ̉ßę"ĒÕDoŒąą˜AŁS'LX lö|OÉZ‰C2'$Ņ1ę-opŪ&É!Ųs–+į^{œ.œÄŹLņÅ{¶ūiŌ—¾3xŒäSY®łXÓv>œGo¶Ŗ †•Ę Ü$Ś0ŚižH>Ė«ńy;‡}ürxÜ.U”L‰Ėž˜Ō”†ŚŹī¼_6NžŒ2ZĖ"ĖØ ć°éØŽ«»>Ąy5L„#øI' ģB]ųČ{cāƒ‘·Š—I؏eJ-ąFŚü×ņ™·żį63Ń7Ä(U“ŽTØ:ß»Ā•*›'L/”@¹!ÖŹV;õšÓϱ»|4+aŠžż{6E\GAŽN›U 0JĮÓ;…% ŁRK7~€©£ām*°ÆęŠØ+ØiŖ…“yꆁ¦ØĮĻ{]ģ=Į9Ą³o+Ī“Ę?éóĆŲf·‹äbE}Øx#ī ¾ I÷dz•BO®=\GĶ“Eja¤,ž&•M“P™u†pFbĻŽuϧSēŻfßĖóÜ\±ÖJāłk-±±ķĪiÆ~Dˆ$y Ʀ𷚽Łn€eL”ķ č;n`A®TOŠ’Ø<ī‹[ļīy…læ½nż~.Å%·³ ,¬Ž‘M×Rēa皈¾—@F[“ūxbµR‡½#Wņ(ųP˜eg|×S]q&-©Ā~Äo«˜†o“1ĪJ>‚q÷ Ɲx Ÿ¼,S÷–{7)il¶ŒOōÓAöQė+B ŚN^ÜŪ«„ŠjĶA”ķöģŗņ†šō¢@šūč­O@¦¤S’ü!Ńz‘2m»įŚžécOiƒ”śUY-L(t¦„ž!ćL6ö‹øŸ‚ĒŪŗ•Åŗ#äż#ƒ^”§~÷|4ļģ{£”D£Ęė·äŠclO¼Ūé³äC¹Ÿ^#ĪĆģŒ‰›-½`x)¦²Aétékč£÷Ō=ęQĒĻnތį;_Ή”ļ‡ŠLŃUm‘xˆ›×œ0ŒB}‡v C ­,oKķʐ\’uŽbŅ+vŽī›“ęƒ6Ź>") G,°õ]nä Āæ¢„Ņ\oŃg­Ü«’vÓz[Å}Õ”°¤]V0œds śFϧ•DeJą…Źś1»r’‰'k„7ŗZ8fcīŽ{̤­$Ē>œ6OAĻ:ÕC…®­—MCn£ņj­ÕGjxl ›ћؗӽcA±ąÜ}lż@…ł}²{X˜]_—o„ŒhPĶēy¦“=‰óqS»šÓ"j¹’~ė^qĕó:ń]>?=¶ēŚ2Ļ>+5XLźu1­bW3]hŽQ ¾_Īcu•¢īĪbÜܐ~Šst0¼`ji<üa”­ž¤'×±«Cy"Xk*b&¤tP„ ©ō#ټ¶§Ū¬ŲÉL‹ź=}«§|5šŹ…)zAbšāorĀ^9Jå±x!Żņ€}tÜ,—ķĪŅ7 @ŠM¶ßrÆŽĻyœßėņJökĶÄ šå&^qå~— ‚X‹ś7Ś|}x„ōGč,é{ĄNšÜVńxä XĮ»ŒŻßé,óīJ§Y„<먟ćøŃ3Ø'ÅĒöŻI#ܙI²w§™ÅģfŃ9?ģMóĮ€#[ÖQmD^Mį—łĀ+›l ·ykƒ¹+ Ņ@ī‹Ü·āeJA\Ö”DßD¬§²Ū¶b|\ÜÓ=e_>PÓ›FtæZ9öč7é*¦éąIØD_q$¹Ą“ĆéP`ßøś‘å}IeŒŗv*_¹œ‡ŪB'Z_lJ{Įyøų źu\oKtŹ@©ßw½=·1ķŃz’1Ė ­Į5ńÖw- 7ι«¾Ö³vŸ[ĆKD‚ĢĒk_m”šŽž°Č‹źąa0ßVsünĀ'CóĄÉč ėDćź§2^ō;k^1Ō•Iź=["¾1 l&{ßMݾ®īIŸhļD LuOĘ3–<¢ÕZ0é½Į¼?¦b/2™ō˜§‚ 9?’֍SŅ Ē™Œ0חQe/u Ŗ>Żģ®&ĪpšiõNh1ާū\’yĖ^ā{—DĒjśQ~¢Y„3ąN4Sūąpųs©EķõåŖ ū9¦2Ėkś½ JgÉÓ¶!²béQ½Ü Uōéw*ÆgźļP#ėuŅÓĘöåŁ oÉ [-ę]~R>ÓBĆpY„8>T=įYŒ:†_;«­K Ŗ}6!\~<Ž?¶°ĆŚž²Āš,kéyx@(żWģA©Ä-\'jēÉ*<ŖøqZœ™P怤ŖMßS"³¦”.‘ ‚ū+“ߌW”ūØ­'³,Ž&®]ŚĖ×9 %rø3™‡¬rłA«ēśņČÕŸųŸ®Õ0Ͱ²¾{æ}É,v;v(r&Łćļ•WÓĻ»¦7ع+LŖ°+eöüł;ņ)¾ )·ąo īP”ƒĻ§œrå v_ęom³Ø®[Ų†×{0žOeĄhO}»: «¤uß³8°ģjRščoĮƒRK›ļ–Sm؎w0øŒŽ(§HqÉæķāó%=ŻŻM6A’£æŅ¹ųŗ4ӂ. AĻw»zVw­g†’įj”m¼Ļ#–+Ą¾i‘‰0ŪĪD˜’H0dõu€šž)Ķ·ßÅķׂFxž¼3ŹīJLōxwZŽŽ¶éįßČ=•Å“˜7<ŌĘÄ{żōgA—Źś]q¶Å Š% ŲQÖÅ3ZĢ 8ĶMÕ®Tö8Ō·A ĶĀE[£0ü¢ģ-5¢aOÕsjGV7ćU[@`9·x®Z‘¾+8Ė{Ÿ©Cdy-5/µ3śt ‡1tļ~r6›¢ģź4ą5Õ("2<Ō!}@Ął±4/6\øĮ6WĻ*ž={÷”°E#¢{½]žšM3žõhŚ0ĆÉŁ%®6Ėõ沜V{€swØ‹n±5-\Di×ćȚx.½˜® ĄQ>¹Éx—Óhiöų”0¦¶Ž‹Ć:įĪ8.ME…ƒW4FóSc¢_'dF¬ŒØ.ŹLn˜paÕi2éü’"äŲ[ £ ”7¶¹&¦=©±7`T~ā(J†ģjVSvä.}ø?ą=t”£AļŁ™\͹ÖĢĆX† ŻzW˜OóčŃ&.õMä&²ŹņPŗäē¬rØŁ¼Š7ŗšö½kĆžgāDńÖż,™Š_ZqEō[¾&„ėKģjrę˜ ėeĪM¦e7.“6Dąķž'Ä¢0\™ż1kŁ+óž'd+ܒ„S¢n¶ż>†tÕ2œÉĶu5˜¾H@H0„Ń%„JșE™dšĪ_}ōƒAZ¶~×V‡ƒ,ņ“ŌÅx­Öyže]«æj ć} ‰‡L›Ćš~Ųc[yÜBæā¹ŲŅmrešwPļM}ōČĶPA©°²°÷Z/č©HŸŸŗ°j}eŠf—n^é†ėó«ņr¹Ś7ėŻ‘ä™­?""Egv«¤łÉź"GÜZ.ž¹a’›ŒX­ī+#\źY¾•HÄTĀ/aļ‡Q³īÓ­V¤f}³ż.Ž”a—–µ§Is0Ė.Rc“‰aŗŌOŁ/źŻ•×D¢|:x”jĄf¦H¼ęĢ›ė{„ųIĄšŠibSƒłI]€}—VG!s¹›k“%£-Ļ(ž|ė“k9Ņ…Ķ[so?ĘY³5½ku zœŗV}÷fčš„ Ŗ–ÆÓćśPÕ“łÅ!ēH^’„Bž$ßŪ{/¾Z…Ę*UĆüThNŽw<Ų äĀXPE7ĮŌęSMgłš*‰D¦„=į»g‰ko'm՚P®‘Õ±ˆ©Ÿ¾1øIŲ†‡›Œn"qPŚ{& ÜrząŸÌĒ;ӎ†_Ü †ó`_•{Ļ"ߑ›åxĘ֞ä l%Y€ODĒ|q§U„_®Ę†ÕdēPŒåU.®o’¢t£%Ļ'؆ŖB3ņTRæęP%ĮJ‡ķö÷2Ą½B+üu¢IģŪū’4 ”fõøč?ė^^źžM\‡3łQŖM/ŠĆD*Œ>Ļ}!Ł"ŲåWāČxX-Ė)ŗīĶĶ84,³X9yó˜ÖļFĄś‡—×d³öYż6SO ō3 n]šAx?^ž]f¶mK—#:8mšåtÉEŗKwš³š$_]鑁<šĘ*=ŒgPČM5āł¶':ˆ~õėź čąųŽųӀr0ē’Č£³Ž&U†cŗ²€6©ĖkѲČÓŚł:y¦X>ĮĢVˆƒB#­›CĮ³3ńMåĻBT~AZ…Y?2kt½®4Ä[x3@ y#™ģ enD –Ņģ1ŌH,ć܆ŽAŚ+°–!sėcaײY³}}!ż}dß^öW RcŪįYßfāk¢v6x1āԈŽK”–ž/Ń,ä°e$cꔎżJŅļ9÷“‡ŪćVķ Ķś2Œóć¤-=}zĶŲ5¹Š„L—h@ėMs'öe“Ż©žd‰üŠÓSäKp8ĪnkIŅ}S©¹u“ńŽž ūżø£9•Ø¢ēJ ¾Ķdæ’ŽŲē¦ Õޱ±mī(ķ’ČĀTė\"-Ü}ˆ[)µ^ļĮŲ•Ų'Ż7)“- PŖś‘āŃ /7Ę®:~!‘ń“^)ŅÄk{Īüģ¦ŽĢ…Å+śN}0źČeŹ2£ ćÜ1ćĀ3ķ\į“Ÿ`Ė>žü"°<՛=ŹNé/ߒāj–]żäā»b“o÷G1źGyĘbfD”“B2%R©ŚžīES‚³©,įÓoeHCģŚ­©?p°ƒ{…šŽhł«ZīŽKNl„5:4+ļ“ŽJpœmč8č8!ĢNė&µ7&~łTóg`ś œŹ&K…å2htĀT€x{™si0Å;DWågAɋ€GN/š£ĘīŲÓbėR¤s “mlīÅłØ“ńķ£–1+3ņęāÅØĢ”IŪó”ü뽩ņ“ĆŲi›§¬ƒrJśV”ŽsńĻR릇ˆTĄšŸ[ŽR› ÕČZ# |w1K˜ž„™’t‚ŌŪÖ:Ń>~EīóOP[®—JŁ­±8’TśtcŌ<¤å wāąuTŒ/mqCSļę1–žŚ~²W3ķļīÄј¦Yƒm(¼™ć’“„ų¼»²Ʋķ…AsΊ2¤.MJPŗ·"}-PĶ׏dŽęlTMęÄV·ĖMŻWź’9Ö¼×ŗtR&ź¶~öD\Åa2¾øŖŁIsuŃ!ģó®ŖŸókņ š:\ĮSu&@¾÷8ČÕOܛ›ŹŠĆ!’羜ķMl×_č­'Ļm· ššČ™ÄضXļĮČh}I‚n <I,ę#~ž>;äO¬$ÆJ/,Å]‰õ±‹s.µF½høR˜q&’¶qŸKū$p1^N|¹“oŗ/K™’ēżųyĢžÅ›—.WŖ½Bk&Yō±‘Ń”+Øµē™¤O”匹žżąÅ:ķÅ«ō¹ž!|P…ÓF6ĻWĶ“Ŗ„¶ŲœÉLĄjµN7óę›ĘUÖč÷ēź™ųļO‡gµ¾Óž,śõ29ƒU'ˆøŻŲŚÖZÆ9c{Ź5¤NčĪē¤ģp.ųrPŸB…ĻäżĻ±ŁÖ8kž¤„޹ł0"ÅÄš2šspW9©˜yņp5-QUģ!±©`Éõ|ģŠćb#Nsrł["Ö5ƒz={“’Ćż/ł®Nē¤zÄŌ®Ÿķdֆjš„ō鶌n=v½ŠP?ę»5XŃØ"©6BSD’yz.§°1÷ŅžQÄH=*ō©€“dĘĆū®ģ6ќė#ļˆr8 č[ee®““Ū)=ļ˜²|®eŪ»+ŽĢ]L[Æ%Ā&³ņHœcpÖMVĻsЧwŽŪ¤k,œŅ“v>Ń׵ڼĀ£[’FQC…f_õNN}§w‹Ø°mŠJ ģ] 9»8üÖĮ§[Į2¢Õį‡}Œ&ŁF«¶gEob,Üf{éffYe ĻæhĖ»¬µ6”¤ź8ó¬(oCE­ĄĄ@²%ōJžÜISžd døNŃö1ÖæyĀ1(F”ŗōŒSˆ(t&q<ķg¢‚Ż4·vQWöŪĮ­«Č¦„ßD‹ß~(U7åWjÅ3ÓvŠ [-§ģĖKv!g„•wŸ\ėSHčzœŲOž•Œ§÷žŗˆ”zĘęŽcˆŪėŲŖ>–0ż2Ż=_K©m}f•¹¦t“Iµ„Ų&AeŁdÉĘB9aœņ–R8›8LŅtēщRcAņ§S6ļl|ZšmĢ›‰“X¢HėŒXŲ­·Ēķ!“Ög‹rÅ×¶£PŅ;eq$_7—Z+.(ā.ō.ęH|;*ÅmæL4Z5½F°<Ÿ³FĘ$ö]ĪG’ĶiŠmxZPKä’*ļ§N%#2’4XŚŠ}jźŚn|¼mķælGkķå;…XĆܼ«ØlLŁ„58&Ł8R™Ł±ÖśŖäŽē9h“įfĮeĘż󹶔‡}¹=RĻķx}®Āéœ vŒn¬s‘Č–9IäVƒR“U…Øóm™EgÆfYu©®̼™Č{œ”®ŗŃ€ø8Öl°²$4 Óźõ¦ųIŠčO %•ź-ŒW¤mѽŖBbF<éBW𢗳ie¾PæøĒ÷fćz§VļAŗx7…UMā[ķÕ&.‘¹E‹Ī—-ę^ŪRčĀ’šk.źßc]™tW +Ž”rv4‰5Tj¾©#Ö),“¢G:søüxkĶ欏r “ō‰¢>4µq»ļ#+®ĻŠē{M!wkšóåB*©Ś7ŗ’ӵƣ endstream endobj 785 0 obj << /Length1 1742 /Length2 10518 /Length3 0 /Length 11633 /Filter /FlateDecode >> stream xŚ¶PŲ-J  ī ±ąīīīīŅ@ćŽøwwwNŠąī®Į齎—‰­µū?ęō—AIFVBBƒęOĘė„…ķܞt̬:f6F#€ćõążßaž¾€’’CŖ“ų«8Ę"JٚŚ^£üAāõöžCÄ对 ükgØ’BŽīu˜AŹf_—‘Ńųõ‹é’yžpł’üßQžo³’æ‰;[[’”¦üC’’Qm,¬Ż’2xeg§×½³{ŻŪ’5Õż¹Ėr  g›’ÕJ9_÷CČÖģuĘé˜XéY’”[€Å-Ü@&ŠNĘęNŅzńšĆŚĀ¤h¶ųżä¼z12žīu팭^ŸškĒžTĮÆ;čōGscŠė–żwb¶Ęv&æ×‘™ttŗĆæÄ+bx2½ī­ Čķ0ŠŪŚ9½ŗ^9{Lķį·™ƒĄ ž[ō'ā0Č’^†AåÄ `Pżqq€#6.ĆėĖ`óä77“A&č_ Ą`ń/Č`°ü| nõ7ddżūNžŃ榳ł¾Ž-ƒķæ 3€ĮžŸŅ^)ŁæŸŻæŠy}ßž_™9ž ¾ÖöÆdLƵ9ż ¾Ęsł2æęvū|ĶķńüÆ.;;:¾¶ńåzmįš/(ä2†_^°3ę “¬ üz[#„ļJ·3Į }šz«ÉL7QØėŌ/6c°ƒ•¹"S.¾ÜĒ$®oŁ)/ģp›½¾xįł£žØĮõšŽH|ߌČ(vįåśĶ\‚ēĶ’äfˆ<daBīĒ~E‚”.8³~rd/ŠŗŽ„׏„āŅA_å;ŗjJ3e±>p©’ÜVvj1RŻa»Ä”ČŁ¶‰ ų©–"ŸN"ĆŪqļZ²982“ŠŚGŠį'ķāæsFģ„*Ę3ōA”¦Z}5é1§Äå(ĶÓH]KE.X~H$?±åG÷‘FÓ23Ģ<ž¹=?}ÆČÜīSŹ [OgJĪIˆYø§ ņ§Ž–Ő‘ģ›ečĶ‘Ö]Sm”™¤^ęŸKĻ}}F…T",S«Œµéč5rA čy}hԮƌ7-L)¼nŁż…ē©AÜję€N>„vŁ”swCBׄļbéš„¬vQ…\rŗ£œ£T"·Ę-‚óŲK?ĄŖ›G|ĄürYŽF¶š—ū£Ų"łeIēJ©gµ|xœO’ū9˜«JB ."0Ÿd¶ ƒ§Ń¶ Ńw4­O9c¤Ž Ķ1ؘ["2jŪyŗĻ½mKŽt(¶¤Åüņ‹AYūaąPŠ揊šœmØ8—ß kź®YZóRSš:; kEPcY8.Õ­IF>­Ä^ßA—Ļc˃ eŚ`Ō³•9EĶ9¹Ź®ņsķ=¾ē¦ĖžfˆgłźĶ’HżśÕF_ėń:o’n¾AÆ7ńpqnpn®nø(Åt,}żći|¹¼˜š·Ļ>ĒÓEąę½ī‡6‰Ī½ŪƒƒL~Q®Ó8‚Z1éó)ē8vmÕŹØ=_‚@µĄ$ņĀJŗĻµ=ß(ģ“Ržø/!eū|õ΁6šg5ĀŽvJžJJ.Ó2ÖąŃEŻb‡|Õ<ÆdHÉā  %ƒM“w} ü³ucŗ,~@`Üč5jėśi<Ę64/0¾åA‘;£įĮH0҆‚āūūÅŖédCD% čĒ1Õ¹z2ž4wę‹+Ź:Į}8$iw÷p‰Ü«šÓeöō—“łrņÄ ’źŸ®ź®uŒŅiĻYŗ°+5b_·šOLϐQįHG”œŗšœłiČFŒsøēYIĒX”iĢ}Žøæaa«­zŚfe– ,k hø¶Ł9\Óš ĒĻ7Ū!¶Œz‹—ē5;éĶ•B}ėp=ŗ6ą.®ćгŒ<Š“imp½S‘¹ū!†Źr&­ Åo]Rƒ_šĢ\Wn¶7 mÆŗŪ)+Ēą©Óft"Ć$ƑżŌN€Ææč„žI“„`˜ģŪ9ĻV_$-ķSPåa£°–Kź;ļ.%ް2 mŌ‹•Ų×ń@XŹĒ¹Xʔ”«uźß 8ē±^`!%°— ĆĖ€šĘ3±C‹0xv+,¬ZŻÅš1­"õ².=”Õŗė¶¼1«¼ŖÉ(ń6¬>ó’žYcN†¾K–£*ŁO‡FĮŪkf ®éĮmóćfģꔓ4F' —»ÉžO·TģśĒÕl…Ń 42ĢŃrł–+īZC“ūEŽłT±§i¹„+žš·Ü@ ū#,ŗ0Q#äJžńQ’zĶĒ|»Q¹aF1WģĻn’Ń8ä M ½Ęlo‡ŻĪ„DަTŸx|y>¢źŽĒQĀɽóXµR” }s×.]0ͤÆfłĆhĄĪģO@SĶ-Š|X=ÄņńåŻ™X»ę9ƒĪ×§—ī &A™_‘¦¤‡mO¾0—«4`ńXž1oĘR„œj]œĪÕ|m”L|ā1Ÿ}Vņ›Oß6^P>lŠ£¼Ą‘Į ®Y­&Œ~JmNtźŃ߃YBśuLĀCĢH?’ĀI¢ž¾ćŪŗšSZ 9Ö+~…¾µ‚M†+"0†ątmõ×¹M&ŒÖlŁą˜-@|膟N€Ŗ‘dØä]—zāą»³ŌÅQ®–ˆsč£f·£+IøÉ‘v™²;ŻäZ>Śr£OŻnÄ¢ģ†Ųę±÷m{]€ É³›ö¼HŒģżÆÄŠÄ“ÖQLŒžāŻN‡š‡…Łqm{2}brP‹œ3[;NW £””9J,DVŚ„p©”ė‡y¬u9S\X“„Ż BĮ#ÖBs#),Ԕې‚nV“‚^n]?Vr—§gG’©x…‚zpQ5/ÕēÕ#ßr[ėYö°Z+[”Ż#»ł9Äfź<”XÓ,(ą½OŌź‚jŒŸHŚdęÕéZg/Ąqš—Q?ˆ‚ÄŠ½ąLkrßHø ±£ėB†L!u«q‘“÷eMŚ0]ł÷ŸĢæb„šLE†ęi 3OócŁ6޲ĮäŚōŹw$»¢ėGXe~åFߐ@|ąUQ!•tĶsa„„©km0…Ąś!Dž~’@ųZ#÷?¢HõŒÅ=ĻU³wCćō>i,B"fwÉōbfž°Ŗøæ ø$ ś‚’šĘénkģtwÓ°~é醹ŻXbJVŃcūÓÜųóčKi¾ķ…[”6k )Ģ£7 EWqSeŸÜÄ×bŸąóH³¹kć¬T„żŅ†ś­XnzÜρmõEnšĀ­“;.k7—ČÉ!Š Äķ„KłŹ”Z†¬+CVż6(VpMāPi6tźƒJžŹøy. śGZ=Ųv1nP¦ØĄ’8ģ±vŽ=ėßō5ŁNČÖCå™ąt{|ąMd!ź‰^2ę8ėŲ#G‚QŃ ūµ\a‹+zwńĄĢ±ō‘ł3‰‡*——e­ģhćž=–޽ņJķ$Nž„ģz-}ē”vĀ™ĮSˆP“7Ēź9b̊É)ŪėŹ§Ł§ žó|Ryg&’wn;ŗŃ/upÓ¬©śU¼”ž,^ń€`Žńˆ¢Ź1NłĖ,ɹ[”hCLJ!ģčS”„l‡‰Ü9I“lH^`7¦no›šE§’nŪä”ę-‘¾†¼ ąXŅG'ßg^ f&Åy+=ŅŲäˆqĶ‹Īē–Uż€CŒ²†ĪļÄ".[ŁŃR© ¶•‡*śį¹»LŹäJFĻŽ 喁 5fDōiŒ{Ttxi:°Œļė!ŋÖńĻ`cŲjU+_ę §ĆšP ¹—Æ„d`!‰{h™‘6ŽmZ£ń†~ōāNm,ė>&3„7J©X†uæXźćŗn¼Z“O…f8öĖ/Nāīk–Ø¾Ā®›Ź‚.gņłO½C”Jū$Ä÷¦[×ŪE-Ø`_Ń.©ܙ,i{QŅ/Ōņå‘Yķ|š¼¼ ęiĖŪlŽŗÜŌ÷Žśž¦8«÷(īÕ; }Čß\jæ3™ŽiĻӉO(nŹ… ĖŹżÉŌzŽI“HÆeĖAuŻDķ¾/D*ĮŽ,¹r¦h°)x³c©ÕšžĄyø@Ļ…@;²ųg‘éŲGł‡Õ‘@‰ś[wHĮƒUч_ź>YøävÕ…'É¬Ųą‘õ“Y„äū)A—ŽĮ2{ā¹JlN»ū™$ņfą†å,ŻĀ¤·ybZśÓ8z«ĢhĮGŃ=ēOßę¶a’ qUµ6Q6‘Ķ=³ƒ&É;ĻŻāō\āØyAj"‚ż‘¾‹Š?PŲją«óėb?0I!š³C;ĆqO¼õÜż]”M›Øœ P Ą²ū…k"ą¬( A_Ҿż/y ɝ#š%Ė›‰N=a>YĢä·µiŁŖw;¼möĖŻ$Ö ĄŃ±;[ąśhp ©Üü1®7œ+͚r8ćØ"V;žž¢Šö cņ8×ēādQgń:’ą‘—qA‹Õ]¹8AØcNæD¼k7'—ŲģrśptSµz2D}·>O›ˆzĆąčš{"Ņ}?ķo;“ćæž”ž•ėr+'Wß †} E®d‘ūŖ 3nµIäēļŅÆĢīņ|ć»9I<¬į¼»u6R\hė”¹Õøj/ZāK|ÉVę/¦cŪ±Ū½.Ūč¬ķį±,&Ké IłĀ֊Ó%IA~G’`dųyėČöÓō='#ZGŃ/ņoJ-Qśö“}Īž`½ÄzÖ †z|ģåēN˜ƒś Všˆw‘*ڟĪģ §«p ĪüĀ­E«6gŅYé”]WÉ“øŸŠ–{0gžI'=ĪŗĆiq$dĒeaa]agņŅeōä§¢_Ź~%QmvĘģ+„Ś%°Õ]~WóĶāšßżž‚2J=)$QŹŚĆäk}š‚x<žÉg8õ-@Š÷…Z½’r”3’–”ę–fĒć@ĄV`Š\TčøH¢r=•‡%sė™ JŸŚr(SņčN-œ Ā–°Ÿ!„ƲŽP„1#ެ\ų™<óAŅ嫜Ųnļ×}Ŗ¤V{’·31³™g„Td÷)õżŲŚ.yāĀ­²H)œ.Ģ¤@6Mų½ÉA֕ĄģK®[łaA– ]. §ģ˜ōźUŁTß3rīćX38KSsšP\WØtz1ž īv™šŒ8¼=>W²ź™āa ć±QÖXó–½7ß%ś‘N½ęMī,OmœBŖ2ūyGĀäeŹ”°]0OA|* 9šų†•”­›NĒćÜŽĄ$„~[ešóΆ°]1ŚŽŹčĢﻲ˜j%qŗä#šŹÖł‹mĪŽRPOHŖĆĘ`¦1į3ÜißɇźĀréĀ»Ÿįśo‡ćmš&ƒ ķ":"xķOaü¤5[ŖĘ ČūSÖÖ²­ ģ0œUƒ¬ĪF}‡¾ “X}_!Ę0Ō޼sUÅji»ŖŌéŌ×¾¤ žČOŹŽŖØ&ō†Dsł0£yģ!t•AX’®›*&2IɖŒ4|ūT²{}mæ0‘ö{C›i÷‚#ķĀĀ­Øó±U’ŚĄ£S‡ö[šTš£‚ma)Z»O䊝h:ҽTDlōł—ōFžŅ”[ÅLuŗ4ų&ƒøä|’‘rŠ i.•{Å ¬w3ĮI`ȓön®K‚Æy-ĘÜŖ.(+!FFśöZS:‰sLŁćČ”…V7$FU®œō¾“8…żmæk㯼 ķ_Dųs,ÉØķģ$ąį›ƒ)C>Fcr³)·ūÓ3ģ8fJ3¦c”gč]„Ų˜¤ØĻéö” ‘P.Z‚¹’ø/sFq¾ó”:7§dÓéŗ²l#łÉ÷+󔚦E =ČģØ ××ī‰qÓaŖßĒøR½¢ō  -+–ė™PhBCŅ50(LŠåÓæ/÷RF–Xoō3•W ƈāčėm|õ€=§é–e­aJ ĪGSJSCs€$,æĀHOĘ!üś‚øš .D‘w¢rUņč0‹šōŽŅeē¶;€*«õ¤ęŅ,ŅTÄW\×ü‹žN|kCgŌ†ˆŻDh»6g~ƒ„zUH*}či:Ā [Wļ'Z„Pmłf1Ģ)‘7—Õ7ZQŹŠ /=s×g,_oĮöŸ¦īūÉŽŸ<1+K `Óņ샊sH»iäQz°Sī×@üŠēŽ8ß.¤†ČŻqŽīßB”ŁŅUŌUõm«°Ö.÷4Īy6M,Diéą`÷*œ˜‰•mXDęč¢āR£ »…AŠ,L„‘–QśĢņ tćMĘ!^%ōhź– -øo*M4²ü,7x²’ØĢÖ¦"½ HŸų1×äx™¤Ł¹ė¼ˆž½Ž˜’=+Ÿ*m ‘é3­p Ē ²D`­Ā¼č ²`gĀŖcbT·~L!hØä\ 7RšÖÜ65‰›śWÉnCø ’@zRĄE1ŃO*ŗÕ÷e‡€µ„Ü9E5Õ"õ8÷AręJJ 93nr“)i¢.Kz‘m¹‹×÷U3Å[ŅåŌ-ŖŪł¤«$3ęßšƒYh°”¤%įįeĘUKĖń.ČIC BZč”O~)gZP@h›½O½|±“¦ēŪ¤}Xč1N–=¬ƒ¤65q2üś7š7}ńüjØļOOŚ!)ų {4 ŅQ¾ØSCķŹ”‚${”‹ ‚~uĮ΃(z¶ļs i³SŲ£AÜXl֛Ļӊ'ķ=cH“8Āī0«2qėŅÆĀ‹%øQke Įܜ–’-ķōōÆwmEĶęēg_œų–Ÿ2%²½ įdźņcĻ^›×ī2M‹Eéf UZĮ ŖX6Kn'/qÓØ¼māÖ£‘,RķgĆĘč‰0ŌÓUįÖ1«¼b:­*Ū$JĶŌ9yĆ÷6Ų‰öZ!Ÿƒ_ųiꆱūD—ž8WļŁ6¼“¬·"żUhOóu黯5s×׆¹&yŠBÓĒÖ½IįIY„Ē ƒdmxįSŽtEŽń"¢V_Tuü’F~C }_øNŸąå$Įüżāq—^ŽśK÷-•vR®zy= ^ŗ”˜ ½ŹQõUošLt 0õ°^›Zzõ½ŖŃ зƤ¦Ū’›`óœ³“Qą\ĮÜm˜Œó”Q(\*éK\½ļ¼ÕŅW‚óž”Ė-*’—eĖ+¢ ų ]™)˜ 7VÜė*‡ž}gsJøųę÷P4s9}=9ų–¢m抹æģų l”!‡\æ°[’“§0¶)ėk°¦ŠVhŠō(ŗĆę¶é^r6W…•ę3Ųéܗ駰wś1ƹ øŒöŗe&£Żg0“˜K)”’ujā:N¦žŚ¬°äåķią` Ä7¬“ĮČh2CvŅ“xĖŲ#Gff}Ēcés4DR9 Ę š ĄKt‚ƒńŻ„·īŽŪ±&)ćsa ސ'Ā"|LĄiœÅ…Q;€­łOö?Õ£tŚ2līźŃĻ®~Ū ‰5d€€?æ“Ģ·3H~p…ž’#z¦1֟ūŪ#äŽ!ŽKVĮÆ6·ąÕN¹æh’č˜õ(Š)IՉ"Ō”uh‡³Īīš)—VןļÓ~”ę^«…§Š”–³Üå?ś#qģg‘'B²|A}F"sRŠi~‡īqPnp8:`åQ.y&æĘJ#pņAT9ķŒW.hŲk’A6cur/̘SØÉ“Ś’ÕŠ!Z½Ōiīkg‘e™«UģXʶiGa–ŲMT~”f)äcķZPØ"2HE%[Įż“Ó9Ē©ÅžŹ„³;p§³é”"ķiŽF/ÕqŌdß('jæ)±„Ӓ&rµĒņ9yÉ&+•só]3ʧ¶V5‚<:øk[} ˜•AkGw¬c¼ų5`VāT¤’¬ ūF3A;ę†oDH'ĘĻśįcöyź[kŌY°ÆŪd«Ó¾1?f Ļ-:ńK…(Q‹-ĻQ³eą1=F 1”–%¶“ėgv9ޘ"0KˆøNµ×sī$O5’•©ż’>ń=-+/ž¤»Ķ3劎W.ŌL‘ö6½ĒŽ“Yö)Łėłē©­ītö„iģHw-:©ŌDūųű©Žš¼'¦ž©K[ɧ„Aģń;€kŻŌUeiEM[ā¬žˆĻtƒ^yO°ˆ“µ’ ;ÆŖč~ģle”Tķ*(¢‰¼žN>.‘Ššµœ›[M¤ ßÜHmĖ÷y_¦†P¼Åœƒ™‘µ¤¹'ŸX‡4>®§įœglI(. ™0x_R0²Aqé…ĪŅ/¢"łÓł5•č²?RīO7ajćQ9w™Ś»ļ‚<8®¾ūJ'<)deµŪuN0ø7IjY¼ŅN›oJP}ĻklŲr3¤źøQ?c\’J©| zĒ^ U9ŻöĪ1/ u6ƲÖŗšĻįS\©‰ō芈:š€į’~ūO-Ÿ7;ŗ–÷QkX‡‚łÄ7µE;oŠ Ė„¾X2ČJš ūŹēÓóg*é=Å“Z±_ ø ¦剢3Wg”9ŗ×KŒmpŒń¶öiFĢ;æąŽņÉސ«³0(WÖn$D0¢€]€JV°Dr=’‡‚§ėČޱējFEµWÅL~clĪõž½A²ŅŒ¬ī„ IĪÖ"™_ę֗.ż©Fc„=ēPūŃŅżQįs,Į‘ö™/ßnØęReƁddŲżbCĶt°ĻČØ¦ĀÅÅ%łØŠŌ?ayVxtg~>Vögģ?›tLÜ†Ø²Ē Ø]swøEy¹X‘u:ŲćōÕĢ܇B[xWėū˜pb–Y3»Ä@G@=±wm}ƒ‚!‰Wt2qÓŠe·9 P|$·Ņw™ńm—.ƒ):īĻÅ”…­ƒēłX"ݔգ G+ß+«öŌ¦hö<¹'¹±T „°”·&|£2jõ€ģēO[ˆ 3}vėĆ•ĢņßŚŚ–ūźÅSćósŻJ¦:xŚž5}{ė{mEŽ› ūPw ¢“X:lŗ|^BЇ„Z7ĆōEJ¾ ‰ż#ž¶`Ņ»ČWńU=½Ś½g–³DÜR· !F=d6ČĮ>ÆMø½C‘ĄÉčņU©²ų:5‘÷Eßægn“-å8 »N@ė²Ą÷”ķŚ^=®Ėoœ Ÿ©—‡ŗĄmi8ŲŪē™ 'gp>-ĶÉ÷²u¤~؁öx–Õ°3‘~,ꎙ܉„*pś”jęŪš—äs”n8ͧčĻx%læ~Bӌ¬¶Ł}½Œyī}¹F}Ūš¼ė!BļSĀŅ’sR„ąƒ.«%Yb(Ķ>,¹¾Š›6ēīo}”…všńeøģFŠ$Eo>wAĒщ®“Ž!&kŌżĄ„" ĆsĀQH”¬)„3•„ˆß%C)Z~KBIr1ĀŌs‘.ĻWļŁl!‘©5ēz«åĄ­ŚčQ - 7Ž.iŅq#—Ą'Ś“Ōs±Ć^5»ZŲ"pšŗ"ÆEĮĮSŒl õęĀEõģ†ž,£.%óQcaī‹n1žV‰Ī$K˜ I!ŲtŃ׿}t5†Öäqżõ?˜n…guµ9ē·ģ˜V¾§·I„*,q j¼"<łš ĆŲK«ZLąĀdcBČżY@ ŁŃ˜Gē²kČÖūČŅ)@ iU§‰L¬Šew ‹•Ż Ķ™,Ä`:ģŽwx—rńo’ŒjW¬Y²bŻ<`ß-a+Oq¦Ž§œ4fē?Iov7T©““F§-Z3«§1:æ%>G‘S5H1$Ón?v\™h¾EW’ĖZuįō—žŒ×¾Ö{ć†eÖbü ļĶąųR ĆųSX{’YkkM’Ć¢¢Ļķœ•¾6ś…ÄĖ.ŖŃ½Š/G¼«~+”C}FÕuńRŗ½©ōm²ŹćY‘xŌžŖ3ĢŚ‹x%øÄK†&”Ļ|6ŹęzēC™a.<Ī#¼ äĒ[÷Č2[;®Ø8õ¤h©ˆüư}<`dE_ēoĢĶRó4 å¬i āę^ˆR£(µ^¶/OU®YļVģ˜:Ć©Ÿø'¾#Üät­Ō ŗ{Üyˆ#ŒąŌ†6d›ļ9Ćz[Ąģm®Glā’AŅ쀒æ½h'IEóąč¢ƒL›°źÆ6®“śLęݱʮL¦×#»}O£‡$OÜIxŖęS&D‰v÷— ͰČ6Üd“7ałm œq[J–…GĮµ›Ÿ>×ösŹ}nė5ĢĘūжį õ/ˆ&Ē»ŻĆʦ+¶¢“žļwƒ“ßCų方afn|§Z°”©hĪīglĘč0¼ÕžšX»Ī‡”)ż!źżŖ,7b\zÓz"ØĮ‰|]„iéß…\9déi`£Ä± ¤v٧_Zœ•ŗÜĀŽŖ4/§`Y°¢Ī ī“¢¦ūœĖ7mØÕŒŠĄCā›CŃF„å“ī­#¶Å–5;~7īNåI×8‘uŌ0›IķSŒŽ“›óķĒŒ™¹\bQ,lÖ4‘°Ļå ČQŁ«==ÅR{ŽKŽ’\ųr;–sĮÕĄ“ÉVѽÕŲ£ŃČ·6›ŚČlĶ{|܊óęčzRP‚(‚d=ų_wsŃÕn£‰…riy…G'.V5„¬ĻŪź¦ĶŸÄ0ńśé<—?>`ÕK'¼S–Āażuž1D°“§+‹³£W»”ōPŁ< (åM5Öe@t„$Ÿf:<(‹Ź% ‰’Ś:R­½Čz »Å:Iؚ»Ń÷’°ŅcŁŖįbĄ‡NgÓō¹PæåWÜj łū&kČņ‰?ėȝņĒsSū,b¦Ķz‚ 3§>9į[ŌĒĻq~ˆun@ĶĖŖRyu;”ĘGžļ¶„!L²ńųl®;掛±M‡Ū'ž¤ŻļyK“k›–zāŗ…N ‰ŁYÆĖīΜ¶÷öĒ[Dö#Ip‚Æ×‰®L(ҹä{£œzsŪw‹²}JŁČ’•^œ=­,r•5tŪ»FR·ÅĪõ§ĄłÅ}IL]ևr¼>š¢V[ęfā ³SQ~Ü÷įć„£žü²Ÿ 0b­ŪŒy;^w8źóZ’¾ī3¢F,CÖ³”jjĢ®Ÿl·żāŃTä¾9éĢ*—R:|6FŅ%’Ä·®r$ü«9_Ø3u\“{g„FŒBŠ…w‰Ā*ń%ˆ2`ß+r-N DkzžĖ› bĘ%Ń'Æ4}Öw=ÖKieÓdŸvīšŠLĪżB:f½@ )ü OSV»īÉÉšcāš"¤S:® øKߎH٦l>»‹čŚAūIćqÄzĘķ‹—ˆmfEÉ~Ź,ٳēKhA$©l•§RuŁ*»+ >5*%„ž†(6–¦‰oe_HLÖ “Ų·é£T÷Įz-u>†/2æEQ_ō¬„Eć$v%`ŸŖŸNˆ®~%“•A‰G»¾£4² Óń^HŒ?ē -—ķŪ|Av Ü\cī/Ö®Čz*&ŪŽ›ŸÓ°z_cYiŹĆ>‡Ņ &€ż” «1)mNżL šŽ.5µćL¶=Ę<ē²[Š!‹æ9G(ؘQS É'I/ƒ{RšD°ūķ›/LöõGUg„ĮŲerq ¦}輏TĄ¾nö6œQ1{W³Cäa‡ģne‰­é©'½ˆÆLˆ³VX¤I n^z®zĆś'M\RĖ}NQ7£j“īWfŪ½žü9č}æŌ­ŌqÉB˜4waBĶ„¼šÜą/œoåąŗŸ?}J‘•[üŁRÆąŽ ¹Ņiä4jzҘäŒ? XCéóJ µ(zM-ķ“ N)»~ œƒSŗUäėīżaĖŠ/.Ž äh3ŽO¦­Ø±ķ—ä80.cO ’}°՛T-!ŒknÕ_, bQ†W3ℽ(Ģ<šx zM–\_ĆĒó.L‡”‰Z•ć“ų ¶LŁ÷1CM,HŠļ›ĻŃܐʰ2~I#łóiIfŲØš\` O~17ž:ˆnGŲ`åą.Z̚0šRł?ƒ_Šd endstream endobj 787 0 obj << /Length1 1388 /Length2 5993 /Length3 0 /Length 6935 /Filter /FlateDecode >> stream xŚwP“k×-D)" — $”ƒōŽō"½R ]¤A)ŅD¢t¤ H‘.EšH‘ŽA•öG=ē|ßłļ¹w2“¼{ļµĖzž½2óņq™ŠØĄ±ŽM,ĘK" –ŌōõuT!` ƒÅ(łųĢP^hÄ?J>sĪ…ÅČżD ‡€zį}źP/(8 / ÜÄbž”|jXwŹÉŁ ßčļG@&@de„…§*n ÅśP/g„¾# ŠL±0ĀĖ’_%坽¼Üå@ ___Q؛§(ē¤($ ų¢¼œ„'ēƒ€æHP7ÄßÜD)ł3g”ēŸˆ)éå Å!¼‚!0žųo šķS=ĄŠłÖūž:" ł§Ü_Łæ ”0æ“”0ÖĶŠńGaœ$  5õD½ü¼„(ž E{bńłP( uÄ~Ļ4UŒ(žā_=a8”»—§Ø' ż‹$čWü9k`ąjX77ĘĖ“ņ×|ź(†?xŠß÷ėŠĮśbž1‘( ł‹ÜŪt ƒņšF訒Ā»(’ćsBx’`iqY1į ü`Ī _-ĢüŻ惐_n<‹Ąw¬;€ÄA¢üe€'Ōxἁ’ų·E pĢ pD8”0”’©Žw#lü ąP~€ æüėóĻ“~ÉąX Ś’?šß· 2Ņ21ÕQæž7碪ŖX? @" ˆˆI‚ˆD Ę?ž»Š?Gš7żß^#(źÆńž«¢‰dž°ĄßßL|žZĮæ¤#ü»ƒæÓ@š?°K‚aų/Č’·~§üßö’W•’·ž÷HšŽhōo€ą_ˆ’uC”ż’‚ą—ŚŪ /},^&˜’ µ@ü‘µ* ’ß1/(^&*'üŖ‹@$DĮü(OM”n„ņ‚9’Y¦?~Ø'^S^æÆé—Ą«ęß500,ü—¼Ä$„(õ§Ä_-Ž’ xĀ~æ—‰b°^ų?z €Äā(ݘ”rśõo…gƒüńįéłŪńÆn0o?Īļūʏņ·ż[Ł„F9ł »īRŽųż• «ÆČŅ€˜Uē~ģ…Å¢³ĻŠqؚüÆāĻļOؼ]¾’cŽnC¬š¼ÖՒģj?{7ż¾ćdU#)Ņń‹šŻ!:…ŸžzŽbĖŗ--Ö·Å1p'ʝ:“nß唫Ā{KcYkZņüueG„Ī;ä5›¢—ˆāļ“3ÉȈ_" oRÉj*S}­22ڬĆ빯<°õˆ]sķGzGƘäBēT±0!j>u}Ź]÷ k]ńńj›‹īķ!`„o±Mƒé8Q0ō 1ŃùµHō'5jÖ§Œk™’„h¶N÷`ŸčæŽó¼;Eƒ­EŃ+½3ūŌ<ü^^~Ŗ¬”æÓŪp,Ī`..”¾ŗ÷ؚšļłc¤Ł“^Ƒ\_yó;ņ–Õģ eƒ{É £.‰¤³zR×eķeN.ēmĒĆ ļ©”¦|ƒF…„š#ŲžŠrŲŃF-ƒWśĢ)ģ=‰Fæ=éqōą@wM>Ԍ«›Ņ—±šÓP=9ˆjū²å_?¤LÆŗ!7µ­²Kėqj—j{Hzaģ“²ē©q½lę ÓmńU’Óžč>Y’īžžaĮ å­£ż`¹Łb’ ×ZōD3YÆæ®»—AŚõ½޵ģ (¾,®ŒČŚŽ,3³Į]½ņ½‰AJ`@mĢZo[oļnIĖsCļIƒŪŖø+]Lė?>ŖÜ[ZK^R`[i¢Y®śÖ·°;=Z»#!ŸõŖŽ-_ųmżtļ>G|pfeŸy)•+Ē&ŒĻ?„?„²_/ĶXØzpͰ+vØł+U×Ļq}LŠüĄš³y/oEÖ7•%ńÅM£’“ZķįžĶVI4’dz4µƒųĀz›³ēk·v_D²‹^ŒŒłF¤Og6KŖ ןä &ĀēŒg]Wx":2Ö®3€ÖkxnōxŠ\Ų Ž9:q(évŁĶ\‘ēę¢Ź­ ƒ–-ÖÉ į÷F\ xęcšųG• “/9tž¼^¹@bgŚO…¹2wĆ ÷eŲDÜr•Lŗł“ަĄ›ČŒõˆ×¶É½ŃŌ×Ķo…F©¾Ś«L³'7ÆX„V€÷ÆØó¼Mf(ųųB-AŌ$ZŃќ×m‰™TüÉ#Ž„IŽakÜ.„:ˆ”éEe||IčÜ\†Šżä‰±VŲ~žuĶ‘Bhdė~iŃ'Hūā–·Ļ#RÜŠyĒBŸ§õŪ u²Ū¤¢ 9°Ę3VŚVBȍ“ķX$mŗ§`x”Ä`Ɔ9y² nĪy«”;ćŖm>[ŽüK)ē@q’F·”$XēŲ8#j#:œo#qg>u4ĀĢyd!Iz²5ĖyĘ ć«€Å=°ó=Š&Æā{ńą¶!Ą b?;’DTł+a_ž°dŚŲ»‚›ų[Æ«ŅæÖ3ü`d؄Óģeq:]ĮšĒÄ”¤” MŠ ,)tź.wD/,“cLéĢd&—N³£ĻŹHIē(ėÓĒ{„hzżSŲ²Į?޶”CG­F•§[A??av!‰µ\]žr.>G>÷·hg“4wAä#(L[—ś]æSÕ¾Œę¬»»tb÷Ė„›wōMZĆ'‚ĻnĢcģ~’ūZ‘“i2S~›¾s‹)°ś[BMnĶvķ÷ż °_t[”å}&K8¾Oéųiķ?˜öZѤ‹6Ø2¼"¾ čNj‘š»~ŅÕ@’õƒ7˜ü͆EŌśņ=–—ħœ×hb¤lÄŻ²ø”PżdFHīÜ×bÕÆ«Zč‚B]wånZŻńĄlyÜI+„šĢÜ ¼?_ó8oĻ1;ī-lŅö@HI)ŋø¼Ų:Ū2[½p–mĻś™¤H–²­Sq…ę’Ē…Įä€'Ūŗ :QŠņÕÜ3Į–T^1żÕä—3]7I†3;ŁÖÓ³ƒĀ¤h)£&ŁH³Ł؞ž©7śN€ļvŲ Ī©³,ĪKæQ 7=SG£Ķ™—H¾L1tHź4°7šĘ|³7“w‡vSv šœoŃu|w›łā…„¦kn<ŗ"8[ФnŠ÷aY0ąWnȈÅĀeŪh-z<9 ¤Ź|„}5ĢŪBaā°<±9[ŽUš®÷·för‘+>aē™ąķ ¦¤ėćpųę2†jY@x¼sެdāŽ0ģŽ×*\ š<ó^޵„iõøÆ¢āņB«üŁ žŽŹ(3śÜĢ<éP“IžŁ€«Č'–Ö„ŗ¹$Ś,édöźÖ…¼p©Sō}}Ć\šg”ģå°öÉŚŠ[s®ŒmÜ š2 d„ó©Nö;p@•’Ļ˜Ī‡Aq¢9ł³G-›6Wž^|- Ü«r<–Ōt±škĒ`ŸfĮė²Ļ„§Ž“ü ŒnīŒģ3’ŽĆšiar$%Æ?Ņ«@,VøeķT-=X&p˜×(féjόTó­Œņæ–,üDŌ¢<ŖT ćK¹QõŖŽ‘˜Ś¾7ŅtAF³Ū§É4¼QöĮ†Ī*‚'ęUĆ@ÖÉ{ Ž%ķ=Œ!(¢äp»½ė^.ADÉX’}ū U“.”…"ÆÕ½ęēgŲtGéŪkO»ų̱:Cę„ētqaA_:^ÅØĢō„9ψŪH,ŌldĄŲV•Źłöԃč«.rF]ų^Č+‹²MĢ?D$ooaN?ŪĢg‚ć*·ś:²i¬ŃU|CŌ:N•: ĪķķūNė© iFāžģ–²¬öŸuŖlÖ_Ė}¾Ū]›¢ž£/ź˜™kŻž< ̼ōՏóõ𯃾צ°Į.šēObzs ł,ŅÖczo]6ö×čOܕ”UÜZļŃķéa•’)“Rt2›-·¶ž¾dƓ¬xx,¹šCśŒq¢Ż`‘ż]⹓ЧR7ż×ŻĮķ‰ē÷­²ØĒBŽÖ©wØĪ/'Š5?óö©õFoōN±dķT LG<õs/se«¶ķv‰ņ|eß„źżg„»LcŅ½š»6å…ņƒé·¬cĆČ3“•de/‹ŻŅnŲćśē{…M­jVbåīL\2+ą‘Vü˜lĆĢ ć4Hj?©ŸÕ^śŠPnP3ÅRuĘ(V(,›Ķī.·µ9‰Ūē^³‰š{ƅ’Ź/Ÿö|ś“£dź‹õĀϜaLø·Ō“PrC˜@įŪ‹u—Dū=//U³P„XLtŒ,«}e|–ps<9-GušHʍсOļŹ½}ļ}6ŠdåhLų^‹A޹W—ö'!'ßʔ„¬|«š±ōxž4i**ć Vc©~"Žœ§õdŽ›BQ‡ņā¤C GsR4A=÷ ä@Ž­ó²4L·&ˆŚ™ŖAĻŽųēgČ ‘‚<&Uåsbē9’­rS\.­'JJ&Ėł„<¬éżŠ¶¤Zžń¦<jĪsM2zA?BļQČm[›»ˆP].Mał„QŪØP!ʦEySj²ķd&õć’ŽÜ ŻŽz­čgKµĖĒĆpöÕ¤%ĀUāŖSŪŽÜ&ėßÕ¶æ!F¹ė¹Ņ…q먌ÜY‘¾U¢bė(ÕĻAI%?J2Ęčoµ†śm,&zo]W¢{Mv‹zø'3®ėĘŹź†ĶKĻ6ĶI“"ʊ84ķH¾‹ )ī}wŅwVŽźø0ü‰Ö1ć$U孔Ó“…ģÖSøv3ßŵņÕO>j­Ž0k#c•ēAWD[Ģˆ×ßĖÜ»"~6ŗJB`FyĮéär'•;;ļ§;%K Œét§:äp‘XŸ}©ÆdürźŌßój`¶¶ƒŽ@&äĒÉX›ī­XÄė²¾%»9ž“cm ¼)Ėņ#ż=utEŻC“ʐ¦ĒN¤ ¼–}üø…goŸ_žGČ#=#_æĖüƒ/ŻjÄŗ]f×.P󹗗²—J%žÅūĀ›wŚō†ÄĀG!ŗĄtįå@‚5³WĪvęCČo’ёd ķ$sĀ )Õo7ÅMĮwK_/…½Ü§\w/\Śx¤mÆ-¼]±|Ų\ĪMŅ|t¶”üŠÉHSˆ÷™Ü}–e¼øķkJ'$Ī»9śäl¶ŠŒSČ.äŖ}ö5Lį[ź°Z™“¢A¼ĻńÉŅ=’BC8'J+’(Eī1ć ‚X«ī]ēņO¢±0†ė"“±qn+ä1J-µÓU,,÷®Ņłmö«8ščSdŅ=;_(#i[©Óp.hj%ņ­‘šĖ*C‰ ysŅm¾”6©3Ķór½¼[6åEĄŖŠų:ŗÖŒ°Ī𓙇 ÄŠ„·~$!5hž<¼£Ńs“;jY×.ĘÜ8ņx8’.ŠH•_#„R˾@PüÄ®›Ž»ŖöøÓĢÅAtHø'*žā“Zė'8śÓ:1AXĀČm½ćbL)µŲYr±ģ‘3„4)Åś"<ßwž\Žl«.R”BķŠ•PÉ„WʧĶ% ŃEPė]\»õšˆĆ®hUSŅØ…pq«H³ ; ²ļY6|ŻASŅźĄ„H:= AŖĢßÄÓ[Ė4n׎ FŚ@āŒķäćO¹ŃŽö²5opG©I-Tyź&½Ś¦—7kÕ`JŠą5CZÄM‹„ih÷§ž”ć•-©Ńs²ĻŃ6튼ĮVA(»&ĮņN¢•€‰Yż„"Łõ:Ē Œqā=Š“jаłBüʜæˆx5Go'ټ„L0AĮEæė“«ć)Ps$ż”>Ņžy¤°r_¾ŗn@æ ģPŪņläõv>Īnyž#’°Å‹ĒI³Vn»ŅvcĶ“ėņTGo(Ķ4AÉ^V„ėRŃ£;źēĀ\÷Ūß}+0Š„A[ŽœŌ¼ūņĖż„µX+ܶbcÖ{Q—MP0Tm‹ņģ,é9éĘ Ÿ:LŒĮ’rœ¢_ŒŌyŗ4āēņĻrčc0$Wc×U5ļb Į/.ßļ‘é$å!BŽć+Ł-£ —n]żöAź-ĖRõ9QDąsž`£G>ń²lWąšg ͊ ÄĪ;ż›Ē%>œośO²h®u€łN1•Ѥ3ō…›5 ÜNéŸ ²}ĖĪ 6œTÓ#הt= s gĻpeļ$å-TĻ5† RzIóĻ5…‡ų„Š×X)ŻĢpiŖvø4›isŅŠ—©ŁÓśķ¢‚Cõٱq ŚŌŠŚ+ę]ŪāµĻ¶4±j=•9„ŪŪń¾†ƒłÅŌ—U>ÄŹ‘1×Z;“ōÅŗXLܙFćß%pÉd\ĆĻ÷ćLŃą]Öšń‡$ĶĮ½;ÓcŅ[9ßi@ǦÅŻŻŅĖ¢öÉcJ°¼ż/ŚŹ/f›[!®› Ņ6.&¶ŗB1}¦ŅēG¢€$xķ"\bö`.‰ĖÆ<ݰ@ine1Ų¬'{XŠĢ-ˆ1xoÉŖķ^ū\ŲŹż„G/³ąsć I{H°bĮYĮ+¶ź/•H n’IåŸżŅ‹E#C-ąO„5×ļ:“ZūčnŽĻ_ńq©1ƹMÉĄ*½=]pQ‹‰%½GŻ}0Ø£·dßi‹¦’Ąž^ņłLHĒeõĮžī7ŠL,·µWivŽ'‘+.|,•O€YŽv“kŸEa–?¼LN ± Ž vķjź„Ķ9ŽIŽźVł‡Óāæā ŗéŗ?Äco·U„Ģœc##jż(_Ļa,©¤@D—™a¼u<$.lI0~ÅG»ŁE½ƒĻäŻuį—.ł|*dŻłĄč~›(NIIĆ{ &’޶’ķ¶vb‚į{?öŚŪi»źāŠUĪ-Ļܾ¦øE»#A×–+7į‰ŒüśTL…!š§Ž ¶a2:ćWłæ‰dõ#;Ź2.=«īė …Ķ2¢ŁęHƤī®9'g¦Ok}%É'ź:>ø¹WŽ÷†¤Šõ «öR؝ē˜$1Sᢽ}_X@iē Ēqjwyī•˜Qó±ˆģŌQĄ\T{W¬÷n¤€™ą§uӗ+/×ŚÕŖ?¬a…n~$µŌ½UtłĆC1Ā.­RB ŸˆX~‡vę†7 ä4ÅÅ£ĆŽÄkøśzł–l!GźĀTwH¢9‘|Pš’'¹6ĄT!~ŽŚ jĆī W²ė#"Ć,ż(żaęŲAU\  Ųsõx“"^¹K¬ič£cĪŃ¢ń&“ęŖ£ÄČp.ķ¦ĀŻOkæFަO:|2 {{ČĀ=³LČÜZåzB9óÜ-ß*e‹4ē½ ā±2 G…å ū‡—H4ɍwzņ½Ś^„e§˜sĢNŚ”Æ'bHhgŸa-ltó”F.W€:ģu:”‰i63·p¹}äd\ĀėŽR„Œd#Ź/&(_}6V¤r£žxn8Ź6cz2Ā£¹Ŗpö]Ń~ņuųV»dL‘ĢD:ųü ūŒ’PĖ^±­W9XjƒwÉaŠ'Z]ŅA=®ż]łm KĀZäų.ĶųCćęŪż6u­¤EUm…:©œPļAõõ®ƬčKJ)•Ė`¹'-­ū«L‹Ė*QųŹ =Ū¢»ø€h&xČ5¬ų3VŪ¶ŃĢ`ė«“æ/’g¦_ö6u½–ĆĒ­fpk»:ėQÉĻ’Ėry] endstream endobj 789 0 obj << /Length1 2803 /Length2 23565 /Length3 0 /Length 25144 /Filter /FlateDecode >> stream xڌöPœiÓ ćNp·Į!ø»»;×ĮŻŻŻ%Aƒ;Į Į%Į!ø»Kp‚œÉī¾›ģ÷’UēŌTĶ@nŻž€ »’Ad=žš:ķłEōś‚*进/ȓ7ŠłļP’¹ąMݜA sżė ZŖ’įæžfž@S„Å9S¾PėśŠŽūZ†ŻqŹ]­tZŸEēN·Ē7°hk>Æ;ߊ|éE]Ł– ¹^"yö9nk„ųœ¢ŅžÓ÷É0Iuj·aa{p¢čX¤a€žA]xĻ÷ŁÉW3Ȳ ü‹,ež“÷åŒ{~)φŠåŃš¹]•½N9ħŠi†8X½ ŅYŹ|“ģļød0® DpoŃ/?VG¾2܅§}¾iłŗŻć§U*4 DhįĮņVĀR7ze™7‹( ŗĀu ¢[ (ƒ‰Jæäžū Ś8Œß'ųRōŸe«ˆ™Y‡ŗ|”šŒ#Ļ÷2ŽÆŖéB±kcmŽÖ]?ä5„SńÕäKŚÅEž%›„ŃĒpšü,‰žØüµj¾z`ÓlHÓÅF6£x¹‰|ņĒĀåE1»ŒTßī|õH“^°—õO!ć™f•F{"G” éĪI ĆŲASаhHX?Ļ­ŁĮÖķ§O¢X‡šU‘¢#ń›ź\”łQ]Ŗ¹Ż.JR"1%wŪßūąMČOÕEŻIķZP“Ō·ĒŗKž<č+dÄ)©‹äł#|õċūšj…±£nZYė;•īiĄ>¢®ĘS~Ü[†$7ģiѼ|Į%PSæ/ ÷Žė›ŸŪ&ż6µMįc[„WŹŽß ąćˆĶ€“M¢"ß̼Z ‰~1n]Óši\"¬Ėš®Ÿ B‰’Ćv²1c ŽŸHŠŹ©?®ÉÓa¾Ī„äXoyg ?’$“ T»čÕÆaŽš‡}ŠėÖ§XŠŌ8‚ŸÜ{āü;ķ)•Æb?ō‰ 3oĒŖ†rī}éü‚<+NnN&Śõvq-i¬yŲ»`8Ó“8°mžļԘĆõ ©—ŖŹlł¤” ¼uhŌh/“"odQj”ūėÅdĒĮd]+ĄØś|ø`9ėȃ4'ū&»æĻI'H¹Ša*’śFrŽĀƒL’ć}‚Ē„Z$…oĶkƒ ’ųžx"┑361 s¹/\Ę+ū”ŻycĖĆĀǵĖ‹µ¼ŠõŖĆ@ø¦¦ŚŚ,”<#”+®ŌclDĆŃLŽ RöW}™ĮņŲ\ŪdÕwØč[T> ÉX~Cq;ȵ;“„Įįmby·jW>ģÅyܽ“ ’D. ŕ·ēPūįAUĪpÜPån.ŃPŲ‡“ _z]ŁŲ}ŹOc ˰6w sPē ńۊ”8ōšŗ!ĒĄp>ŸÕŠQų *6ģMM¾…üޱș7ČčÕJŒJ9VōÜܟęˆCNśĀĆ,rō6„É$7å$ļÕóM~¦'uiÅŪŅŲZT÷d/™LWÅ­’¶T|OżžMoółĮ˜]…§vŌš‰gĖI³øµt“ģb`sZąbŸe’Ę;©¶ŖpæˆwŽP>ĒO?ķ¢Ā1ŗø "Ä]Q¼+FAŠ‹‡BFŽź…*EdĮ‚`ÓŽ–Ó AR©éæüī±ņX‘R¼ˆīW÷𔀵iŪŖż¦{ķŻłFźÅq0­„ÉŻŖīę 9Ą V&“¼Õ⓼I~Æ÷P淈tń÷\6p/Ęŗyžm[«®,"nUŁHŽ"Œŗģ…j ¬&ļéL®åEgŠ@|\KBńŃśUIJ Rb’O|t\ŽzEžxčŚ[R«Õc+)X脹†+m©RMw›‡4Ä"H¶-Sg,F+ÜnŒWntgŪ‹dW‚|ōŽ#S”ķ5ėyžĆĢé.ĮhsĆxčZ,’žg³iė‹»¤ø&OMƛ¦%“©l2}roÜ“RG÷=ČŁDįI· eŒĪ¢q^ŅząU|_|2ģ2s3ō¾…DĘ<飑Öj+»z¹­7āÅ,«Ö9F½ĒjŲą‰Ékį.™RI.Ę×1­¾·’čś«L%F^±*uš‘#ļõT>ōH¾­X±RǾŒ;0Pܚ*……«QŖ7(~–ćJ؁£S͘;Ńu.ĪzÖ¾Ą8ÕvśuŌ-"ĒÜ-hG(?^#ŒK‚kHœ\½Ä^ĢȅtG‘Ž„®o×QG‘YÜp„,ÜyMżŲ­[FĖÕOÕõ”g9nŸT‡wØM=»lÜŪ¬ŽwIżĪ9`v=ƒÉŽŠž¤¬|>6"MŖ0Bż~Ž·ÉL„Ŗ&E"9ɦõå ›,“µ^ū#ģS#łšB}øeć"|š¶Ÿ§Ht÷­słõ•Ļ{ģ)×,éĪv"Æg.0{Æ~Ųė¬C¾Ķh(æūźrsᐅi"ģ“ä5‡G*&Fćƒc ĒØ Ó|rN¼ĒŒcøaāfᢜnFĮ0„w[3>›E%Ļļų ½ÅÉ·Ķ?«‘ūą‘q¤?µ™Ī||ČŪ«Ģ=„dÓ°^Ō»śkDnų5«ūl ÄŃUĒĶ|Dß;pćBRn¼ļEv©Ėø‹¤°p÷\»’šŚĀ^jśž—a¹U¶¢s‡•)š$©Łī¤Ģ-Ń’ļƒ‘V×ĻŹ%֍u#ƒĶļ•=Ł„Ćņ°|`µžł–„ˆē0Qµ1ČŲDÆ9ƞöī7„õČf>éĀܳ¤Žgœšr(ŽóT8 ²rɶ‹>_5¹0AžE7[Š\—{b©ŠæqŌ­ŽāK‘rh ā%Q„ąŃēĤŠ|“󪦵jĀ‹v9“ī½Õ*‹‘ļW5 R5¶żrģŁ`˜7ƝĶ[Ļ”PZµ¾w¶Œy ‹ß^…ŅDPö“Éŗ(lc`1ŸŌoĶ迣±8•aąpÅΜʻ6 éõŅ}”QW™¢Ŗų€įļŒ‹Ś„—Ā öXŸœSQ ÆOģW‚zᐻ”ž¶]E”ä‘ķScŅ„  ×° Ɩ-0“›üs°ų⌈k'OĖäD#Ö.8żĶ=+$5I­‚ļlæØ8&…ć*˜”ķoĪ~h*žĮĒ«†GdŠvĆ»ć %[g-|„éł©!D‚†Yź+ßųg¬e'ˆųņ”÷6źŌm9Ø|9ü‰Nö ;nA®¶ņb,)ļścųiNIóżNÓÅAB;1“Ž,bjtŻ„…Ź,}žÄĄ5Ö1D¶O²© K_C?ŲŅ\Ī4QĄŽØģ2Ł9*rČqk=£}iū–֌£„S«6tŚfjŲŻā4ü¾ ōļ÷]—Į`j¦Hæ„j89{ —›ÕŽ-›Éœ£<0-–Øi=!ž™% ŗ8*£OØĆr æšłŒfłfTW%\޲B›a7Ų_ĶłÅ˘  ¬-Už}’˜*ŽPŖ| G ;&L˜#0yu}Šįžc’ bv_Hˈø“uDź¶ –3V°ēJ*ĀcÆąŅä\MMž„MZõ’m?Uj 9’žRfķ`"­łŌޤw–QĖP‹PĮ¶Œ)˜°š4U*’+tGņŠŻŒ#([2˜Po[³®‚mąŹøJ„ŌĖ«c›÷r†3Ē”“Šó:5ŲdBįe.j“É܏m=5ėų[ÉŠ6™Ty*ZÕ>µ¹‚Ėģ,É;-gæ§Ū¦–Vķž¦8ÄĄŁyJė±!Ré®ó%éWø‘±xƇę¾ƒˆśńI[²­īłoźƒōWČ(a+P–©Å,…‚82ųCÕpŸ‰ŚOæÕö\ §TįfĆgW62`fˆ˜F‡Ś:h7*ŠüH€qk)%_6šŸ“×ö±^6bóµ…p'Ŗ6śL-c›÷°QGŗŪų”3£ÜūõÄē}ŒDMś¹Ąø£ńbЂ屒 ¤QvĖYÖ¶ćż#R·›× …óŌÕ«nę~¦N}t=^ž¤Ļ«śß³ ī»OŽhŠWw¹ęŃīYńJ’ČėR ė_¦©6*Ijv½8MĀ` Vŗlō3HńFn^ö{‡ä„eIėčQ&hœŗ/tƒ#Ozoąn|ó¢ TTßjmfĄ­~w¼!Ōa‡)›|Ķ0ĆzGdµ=/-¼’d>ņlÓŖŹxœuóģN8dLjN=¦¶Ż+Ž>ŗhėõD‚Ė•‚]€¤}3'ÖP5`wŲdŠ\#åĘa(•{ß“ČRņŕ)vńe#ntėaƒ=ŖŽ„Ź>Ņš§ø Ÿ# Żžy…%ŃcŁø¾š¹ĀƒŃ‚Įt›”Ü-Ē'˜"”ćvØg§s‘26s‘ąum4+·ŹĄŽÕ¾Sē'ÓčŚĪ؇Dā7·¼ qKfİŖÅ«€W4¤c†ŠDzLŚ­ĻĘE#Ÿ-·&xtgKŻ^įŌöqyä’ńBŃśÕåŹßQģxXŒ¤4+…čnAxĘ8 …zAÉŠ¤¾vX£rȗVČt›6łłZwS$y‹oahLō&z“kĒŃu>WźšŽŸļ÷O |dłņ£É6`ŲM0näv/ ļ UyB‚5·yИ9h°ÄIpʔć5õÓČų"½d9Z·f<ÕhŗkT"§°×æśÄ˜˜)ß{Ļź‡¼q(ŗŸõ׌żįŸ…Ń»~ž({ēZĶŠ°»ö.ńéĢöoßų¼©±Ņ)÷¾Šłš=F°uŸū”Ä‘A~Šjøš'乜‘ ĄØ±Œ²×(µąlõˈK…Šg÷oķƒzOQo“±ęžU¾n–)š˜‡Ń-wt­…ę8ĮĒ-–jĄwxO]YYŒļÄ'ŗ5JęMeš÷a¼{ōZm­Øœ„x|Ū1lqūŹ.ōŽUæ7‘½L:s¬ kžG¦AϤ“<Š”žcŗĘé•?Ņ]qrņ$—ą ķ`ŃU†“}bÄē²*.²CńpU~&V×g…”ė—Ż’ĄŸ6<2ļ®“Ķ Ė?NAn½N<’¤ĆX,y'qRšŠ:Ģx“IŚ=ŁGöVvYėM÷’6q įō¹õ22Õō¢Č,ݧ½Č/mķpčKč7©Šł»œīõjųźŚhQäĖøÕņiÆģć„gūBY`Ō·'w}’8fšRņsōtūŲ.X•R/EL­åN}P#·ą–±(•:ĕޔāå®ĀHlw@ō̬Ü…aAkZ~-K£…ŽHĮ׳‚‘W’MąĘ©¦øģwߓϟߔųM•Š9Gć Ŗ‹  šć>C¤&æWö惎&›é»!ORĻky#y÷Ø·’|g0›I„‰Č—ßķ{¤ ×ėF–v›å|UxžL§ĪVa6įó$o'a»"Qå­°6A;]¦lu•M‚eüšÆōzö‘ČYs-ØĻSæ¶ ¦Cvė<·§I?Š6ū’Ć” Uw?R’•^‘ŖŒĆŖG”cĒ;$Ē€7æŖU¬¶«3V-R!EŅŻæņˆÓ09=*qĪŗ0)­ĢՃSC|Ŗ½£5ĀP/9‚.”4Ɵ9,µ•K¦ÉJɯҶ·åæii°I¼}8zRP8D¾4äcVāč1JfõhuDāĒćœ2¦įcļżĶSM’J@Łpū;(ŖIŠ”¢īØR¬ØŖ[}§äPō¬„ÄYĮh6øY…/Lŗ?Ÿv b€_³/‡X½"ÖĀGéŗ2:Öν§FתՃ¬ŪŠ‘@>F²—%7™aF ń—z@”ą‹Æ Ī€RL›–ģĄź¾Ž1sø°_šk‘fS±ßŚE Ü”}c©‹-F… ß< f•ėūņrøHŲķéÕ7<.³oYm’S%wWž` 4ŗ-/§ŪE!šŽiv”5ź[±öOßš1BæS): ’ÓuHƈ–fq9ŗźz(DdŌUćóO  1_•!pØóœk½/«žøŁĄ$±Yn¹CO©ÜŠßś²_«צ‚ųZ`d>4FMéZ·Œ„ݘ”%āą 'tĖ#brD˜= Üe7>·—‚nÜ6Ź2-x»®„0¦¹0„y-•żcT޳Ž@$ūLƒ%Oć'³v¶²ī•ģ¦x¹ūµÜ§ds„ØŖ{Å ³&#WSU%–÷­Ż ]ŹyŖūÕY3üF÷Ÿ“?jūڤxSÓ5›źX·O&¶ˆPģ— \v…„}D† œRĉēyO·a›ķ”JD¹,ōę4āē–ņ”ųĘŗ^ ²¼N“ēv•õ%š–*—gS‰ręU?fŗb_?Zj¶7’±¢qŻāĪą•˜vų„ŽĶłč)FX„ķ8®AśĀR Įų…{|fŃ-¬ ’PCAß²¦F| [‚½LŸĘņQ +Ę„|oZ8b¬ ų$f“„¼¹ī"˜w¼ŗ5į»±3u®]¼` HŃål°ĖõżÜf3Y!ųĒ‘ļm}Ó8£oß"V'sąSĶGf£ß½ T‰uW"ćįœōģ,~ĀLń¹lŹ—ņaf4|@‡vš¤:‡mX$nVo[}Gjū,õŅd9&hg³ā›œ¢æ°;ˆöpß”}ĻÖNqfFą!–Ä”š¬$=?ĒšcRÆéž| •¼4×ŗŲĮæäm¾Æžn Ž×ߕ\JĮKś¶ŌŃRļ ²Z[ūRo¬éōö%Kł–šuü8ÓtīG/’'³+‹WRFŪŲ"œV6(o^–%r'Ż[“(¶bq“ÅLĖ­ŌUA„LŖŹÉ Ģ»½Ó+ ĖßpeĄZć)¤Š!üė"śŹ·Dƒ¶­‚ačĶiĀ*Ś“ĮҘ—ßZ8‹ĀHpĶ5Ō2æMī¹~*žµŲžā—ųk’‡Į/«.„qÜ9!µe+ūĶÆĶOŠHfT*źžā×(Óڶ½xųäTsŅ”(Œß¬ą>=Ų~Ż mY™AīI˜ĻėĪÅ;ģf8ķ¦ÆĢQAtv–¾§ Ē%Šŗ?ņÉĒ3Łžę­{©čĢŽ“84ƶĻįtõ“°ż*Ńīćė )_4s%½fóh[-"2­Læų”t€0 WvӐ¹ƒ†²ČČ:Ā„S,ųę#„\²Ų%“qU}Pš®DvŽRžQs֚sŲeO/_ܗtæŸ= %ĢÉ_°\©ē•Ļ›#ĻQ°†Dm*Æį /Q<Ų‘Ś”' „ēž9ćdrQbœ©y·ŗ…‹ šƒCBs’ą÷²•EL§ź6—}Qc*ūõÉĪÓŅ›ź£ŪźÜÆ6‡®ŸYkīΊ֟ŪTõvŗoäC./vs/Sn˜¤Óai”ˆ=ÆĪ7­öƒœŌ”)8 n}š¾ą#b÷֋² €’H=¾²µ č½éq>ś$ ˆ7ĪĄL" ]Éūćäń#“‘Dgī1żqĖ“¤ƒėj{”Šå“l»”Vq;q¾&ņЃ¼UÓ Ļ;¹”÷Ģų0Ö·h‘YYK84°Öµb•–ń5oBƒ&: 訐ÄżöRjŠū\ļĀśÅ;_Žf« ƒ??²]»Ų„Ī}hSĄyźļ”{Ž¢Ó-ßŌ¢xŗ.(Y…°FvšjA—KQĪļqāÜ{ū‚G64,œ¤„+„Za æ“ł±'Ģ—øźq@ŗź!™eŹ}¦yIYŠl÷1ݳVń]5õŠ›…‘vĪy#SišŲÖ=č/ļilų{¢\{I,x{m˜“HĮxrÉĄZ]•ĘPl<—¤rĢ]æ¼£f÷ŸOÜ ¹ pßČąŃQĒž ó.”8Æ£nĖ$Ÿø‰CljŸū>oؑU~HAįZ |+ž\L¼xy ~qŁßö~ ©å²=ĀŃå¹ Qü+óčØųfĶ7ĪĖDŹ%ŌhµČĒIMČZ4/*Üā iK_½”3z¤Ę•W] Ї˜KÕ)³½źkńĒÅdZæ`ĘzĖžVŌ¶įŪDGÅ.#›yā}ėÆž%’”’Ė€ų'ž-{dńĘüh£&}­BH…Ąї5 ż‡‹„\ŲģüžpϦŸŽŁ\„¤ˆs”xśfL:%Hs85f;š #lŃmœÄeīNY‰–įgՕęš'ؐŅņ=„Čh©Ņ+7¦ƒZ?×hī™LU»Jd¼ŌŹˆŁŁZņ!ß9Lx}ĆwģĮļF:×,q­66K^ńn£VWĘ/*Ļ>ė…@äŁÜ`w¬5łÓ>)ķóųœ« BĒ?sļCv5ng`V ģń7„‰  šä;™%~Į=G.†„ĒÜÆ™Ć…@Bjnį–¬0•˜^w{?5 BˆĮ;Ē×Ŗ­ī \ćšķ“ŲĆ ·!ĮōšCIQżpm>Vło£ļÜ9µ üZŲŠņ`+GDę›JŽvqĘio±†pæŹ@ęQ^ŚQ®”{*?*ź Ł!¹e;ģhq¼‰ųŒ‰įž!Thq"ĪĘƟ†ŲRęƃ3źķ®.¹ š­ū趃ėaķ½"$ŽĀ‘ó<¦>²Yų@EµīĄ –įdz‰¢8̤‚čsŖ›ÓE‹Wn·™:¶IĆE˜ńŻ1Ž„˜¤ģ=|*bŗä5mąėŠlÖÖ:å‰ļĖŽ”ÖAr¦G$M5ūWżŸ:!Aofė©¶”;IļżF-¾4Ņ’Õ˜Ön=mßdĆN]o³œęÉ7ŲŅŠ ²~L¤ó.ķ7‰ĪŁŻmI]½€µ2'į A3<(¬ÉŲ½vóóMÕ9ŒåÓK§īõĮˆtIbĖŌU+õ²“§B»ō®Šx“2)ź,MŸÜÓéĘd=ųžĒٟ%A‹Å˜Œ)ÆLÄÖµé;— å KŖļ”š#'CÓCzŅŗv¢m•[ņ+Ś—zč¶"F[xyĻŌ·T‚7\ƒÕė/L5Ŗū\‡Ķh™ŽŅįD”pżģfµp¬_]ŃęČēߔ9[Nšejm#­°£-’ y8ĆLC͟ æy§ü0Dé‡ŲŸćm?„;ĮōYzŖ0†šÓóę¤ÅoGģķc™ĪŚ0 pytż›‚^*]ą xB>‚"C(n¬¶”Æ’±^T½cŃ`C2Ÿ‘I“Lé÷^”Ż&aø88}Ū¾pÓ·U<Œ;<‰;k”Wģ–k;ŠŁ kļWÅĻéƟ øÄQØT±Ļöš³²ÓŠ ~Žō”¦aAHcs¤ŗ"&o4ŌŅlĮ#”!öõ¹P}/šę /k5bėŸiq6'ĢF1Ņ“5Ž ¹_ĖÉa"iÓc+ įŒ’˜jüĪ7¾d1”š 1½]ōó"ŒŁm­dķ+čÅiģNЧI]*PbēZj3™Ø;-C9¬Å2–ś„‘ɑ„TB¢»ßņV6½>õśįr/üćFƒ’RĖ­Ūż"„ąZó$óŁŲ[ł”ø/$IŌ°#˾|T„ėĄ-l¦RC#°NcMmĢĶ«“AüxŗLpń>[Ŗ÷˟ļƒļ#ų–Å2޳fßP§˜āQoļnCēIŠ‘ø“ōÄ'ēĻ%5˜¦bvTĄ%ūY¢é`ōĘéĆ¢…"«ĮĖv}‘^?Ē?ĮHčnŸ >”¤!į .Øų) õŖ—Ėƒ,*'øÆF7õńy.™Lś©|]·Y7ĄVėö³_’Ōš“śä*/³%y‹%*Ņ öžsv¼=͆cžŖl$—k2æJ BźZ@×åU‹,2¬ś•©zß}ķ’pƒ|Åī…Ī_Ę&Ųų¦K Vė7>¼£*¹²ˆa.®ļÅ޲Ę2˜šŒ$ˆ· ģ2£(¦įü•~īģk„miø#q²ŠpĘēL Ł…’$^Eē"P˜CkӗŠųß"¼čÖŻ 4ōĮdFĒŠüł•EuyŲhŽž`Žön„`}įē™ś~Ɩõm‹Gpé4\±6ūZĀZ"»Wˆg•ß³Iŗ ˜n»ą…ŸhŚ­—õ€µF†ėŪy2z‘ˆÅQl·(3)'ĪYP„:?:ÄÉ<)Ō³n¶cpŗcĆ±ĶŻ$®z\ŒŖŹi<²ksPŌ*æ<±:øŪ¢ĖE`)°ųŹ·TC½ĒHJ0bp2‘WI‰{ęV{Ö@ˆ©^7x$äeĆ{ŸŪĄżóNCÖ7•"¹ÓŅoĢc)ŗóŽźõžŲė>†n“˜ĆtćGO-ĄK¶Ö)ŖĒīēAŁīaUzŻ‚š¾öāsˉ]ŒÖK±ŸÖ£&’ü,ĮŸŅó ½ėĒ‹RN6é8ł†fB4kßvm¼g“¶¼_2]…nåT‰«˜XŻ}ÖŗĄ.gN× ä¶e':&Ū(0Iy­·Įü1m­³)…ś…5uOށµCĪyĘ?tO õ"¾2Y¬]Čn&ŅSį^hĪ”—œ¶l“ÆĒŃZe=µ£I†¼ūˆłFó"Ź ¹Łkx]}0U°|H›ŸĒ‡æ.V{ėe;i ØģCµ7Š”\ʧd“q½‰ˆ¹/\²^dD™%6ĮGŠXØ\˜\Ńł“tīļ7ļæłģ Ų#ł÷w½Ł›ōšęūLÅT¤}gŽöĮˆ¬ˆ|ōrTa¦‚6]g™J:osŠśŖg3g‘ЬžMä÷ÜūüĘĶ#ĮF»§×·A$Ņ@ÓZźl®;És½ö Ėp2 šƒcfE›PŅP—Wź«v+Ī—$šs޳łį½vÕ:«fÆdpm֜P‘ ®*ājČżė¾č9ÕBˆęÉ„*ÅöcU‰ļÓU „ƒ³ĒŽŖ]܋;”tlĀ{>£\ƛ՛ęLE®©ŠP81>ÜĀO[_ #ŒO³ ŲĶ™’¼ašYAE÷©Ķ=UBrӔ)Q|!idę‚óÜQµEK<Åcjłń}Ln&€TbZ?T¶T3ŗ¶éÓ;$·`ķ‰āwHzü€NŅm°ŻžŲTmˆlĻ™}ÆķC•0Õöõ§®ńü“PžG€ćéŅóÕnĪ×ņÉ #ėŪq)JFMÕäēÕ'_»zj’:Ųö™½cWˆĀnŽ(éóš4³ó§j5­M.ĻrxåE}ą`H„ž~Ŗ•h-V[ƒdÖ^—[%×S/“TĢlyńĻ¢-{,©nŗ>¬~ŖŪ{…VYuŽüń ‘±r¦[ż<ļ(č#AF”¤^`ŃĖ:©'gNœĶŒŗūC” ŲŪå4˜ī¦G9‹f–±ƒ¹ż¦:lį-§ J.ž0§‹9ŸŖ8'–6ż³Ö)§ “ųR—ļO:S vęG%ŲīLQ[p•o%œ³–;¾jrĶ.ŪG•Ŗ2a ±ē?ū£¹\x¼cF4­ÕuģĮZ­¼!öŸiŻĆ”#"[¬žŅ{²hųFpo†{ńØč!9Óčs3Xc¾&ę9‡3y¼p0ź¶Ü‹˜ īfJ|]|ś“ƒq7 DDÜašXKč mä—Ų¢œŖ-VoųČAŪéÆHŸŌ x÷ÅīŠh¬ŖQ1[÷/}®ōę*tu\Ø-8ząĻøģr–döÉ!C VūŽnĪŲéx‡Ėkū¶;ŽKE•ĀŖÖGD#¬ø#Smm2ȱ”4&+6^ĶźÓƒ·Óu»uåõIRÅ8ŗETŠ_˜ćc©‘TŹż©Ęw"÷@l„3µĖøµ­(%E+öY"cż³cžĀ¶ˆ”4ӈ[÷ŲŖŁņe\.¼ĄMF/ śõ{©žŁ›,)6T!ó!­š–bĶż"Bƒ¢ox &ó– 2kĆkķņ!^#4ß`Τ3yµ(X%V֓3K“%eĮvī{RAĘ“J{–4éVAmb߂ £rŹTź-Śą ›Ų.īĀjó ÅĆyöō=ŽlĶtÕ„`A³ś°ŹTĶĖÄlŹėóŸ!~Xąōź Ų0·+ öė¼±ĒŅNv·ąŌz‚F'lüŃŠ›1«6¢ÄlG…€ŒW2ąä Ģ6ėŌŹO$]Ū†aRģ‡>ʇ!Ųņ2õˆ”ć9æ›N’Aī S ēÕŠ%ö¦J’®PxHyMƾo \^Ļ3¼³Žō0aųZšĶŗč–fā—Ėu,ѲŸŹ­€š.=ČDk9ž |p^­é÷dŁŖ“É,7S-UF÷„ü“©“‚˜åŒ+ŻvEŲO³*cĻ6wļQhļ×Fe€4čå[£ŠĒƌgV1æ92š?˜¦L r™(¾H¹9z;]{U³DÄVwɞg=Ńŗ³²½ķ{ķÄi’ėZ¤²Ė1"ĄõógN.½ūģ]er‰LW«°Lķ^ņfYpżķó•ßW„5Ohŗ…ń’l5ņ*6W„ėؐד²[»ĒĄ÷‰¦ˆ½ń]w“ģ¶Żķ±–!ĖŽÆzŲč·Gū–“IBWėI.Æ }Žį¹åDfÜ£‡«‰9fDǃR…1S¹aømmb3Nźļžśģ0_|ĄX{ ĉ2³=²Ż=6M;h`oBŹÄhņØå ńTīŖLä ‰,÷įĒ æQ†FPż’É\%ځ[ÓXʦÆń?¤“_ł}"1ś¶Ā\-Ēņ æ³^‚¢Ļj³D®5čqÉ÷öś]ßnWļŻBŲŹśÜóI+,šfÄqnČRż…;Õķžež9Xg¢–§Ę«‚‰ŃN÷Õ ƒ™gŻ® s)d}®=ö„µ)®ęoRl[–ƒcµģÄyµ qāĮß5Ž@l.æóa]dŽŲb‚²æ[‹;R+ūŌłó g f0{e6AķMźÖåŻBĮwNš0|!z Y«Č,»1+üĝ§ēē]‘ÆkŹ%ģŪÄŗŸĒ)į,cLožtļ™­ æhÖ§’ŚiÅpz6ś”‰š•°ĖfĀtƒvl ;R ņ+b }-Ön&Qż°Ž#¶·öū`nHZ››žÉšD¢ĆūÕ\%üOŲ«ćZÆN¬;@Øø˜5ŠTŖū(w Y¦K—ƒŚdō ”‘‡ƒ³÷Ü.ÉMć9Č9+õBĪńLĮ‚ZBSüÅģ—,?ņ«E»ÖļżPįŻOlWƾ‚UÉÖIפ'tˆæŻĆjžķŌ”%$}¬øN}„…/ZÓ̲uKö@ŒÆ­Vļ}H0Aķ;ėNŚį#łpņ"D Ŗę”ųĮ/F2ķŹ(­fµÅľ©ŌMņZ]aOq$Į WīĒŅ‚¶AnPDaĶ„‘vśŠīęni}˜£žBĶčUuĀUX!¤E¢¤"LĆ]Ė®×āż׏šNē³.LՍ¬J9G)óšķ |&™ĻĶFļÆ֕uėęrŠ6å×G(4-­z~«V[ŸÉ›9×FXžļˆÉހ㯔FāN„äéPš}4’T4aĶŸÉ™Tōó0ŌĄö¦®öRš–gņ£ [BNg‘e±ŗ·Ąažõu†ŗU†½`×÷š¦]~=ƒ‚×+Ņ:^ ųQ汝=oYånGōÜĶōöwū+«gpŠKå5;µkp‰šōU}†®µ<ųĖNč+”2 Žęä’<$ņ@śŽa:5ƒé!¢ŸsŠQń2ݶM¾D…Iė=Į-©‘ē2;6ö1•Ņe}Ÿōę,Ā&æ3,Š›H@ī pOw”æżŖ€3kžY£ÜÄ ģ9¶\":fb̓$äžĶÜķ?³f́0;ü@ź×ŹØd#p‚ŗ×„„/H!żuc½÷ČŸZDʽu…čƒ’$łč‘œĮ²LŠw’Ązųłüfų“1YHźˆ…l¦R¤”Ó ·½õ®ō&Ž­ŻķŪœē•ł%GŖ's¹ĶlbāGˆć% BŁ/’mōküŖ0!/iÆ&+Cżž™ĘCōfzēnß$UČnŹ”¢j’R6É-«‡?@z¬ź«%)&Ö&<.pB$0jŲ¾d¼ØŌÄ 7Ŗ&»‹'ŖŠPśrHT8įčąCĆØ2móŖ6ķ”I4%ļ H„j»\,+-ęßšęZČĮ\S„½žNčß…ŚÆ<[H7jY=ź7„Ģ2¶»I¦„Öķc® ¦u±Ÿél82ÖtųŪĘ7‡óķ7j šWD!™}Ī ;®čænŗ’D4TåÖ¶ngø}÷Ū2€”÷šCšBÆŅąDJ»P­©ƒāԃ =|ÓÜxzÄ1żČDœTŹJ1Ö±©Ę(ūÜ*Ų‰ćåž•óylqµ6™ī—zź˜G„ÅCmŸ3¢yeņ'Ujłė¶HB~^ƒ3‘~|Ś—2Å6DŅKąśę£3hķ jz “?*įø^L¦Žššc~”YT–1•ĆÖćįB{W‡#Č* Æ®ĄļŃ4‚AUvēģć$EžĀēõ8h¾§nO¬Ō§« £lAųY#¦"ļÖŁNē:ŗ%^ø'F¹ė§ ‰f,Ÿ”/ž3—d[ł»—_;©}ņÉHOĄĶż$ކB6æĄ2ō ņø$=ŹÜ|,¦‡‡ž pIœÕ 3„ģhļkŖžė6bo>XɅĮ§’€øų YŒŻønYę?~’n–ö0’ņN§*įLSs¶½Ņ²^Pvʉßō§Ū1ā5=ƒļW ¶†’Ę.‚āh±ÓĄGŅŁ%>tŲū0µŻhcāʗˆžĆS\óčōŸΈć¾ņcR¼Ś±ęŗŚB³N`åBźæ"ČŖā¼§5…³€,Ÿ6/8Bź ˆiÖŁī.šš& “hā——å]œ«emaūüC+ Ÿ¬5ę e^š†5Y)ü:S›p3ßÖģȄ_$'k“ŖD"+ż!¦¤)%˽«_męaŽ—‚ŗJą‹ńaŌ\:°t†$½Õ ø‘'övĄ Ž`żøĪ,œ¬éfūĖ“Č÷“¦ķx\Xˆ˜»/‰ĮV‡XźŠ¢&Ŗf=źl¢ŠVµԈ|ČōQšĢ‚ø~²l7ųB-`q¶_3*¬_-ō%?Ƈ>%ץ–m±T·&Ü_UĄ}Ūńf8ʳe.­å(gœĘWM€[ ?%Ōj0Æyo:Ih‡Q±¦Ļimq*05Ąź…@žx?‹źQnę–V¤?YčH• k^£õł:ź<MˆA%N_¹Ū•ZĘņøøĄ†žV­.Š·]qˆsWSf}vˆ†ķ[ž"e“8¦’ńšö“GŚĄėęYöīø'īįµŃ;X»‡µĶįJ ń* DÜŖŅ’Œs‹ŗ¦*{0]i¹Ūp§ė/%x÷ńåüĖNEp눔“}ģnŸ6'¬G³\#Įa½¾7<ŸėC½ü—£ŪnŽŹyˆŽ{DGŁ0Ø/Ÿ|5„F1ģā#E… rY䎅7­"eĻĖü“_•)ÅotiOüUūYŖm|ź™ėä\zŌ(Wżpīˆ&QKŽ[)Øėx|&rhe]Ģ#hęBĆ:"ńī‹}=CČH³©>ģѱB¾Ņ’^7Œ¦…Ø’°x|“’ ›Š·ŸZdšÆó¬e9ØyT:ŽyåmSŒR†²ü/rƇZB2NUķÓ ";·¢mø`čw¤Ó~Ró kÉ „&4ŠB†Tķ_ߙŽ„‚>÷ŌVū±ŪN&ī¼”ZĖ tė8cD؈A†s|åXBM`÷ōyŠåT+5$¹6½”¬*y¢!$ųr>|q\4ŗYĶ10Ż\Ō3’óó*’*7¼‡&šwĪ,{’­g–ü²ײię‚6ŃpaųˆéJ ö{^0x©ZFōi@šDŸĖ»ó¬¾”īGĘKł‰ņ섲 *Į˜ō¾Ow،SI‡īėļJ5Ŗ‡Č0™iq#ļm=ˆļ‘¢“¦VÖVzøč¼ŅŁķ&x wNXDõK*8Öµ˜—K_MŒŁg_-ņD=Īü Ų(ŪÕM„įpÆąxYXÖn9HaŸa –j#C²›ļ­„kæ} ąų Ņr{‰ķņ³üŠ}F?īdB,å#5}‰ ×땾 õŚ„³<Ā>(ÜųÓ}!C„n *ˆęqGFÉjŖI•SČåiĒžO×rn_æ!Ūć#«G Ł¾ü˜Ź;ØśtsZõjŚĄR}7A”“k¤²±ŗŒe«ŪŻw@õOąčGĀ /L ¬™Õ_9¼q"ŗIˆWcžĮ²īPĪ:C oyQNOözƦ>„w›Ģcž’ F ¹ßW½Zš3Õ«ŠžŃ1öŹĆäs¦:ēśßõLĆŠżb~DtūĪÄbzĀ<RQĒz¶ń÷y·¤öB‰ŅÓŲhΉ°:/ā©{„™2B{×:cNƬ~;툭;Źüm)q‰Ņ^üĆȜ p÷eM¹Jśö‚qu:õķšMJH:Æ|ęžŒĶˆ †‚ņ±{Hć€ÕboĀšT–(’ÅOk’„"Ų¦²[ŠT¤£k¼Ąŗ8—)ƒłć)¼ +šoéŸlŲ©ru=lvc‚ MžvkUØź€ņV„cŽk"¶ÕķĻ_݃/HD ž|‡¶aĆ;Ōuµ‚G±ą¬ß-T f>tŌ ~=)Å6å•OÅć˜Ćb„zÆŌ÷ŚŽl£‚‚ó­ŲŅśōE•4zM_ŒG#&÷‚}ŖļĶ:¦ |JUčq¢¬Ø—)‡ų‰Bŏ2(s•ŠÜ2ˆĖoȞ'ń»ÓŸT3IÕ$·Bčͬź× Ż_Ū&I£Õ£T«‡Œ=¾>d4ča-wŚć ;O°n–sߞäū£rnń;@e<˜%Üā{“³›YjÕ)QēŪrx{<{B-øUĖł‘Æķäž^rąŸ‡ŒFBD’—ɆµÄѝ*O×]Č1ąjWMķY|Ö’8ų'õ`ŗöeśĀsĄĢŲ›d‡ŖäI„×]?~žėEђ‹ę$ErbE lmCwšŖĄ±(G„&Ō"kU,Mč#Jīć"śį1ŁöśO¾/pžV±:AØHĖ·Æā¬U(Œ"~S(YL— ‚ĒlEh%CpŻÓU!©¾ŻūS%‹Ø€;ZÆg ¬VęÕočŻyĆĻõÕ]Ń`ūGR’ØĮ#а»E~Ļść¹YNžhßdŗ®7}ˆėh~ˆÕšyŒ+÷#ŒµŅpݜžŹvŌäĮÄp¦iÆHĢeܒŻķ5Ŗ“Ÿ¢9iZ½mю 6ӑćéŌ\C²é…Öę(õ"ūedāXP×gźBĆĻE6˜U^Ż¤ārkbō/č9jŅI‡ŃJ4š±é=ĻbiRx$šżOž'kÜ&ƒŒW`5ł?•ą€&†ų  žŌ+ĄŖK?ęÜj -l–īK¤E«µ¢aģČŅÄśezć8™/ °:ą>üŠØµÓŅrg½IßgŽe.\Pa\~3CÅvyu9@&–ó>D˜’4-]žäĖśŻQ¢;éCŅ×ļś[.BFtÓüųŠß6l° ĀEø¢¤ż&¤ń”ĒQöżć;Ėū ,n³Y–‹øAµĆ›\{mŠu ąŠuź_y’!$Wo=ćēm7ŗń›•>Će%T°ä“›†«zOv.€ķįrŲŽ§a©&äł»Ķyg]=8°…A‰ŲC^†š8*S‘†ļ8ķN•+×XÉö“ŠåķR‡A$č¹Ž×Ŗ‹ēńƒ_™ū"€&Ā’›?S†r„–JÅy^ļē ?™Ų³B’ącJ 2¶ .*YubZHUŠz®ĀIģHrŻü6»=‰Ģø…n©÷s«vr/Ó±a”ƒģōKA{[‘nzu5ˆäņ›õ¢oLŠ(¼’B»ėŌ„,˜eķĒŅtŻD*ŽI÷ WžK0śr·–i®1›[Ž–ķ<Ŗ}²öåā,Ś3⇀mķÆ;iČÉ4ĢĆó•J‹I·–#øĘ”ŠÖÕÜg<ĢŚķMdņ”Œ/†`ŲŸł²Š|ēŲėņĢ?K¬)`E#Łk± ‘ūYeÉŻFōmāē›:¢0ūŽŹvŒ‡ņvtÖY†™_E"{¶ę›»bVµwƒ°Ń'ĖĒ–;ŻAČ%sķą åĆ#ꦑ©‚¶¢ϐyļ1+('=KI$Ā4ŖÆż§zŲz”ČҊ“q…Ž:¦Ø€÷Ņ(*b»ICĻó"ŠøÖ9÷iN¹ÆŌ|÷”^I& D±©¢,÷'8ĘõŖńØ«ņČįȃIÕöŚŹÜ•6T„[ĪR”4ÕéœÉ±š“ęńšżĆKŽšT:P4Ą‘q~nw\ł‰ŲŲO„•4€7Rš¹§(ŻJm/B'ł”E;†«`Rw,*~D–Äš@RŻ>ī±*•nJ‰WUBiy× zn†i.”żƒ‹n%j*’ Ü{“`J”°&·#®Rśp³ØB$Ž&ƒi#¹³ AdƌSøŌœģŸ‘¢Mw+Z©Ŗ\G |$Ѓdbf³ī®#6KįbòhBæqŪj”JčS/Mż;g[:}aq,Jr8V `"ūś±†ĮÖóż÷y0Ō }/…Ų^øeæ¶ Ēón¬BŲ,“³iķKƒ‹ų®_< 3ršĖŒ‹ĻBIÄ;Ź727žó®y¹!•@ō(äk“›Ł “ˆyÆėX§¬ƒS®žt3.lŁń·Ž}Ļ*;£+ ”„Ŗ}·yē½£™:Ft™:ĢzH¤‹¬5é_ķɳŽõÕ$éž8Rm—Ņi·Ś„ča7uĒfK7d’’‰וžž{š,³hˆĘ×dčįŻų.Š4å̐ŸŖ‚X<‹ÉY Vø D’Y–’ LP-¶ŗĮ‹™2¶é§āZ¾0“ź9l~Rä]_Ü% TŽŹœ‰ƒZ˜œ\×*~[…©ŽM® ŲåRu”šŌ»5ļ$%隘+uĪLwupų!¾Až ŗh‡Cą©Ęa}Uc­Ń‘ף—„,óŹmlžÕɋņŪv®×Ŕ[>ö $YK“:!ĮF4:„ڶeUjP]¼Y8„²u,r/©Z`{ńN«&†į*źKfG7µ•ugŖMÖJEp>HŸ/†ĄQ ¹ĮH¬ÆĶCaķ­«aJRµ]l/Ē֊\‹'W„4§Ÿ™eżˆ’.Ā…ćģ=%Ī”ŚćDp¦ØmNż.öņ4Y”1&Ķ-Ńß’j ŽśÉ^’÷|›¾ƒóęčžS6Ųžčy_z9ŹSśSE&ć,^wȏ#ŠWņŻōĆ$”ö,» ’÷¦P'vv°TŹąæēI“ƒ©ć¢ó,>ł-½ėń᯸Œt¶„ÆŁž®™4lxc³Ļ&SK:xv¢7؎€d“ą`$”»ŽiŠ]°Ä‚čB„ćø(‚éņ‘:tψeŽī2H“éM!ĪRDćŌ& łēJZĮ‹sĒ ÓŽõŻ¢4A‹Œł†ä®OęģBĻ*dČź¼›oy†s};§==挮Ü6$$¦Éæe£į•ĪŻrŪ!(ūŠĖ&¹SZēźūwEīį䦿ć…JŖyW3éę &7§$ÓėćZ /Ķõü ‚„’LJŁ0½h¦˜hŽ(§UJ»˜ÅƒÄ•}ĶPĒuo³œiĘl0ŒG²d“*Ē@›X‘ß!ü…¾©kļÜUĘ\ŗŒ/(ųy]&Ū1ūŌ˜®é£Ź įX†fšC˜ źĖOćxéž%J( ØVĒņ‘zčģ@uҲŸßżĒćb«²Ļ§±Čæ«żhgCu×ƤR“¾§*`c”RU¹Į=ć…ģJ6čaOž™^b‚1rĄ “ó57lUņģ 4Ä'œ¶Ļ€MŸ¤Wb§W‚å šģaĀ3u8 ēēs9¦Aq$BlŲߚ­Vwē7érہ+·L)ĄĆŹgZuuf6¤sž ĮįvŸ>B©Ŗ”vIÆō«õ¼·Oß>Õ:kóÄyČ&Éį` ~0Ič³Ę§¹ń”Ŗ?!8ŖĆ/€šŌәb1Uk /iČėn§+IMēȑ?†چƒBųųĮÜo3ٟr«Į RYĮĄ‚„Z˃×@ķäŃŹ×ü}½.Օ“ŗh’Ū{…k ŌøĻc³ģü–YŠ!:o6`|kSU@¶tę;;dEÄ9°Čąq€­°ūžµ¤ž–ńģ8’<éľŗ9Ļ”C–”yR·ÅķGēh*é’×ČjT¾ūvį~5 Č3õQ" Rž NƒŒĻ ©ņ÷ø“=įizuå{?ū‚r̲7ΘÅiRp*sŸxP³ĖTś’‚Ó4āōJ;žīĻZp/Õ÷ĒÕēé<ü„ł[}ķ—Łr&ęBŃ(5Ī~ł§j/č^%>}z[–ŗäÅ™²Ļś®ž(.—X2^eZ›óĮTķŁŁömȶ^r#7*}"-‡y½@øĢ„9Ģ¹Å†Ęš1V_ ³Ēņg(¦ČƒÖ}’hՍīŌ*<śV1ņl’G\źg”aܵX-0ÓvĀ[;®±±^½Ą²m„łł‹ĢcµnųŃÕÅŠĖÜŚ™ĀĄĆIõå¹c­V^$o³å¦,FZĄźFĶ4õgJ\õƒ{„šƒėĮU6Č_Į¤x¶ —ėś±’y„Śų±.G Ź¾j°²©w‚ņŪ0äQ <šuuU³ū-géõ±ŃčŲ žiĶĪ„|üØØŸ/©tQ³·å<^łŖõR§B^ł†š{œQģ7(ĶĘś›œ†szŪJŖ†±Æ@}nń*Ī–J䤩"‚Ļsg«`V’¢ń]żJcåƒiļ½÷ˆĶėėnæ„< Ž7@„¢;™.{šÖ·ž(źé:-c[żÜśĖR’3Āh ,æ¢Ā”–żwCoaYKßž¾ģ”myLšCŪĻilÄ@^cœļ_Ōw!Mr¬(c„ó„£[ēuƒµd’°O«Wfc|¢O›D'| 0=U×t=óür龨÷€Ś‹ÉĢD{ĄĀś$zqÄ<‘jĮ W ųµmaŹńMb"^ °„‹()ĮÆE!ÉW’>n ±ą˜(*¾ó,O³–¬Š¢źŽē·‰åīņÄš˜ļ Håiöäé;ƒö;³ÓJīŗļ‹Źģ³Ü ēµÖhķcĘ Ī@ǹp²Ģ ć-xćhoQŸt(ŗV‡!Čn\’æCÉSŌē.5vˆŒŗ—]™!čhĮļa؎ę i}wō±pŹ3‡ÕRńĽÄYŸ$Z8›\ŏÕŅņ“<M“0Aś#ŗµčī/@:ĢuŻóļż5&ņVēj"(»€9=^(głOń…žø$Š &(®žæcä5żåkžoĖČ?ó° Øét”N+Th}(Tķ0 µ?Üe]rA¹ōüŸŚĀ:H)Ņ !Ņ…FĆ>ĘjA”Äoé`ā P`>¢uā_Ŗ;nö9]’H'öäKL–ND]»©}ff·„Ģi€r6ݽTÓq®„oŻš„E”×=ņV -Óā24¼%ĄĢY6ŹƒŲÅŻŠ ¢Ó±Šj’<+ˆŸ. ķ„ōV¬ƒƒøā©ā'ž1WQ|ŌŠ«/õ}7Ī/Whv ƒeB›Ń=GŚ3™Ą‘•¦łcµĒĆVA¹ńVµ%Uh¤~׉Ā،±ö-Ź.ļył“‘ß~ˆ7­Ēi›~› Kššó ™ADx™»o…ėįŠCųsÓRłlń³bÆ%¾ńę kü3Ėn™žÅl½›ĪzāGQØnłö`‡Ń<]yżFū™yČ{¦dø’č6]kp§w{ŲrŃIźq‡£Ō“_K'ņu“>d^2ŗT0_JAQʂŠ_ŅŁåxķ{es_Š£æ8Ü[6‘s’ł,œń§ J.Ū“Æ ”²udēkå¢Ķ|ü`żßć«ę@ĖT’¶Øž•±X–1PąrĄ1XO ĶA•Č.Ä„³F9ND¹„ŃftJ=e“‚H,æ; Ę;ķ6] PĖŠųZåH¹ęčqók­ā7ų¶:F“ DѝūN6„„ށ]Čp"U¾BĄŌiƜįm®²ē’lü½¶į8ģ³…}Ö n‹×Ä9žüœæé‘Ćņ§ - ļU ©gRo2šÄpĀI$7g¾ *ā×kģK9j@H— ī‹!+€” ¬›¢ŗ®ĪāZ; NR÷hKK0o¼*ä^ZĮ`]‰°Õ|FĀ@ ņ‹*žōšƒMSSśø+K“揇V½o|8{Fł±ŠXmmW|Žn9L°³dŗw2’zķė ß°¹VˆĖä­Ūū³sĆa18½ątęõfM‹ö6Zu,‰’³Ų.±{,‹Čщž6š]VX †œ0ĄDž DL øžĢC1ĪU¹TĄtDRĢsؚ“%Ż/;)7Ž[¤µ¦O»…|?p³/ŸÉĹA`Ņ±z4ĒÅ%ŹåŲŠĮˆTjxЉ®-ļ lŹö=¦Ł#łöĶ("nXq­WĒ{?Ūõa÷pŪ“RZ-wżŌĻÜž0 Ų¤hŗ_äRž”r¤2ļž\ģz³DGrN«Ÿtģ§æ]õU̧Y¢ŃYŻfף\:vö°ņ‚kE'×WĶs­9oęZY?U c’Q·õ6§QQ²\÷uRĻå^óÕ3ø•*€ŌčJg5%%lj©+ż£&üSŒ¼ą€Č¼¦Oī™± iCß¶•KE1’r\™ķ»­vņō^±. Įƒ¬RipgßWģ©źK8å“mēķ^˜“¬^m_ Ō?ŖÕéĻóaQrP[&n'ŗāD퉭ZÓžć„Ķ@qÓ“~ņėōōX€«X!yźæ¹pżČ‡\Ś2‰‡AQK{™9‚ą*ttҁåĶįÆy‘6EžŠ5„ŻŻŪå‰X䒍lš”ū ćJłßŲ¾±?ņ/³śƒVÆ=ōې¹jŽāClnk&ø•ń‡©#7—¹ŹĢ~I…čė–Ę™ā'Ą0š6{¦l\@ʵ‡ŹĶÜp<ą¼gw8ņ p3Žfśéęq¶²Čż¹Ø}ˆÕ¾‹æć—‘ šŁCflUяę0³DĀ}ŸL—F’U”¼·ƒ­7cq䁀éüś Gy° µēł“·²vO é_n7ōʼÕŌ€ÖjCI*„‹ßN­M’ß#¶Š€Ÿ²wāÅE&µ”ļ¤lŹŻ#0ō€ š&‡«Ē‰+RÜ!J#:vłTIFså×-aēĢĢX1ŹĶŪ’3eb$ĶAŃN%#Aøc5™Øję_ķŁ—@ØJ;g°Į³T§PBš·c2X(‹ä€§Ä÷ ›Äœi’”\Ļ×4ū­ŸĘ…>[6łōŸŪm÷l%b~iūÓ“_5V“ˆAŒ6hæ…_Ø/© ˆYŚ8ĪĘet„÷5„sCvT½ £5ģø3{fD‡ ‘'ó0ń÷ļM4šj_«Yó×ĢQ=śgAlæĀ/ą7÷S‘…4® jź“’ŽŪ– Q Žæ4œj"ž$½žę36S…E)‡ ŗ'=‡D5~bAoø*ö¬/•`dŁkż96©óÅb·“ĒS•¤X…¾e±VvĪå Q¹*ź“ ėNŃ„J=ØŻ ©+}Ž7Ą™"»B#Ć£o<õŸ“6¶šT› Äʜ%?žF“܍ZĶ|ŠiģÜ·0ÅB»^0Į?’+EjCQō ¹DVÉ‚žŚ˜?a…ĄėĮ4+Q:ehžÉ¢Ņc…Lø3ōėd22§¹„:8Ł…•rž īĀ H4|õ³|ˆF Ūg^śn^ÓƒEŪ.%Æ5—”~ŚN‚āÅq£z(N×k’E£PzZŃpåxęŹ5€ŁLARp#ųaŒ[_0b«Å”+KlŒ›pę‹öĄ[Ÿ'Ś\ĮÜܽŪ]¾™kżŹm0ižX{’čŠŪą””ŅŪCœ‰*µ”†<|ƒĒˆÆøœąŁ»”ń~“cŃĮÅXŠAµ5”ņĢąź·w٤«7»ŠM<ŖŒPĄR2ƒ,Qæ“€“”kiuć« O²ŌĮ®ĄV[Ų3õĖõĄäm>āK9§‡b¦•ōāś‰HŁ%IĄ?źE[øÉŽPś»·,g [ΐ!ÖRäŸnš.Uf÷ ģä‡ĢjqM†į¢zUÖł ¬˜æ‰(»+.tĪéģktd£®:(~»™_ IMõglq*厛õw ~žfé¼×ä]I©öY-šź„j,ŲŅżś›8äÕū..DȉŻ%³ōˆN[°ø@Ϝ»zǰ–Ąx’ļś9ŠŸŅö3ĀT£wēÅĖ?ŠjA’b§ b…m¢éĒtĒžūx™ĪēžFŃŽLųšĖ7aƆń§c7ų8’>’hX²†©jW÷F”r„”ŅūņEė„ŲĘΐźƒK™WE¹uś|“ĻŃH]Ž9ćBĶŃNt’³…kS#OÜ^T”24ћ™5•łēé‚ vP6Įł×cĢŹk]t~b)śˆż9œ¼Œ 2šJŗ•T=üŽ]r”d»›ųÆ%ƒ uŻ¢X™•MV˜1÷šä¬’cć≱Ż{Š_üJ#¦“§Pš{”j¼£ńf<ŒÄ½“/Éŗ²¶ćķUżepŖˆŸ)"Ż7£œóŻ"śŲąUp¢£Ė Xåm@ōĄ¼°VS—%X-4ş¶²B’Ŗø“µšŖI7߀é endstream endobj 791 0 obj << /Length1 1728 /Length2 10154 /Length3 0 /Length 11252 /Filter /FlateDecode >> stream xŚ“TŲ-ŠwwhÜ4Nćī4$84NCw× ĮŻ!øC 8Į īīš@p GfęĪ̽’ÆõŽźµŗ{WÕ©Ŗ}j×”§V×d“0w0Ė:@œŁ8ف‚) N.ČĶr”ŅÓkY;ہ’2£Ņ뀔NÖĮHAĮ&ĪĻ6iēē8@ŃÅĄÉ ąäää\@ č?PA€“‰«µ9@… č;”ŅK98z@­-­œŸĖüē/€ÉŒĄ ńæüć8@Ā µ63TLœ­ĄöĻĶLģšfÖ`g’JĮ$låģģ(ČĮįęęĘnbļÄīµe~ p³v¶h€ĄPW°9ą7a€Ŗ‰=ųOfģØō-+k§?ķšĪn&P0ąŁ`gm†8=Ÿp˜ƒ”€ēāMe€š#ņg°ņŸ/Ż €“óļtžČņĒa33{Gˆ‡5Ä`amØÉ*³;»;æ˜@ĢšŲ99<Ÿ7q5±¶31}ų£s€¬Ä+€É3Įæč9™A­Ų¬ķ~Säųęł–e ęRöö`ˆ³źļž¤­”`³ēk÷ąųs²¶7ˆ×_ĄĀbnń›„¹‹#‡6Äś XAśÆgź?6K°3€ņƒxąw°»™ĒļōZŽą?œœæĶĻ |¼Ļ$Ą>ÖąēT/'W0Ąźöńś·ćæ*''ĄÜŚĢ` ¶“† ž“żŁ ¶ų?jķx |Ö'ųūó÷?ƒgy™;@ģ<ž ’c¾:RŅj:J¬2žŪ')éąšbćę°qńr@~^ Ąēæ³üĶ’?Ü’°Ŗ›X’ÕšŸ„  čO Ļw÷®©‚éƍaüwU‡g)ƒL’(_Č 4{žāüÖ’Gž’d’;Ė’Mł’ې¬‹Żn¦?ü’·‰½µĒ_ĻJvq~Ž ‡ēŻ€üoØ.ųĻMV›[»Ų’ÆWĮŁäy;$ –v_£µ“¬µ;Ų\ŻŚŁĢźO żg Ļéķ¬!`u'ėßo €üßó¾™Ł>æ'NϳśĆ~^§’.)1s0’½w\¼|(ŌÄų,/.^^€ēó‚šƒŻ’P6€ƒāąü|šLĻ`įEż=Q>^‡ÄoӟˆĄ!õpH’€õŠs¤īßōŒLžA ‡ŁßˆóYĖąA.‡Å?šŁiń/äpXž ņ8¬žŸ»µž|.kū/ųÜÆŻæąsö’*ōÜ?ä_š¹°Ćߐ繬£‹ÓæüĻ•”’‚Ļ•’ńņ<v²3qśWkœ|ēĮē—?ąĖĢ }~ĘžXØēYž’ńf‚Įī`3ŌÅ93”`›ŗą¶Ū 27¶Ż1‘iś]ŻTf6ÆEh»Ė=&Rsufą:ōZ"ič öʶ ӕųÕ/ÆļŸĀZ^µžō~0ŠÓ˜ÜmE]˜ ģ/ü.QßGBΦ%¾ēżė·N€-ügŲNEśÜw.˜źłx·n½rīõ}eĖ#”s»ÆöŖł”Šʦآµ£ōŠgčóL³f‰iŁ(YpOݱf®®§qsƟØćXQ}Ž¢¹‹¼ŽlpÅÜĶz®Vhq9u‘Š‘¼!¦€æĀ™dš’/cG‹9+¬¢›ńl¤hėæ,Ļ(TŹĒõ[U‘*.0Ļ(kÅtŅK¦ˆÜ§2^ƒ˜‘9ZVBļNĆ:Lį_ł"ö*•0ƒ®÷Mļ sŹc!+i„ż«^F<ßę‚?b¾‰Ą.£t&Ü$ Õk`ĮŁpsśė·qóUÉĆdü) ±xĖbO'ė& wšŹŒcÆ@„é¼ģ‡ÖI¬AQŠīÕ肯{+ć'z>ūć–» ßź‰CēC;ķ{Oź2Ę0ØŲO1 Ŗõ[ļ³×“Lł2—rŻżā­č8Ū _ĻšńRd_ŚµhĻŚ¶bvT½DsöXjyŲŪ^ÄÖ üt ķˆ‘_'ŃļWމ§Ķ9Ś7Ķēx Ą¶–¼ŒÉl„uxI“Ī Oī,#t›Ō+–TšÄņžš0äåBŻ:0ĒŚžGbŌv£U+&¹,ńŌ–ŁńC“złˆļ?¹'ų1‹}†/’B^ĻMÖ1Åē7ܲĶČ.½RŖ0Ć@UķJd¹ĄXŒ–#ļśXø±č?ÓC®]ųd6Zµž€9Tb7ć·™Ą7e•·š…kq½q"ē%՛ WķĖō-»6uozffLūӖłņ, \\†6Ōż ĀKاŌ`#Š‚‘ŗų4æERo/Ąüh¾Ž†ģįɔX~…R¤¢0’ĮT®Ņ_õ&ųÅōčO©āüń–š”ļłnŸ÷ģ==œØVūømĶ&ņ!Ō%¤FO\Łä2¦kL/FŠõJ€āŅMŽŪ’Ā’QØ Ķ¼±yÅnŲe”ō3×/ōķĶ‹+—.¾­T©¹÷ō¤}zZWŒ—Q¤6S09sœ*eåĒXV˜ÓAµĒFŽćń żéœé˜]‚!žę˜†rETĢ`Iō÷#ƒtåz&³5ņ(q~–@B…W‰$ĀkBˆ)?]½…łfäwĝ£ß½ŻŠuT Ŗ¤Æa¢|}éš4¼ĒļĆŁ‚µ+—ØVZŖņ‡„ā+ĀANN6HčĘfMæßص‹»4ā#ø`L&ł>Į½blĖ¢…ž‰©ŖŌ »‹Wcķm7“L呄"5·“ ˜E"’ŪJĮ:›DzA§ÕÉ(ū³‰²3vöå;Qō°/įÓ癢Æ:Ć>“%øWķ~łģ IÅģ µ•*©±x§Ė¶˜ō+ˆļ]„KŖ#+ūµ„Ż›\(„•3Yģ˜· W‘óāŁ¢™lµ›šõ;ŖĢćšVYv•iL/āŅM”t äŽ4¾J̵OOuŒU1„»Ə!—ī(ćēa4Üo“ŽX7ć5šŅ K›v­$4˜«0ā†rœ0Ż™Ļھ,9‡pP×Č !Qåæv!ž{˜÷jĆ>¬7“y‹Ś©CMÖöO™Ń<V¼ąø5yÕphÆ|„BŃKµ&$>ʍ"’Ķq»üzŖŠ Ōą§PUµoÄK“ī&0(ĆjZŁČ:»l­LMԊMo:<^Æ£“—PT{ĪÆˆĻ³ņ/½#@ē=Ž€g‹MVną5‚.ŹļV¾³ ,®ę „ībXŽV«Ó'¼wT˜ėLīrĻ‘ųeö½/uøeJzyÕ¬ęs¢†fk:ļłśq2oś_žĀĒ#a®°¾†ūŌØź+§sx!8ɬ$yYöśƒSÜ7 ķāTŻ2?į¤ÕŸD[rĮtų WĖG†ĶÅ.4½2Q‚Ū¼|[Ś*7±nĒžĶ†§Ń„ž_›ĪY„Ė]ŌFœ€¶é^shWу9züöĖ„)ńsօOqķ‘RĖXžŸÆ 8^/GŚUJgQä/f–ÉØjōIū+?¬ģLäs*K֔ćŅ*īŌĮ6žv]<öœ5S8 Fų0cÆCqqā”ųß(KӘ$]Zģ)p–‹ĶŲ8÷0 r0E)dĖåå,!!Ā 7ņE¼ KÅbĶ«+…^n3ݳl¾Š„7ųU·‚:w={:Ø_|ģ’ÅĖ©v¾Vu”ˆHęAŌv20²Œƒ„ŒfS܏ŗį ØXŖqÄ3YHFĘܞątæH<Ü1ŽCŌéJ:c‘Ė ūd†MŒ9w‹.µœ2ĘĻ_Ēf<°H÷¢ŗRÅuéÅ7Bļś§ŽØ1ō*¾×Ō½–“óń°· n8;Į¦`ó؇Ŗ›b££D.ĢmįÕÖ2øšZņŒn,8Ź0w• †Øķ—•oéĢ„µ¾½™Ć¾CŸź±émŚL°öVcߗ¹™jµ8õI"y~؜Kl nLē²<…+œ{Ąē+ĮŽX5E2ƒ¦R}>_ŽÓ%åÄō“ Y‡¼Ī9ćl„må Ä(Qt«I±ŖJ”nŠ€ˆ,yEŽu ŻGG˜ÜzŸ–²eü(kŗ—œˆ°}Ts.ēb¤‡ƒćS#:ĖӋØ:©>Į­!ųÓųĄ~’ÅļģėŠ[”ŃĀć“×°FłųŹmBųŽGMi±?p€Š©™É Ką„C6S…ølō„Q†¹Ń[Üȑ’¦k†€±Ė™°Ą›ć'POʁŽ2‡ØÓ²]]|¹Xü¹ē< 0 ›ÅPև”ŠV ]l/¦ŁŸ ńįÄ7™Ō¾Ē×ę413Y֕\§@”tŗĄŽ¤ĻؗŻsł&02/š""|Ī{Ā”ŁŽ‡¹fåĒŚüä’ŖĶŅÄPęx…»{Ģń6®œųmB æš† ø˜čAtW®w­Čę¾ŚFżkõKŻż€DB„*ž†wG­·6övØ”‘éÜ9Ō+§$ h|šwŅhk”Clc—^ź:^:Ņz³%wŚŚijĆB¾>Ė%XĶ8·ę¢Į‘ƒ¤ČƘ#ÉwT–-H°vŚ®Eæ"sXqźi^Ń{ŠōŅ•hĆĄŗ7(ņiČ„\7¬Œ„¹ŚÆķŌŃ_Żõ“ęŌOįTˆØKł?¬q­ ĢŲžŗĀĒcųއv(®•ćŸG(RH¾j¾²čęh‰»F‰üIE²~’‘ ¦ÖÜņęŠIŠžū!šē¼’³łvĆģk›”>²ØĀ(ń¾xYCTмe]ÅŠēŽ Ō\YŅ„™É-u°0+§Č‚u2Ó” ōĘ?rļwč,²VņWWOśŽŸzcQŻ»³zĵVSųÅzšĒ?‰JOžē99ŹSÄ’žXąkÓq°mŲ`>Æ­ļ¬ąc{–“›#M¹ĶYÄ‹ūJ”1cM żOz/0k٧ÜT7ˆ~IÕĘŁīzą•ū®¹ČÓ2 `Ž«ņ×\±Ö9ˆ(Ń,…€*¤^ ń?e¹)P¢ƒ4Żä!Ž>ҵĄc¤ūļ—W;&…Až%™Üb2×1ģŲ9’˜°ė»)f挎jē%¬Ÿµ)č “"‹aŖČ ~5ģó$¼ÜŲä˜95„ ńŠ‘‚†N±D_eŖĪ˽±F ŖXæÉŒ³L uń 6ĀLĪȏŠ2}mpŃmŸ.ņōĪŠiŲÖQPŁ®¶`Y/ęūB€4b¶_µd(œ’©Į;źŹęVŲ«‚µ~w‘Ģؓ’Ż:Ll'?PQŅ"$—$ė;…ĘG8$kÆyŚ+4¦Ų\2Ė>ß6T¶¹˜ło!ķ£ųā·L>GÄ{„Z™ˆZh*)™ĮꕵĘ'Ž3įyʞQ^Œ™įīč'¬éńØ_‰„;ĻǃTÓ»GÖķä)rW²zDNœĄX5#[#/ˆ®ż 9ĒŹJY¢ēk:K•ߦ5õF;±˜Y^‰/ųŚŪZø–H ¬ą‡b`€“߈ĒāōĆēZó;6•s}J |„\^Ļ_WčŲ…ŃDh.¾Ļ¬aŠżd%¶ōÖ>ÄQŒöȽ ųņ…Ūž˜ƒgżyFÓ ²Ā–‹Ŗ¤<ćlżi QŸŽnAõk¾pśėÖ ?§[Ń¬ōc¦egÄq;°kĒi15¼ńĘ!bļ’hæĘi @Ć#\æHź\&—9€a½Ė^%‚žģÅvīH'Rŗž ‰Īs~G©ŠÜåbÜ"EÉĻĄ«kœ« ß»ū'>” ˜JWõ-f<¹ź‡ķ]ubz¬: śX5ēæŲĻ»ŪÄvm¶H[yø¢Cs9!›T>ŸÄĆĘ›ź¶ŸJ/tńöK˜hļĘężkŅ£ę~²ęŃ }ąŚ³6J+•Ģņt}qbLn u8``Ęzą0Õ܀Ą4|×Xµ«BüÜz“7Æ?:ųˆčŠOµ|saߢƒZś²HėmŪbĮāœIš c4f©c±iL„5—żŠŁØqź%£’Ē/źĢKÅŁP–iœMŻĒyŗ\4rm/ ¶ØO%“’d€œØPŅwK¹iłØ&Ęj#Žļ¶#ĢSņÖ6ĒøIį§{Zč6æq\xO©hÜ7±G‘mT£— ńķ©Ü{÷åōXśžūßč\ŹŽÖŚ39“->!ĪX’¦ŁÉ`¹%45wϳśGł9^š/Õæ¶Ć•~ķB…ŸŸ-‡ö™Ņ”K\‰±ĮžŸæ]·ÖX~ķ.šYā E¢‰›¤ÆA‡˜ė‘"3½‰ń>ķK™Ķųƒˆ“ųD=”ZżińŅ@Ė»wŅ˜ę¹”«©¹/Ró!žB»J4e›q—ńŲ ž‰~yŻ;{K%Q0'›µ`ŪĄaŖµ}PēŖ°z³7ׄŸ÷ w ÷" VŗvęŪÅOŪ[§ä|+ŃOéĘ!q9&Ń„ź5L¾6ōźU”̓C¢X؍rŗvIŹ“bpiYa;§wÆ_¬Ę•2tGZ¹\Į0“SJĄ†ŅaGFĻŠßĒ€ĢōÕŃiä˜hÖŠū¶Źī~]5†n! uuć'MaĆx†¼ ŹIa„IŲń'kĘ_j*ÓŁ’L‹æZ"iŒę”[ʹ‘wÜŅĆj;ŌŖ*‚uśĄÖ㨅XŽ-U_—ūN5r›!hL{yJÕ‡µˆyصhαļ±nhŃ?Ó,Pśmć2m¹$2Dwȃ ėVH4<'E,p"“™o-m$VŻĆL%ÕĶ…«·‹ §b^NScõä¹ĪīŚ/ )RĒÕ²WÕrhÖĮ ~Qł¼¦x»¬Į½y/ĮÅŖdžfĖF–Eę*žķ ;VŽŲōUÕ@i2Šķ/ūTVÄQŽTø§Jū¢¼SļŁy™”6ļ ¦EY‘BƒXyZ=fÅKÖ²b&$g¼Õ£jnK¼B© `3~Ą‰JŠHŒ;£.*fó.½ŅŠQņ”˜ÓįŲDߔ»UIsZ*£™čŁŁÆĻ1œ»P‰ĻżĀ³®b!œ»V,ˆēä2X#kßrgæƒæ¦V÷øJģöÅMĶ…EuąÓĘŻ,2+ķI§`¦T!’å@ ×Pį8÷YžŲłł¼ßlĘe~{€f:"ė ‘8V{dœ~ļ¤AW–©īzu¾źZ‘ć"IĻ`¼El›]ģ*¤uUF:½Įé@ *xVsA³;sō ū…HĮLÜžÖH–n#<”€eœ½”öB“PÓ+ēG²ķ¬·U‘oÖĖpqlśÓ¼õą_ńP īI ¼/ü rŲŁ½—ö§¤c͈/IĒ—@lķl›C-¹Ŗėˆ¢žÆeŚ@A?zæķÕ÷(š²Hø…Q׫ŒÆå ‹"üĆÆę¾ć ūĄC&zĀ&“’£v?JŽņhmįĶ4“xĘ|‡‘€&zžõIh¹²łź Rr»üę4ĀŁ|L6ŪCüēљ7¶„Z¤[d(ŠąĆ©āOI‰Ÿ±–ŸŽ׏–ŸŪ”Šī=Čohm<ōA†UPZ^M•œ•_Eiēķā( G§pŪRĮZr¹ŗ)ŚåŪ¤vՋ䒣Öč\żž£ĘfkĪå²1¢žŃ4Fd°Ń §}=!‡˜+ßņ”³Ż. ¬8·9DŖ\䮞Œ×.¬‡}cÄļ«CŽV¾ĪŽPŚØ¦iXÜLŲ“éüÓāą‹{ėD¤(².+džą°ŚuĄį!ŃQ*Ģs4ø·¤K`ˆÜCvų¾ ¹7“łįŠeČ£ūXrŅæµŹ¼LŲMĪ{ī'Æ1Ž›’ČW‚Ū]‘ µÉ3/AC‡?7†ĮZCŗŌSõ9„BĖÅÆū:—Ån”īć„ÕŪV«JŲ'ZųĄĶōŌöŽĆŲ™×ĒbļūH Ā,æļ2š™™Į蕣ŃiJ¹:‘ Ńö?!f*’÷“Ų‹zŃÉ Ņ0’OLų²Ž~¶?²Ļ‰^/M¹Ē;²ÕŁ$•:Ŗ„@z™fAŠņ “ēƒ;Śu ø;AŻœĻłŅAŽą“©*ņż•hŗō.ÓĮR5ɍuJĖDįXĶÓĖqŃé=ŠæIld!·ŗ‰SĘ śŌ¤ł$ŅL.ŸųĪÅzé„7) (Uśŗ^w”Wb£»'+‹øgļÓ%üĀŚfŽVHÉyW0}%ɵ½GŽc±®Æo±Z‰ŅČI)hĘbN¼šŽZć/…0d1łB1Ż7$Üś;Öt±J;÷Ć ‡żW‚½žiLk]G®~N)‘·H­+Æu[įżŻ×Bę5æā­Öa牆°­Įõ®÷ž ļ:æ®iĪÕ0R }ųĘŗxu]±D ‚1ą+L®ŸŖ””¹B¹„R@)W:ŁK[Ÿą ,÷­/ģ_ŹōHYõĢ Ź¢čUvå”E­ąę@– ü,­č¦&•1;6 R©=mș|yVgÖŠ§ \N«;×äl£&‡…Ó¹xńU v{nźĘ²—Ö™ˆ3J²! ŸĀj,āī·TͤI‹s$3ČÓ,ÖĄ}kÉÖ÷Æ>Żś¦ ĶłY±§<įw|Š aavČ':¤lgŁsrn8÷¼¶ļŻ4ĄŌ …ŻA]š"pµfÕYbņ~O+>Ϲs•#ć“{ī>XZˆćĻžgąS61eķgšŌŅbČšš»x|8oŒócEŚ}:)v@7Ž ŹEżŪ¤Ä<Å.†ųū[ø½ˆ2£ĢQM_‡ėZ‘Eō—ę'†ÖöP-ĶOąN3ŃփpÅ>••`ĶžŻ—#Ø&n~ šŅp »ĆBžėY/ģv„qŅūŌ^?Ŗ² ׈å+"c̜›_WęyÅ%÷”źĀ­\F4†\µ•TŠ7“€v×ZJŲł"Äį¹›5Hyµ ŃÅ/q:Įnn}~gB·hÅ•)•‘Žž…’ˆœ¢\¼ ›“7|“e{%q§ŃOüŃöż;/`C]²TL*wՁ™įƒ#ĪqŹ©z!õń׀ƒ„ A,Žūlˆž^Œ£ūUėrUOĻ~¼˜ #›ö,’;¶Ž"Ž–šv±˜Ÿfń„Ā^Ū uÜaĀEńÕŁ©¾“-†{“Öąś@ÚŽÄrēĻz$Ź(ÆfĘm×Ōį?Ąg°;‚“#׍½„Æ™g¾õ$”>EüÓīųx£8ėEGXqļwE·ń.t&*±ZĪu}}lā(mŪ©}±K܂$dĻÖɞxWč’öiøČƒ,Mf¹­Ū\uūo=lA2wW¢H/yz”-L„®CaÕqƒ‰¬‰„…ēŠ&ŠŠõÄčC9 6· 0^¾“d'XaŖUĻ‹™§=…ÅƆžxŃ/óqńēuk¤ż¤õMŅ”,Ŗć·ŹÅĶ…=ŽeĮW«ÕÕD._$±©ņTŁęiVŽŚ30GŠ.m8Ź(/‰³ĒdGŽy’r¢­Œš'öyń-ķŒĮČ#œCM ćĢØ©”›W2źŠ¦AęD•öĪC·.¦‰ÅT!õ[}ššf7k“f«’”ž`u" !åõ•æS•üO<2ųŁŠ"ī=ūĻŠ“ؕ… ,_BĶŽ·³Xß;ĀwŲŗI¤Į…ķ¤5×GE*RœČ””¼µ5D@ŲžĮ&ٔđxÉ#¹Œv¾Ÿ9ŗļļķŃq±|õG)łB`Œ‰/h®yüöĄįķj?SĢ/j™G_Å÷l²1הØo.‘{÷‡¹SĒ/Éf•Š­c¬©«oŅ€³É÷wo²§Š§ęņźĄūIؘīĮ44Ø=܆Ȯ–†ē¼Ģ3Tʦ+č§sä­¾PWłµwZ“©åt‰»Õ šäˆ½]wvį9k‹čb}Q6]pŁĆ7m@{ß_eÄKę0-Ÿm[ƒ2cZōIē/\<Ę2ĆąT>d#c®“m——HZQ›PŃī”HŅå»w$[ؕdĖŪ©āxg1Ģ;6š‘IؕžTĆ : įīĻ U ¹ĒWØŁ(ȽsT‚ Ź},ˆŽ®dźi„čgŌR{…ÆäČ0õ=ł:ōÕ7…³Bł)v”‹:ZČÄ'}·ßć/ŖpTŚCr$µÆ¼§q5xŠėž×Na#ģÖj6ūV&nGńåūæiZłełEĮ0°ķ€¹Ōv™“¶©nł$›ŅU8E:b*ˆQ7 p“LüˆõĮtõ- ų›^®ń1š§Qļ†eÆQ¢o“øųŠXē[ńĘŪV–ŽNJWHļyK¢ģœö)Ø©HbŃćQż¬O_&Éłß·Ķ¼&¤e³ž óĄF¼ Jl]ær™Ž0e—ūj÷tŲŗóęźDŻÓ-tGv”KģäS‰”°“~H~śE'ZÖ̉ķąp¬’āžOŹ7zG†zS"ŲM‡^RF-Ÿó%  jœi’ųŹÓ†”¹ā[ÆŹ-…Ū©my9)M÷~¦ŗØ$ćĖ\§ u.Įlœ%|Ń˱f%Sš„‰võāąnķ‚ŃÉ"4ÆŪÜōšd   ŸņČJ3ĒāĢŗÆ†g#:±sÓŻV”å;%½ģ(ĘÖ·]!ė&£Yłkī­cv“Ā£”~¤.°k%[¼²ZR½< źżjå%xæJyļYLö˜©6$>’!ŅCāéūJÓk§ÖSųR §Æ„KjŒ)󑔦œĀŠÓxŽ…šhaHe*-1“įĖkĖŚO`åĢ45¾jė¢!MÓ±Šy×/Ŗ=U•ÓЌč“QFN³f^ŲT’Bl’}Cĝ<ņ~4Ļda¼Ņī1„”h‚%¼N—ų‹Ž…"Ī¢)ƒņt±¶Ŗ’«|ĒAąū$ü†Ąp/PjbiƒÉ(Łt²}1‚rčw0õŻāķĻč”/¤O¬øūźŁ/Ü*®{ÓŹęt,Å„3œ~0S%ük®® endstream endobj 793 0 obj << /Length1 1430 /Length2 6441 /Length3 0 /Length 7410 /Filter /FlateDecode >> stream xŚwTīŪ6€€¤€ #FĒčīī)aĄ€ l86Ņ"H "R’Št# ’Š %! !ńNõ’żæļœ÷=;g{īėŽē¾īxĪŁĄ˜OŃnQƒĆ|‚ü )€²®‘ꁄˆ@(Ņ ņJ 4ƒ <”p˜Ōč•0ƒ©€‘3]8  …r ŤÅ„@ €$ł—!!P{Aŗü-8 āI T†{ų  Ī.HĢ-œ\AIIqŽßīEwź†tĮHˆ;ęF°Ąī… }ž‚Sʉōšööę»{ņĆĪr\¼o(Ņ`ń„ ¼ Ž€_tz`wČobüÄ@€‰ ŌóŲī„ō# ąu€Ą<1(˜#ĄÜ 0ÖŌč{@`ėüaĄ ų³4A~ĮæĆżéż+öŪģąw÷Ć| 0g€Ō ŠWÓįG¢‘¼0Ģń—!ŲĶŽń{”n`{ŒĮļÄĮ5ECĆļOvžØŅ“ßźö‹”ĄÆ0˜"«Ā•įīīŅ“ųW~*PÄSußmu…Į½a~œ 0G§_Q¦0č#DSåO Düę ADA ø„$ņA;øü nāćł­ücņšó€{œ0 P'ę‡ŲĻģ (H€ß*ž- ”H€=Ä #ž':†8ż!c:€¢V Ģą @æ>Ÿl0³å‡¹łücž»¹¦–fJ<æ ’­RR‚£~|B Ÿ( (() Ēžåožq’€”ęś'¢&Ģ üƒ¦vŃšśs&8’\.ĄæoЃcęąügģ­A¢ Ģ—ą’yų»ü’fžW”’eģ’;5”›Ūo-ē/õ’£»CŻ|žŌc¦…Äl„.³°’65‡ü±ÄŗG(ŹżæµšH0f3aĪnź©EC  H—?čÆ`Ā»Aaø'ō×3ąžK‡Ł5WĢSā‰éŌo³J’¾RęwüµsB¢b0ö!Ę4#‰ü1ĖéA’žk€? ŽÄø0ōNpńÆ~Š œą(Ä/ō7 " Ą¼^˘† ]’@@Äž[žW.(³Ÿæg“č_ņļĒACˆēfąŅįėĀŪNkļx󭍬N×̟rńłĶ!ŚQēd„é\ÕŁ”ˈŠéon-¬Ŗr+|dŗōŪni ŒlM5|żÓ’Ā6Łhbķ5ń‡qŚŽ±¢mÅśw÷ˆīņ™(¬ū_>ņ7 qÅmĮīŌę?BIRz÷Ø£ėߕĶG̬®W‹i“\”MņśĘY‡”¼ŲēLÓ± łīŻą¦ÜG“æ?ž1E™7vͤ•ĢC°/\ģg¹"”p6ķ»Xa"äŁEĻFoIw÷˜rx‚ŻOić‰ÖķYæ—ÅˈįŒiŚö‘Oīi‚nœ¾kzF§ˆĶļ؁cRœōtøŌš±qĖ­)ī%Ģ)"9ū ZĖhĶļā-öž¼ś)Šk}7ń:¼Š©ĢėöŌwwil/ÆO4Œņm©Ź‘ — „Õ ćdÖ¤Ż¤Žė§ß*üdĢ­/’V²-lyīÓJĘQ eŽiÓÄ]¾«HüŸ„§Žg: ,O äL³jÉ#P‘ÜP$Yßń­ł˜–4ņGI5ŌDī–*6⃭-ś®|ź¶‹ÖŸ‡Øj|Ō³ur.Ó²"’ō$ĪŸķHm¾-ŗµī®,pŸŸ×0Ģšóż@²ŪĶ‰ŌžxåżE!»®ą”šČ"łŹkZ•QüÜäÓŹ}„¢Œķ™kžļ'tĀLé]éÜ5ŹoŖ=š7q“dŪ8ŚÆœōĻ\XoF»}¬ŅDĶ¢;RœÕ7ü± ¤vŲõ`AūlZŖ†ė{>_—ĀD®ßĖ•zųp|a~vżŗČ?1ÅŠ÷ā>ސd`Ģźčˆ=ˆµžc/­V&Įi fć?K­b Lń‘½Šp†1†X>‰š[S¦}ńc½ņe’oÄW°øŻń“ųu[K™*ēœĖĪĖķ‘ʆ²§‚å¼¼  é¼ŠGéQ9¬T‰ī x;óökW§‘ĮŻgät%¤k„€åūŌø÷“"Ķ(\i؝?š „Wm)L2Ķł»Ųc)‡“ł†Öh0Śā•Uį@y9fĒ 2Ť ·Ŗ¶œN•ķķÅŽ“dĆķ²üN5ķčcć†dL@ÜŹ§Ķ£ĖŹ”‹£¢ÖO‚o ¶[ļr"ÉWiłU}Ķ9£XCuõ†“Å>rĻŖJĻt^+÷ŅVƒžųˆ–,vrø“ų8×zRÜśČ/2V#ZÕå„Pgrķi›ø]įz\Ģ*ĢÉŁŠ_;}žĆ1Ÿü>/n˜Øn¶¶R+ŗ8”'kƒæi™dGQø›Į½Ž(N²Į’Kž#ńcœĆś‡ļ{ ęœ’˜KS?‹’ -Z³Ó æ²Äā…” ƒŻ«äR¼^]=ęq‚TŚćīO÷½7„ö×ė¤#•Yč²Sylœ“k¶Ø,ßS<¾"½„{z—„nš†pe7IÄVõƒc>+>÷yÉ”{ć{†4BŪlaƒsX!™±ō{L× A±ĘȬAõœńŠ›“ŚmtāQBN9•ʹ  uwA”|hŲķi‘hö'6Ū_?>­v¹V ^špߢ"l6„¬&wiΟŖĖė¦gó.¶®Ör$”ąé2ĪW•-éŗ} k2KNĶĖOVĻä©Z‰„ŽU㚒6™H°&’Škčq¤|„p€æĻÉNÜŃ×č€C“$óą}«~˜“š&nQA“‘ręWķs>§ć‡mĒ» ¾£„Æ› &ĘŁŪ;.«qž<+Ü©ō¦|ŁÕLĖäÖ=—œw»eU¬¹.–€xČąć'\¬/ēR¢uē2eĻDõŲ^Ņ føV’»”Æ÷Pśß­jē²ģwŲ[ ™m‹• HJėz€3ģ]ÄA½wĀר&õ`Fóu²x2ŸĶæōųP焇u£?ĆG"=š0+7ņń8-µķ7÷÷*}ĶQˆĶšz—Xos”m÷ź“Ų+ŚĘŁFā³>›»åĶBņĄ6āŹÖw[\1ŚFi-AžŁŻłü2܂h{lŪšėFńFųąŃ֘ĒĀ‚:ŻŠėrOnN?mŠĻ9§ ©éb¼Ļlµ:÷!/ĮīlĄ Ļ黥'£ó$"–XZ‚@. Ķ7Æ›ĖŖl¦å™Ö±ÆĢ„·ćr&µA•7Å^³Ķ—¬Ē&UøŹæńyķs%ņø•J’ĒāŅžPŹ#Yeu6Ąžķ'Ķ ŽsݵųM‡Š‚†”Š|žĖŃö‚v¾•µ± IOę_\XZß*äļCģ•ŽĢüŅēŁ™ÉņŹ~ė¶‘Off&;¢_tĖE'Ėxšk«ĀWLw]ösÕ G‹¾žĘ“«^Lż‰ü„xŅŁnMŌČĢ®¼Nł>hn÷£īģż[¢Į:YŽż¤lŽ™E—Ņ·ßĆ\{ē¶•T³CDĻÕlbĘc}žĄ\üļ;ŽøMH0.ĄŁČ~õµĖ ¦XIņ•ņ5:8N’ųli‹(H÷é„W2›bL’†öĪŌ7ŗ§ x^w©5xćØå&ÅŻåkHĆaįQém>DøčČŲ*ņˆ­k½Ńz%łum¾3i—&Hčä” ³€›PłóŒ7_¶:EzÓk»œÆĶ°SśˆnÆqQ/eKhęj9Xeļč3]ä”DL%˜<Ł:”YüI%™sWe’ssČgJrÆą©'d–žqŽ÷7£H ńEęŗŃx²gJ =2ķf R”^‘Ói÷¾Ę}ēžBV„zą( c²ÄYDQ:ōs^ZKŚĪхsń<©zZZ²XšųÕ-Į #–™x'X%ŸP¶ „«©oż¹¢yƈ°Ģ‰onz晊ż„wUtŠX°ŠcеŁīĀ,°Ö²*‹DöCŕf’ć¾×så‹o{5” r†ŒöÕ ¬š¶ØK}9<ņŁŪ±øMŲė?Ō¶Ž%ć›%Į~1-ŻbŁĖ;Wd:8…ŗO.Ż“tY/‰ˆoZ< jhĖ.Ÿ`Ļß© Ž‹8Ā»Óė’B¬%ӟi-3©?Q=‘Z3£É®ĒÉõŃp€²ߒ=‡#łģ—ĀÅįļķń4KœļšęŠŽƒWö÷^–*¶WcÉ ä½(łĪõ•V J£×aßÅRŹ­s³z2ō¦ŒZ–ų{<‰ĆźNė‚ķn3žśģDøµėż"Bv[žŪ*<Źē½# bŽÅJPånżg$µ”äjƒŻzh›‘<ĘŪoxˆ,,AŠ£™÷ś·š"­,gBÓJ¾<īČō?=“o“L Q:Q{ÉK§ž ޽ŻmF`1³ņsy—ō nŌŻ /9!Zs֗Ā ÆŪ]¶J0Ń5©&­»×³ńļēś[,/y‰©Ā¤8óŹŪ­K{„ŗŠ&…½ėć«Z‚#ā…ćųhdśä ģF¼©īĢJɖ¦_č‰-n<™ õT^g’—FÅܔzų*ī=ŗ‹^ĪźŽ˜.vo ­HzżßŠņ'š(q;šŪļöXĢt`¤AdÅmį“Ń ZƒöU‚Ąöų—w ÄK|f:¢=¼]KL>Ϛń߉cķ^Ü`Ŗ[`Ž®żHētŚ FpV_ZĮŹ1芒7Rł7ŚkVÆ.3 wōŲ‘½RrtŖśƒZZ{Zų×E)– ©e›×J|ĢX>m“ōÓĆ1“Ų«łįQ+3ՎßH)|¶ŠĪ—…‹VŅ$qwqŽÓĀ6xöŽ£ŗØRń‹Éicӝ”24Kć»#ū§""6÷ɦ[×S:Nī=•¬’4‘iŸ7ųL{ ÷łćžu•ļ3œ'qŁŅ3·6gµč^īŪ¼8åī+œ}.¹J…‡<£eEøüĢ”: !ƒ³f–¤/NņųJĄdåa'źér'8+ g{†8yi³^č‡y“lʈØĮņ™×[|ļ˜Ż9§éŃĢ|½õ”ŽĒĵ ~[²źé¼łņ€¹õY”W’-Ÿ`EQš“õŽ7Īß±œläŠq]÷¢Ÿ•łĢ3ė%ŠĘ:óNI åÄfEķŖÅ·Q梦Uķv«¾aM)m ƒ¼Onp.VDd±7=Č: Ķ „ŽÕ{ql6¶Q;Ÿ[4¦ŲÆDźŹĆŽóFa€clāi„ē›°ˆÖ[éVĀ̊&ź˜Gǜ¶„—Ķ9Rߌų礸vCi­&ˆäń쯐ļųõö_ųw½7˜sļ xÓ%…Ŗ^aWd1-ĖÕnb=k‰ŽÖ EĄąBó÷ó&z†Ąg^ķ!*Ā®¦éGV]“³< ¼Ūåu3oéčx‡poč“|.G²įSip\¼«U&  løjŒMĘ»wQŲ=ķĻ[č%Ū²°‘ͤU–ķc'fAfĄŻ¼~”ˆ›ŠXź’ RūĮEŅ×[õ”™ oˆmWژ»ÖLņæg/å5–:ā]ĖéF u·<Š{“KÖm„7­žĻmłźĒ½uiV—mńƬBŅÕŹ‹…”?k…H½•)«’Y¦˜z­|TʵśyYGģƒŽD[†G™q‹ŠĖOµæHēĘ&Œ§ł y§KŠiri²±1'÷L ¼<{%Ńq Oį4(ō1Śźn 35~nGF.ĆtFĶģG“£žb¼ŅƶΩZR¬yó~ÜmĆÄeõ„ä4żįŒl¢jĮĮt½Š©²pč°!Ø¢†FˆĒaøŪ:I[H- ŻœŸō1ł,@ł÷ŸP… ’kv‡šw{ń‚?5ūqīź“b‹~Śe' e–A茦Öø)OĢ=ūJĢ0€O3«GĪś¢/)”^„,MĪ‹—Gwé@pėk—‡G“ķjuĀN%hj|5’ž¾ŚVq™Ōģ\Üa)•(ü8pŹ™ā³*ėśØ \]±Ļß%Hž%ūƇ”4×Ģ’Ó>ļ¶ŲmŚį«Īœb-8līsé‘V]t K>Š6—éŁgāģ@Łā1åqįp«æ Ä%öĀCͳsż†¤Ä†a×4L¹i> œÅŖ4Ü]?å:+8–#—ĆD£H]HƒĀĶ‚3ķx7޽Ā&÷L¦ü–ÆŪ…iō;ę/÷rlćd¶GƧTvxˆJ®±—\h–¢ė„©C©d>­Ał·ö½5¤j¦FŁŚn©p†4]¾-ÆÜ-ŸbŌ†Wäø²åōS–trKGė¤XĶÕHŲ ØJOX'ÖoPŠįŠÄ“ś",ån°²:ēSŒ=cź¬įƒ×ÖSāźq•d4żĒü/››å߯6$&¶t9āĪ’˜/ܽźÅ{&Wäa|tˌ5µ%%×īd7FĘb«”‡„1{ėudŒł(‹>CŲĖÄJ’9Ŗš\žē±™hģ4ćŲöU•ÄJqÅZ|ƒ[¼=xŌó R4ĶŅŠ„ą]PJ¹żą³®Ž;-<ꮆ§Å× Cqű˜åDņtI€ŖHž€ÆbåĘ™y"bų ŠnFcĪòõÄCvĄ/ō–æĖļ++GŁq=J—b#Į¤våūŪōwxV”·š~ouõRzƒˆģqļBv"ŌäI›mģQ93^Ż!åES“¬„eĘDt•LŠh<ĄM+½v«JŠćå ż`*ėł"œź%xoóšj–ZIāK¬œĖł}¹”!Žw„ŽU0t›^F+ōV¾«­āҳĘéś°šBOVé¶Žż?F’±±…Šg—ŗęÕ{N8ś3ͲE\W"7)= §»› Sē›+)Jp–'wXV7Z•Šz›4ŽÕÆõ›!YŁbcšńĻæøŒ½¾ŽźYŖéŽw~f³ (A y7[§ĒęWķ¦r#9õCßĮZĀEmV%t“R=[҃“°]4 Óu3ʓ³ƒ|8čoĖ ¹¤¶ Iŗģß»= ”ŽŖ ģÜRśŅJźgZźyÓ6`īb²caDžö“­Ö6&¦ł~[°ż:źŗ!fŗMķµčl_żč3};iģ0'K‰­J Ü»›}«{VEC£Ų(·®ū~½Žė®Æü5Č(¼Ŗŗœå4IólŚ#›9Oµ'z|•­¶¦œÅ7V‡3=-¤¹üvĢė[a{±i×2ZœɑłLWŪ‡rŻsŹÕś!ŖōQøļ©_ŸüYws”„ÜņuA^¹“BóGjqĖ¢D‘ö»ł???—@a *”)9p«…0E=TʮşJNĢ0G{-TžŒģńšm.o?øW’s]ė©1Év©»ę²ōā— ˜ą ŁDŌj Yšƒ®=-·sīwIʒ°’©w5võMė¹ÓĄžķ`āüTVØÄ8ė„+ūĒ®¢Ōf Õŗµ”—•8«ī?_n¶a=,g§b-l÷ōųü¬gųYēG’ ~p|ŅĕįHæpR’Ū ^EæB żz0xn;ČÕ¦5 $ + äGŪ)¬īÅ[ł^b¬™"±żKl_Ū^9˜¶^ĪԃĪk7“Ę=ē(_>ø:I?L#й™Ŗ³–".”;A/(Œ„ “cÆĪqlŸ`‰ÅÖ#NķQśøŪ6ńo†goņXpś5žPXP endstream endobj 795 0 obj << /Length1 1544 /Length2 7256 /Length3 0 /Length 8283 /Filter /FlateDecode >> stream xŚvTģŪ>- tH3:FéīF„kĄ`lÄč–īi¤SiA$Di©ośÖļżż’ē|ߣ9Ūó\w=×]g, :śÜ²¶pk°†ąńš‰ä5õD||<||üø,,üŠĖbvs‡Ąaā’!—w[!˜‚©¦ ‡Ō< $,ēćšóń‰ż„w(XyBlš<58 ģŽĖ"wńqƒŲ; Qž:Ųm8 11®ßęYg°ÄĘ Š“B8€‘m¬ }ø Œšł— öG„‹8/Ɨ—•³;ÜĶ^Šƒ ąA8ōĄī`7O°-ą]€–•3ų71\€ÄżXn‡š²rb†¹# <`¶`726@_U ķ†ż”¬ń‡ąĻŌ@< æŻżiżĖöŪŲŹĘīģbóĄģv( ­¤ĮƒšFp¬`¶æ­ īp¤½•§jeTųżp+€’¬.Ą ÉļOvī6n„;;ś‹!ļ/7Č$+ĀlåįĪĪ`Ā÷×ū n`dÖ}x—Õ ÷‚łżq¶ƒĄlķ~Q°õpį5„A\=ĄŖ j !Ü0{0 ÄĒĒ'"€]`oŽ_Ī |\Ąæ…æaäūü\ą.;$pÄŒüĮõs·ņnąæ’üū† l!6€5ŲĆżĒ;ŪżqGVŽ ā 0įC6Ą÷ėó÷É Ł[¶pŌēõßÅåÕ6TŌRŃž&ü·HNī šćpó ń@|"|ä!ąß^žę’÷ߨŽäĻ·ńżćQfˆżA™»æhxžŁģŽ ąß“ąČ>Ų’i{S>!>äč’ÜüæMž=’ĖĖ’Ņö’ż%(ō·”ż—ų’‘Z9C >Ź‘]ģ@N„&9°’V} žcˆ5Į¶ē’–Ŗ"¬“! ³‡žDˆ»Äl«AŲ8üŃ@Õé uąī_kĄ āćū/rÖlœ«ÄY©ß"0r”žRf·ż5süBĀ+77+\dį‘7!€9œ¶`ļß} ąåĮH’^Ąī†ū«žĀ /ŲÕ™u$üšŚA­ż7Ąąn‚b^ä‚ūēĪąuA®l‡ųż‰žQ’æa¤{؇ū?ī‘z7šDśCxĮ’1šś‚ŻžžÅŽĘĆ ń»;‘©łėž{ż€ĮŽ`܅9øD˜c}XĒE,µ÷Öøä ĖÖćÜ~ n?ńļ„sŌę<[u;“Mī%üōY‘żTf‘žĘļkkć½Č¶TŻö+’k‹d½©­v܏“äƒÅ_ehqhø d¶żo\żBœŠ[QßŖ±øzˆāė’\xõ+{7 T.FĢmén× «ß殜ęŽ7Œ3 )ūĄņŅ:w–‚ ĮM‹ĶI|äMšįōl†8āŽ^-ˆ°/Pāg¼ĘŸp9ė»\mĄļŽMÉLiLA‹~J<:Åź'·ó\ķį¼_yÉŖŪhĘ,yēŲŗsŗĆ„wį¶ūܕeBœ’‚T56nµM%ʌ!K0÷蓦Ŗ·ź‘Vkw.ķȝ6T¤ߢ’Ų~ŖįE§»°ÄvzÆNFpnFcKM‚Ų»‘«[ÕS-F ’)JŽžū*3¬øW’Ÿ+›č3ɾäŖløA%TpÄGٽ“uxu†ÆŅī42©¼‹×æPes·^”n/š Ź Ęņ×y‹ī’N®e£MÖņŖFv¬ģōōµ\Ńąē>F‡äŅ sy"o“ēģzŸ}ҹŗŻ9€*«±ŸQz9J‘RÉédŒeъo—e³>^ÄVĘ"‰7īKļNµ~g»†gŁg®i9j;I‚PY‚ĻŅÜ šūWÖC•8 ātwµ›Op“1ńh5=/ŠĖY”µŽŗęrM—vņZNFŸ3fa&ió ˆ.&A°qÜfŖŹĻl6;ķD6?—ŽžąŸ£J^, 0ąß~Ä«č“9Ęaõ&#„%_m uĄ #[š³·j¢YÕ~7ėň!©Żz¢Aac”³ńzĻ3YģµŅH¶ļO2Āg•Da`’›(ķ ŽėĆŠZŹČ®W{{F8U!źx)ę­-ż¢"ŪqhÖt‡ĒE|~„ę¼Š_.1śåy2M AM€¶-ČĢXœō ³NØŻ˜`݇6ŚšŃŁ:„Ć;öü“õP}üč†Ņéųnž·•B¼ #”ę€q~MeLˆČh„ jŚO+„Ęf…ЉŸÄwŃ3€„R¾‰ ®¶RÜŪ1ĪCA£©XLŸ8(%(ę6 Wč™r–FoÜÆcĆŽæ¤Œź*jŻ('1"œź-P)ßøäł(<¤Q™šōös &¶Ń Ē(<yuģōv-OSõ“Eć“(ķjjٳė£Ęl"„?p`ģ·IKtČh’ŒČi­V+w=9MT€ģĮńŠašt^-čwōź?YRĄ4qśz—h’Īä‘ÓÓwLņŚŠœR:łčżš”LKŽČw‘ó³h¦`ļC”¾Nē¶„ĪSKĒ›a§Ffń,½JŅ…šˆāĆ6ĀöŁ—ć„łö;6šfy̟²¾~±A“_”s—*Ę»ékļJnŪĀ­uģņ„TYŚ•Ļ`·Ļ\W%diĆD©čŁ3=—Pčx>B7Iḫ̌ 9ö_˜źĮVĪI-Ū™=ČłJŗę$¶X?Jz ö)¤"ŗ)ērq[ xµŠ=NŗA ȝß[ą|õ]/j„i)¹›© 2ō¹1płŁ˜æjIˆžnqĪ/XžÅJxڽ<%ņ 9ÖķlÓ(d>Žy„ĮtMöŲō9ÉK(­Ü”`ÄUõņ(v±599€:õ`2@õö7=Ē ĘYx‡wģXŠ1Sa™|»ĀJU1¾É;Wƽr3õ:}Ł‘äĮrhQŸ„„g~æ ]²h%y‡4żCīP„|„]ē īł„ę· zR1ŗčh晓‘wżZ#åŻÆ)Ö}‹¶7S¦Ā_°“œj÷Ä)°'P¤ƒĆ»NķÉH÷,īŠZŸń1†OÖ¹h£ši`™wį’ŹŽf_LUcM÷kŽ„žj&¤‡Ć«čó½5Śŗb£§=†éĢBŪ-¦¦æą”’ŠMņ WŹĢ4ÓeQǾć…_ ę©2S›~zŹ„C\Ņ5 ŗ(şµš€ćkĮu[Å«‡oK}c½ć„ß–9§†“ß{r¦d“v&ÆØķ­ń×Qɹ4́ƒņÉp'śKšŁÉČXѦŠw“±‹»Ļż>{ÜėƋ ·)āܒ(K/Zo­¾CUßśŸÉ÷OqŅ8~•µŪ{Óetm}ņ²‡XĶąjɶޑBaר£ķÅ&øžŌ-ĘŲóƒ1ŲØt:Cš×młąń€r1Ö„ēŻ“‘$p÷pp!ŖĪDČM#2ĄŪąČÓŁQ~n«ŹZ³ŸXÜ>oż §/ņ §ßHū+)d|ūKźb%] “’”ó9·ą7×Č÷œūvįJgŽāĒwVu¾‰wqoyĀ/ģŹ¦IĄvHrór qq•ōnėøĶŻ{ųŖ~QFvαѣł£Č–@Žā{O#¬ĢLvŒBóCõ3īB'éøļĆß²fRxÖ%lż8f×]°åb«w= qīsÖWķ ­‹’tN-‘xDĖāžģ57nÉʰč“ģ1  «ą™c&Ł&eә¶yču‰‹g¼BøyFi’=śø¬%¼oęo€vŠ“Mļ”dŹ—Ū"=µ’” }a)ź#7²ŸšŌ‘¾ĮµU>³;¼Œ¢±'™įņ„+#ŸčIözpų)ƒ0Ū,Üļ„<ŖĶ²I^Źq»’_ģÜėłyZ†ł ®ƒä!vēåLź‚®¢‡‹wļ»3#6*ŖÜ}vk7×§®”ØfćU*“öļśQ(Š]D R kÄ_k-čŹ’Ł¢vDĢĪ>M’ņM×‰ŻŸl²×āŪŌĻDēdÓū)™‡,Ž5ŒPBµŃ6ā¦8¤ ^ ¼ÉRJ–ü¾‘@+Įiœß¶ŅSCØ Ÿć*&Ģ+pÉ2ļ&Ž_|øÜ; @–¦o€rƒ ·/ ?[5Xģ“8}A­ŅDt3/‹%—3yU$oŸp[mĆ„’”)=[ŽN*śi¼1›O޵oPĖ­"s}—ŁsOķ$ļeš“ǐœO=°²®¤²ÆaõÕś½F m+:3ė{čéÖążĒÖōufŗńDóŽv°{‰#.!„[ˆšL‰qÓ¤Oqg¢ā{\~Qõõ’7čjŠ”ü&_)“ł) ˆ|j§ė9£fS ^É;ŸÜŗbL€3ħ`ĄSLåB®ł ®t²-’ Øū­@Ēņ3%Õ;•µDšpĖ”³,Ϝ®ōÆ[’,3Øź‰Ń5>šr—0†N}'OF”×K ¾øseŸØŁ©†ĻWĒQĀtżńXēŹŪ†ŗgšŪō(lœXg:Ō :ć›|ģ6Irš7£Ķ!Ś\ÅSkŠo„:›Įå«ĮŸżœo’c“²Ē—Ę ¶žÖo·CW¶†^VŃŖlŸŖŖņ<Īģž"Žežq2`щč4kū#é£yʘ°P¼źą¶,@µė/&a3yʊ€ō|ā`VąŪ{˜s$$ÅŌīIu¹ż‰śAF9"Ą”+üŸĒ!žŲ¢›‘ĖNėŸ*¾3 ½„Čą 1žJü.§q7ĻĢęyéW†9ĒĄŹxéVRBė'Å/Z\ē!бŃI¼“oĘ/ƌ…gKOD ䷀āźÉö¢S_Æ_.*ŁbhŁW‚°•ĒŪ¶YĪŠSPĘęCŹÓŽģ/M¬l,…‚|6®laU‘F†xuŹC1¶+«_ēŗ‚”ztķ @kķ±éb¦éßödz;²æŠ£-n±DŃ4™ĒeŃ(ŅbL6ܰ“¼f`§ę=śŁœī~v#[zC=6ŚQ3ž ‘,1Ā*¬ƒü]hįįSbü¹斗'7Ę4”3Söį¶}8†b3¼Ÿż_žĢMtX“/³R1[dW“‡K‚2Æ|Iʕē•×½ßķ<ąE‹f¬o*­U:?…c–7<āāLŽÆ}ųńŒ`ižéwų¼ųŖk’£ü2EČPķ@‰ĒÅ©z§ee݈Goęā÷,Ē槗•"">ÆĄexvœTuż&Æ5ī:ÜńcdDNy'XĻa‹› ž‡Ī“\"ŽK³>ų±Ś¦6‘`ālĄū';ż¤›"Ęė~ Ł„Öh‹ĒFśG¼3:ƒĆSģ$ÉrŌ6as€Qę‹Ūbęz¬ø#š»¤Ķńƒ¹żē?eLÜēœP‚ĪŌŚdx_ékWNĄžŖ™2:Qmśś^6`Rǧ½¹ÅĢŁāDnjR»V?\HńĒ`ļ*„uyɓ̵†‡YŃ-ŗ:•«‰VxjŸ&Ō\[›µŖm‹–„S‰p2²2 ēV_ij2÷S¾<,M”¶„vę÷Ur„ĘI°ś{FhāS“Ż»čīĖ3=ĖĆ××ĒV,Ā׀9ķšÜDõOiåQdzŹX¢Nėgʼn‚‹FNŸƋššˆ%ĻhJ·ÉÉZ†tęŻ{pƒŚ…ŚÕyČHĖyz[ŽīKŹ®Åž7ŽwU‰žiy˜ÅN„Õ^9ķų\J>&Ä)?œU¾ŖJœ›„Mjør‹tD³ÉxģŚuŽ–6Q…Š?rµ]Ÿ)zźuxF˜ÕŲų‰ 4 ”©Ü µ (†ś[qögŌ³ń&×īmī@ö+TŚō!0B3õ °Že‹ ^•8Źć7ؗ‚Ē9Ķ¢PCÉ5ŽŠeø·I¼ 3ŲI]źˆ•¦$>ڰœdG…cāōĶĻ2ōńČõ|Ūµ°ėDģCņ];Ä­'£¹Žč7Ņ ŗo VH×PR.(Z“œčÜĖī䎹”ŠÕśmdœ0ķjUģb–ŖZ,[¢·,“žŁAā›3Sn ½­-•‡°’~NŽ&¤ņŌx*öƒ?č­\æ™Ä6AÓzžA]]ŪT@WģrHĒŽ±ēIR~Ć=móa”]<‰ŅnįÕĮżŖ#Éq™Ī܃Ž2Ēh3KļݧMŽņ£tDćÄiŃ$Ź/X?,‚lµg‡ć.ŖaDk¹łqƎ┤ii o$‡-Šó°¢Z?q‚b¤7Ä*†Ż„¦jSéū¼1µ66A߇čt wėū&4ėL«| فĮvóxæņO28맜aZŠ[Š}OS+mšP+ż,’£“EŲłČņ‡b œų“Ä4‘š”émŻyĒķIŽnč„6“:*j«ßŗXU{ؖdr™ć£ŲщOV„ śPďw.ģž$Mzź=XĪ'Gs}=ŠĀš“XFż3sžxuÆHĻ—²Ŗ+Ó ’Ma}Th`åņ€łž%œŠ…}«iē¬ÄŅÉ”#܈š›79ņ2GKž śęō=öK±śO×¶8 ei|‰‰ĻyMPūc„˜\į¶ f¹ŚRŻX’¾ÜUwUM¶“„ö”ž°`lŁzœļŸ•U¦³M”lŌwųÓa)#¤­ėßæo%y\}6¬—\*æ’ė‚5'öŖkŽFē^kÓ^ÅeO®—1ó‚gB’æöI;Ąõ„|¤—3= ś[Œoe؁ŻĪ>/„6ečÄ]ņ¦ÉŽv±]Ū -}Ępł×°_ŽR²ŹŒ5j!$Bć n/$ŃĒėī%.žĀæö¼} ¬T\ŹIŒQź@„ūöó6ūź9]šłråAūÄzYļ›'<Ø"æó¹źgm©6Å}Łč ,ņ|²GŅöÕCž’'ŗź«ü}¬Ąü*ūŠĢwÉ Fv—-ŻŽ²³F=ŻīŻ2}Wwōh)ח]Żp”‰ņ³.3oVś±t¢ §ümBŠ×ål®}”œ3~fšÕD}r6čó›xę ź7ŽI~Į>HWK|晃Šī¦¢é4YHA™-§<źŃ¹ üPų jēu>Tb#ö|¹ałv4dŁpā£*““Ą`wŌ¬qR¦(\4Oō(tøüŁ+§ ‹×"¤ųDė8Āh\c·Ū@UśéŠv„‡“0ż Ūš}y›UZ$9ĀUņ’š‹¦dķ­ōO/‚"VŽŹw^ØsĻ#ŠGŠf3ėn¬E?ś‹ģöķģY¤÷£Źžx÷†ß]JęĄķ£S+3lėĆx$5¬fį­åiģD‡­ŗ‚–]x}ķf0ß`° S;«pźiƒ Ųź«Ń™ŪÓ±5āĻO”_iŽé×…ŠUä±e±*Å1N¬Ėŝtöøa\‚µ8VeYļŸTŽžä½Eń£µ^?݆5ŠęĪ ®„6/ŃūS®Ė³i[ߘOØ“ø0W6ßlˆGńĒĄŻÉ‹ČÜv#†Į7÷·ČKśöB¢ŚrYæÅc4dzī7ō“–Fį–… MŌ¶®W‰–s½U*¹×vŽxį5rˆxŻTūø3Cšńhæ Žć:½ŽĪÆQŠB„3­.O¬é{’<<"Ł1ßūRłč5,(Ė9a80śĄtĘ׌”"¦Ōgć£J@fóäĮmN€JHÓõ‡‘õąxØ\•:ų¢4oØ’#^;1Ž}p{Ó…@d! ;}•%ιø†ĻŅū*1ÖųÄž?Ļū~ öXóĪhR8ŗŒŲ[ž½dåĀx’d= æt‰1łÕzĄŒbReAX@!ō“g#ø- —TH侈³FDEG£ą.6wYdlkõ‘F»JūlӞՏĻĖ—Öš­41\ßv$¼p±”ī#³E{nł8X‹ w‹ć2š’`ččūršˆf‹2Ļ „[€"~¹Ī/‹?2G(ŹēŃU/aīŻ{µm _OųŠ‚«ŖToēŲ8C-JŠiʦƟä¾Ųx¦ÜÉ,TTN»ó ]ߢ-éN&aņ]Ģ×OÓvĪŹāÖÓS,n$ÆųE“Hל¶6¬æÕ^¤04^°?xF»³x\,AiÖIsqsŗbŹ"&[dќ*.Éó̜Žg£v‰mōZō͈ߪ4žyFłĒ„Š’){ąsÅ5 ƒÉ‹6ÕQK3ļŗn ÜxYu“ś¤½µ5¾=y£±$ńń1ĢtjFÕĆßĻ­¼ŖŗįTpŽ’Üņ&ē1ó6Q |xcpßńšŻōjUPŖ( [ėT&œšø·påÕ«^Pó€›ųŁłr“7¼O—zöāŲGöpnyGY„ģ»[ȍ« ż ¦ĢcÖć‹W#ŒaQ˜v’ĢÜĻĘ?–ČK5 zĢå{DhŪŖ\±H.ä ·īżhÆ)}ƒé>ø¬%½œ©{µœ/O$`¹ r’V•+Ŗž¬6ī ÷ewžWŃ“µ§ŽŠaZ‰%ø‰R'ML6(Ą8D#‘µüłĄČ€l}g=7Ó] ägĶWŌŹ^!Ź7e//£•žĘĀ°ĪŹĢ$饚¦ą”› EÄäš` åĶŽĢ¶Ę}1­÷)zø»¹ßŹQA–Ÿ÷cķMÅw=żŹ2αžP3..1”ü֗¤Ø¤K0VŠzĮUŸódVĒÆItū8µY̟åd‰Ś!M6w€±Ć ˜L(+vŗQ޽£wU:šÜŪŹ°ę«£ķwßvćRE-_,źŌ õzꄎąĶ%N­§dÚĖב܈pŅŹåĶŽ®’Ij9• ĶÄ„Eٳov±c™TO2…±Ō%"K¹Į7¶(L]oF’AeĪ{=‹•j;Ÿe>¾6^Ėjw××W!Ęi ³SןŽ“Æ=}S#*ĄļRĀAoVOqšBo7ŚqlčłļT÷ąbæūD“›­L]1+v³5–—¢łåū2™}/z”&ŗn9Ģ›{Ō7%󘮆ųęeė fNŠŻ;ŒĄ/"Ēl> ģĪ’G³Į$oŚäzĖ 2©*ŗYźEĢ/N} ?Š0*šŗÕģ HŽ?ŗ„S¶”į„yō±$·ĮFvĆzS›c{ «J““uĢßfŲe5™5>‡ąEpaŻĒž$Ż\q!F96ęģ+5°Œ1[¼Šåkųč<”¼‹³ #bÕŹqPų)¦”ócō:_Üōs„õ`i… E»‰¾ĆIčź®Ņ§*éL:ėłÉ nŹ'&Qré-‡M[ÆXKģŽøRŽ?©‘šk ÅėbJ€vé×/–!4§Eó•«_e®’n§Yh"ĘØ4J†Ģä€^šKŚ×äę˜L/åWŽ}rŽ€lM±&˜v…•¦`^×IŁŽž„’wzõū`lE=ZDÆķ7‹J}݌ޢLÓ\øŽč:“·÷Ņg&O§,¶¹N@/(©ā„Ov*ķnźŚa¤‡Y½"’vgøu}ēī!ŁB…Āóz¤°Ū› Ųššł!Čśź§˜ˆ‰Óażō‰·“]śĒŗĖżąmÜzŠ–[J‹ÜYZė§üøĒŸĖµŌk2bčTz飄©¼T uIūDę1Ŗ·Vgb°`ĢrĆŽÖė_-*ķ̤H•EĮ ˆyĆƱł­ŗ¹­KÄÖ÷E…9‚čQv+(8×2ś‚›£6֮ʦÅņé¶D‡‘S šŸ żfōrjŁ›p{5Z=õ”…KĒ’7»³4Sś„ ĻTä¬x«Ģ-÷‹ ¬?«˜6ū&…yՍčRc_ķAAuēU”R,ÓŻ ˉ’ö 9I endstream endobj 797 0 obj << /Length1 2205 /Length2 17171 /Length3 0 /Length 18484 /Filter /FlateDecode >> stream xڌöP\ŪÖ cĮŻFƒ»»ÜŻ„ĘŻ5ø;w'øw,Xpw÷ąš8ēJĪżžæź½źŖī=¦¹ę\»)I•TDĢģM€’öv. ,ŒĢ¼1y33#33+<%„ČÅų/)<„ŠÉdoĒū½˜ŠŲå]&nģņn&ooqµ°°X8yYøx™™¬ĢĢ<’1“wāˆ»ĢņŒ{; 3<„˜½ƒ§ČĀŅå=ĖŌ¦4.śæŻ"¶@'©±@ŽŲÅhūžŃŌŲ jo ŗxžOj~K^&&wwwFc[gF{' Az€;ČÅ t:¹ĶŃ(Ū’&ĘO P³9’K¬joīānģ¼ l@¦@;ēwW;3 ą=7@UZ č“ū—±Üæ č’n €…‘åæįžķżW ŻßĪʦ¦ö¶Ęvž ; €9ČP””ctńp”Ū™żehlćl’īoģf ²16y7ų»pc€¤ˆ2ĄųßæŁ9›:\œA61dś+Ģ{“%ģĢÄģmmv.ĪšÕ'rš¾wŻ“éļcµ¶³w·óž×³9ČĪĢü/ f®Lźv GW “ųæ-ŽEšd@333+čz˜Z2ż\ĶÓų·’å/ń{ż¾Žöów @_9šżŽŪŁŲ pqrśz’Sńæž…`2u˜-@v𢿋ę’Āļ'ļņč2æ €łÆĻŸōßgĖĢŽĪĘółß‡Ė¤¤Ŗ ¤$I÷7į’ŖDEķ=Ž l<Vf 3'€ėżĮ÷£ü—’ø’-U2ż»6ę?„ķĢķ<’¢šŽ»’Špū÷LP’{]h’›AĮž}ށź?cÆĒĢĮlśžÅņ’yų’vł’7óEłū’[¤«ĶßZźæŌ’?Zc[ēæõļSģźņ¾ņöļ{a÷M5’Zby ČÕö’j„]Œß7CÄĪĀęæM9K‚<€fJ SĖ ŠĪą=¼ ČØdļ śėš0°03’Żū®™Zæ_%Īļ'õ· ų¾J’›RĀĪŌŽģÆcåą;9{Āæü;āx³¼/§Šćļ¹01ŚŁ»¼»ŽéłĢķą’:ON“Č_¢!N“čÄ`ūƒøLā€I⿈‹Ą$ł±˜¤ž VÓ§?ˆ Ą$ż½g—żƒŽóÉ’Aļłž ÷|Š’EÜļł”ž ÷˜Ŗ;€IķzĻ ž½gŠü/āyGĘŠ{>“?č=Ÿéū{Ģ÷ėĶöõ_gÅdö²¾Ē2€Īļ7Ż£÷N’ ߈é_ćóĒą½9ęą{ssŠ?¢¾ć@ęw¢’€ļę–j|gjéé`ł~’±x—żÓ’¢Ķ?ą;GŪ?åŃ_ŽwBvļ#ųż;ū?鎝ķ’Gż^¬Ćõ;W‡÷å¶’Gž¢ēōų^ܟ^qü…€n’؞ćŻÜłż^üoČ÷ŠœmŒ-’ā=˟n¾ß-L.–NĄtü’‹»ż?Žcøž¾7Äķš“ū?ŗ’Ļ󚝠ןjŽ]½€N’Šż?+iźźäōžšśūŹ|ß×’ąæß‰@ Š~ń—½)_°U}pĒ}­;Ćī„Ą å®ęļE§N×Gd˜šš¬ĻėNæER¾÷”®lKPß /‘¼x·5Ā„}KRnņy6LP™Śm‡_ų‰=4Yt,Ņ0HGČ &¼ēóāč£h ŁŽ-C™ē謍¬T€qļ> åŃ0X±<śkWyƆSį¹bš!F=Z/°t–2ß${— Ś…–żĀeöö÷ zīä‰L¼ļI [±·ĪkģÜ×j•«sž.ä-śŲ•·čAŖ μwYńŹŠ‚G1I.}Ś *ćkf H%Ź®„æĪml±‹e'/ü‘`c'©®¼ÓЉL«¦Ż0 Ć„ŽĶHtŠe.ŗŚń[£×Ü*p‰gŗį 0ĒEšT‡”į>¾ŖÅŪƒČ–Ÿ[$ć~>^tššEZŪjóÉOóēE’„ŃŚMltLÓp•£.¦ŌbYSē6Mó·ā³ßŠ>©,™ĒH’šBĔ“ė‰Ģlq“äųēńƒL6Žc˜ dŃ„ØAį”9ņG~Ö®“„DBÕÆŠ^ŲŁP‚LmÖė{ʝ[ß»”¾’Y]ö&®ąŗlųź¢/‘c„é:ģ%ģ¢"Ąœ^`jÜ.bž&żŽöäüm‚ÄÕoeŠ)œ[H"ĘJēšĖ…‚¶ńħųi%Ԛ&»„Vüńdų;"›Ųtdr¤zj'!“øūčĆÅaS|ŹTdbU!¤k²*ėŪ[ūźDą ¢_ųž§ĖļQY3²»ę¤:Ł“!BŒGĶĆĆÅgc·j¶M¢/6{Ÿn²ņF%Ōuƒu$?ח)ßxŅ­Mį¬Ü[˜ń$„ӊŌ†düŽ¢uŖĆōĮ‹ßZͦ;F/kSŸōi5}~Y°„mmūu˜8f”9Ų"8¹p&ÄJ@„Ī?YŚ–ē‘ŌčI‡*_= KU;KyŌˆ¶;R7ß}€Č,U"x©Ėā=a¼Ü+*˜ åė§buß«'rŌTVœńNCĶ1”¬Īz“p¢$dćBY¬ S)oןHė6ńk¦ 5SōŲūaŲ’ī( ‚OŸŠ ]OÄ §¹½® “ķķÜn ō.a·Õ•²c)øźč4 e£Č©8(Ÿ^uZŽWü°āŪ=6½ŃRÆ4‡ąķVĆ=A š¬ā…·Ć҉UČæ,šQ-ٹZhl”­ŽC 8ēŅÖqźÕūÕäB_›?­§§väõŚ~ߥQŃs—qƒ›Tqų]{¹Kķz°ęEȏQG92“ŌÖoń®o&꧙8lH,Ņb2£}15ÓzϮ̔Ć07”½‘m>=[x‰•a·‰‰ń=ėó$[²­ī!5$_*õ0™¾sąPŠ}„UńtNK¦8ę5a:mh§‹ü}„Āš6/[\÷ūĀU=Cr÷»)˜EÓ[N½>†ˆ‹©<ŃcĄIŌ&%:ŁL#†kž5dŃcŃ*š³š,ś„aĄæŖųü°9†D^Čqló·øT{Jč5„S›¶Ļž’Ź›sLšLÉUPŻqŗÄ.Ó÷<ē0wkx»¢šfŽõöĄźCžŠgŹ'ƒĻ9™ńBd1Ü"uż”ą±Ń]k²Æč–†µš³+Ž{ć}+ԚåG  šV|öÜĪq†k]Ł•dULGßMč·§V°+ ·¼2rŽw÷ŗ4>÷YŚ4Żć-s¶}*³²šō“T«(Ō$ė`q#̦JKŅĄöåNÖ,--ųöŻ%ļ9¬…Å3ōŻŚ6Œó<ÜŖ,‘-Q‚Ƈīķ0)£Ž˜ÅŖHīĆrÉŲ-ä ?Ū$±8õ”™%Ļ$=q”½ģūĻ”n- ę¬6ń€Äy`Dr3“-HywT0Gī­,+“ųł>āūu”õ!d«ą)mL` ĮGüHʃČ|…@Dä_\„³‚hHWšNŻ,0ßĮ¼åyéjū_ŠÆé ūĒSSo[yÕcGĆŠ[^ņ—®ŗ,-ųA[± *ēT3°ł¦§’¬ØĮcŖŗ2čćBŃ^ yÓ7łSk4’lßĻ#Y/”_rkģī&!„›ż„£_rC}J¦e꣬ J.Õ¾V÷lc3’Ćq…Ždßo}^jæÜÆ1]ąåųü] ø5wFE݇0F­ĶȄs«Ó­įEĒ%2õŁ—½¦9žiż° q£Ö³£ cyšķŠfa›cLQŻ!Ćē»mC¾Lż{łĒ¦ŹÉbĖfü<“pśMX/+ń0k8kÜs¾ÓgGoP•wEŽE­®Ź‘¹ÓыNLVr“—Ń "µk_…„ƒ'2'nkļ5:©oĮČ+¹=74šłŁ?ŃØõK?&r7[7ŽĘ Œ«<ŻśšŻLxAÓ}Źó/Ö%ŠĶ‚īXEĒø|ņč! ÓæäÖ&2?L10ŹGŪ-ŗ%ČŃĆf£’"IS•÷5Į¼›Ć.QxÆø3®ź|š—ŻßB|€Z/¹VŽ„l~z@wSbÖūøÖa‡ķ—Ę|›ėWĻžqozµGŖµĒ¬—żÄSY„ei_Ł™?É®4Sļ5«ĆņsQėl{āĀP’ݽvø_!FؒbtÖ¤÷Ó×A:z…=Cäćō¾ČēśŗĻĖ̌jß׆7¹@XJ7Wqį©ÖūNƅY Ń½Ģ™“Wœy>ČŹE#1ōqЈ٭uƒ¢g“[^®Āg{‰–^”§reTƒ%®[¶ĻBś¬Į"?;2yaL~9Vó-ę¼Ų„^õw» “h„‡EīĽ4–m"a%ķŸsXbĪĢ@åQh£.ŸŖnJĶCœUŸüšÅ1Š«™‚ČeZV¢å=²č©6 +ĢŌó,³‡b­‹¼šWŻŚčņą'Rą‘y`Üń9ŅŚ·}>+ضQi”潚·‹Ÿ0–”gUudśŸ4kÄ=­–TŪŗO—J1cõrb«hg!~¢ā±ˆ†)|Xd׬Iė—J l)a%ķK¹Šęóœłlaż°Xś­ī©Ā*“ßŖ_üUóI¹ŗĻÓ°›O6eČPė“·‘Gą>jœĒu-¼”E½…Ž t‹KÄIf]lT8‡ķe.šĪ‡ł“‡ŠÉŸM äå~“sśĮŃ÷Gj±ĀķŽCéėFĆ+x”“PźIąc¬–ć)ä ī²čcūh}”¹g’Šhą®{Z:µ-­ īĄ½ĻAcķYÆ)£ —ćÅ߯]_1UÆØ%ŠęĘeü~Šū#«˜„xĄ™Ųł7Ń^„צ4ĄµH”„Ł‹ŅŌēb†#sa‘&ŖĶ–L¼®Ł# ĮšyÖ67ÜÆXooA=Šīq°%¶nqšÜĶī«D D@”²·éĄeNüq÷±©…Ņ_[šqB£]Įž$px!*ųĘfhÖ*G€Ļć<śuąėMę>6”]čER©k—śös}¼jŲŪ¬Ž+4 '–n¦T³,ķĮm ~õ‡łä1ĖCõWߛm§ÖfHykŗČ‰U0“ķ?›åwFäī:cTµNŲ8į_4E•żÄčy¤]؆fyąęź¹p‘ōü¹ŽČx%"ιĆHæÖ½ ;¶} ru®ž÷’ČĘ×7|Ÿ8𣲧ąBm/BVŒų_å훺HZ”=š‡É÷s ¤›éŒLEj™ŲÕ֛z—ļ0R)ĮƖʦ&  ėcp÷FUžÉfż j!ņ–ĪĒäćU÷`\ćĖ”ās–ōōäYųą©­›UßēO“–Æp…£M“¢IŖC&’Ų…w¢HOv¹2?Š©L"Öó†:ėQ_;IiŌICżh²d*­AaI1 ZÄĶæ‡›ėž ¾QŽp6qk‡w!Ÿźļ ō<8fŲņŁ¬ļ&Ył$ZłśmŒøe”‰©ogu÷ó‹)Ū_PBŖ8’ŠØ½v\3ƒk'źė±‘źIGę‹«óČ(?=^¾Ś·÷w….ͦ‡~(/R1>&œæ_·Ćė ø‡€ŲŖq[OYg}I<>Ųø-™w9"ßĀģEĮv¬kłÄ¹ZĘ8&¾Š¶x'„]ŗx“Œ ˜`żź¶H¢ŅųU T.9Œ¾ōŖæĘ$„I÷ŠĶ*\[å Śīy%Ņ#F6.µˆ‡|¦@瘠°„ šäūEb īQNć“>ø«Rā`G«-9šņ £ĒŸ!ž„öó~× }2ūÆć]dė`ė B7”p5 /ęu-C U²5µÕn‰®Ł¤qóUāēĘ/Śi„ŖŲgF,•zbs3§a”÷–Œ_³ Ōč`š!”ćhéų„ģĆŠęŽX5V³b|sq#ķ“ś†Q±TFbœyEŽŒ©‚IgvŠCļž’7¼„Qj›×ē×q-2õ:Kszļ#½ć™UģߒA Œ_’&B“Įlg„ kęe'ŠG©@&ˆ ’½˜­Šń„ķ’{Ž™BÉP[oŗž:röµXŠü°Š/”K¢B„ć‰Ī7KS„óØ&©½8ŌĖģJ€#£–¶6{{GŌOjĆé9I}Æ"CÅ1]ŗ;ę%N}Ē Ō¼?L‘hU¤BŸ¶Q›|Rą9=*B—›ø‰auü.—C.ƒķpG°Ž€Ž‹ė“›÷ą9f”F° öö0P†½?ŸÖZµP„%<ż¤•zgҤŠ,Gƒ*¾¶Ō1T,Ū-ŅP&Ļ9’įØĀ«ųΆźČ¹ «Øl^žc īyTµŒæīńĖó!ŠR«ŁĻĖ=T™PĀĪĻqŠ. ŽĢȒ°¶½ AXow:wʼ)HÄsŅUD>y}HČżĘNU#ĪŪb¦HŽ#ÉÆĢbčf=Ų0Ä/6Dµ!¶” o„ńZÉļ»[‡gĮgtcŪ„‹÷Ł„cŽ“G&Œ¼Ō‹‰žĄa"n£»¦ŁŠŚžeu((³ėzI§²R¶ń3m0¬_žé,‹/H]²öēézSłB;§©ĖõuĻ(qO“²ķ”/­%\;Fć!Ę·NP3‹ÓĘ*ø]" M–rιŚBcwOĆD×±;S²÷QūuQĀóFVø4ß${¬Åę3}ŻĻ½ŻÜģŽōŽåS3egĽėp¢“CUŗ Ļ(šÄŚ’KAļ‚ ńbLY6ČAB/Œb!ń§įō &¤„åȟ̵åD¦ü^ƒöį0Ÿ.3šgÄ²ŚŻšŚÓGU[¬rŌ8}'mżķsl[Ć̱3ŗ;m/sć0š)śR¬±ÅŽÕᔽčU‰Åū—J Éŗ·€ōĀZŲ1öĆÉüpĶblėč¼`“ŃF…ĀŗŃxńš@8XŖ‰žń¹ŻĘ7­V"[N¼FjR•–FX;‚ƒFlh™>׿ö¾i:ƒ] s–“LŽĖ%6GYD†F_.) ŚÉ?šVŚ.µ&WĢ`_™Tŗ½[Y#1«ö"=r7Z§žŻ4’ui.^5“hŽoV4:­YŅäRr®&%ūĘŹN+·)Mš(JD`}›@Ū÷93Ųžń0UļQõló7žī"Tœ¶“ė‰'®–óW! ā1–¢žīėŸq¼ERŖĶjöĮĖn(d,*><ŚÉ9ļx‹:j’Š·ĀKi2Õ]r:Ž< ¾½uįŽ^sŌ;ØFCWöŠ5Ōē9ņ†äįńšBė«Ģx{‰ÕA†}ņTü¦ś‹qnCÜčY†¶ń3mYµ¢Óųz„™ˆ*™ń×lLĒŅϐ¢ōē»ĶķŚ. Ȑ&ŌŃņW×1©ÖCŒōAȏńųjé.«°m>аŅ)™“m¹IrĀIÜ&źž3¢äOĢč((|' ŚīŪ'±ÄŊ.ō!AæŻ䘎b䠖Ż|̤ƒ ¢co÷œ.ĆZūūStīLW›¤µ#ł®ŠˆĮč-:%"9įr<“ø”Į§üVECމΌĶ*ę®Ņ½ˆŸūķkĢ)5%£ćļ+$—ž$x#ÜĖ’šœƒßqv,»–;Æ©e JöF¹Żƒķęšb-Äėb(®{Ÿ»¢+­Āš=²5˜‡idvś›Fįl/OÕ§>GīZÖļE“hl—WWóžs™7AŒŖŠt#8ĀT(‘ zSś=Ł&šėł¤ kÅ‹XĘżg̉ęq6q«vķ3šā1ˆ0bN¼—µ×Dh»³'ŹØP…;` ˜[cٚMŲÜŽÄ ¶bź -|-Ź.ÆŪŁŗÕ‘:ėčhVC>ڐŹģ$#{büX:ĄÉ…3ūŻGń@^5¹Ć‚‘L]°ŹöōŠÅ–¾t{#œPŠāĻØe”bōLa:*Ļ-|c›hĢI;“$ł¼fŽ7‰­ŗ›Š “ś„©;žĶHŃߟÄ¦”#[Ė­Ų²I[Ē„Qi;z$ś?|Oū aŗ®,ć½ŲUФ/7\f}‡µœ™d4Ģß¦ŌŚˆø>}-¾ėv“^’ĄTA‡ż(]'¢+DŒkŹgZ–©šEÆuÉ]?>óCŽÓńÄĄŹÆ†qĀ š¤Pćü¢é$°¹˜Š!ŽÄv!ņt«b1¤}ßz0Ø9½ĪźaCŚT·Æ;æ5=Z:ƒ&-±¾u{É÷õS·­”eĄ'GĄć·£ź-±8‡1s^ł|޹¼¹7\åØ!tņQ„éN^­ąG›]Š›Īxö'_Ć7R¤ü|Œ‘HõVi4޹ŪĀ@æ ?&÷ cpå‡ĶÆfsÆ1>«“īŽ«Į2ż¶ęqŸnŒeĪą€•ŌrŽ™Q{VČž@§īü˜PzUžŗƒ•ćłŗß½¹2÷ķ£™Ŗn“ ny;Ó²ŌóöU@j¹nĘE‹wž+¶aTæ æ?dGǜ‰kzc÷±g”„Ēi¬ķ9ūZŖü£ž„„Oū"Ńįē‹b܄I“j&ć~)ņēšbk½Ų’>ž ¢1õdųFx0¤»5Ā­ŸŠHmnœ»š°COį~ž¦¢,Æ[ą'Ē/T„ZšŁīé[`n$&ąxĢæ½żfź2;\lw„³4Ž<‘ŲĖčƗ©(ģµZqę`×ÅnŸC¬ZšAĖ! Ÿy‡Crų-Ń^ņ9iN>Ł )vZDjyGėŁē-ˆ‘*IR%a¬ü¾ĄéląHĒń“Łc­ĶŅrĀl7ÓŖ“2e±†SĪ“XŸ9¶SńåÕӨ⛹ؖJ~Ī»ćĖ› ™ķ7ˆŠńį99’²­w"© ę\„™¾Rs2Ŗ1aŻ6o˜ó–MˆÄŚ/ŠĮŹÕŽ2ap ”\B­YĢžĮĶŠRŠņ›śõnk?ŖŗņĆė]Å¢%ņh{Ä4›Ŗ„ߊąžmVvJÉ<Üź2œY1F8gų‚H‹ÕĶ!éBķĪMś;,‘M‹gģĖ%܂¬q'BčĀj}¤1Rś‚#‡Ü}v ²_zšUß¾¢æ_ŒčVfĻŅī:ß÷ōW¾Øē¼*{Ē©;Ń£~§MŃgņ·­ŽÆĒLÉŁC5ƒÓo0J/ņŸP%7ķ9Æę w+pA™M ¼…ż²G£ęX°Hr¹ōh‰ųIš, G­Ē·sƕóˆ†i‡oŅWŲ—¾ź™×SsßÖü(ŗsj4aI4—=ubqikņØŻ?!įĮä²Ę°lę$i~5&ģ Ėķ÷1ģSb”Čü’npŗ2dnW@é{fĆtźūę܀¹­<ŽQĶ”ź=šeWØHäi«ĘźŸkR&K؅jéĪĻĖé\§tYīŲ©’³#W‚(pˆåX{4¦[P€ŻZU×8M‚A"VLÆÆÕƒ>ć¶µĖW˜ł‘;M.Ų¤½e%ū<ŻńĒ+iēå œĆJ<¢óĘuĪėl“€FWŚ °^Æ>ŒŃš‹ć/šThRKF Īn'AŅw(ä xż8NHXó !-;Ō;ėI#ˆÉl4ĢÕių=?:Æ.“ q°L.n_KVįūS“Ęß1pFü øēq2gu©F»Ö²dqWķ`Swźüy†UX½,‹ń“Æ}E…Õ.våīŹ{ąN{Sc.Š|¾2ŗøĮśÕďÅģ‘¦æ†’ö­IrHY÷S AD妦6ćčC€%~įć ¬Ŗ/©"e>Źé«·aØmū0ąŽL;»אøŁąM2įóYĄzIu°Ŗ0<‚x’  {«š<଻J;žĶI‘¢M «ZŸ™ÓHsÖ¾ ńR³ÅÄĒToGyźxUŲź®ŸÆ{'©ų,Mē™.©_“¾}ā$¦NW•”T U–Ÿ5’“#K 9Z “»7»uBļŠkĒÓ0de<ļi|ž] vļ;“čs’¬ŠŽf[2üń$y÷ó$ŒomŠš+¼vH«s źą„7•£Ŗoķ§Ž®+ź9œ×¦ņĮć:¢öˆ§œ„Ņļ;¶ĆZŗŲ¦/<”ļÆJRKEÆš–ü9GuÓņ1x-qÆŲ …ų Y‹Ź;“4‚ĪŁQ;‹T$Ʀ:ń;E”ÜÆSPó _iŁdŠŪQŪe”sķ:”ü„˜ t«ę)Ū`’EĘ+A ‹ƒ¬Rc.›Ā‘hŲg¾ąI.ĪĒ%S9āķrāĻė”ķܽvB‡‡K.«“Ć·¦m”v¶PŃ5«!5k.ĄĆT…ę~­·X*Ž0”V`)Ā{õū½WiYĀnÉĆ!*Ą|ųpvģĶ‚ŸX{&³sBčŃ%ÜK/’ZK“PPūRĒ“m^(Ō½~\ʞ7l%ĖØ„=‰™ƬW5œż`•¢5éó0"SŠXģ`Ӏ±Å 8'ü<‰ē> ½^²¦|^ż!Ø2×%ÄŠP*zŒ©LcæML›ń²ĖĒ^ćĻ'„Ÿ®„łp™ĮŽ“Ą^žź÷Z0ēÜź`¹"”ķ‹Ńjö«%0Ūs ĮŸ«ŃēG‚.ØoŒ±—ģ¼”ÕęÜh=æ;+C9²i°—<āõ]~LŚ·æ“óMLeóÉq#…°äpfUœrt}˓ڭ哼}Ę©WŃAõ‹Śz‚0Ī\ć/"Ņ…e§§ żŻ6øe/mˆxWMŠĢĆo ”ĆdĄĒ³ k¹cV‰÷+qcKCTØAėń„jpV”^ų׌bdŲ©TS7‘cŒĖwrĻČ!B“bėļiöU%ŠõvkīŖ> Ø­×Rś”ÖīŽą(„÷’¢čr ĘĻbń^J׏Ś`ʁ֐хKaZ;wÜŻ1ŽrD¼®(޾ø’ęᧉĆō!ø©šżB»rĪ—Auéßīįhõ}E(©^¦+ŒJĀ›˜&£Ł*d›ÅFn8Eü&äO Ń |Õe¾8{£aМ<8Ø b RĒ”z[Yµ¦Ÿ¬bĄØrAI]h²\ĢšHĒÄÖFR‰,\ «=«Æ¦2‘_¼Õ>Ń®įć\!{“”™ JVŖļń©‹\bo) Š Tɛće—(č]«Ųģ?­o)”č:.Š/ZÆ”¬_N×ę¹č—@4zŹrWŚĮ ē?B>ąņ³†žVź§„ą•öF؞;w ×”¶;7×Ļēµ¹ŅĖ,0kĻźLd"|ĀYDg„ś8„ōźTÉČåQhl «7E“Ö_V}jŁńĄŽR;źxØd,Tś<6„iפ3Ž‹‚(Zń6;Õäę\;““'GM±Ø„nk.o+¼ŗ$×õŹŖ–yÖc“½WSĘO v¦j›01”)!-TŸų„å$6É(_70#tœć‰q˜TS3AN¹ŃÓ?*ÜÓķöbų¾¾?Ó»‡pkįŲżĄÆ V°ś„R&Ń&®c߁ģTM‡—VA)Śé⇒UņØĄ ) ?RŚZĄÓŹ…$^gŸņīڱœ“Ė!aŪŽŅ^<‡Dé[­TKĄØĪ,  ‰j× 5Š®«[1¶30Įµ®Ē ėІx*§wØ@wˆå\GāĘϧū(ėN2Q9 öGT5ž¾•#)Ł7rl”H}S5Å|ó­]¶Ė%aŹ®lz2øn`obxyļčŗRšĮģ×3é'3„/Ü#ż0…8õŒ•ę>ÖYV™ZOĒ’£XĖcž¤Įyq‰õ}f°p½·k£… qõ6¬QpŒęŒ*Q»Rä® ZB?TŁVw¾~ą5šõŒ Čƌ0%€…ßÅ=ZŽ›éݲ”Ą“ū‘Łc‡?/—yŒš‹ .7S\pŸGž0į¼"L$Q›łq“ģģ mµ¶SUD‰GÕ÷Ša^įķųürXwŖõ—'1Lׁ(ÉÓD?;‰4Z‰':,ėk÷Ōō®^OŌĪ'·žāŒŽ!:ØŁĪ|Ö¦ź:ļµļT‘Słńq_ĀõśM²z@FH°ģēŖŖŚö‚¶Ļ}$㔲€N[Vžå2yF¹¤%dŻĮūJˆō:—¢Ži¤4eŒĀŌӒń‰UŸ'āś›Ÿ;•yó2MĄyYŻĻXĖ“ų ©Ø8L’!į+¶nĄZļ&@ü„²ŻG§sOß_AҤH{6śPĘ+į| Ę·kb6wq“„Źy&ßło¤®6$éK.āeˆźSŠ¢;{źģō ²J*d ¾æ}ŗK •iś‡°&‚¾@<ž9i¢ZE¬»kׯkµģ\,”)ˆ@†…ŲŽÜK?ĶbĄČØ>s`Ē|“ø    Wŗ&Éńźłƒ"Æ<&|2¹īRCōŠŅŖå‚…ż]ĄÅ$×11Ź8Eēp;æ½ >Ąp‹+ļŸhSB`ębD®Įj·†™ µB'¼i?˜ŻīŅ&hs]‡C5䦉y?øĒ­} 2URµ6 Zżą?Ą5ęąlķ[ėfģ‚IŁ„aįxÖnä!„#džGLoÖL \#āĒŪüį#Ž|_šŒ$’Š5Üłż«£4ŪHó·²>ø­_æ* øXL¶Æö­äII~łr„śD ”J¹š_½ēĖŅż–IG5G» ŗ“»ō Õū9f”cǁI‹n܍GŻzˆł ļYštyb”Œ®ŁsKüÅ&ŸU”(ƒ|²ī 3”°g­Żįż¬åX ģ»uz|ŚÄi'yŹyA÷jJ nó²!Ś„8<ŒŠc’»u7ņr$ÄŚJv¬W%ķåć3P¼ņĀpćÖEƒ™G€§O5Ńr.ą6¤k憒R×¹YID+~I¼ļhJ’éw“La}ļŻXƖ:I™Ģŗ\˜jérp§Ņrњbėds«}‹ˆB±) šL"“Ų„d 5ˆ’Ō!ŹÅńøGŌ¹€'Ńx°&œlˆąkēH$żÉ£sµ¤@1?œFŃłįŘu~ėqYÜ Ŗ÷•­Æ7­I{tž&Ņ ¢qĮ# ’n= }(ļ¢o¼™©$\ĖN7ٲ“é,ķ9ŻYżš4…EŚ…£02`£Åäģ Žöc4wCŁ'^RƔ źP5’0UMąKķ1ß,ėŒDĆŌ āō‰å ż }ß[Z‘w`žøŚQ?öq\ńA¹P`§§>£k5ų{rĄī®ŠŽGĄÅ‰ćwH¢;ż‰8Y„Ÿ­\å¢Ń4qv¢WM4žbNäūd9ƒaXɈģÜHb!łÕ„AƒP‘#ķk'xÅnŲ¼ļ§ļ™~õ°ŲžÅ… éH_¬æłŚC°ÖļÕ³TŽ2ŗ)Cš‡ųīüöR…ž`.= œį€üԘ©Œ³ÄĶõ9]Żģ•ɏ9ųĻXéBH¢’ü*‘By„³…ßæĢ]Ćętąćč[śŹŲ.Xöå<œqČ"ßz?“ÄŗĀ6¤$hĘSÉmó”ŅچQ…©¤Ŗˆ(-½|7KĘƚĖąP³ą°“ć g¦n¤–uYŲW°:TŃĪMՏÖ+ŠRcāQ•W|­$Ó÷ģŠ[±b±Įōłt#TZ‡Ńdjf§+įł9$7ŒÕ¦-XÆn½Æu”“£XėDņz’FöÜSĪ“ü}g*sø&fזWĘqIŻOøAl’=S·;KāÆy”wĪķ*LuƜ†p%H×°œ åĖ”ˆ‡A£AÄÆŲDā*ÓU-Ā÷˽TS®»Ęć™ß©O eµ#Nٙلo?˜'ņ”ķz›L½pßŃ{„ʉ“½äZŪĪ土šéī¾Šu‰Óö‰,r*R%SPśŌ:éüJ§!@ ü Õ:HŅö#jÜļ¢e"†1öXZēW²ŹqŽŸńФøĘk„éDō_į²Į—:p{÷æ©0±vCźõ‰āÉź!³W-ŗõ2ŸAķFįń-@Ŗ¤hį•«éo×ÄŁ°’gõgt¤‹Å­łšx'ī;}ń1RæoU|‘UTś7 ž¾ō‘±S5KFRLå3'1Ł—v D_łCnÅNģ[~‡©[~HU¶ÓĆżÕÆ3ż [Œ<Įš•„Y`Y¢Ōg·ś2_zr„¶¶‡č¶ŠĒbP‡ÄQĖAų=~H隨„ywtßr Eudaó6Ās 8|U-=„(ƒMPh=A½[ ²,WuF ķ˜„_”1æ”ķ=|zˆ'Tµē 违•t? s¬.š½™ł“/¦7+§ŅIE4W¢Ė£“xeĢS–&iWŃ·ģ OÉ Ÿ—ĒV›…œ¶_Ó8*b†äŚ“X¼’ėĶC±æ«j¢‘‚Ō +ˆ¬ĶuŅ)ųŸĘćéķŲ5Fęf.ā=yāÖ-t®»Īp—c•;āÅV÷‹aa6ć Äi,’ŅdT5>Ā«Śé÷Ļ—¦rė%GĻūņU(3¦Ūqēś5pz÷ŌoćG"TPūkĶÆU ’Ļź]‡Éåq3Oՙ†²ŪÆ0ļś"ŖīÜ¢ŃĀi-»‘“Č 9ŒédØŻł O]X˜sd[I}pōܧyĪ8‘>õ­ļ“¦'s«{š$·RģqŲü&äXzĖQˆA- 'ŗė„`ÅśŻõƒńW·­ź–¬7tģ+¶®>³°tKĄ™ÉżÖw•šš±>–ūa Ć3§ho#ˆĄŽ½ę_:'œZž ą ”»! Ÿ“Ö±č~w„"‚VĶ,ŖˆĢųėø‡M¶æ°MV(žqqgj”8LbŌ3Yr"É&X€?ˆZ®ØE403ˆĀEQĪ–4v ¬ā±A²ą+”»µV¹SÓāV¢·Œ¤?›²9ēuźwÉłXIń†xJ:—69Weˆ<™ö_NšZ_Ź‹#iS„Ÿ°;#?šķÖ$Ć:ō/Ē‘Š!Ś$εcKHʉzwĄI2•v­<ÖĪ|ySc½Bn‰C¶hķEb…™Oī?¬!GÄ@OmF=}c+U¦šØÕŠ/ąŻ:¶¢˜ö|t„˜B«³“ –Bāµü¶åDä”ģ ČōY")ń£xĖģ®Bƒ1•Į$~ÕM‰¢“ķü¦˜ś…×u×ŗyų¾ =m?Ē›…שūˆŗw„ųł5Œ³b2aø»sStQ„ęvWātń2°\·ł6±’½6ļJ‘!$åntZ—ūĮÕüꞬ¦œĻ[Ź+āYF¦q>„ĘŠ“ß»“J ŌE’Žó­Ś€vM‡½ŠˆŠŽšvN߇£žÓß<~'QēBĖŠŽŠcń-”ļŗätp™ ŗ]ł(éó΃ćiē.m8·Us¬z ±¢/ZŸ*ŸŪōbip]¼÷I¾–mŹgKÉņfr72éŠX½ÓĶŠĮõX½¬™Œ_BŪg zø°įōīņĆśs>xõč̐EĶ——1ͽB¬ˆ»ˆé ‹6żÖ†P›%Cē“h4XGīdįW(Ibć“?œ€}E/ŠųŒJQń“Åš(µYUܖÉ7rõĢ…ż±¼¢vŲbž43åĆF˜> ł=:\ {:œĒ›‰—}ī"Ŗé<¢õ«ˆ°ązQÜ[N®{§Y!sg‘瘾L§€ĮGqGĄN}SŚ”‰že÷ŃH„©œ†1µšµÜē‰~ĒTSL‹Ėy:‰kž6ö¦ś#)vźżG>HĶ^AØÄøÖ~vWŅį5õn]Ęp{š&iÓOc+AÄ£Ėį”6­1ķžTQ\ŠP]#WXzū”¹QŁįĄ:ā-Hė¢żqZ|óé 7ņ8M”O /<½$•‚ü~žEh”°šŸæēBx݊&ü†īˆŲ” ÄŠē:“›<Ź4ž63ūC¬ø|ß­¬ćŚž‘:E¼%šCå_÷-{¼™ä‚æA­Ū<Ęi!„Žḧ9ŅWĶį6ńłH(»sg°qŸeöä_e$ ąx‘ū„tŌ ‘ąĄJĻ.hz˜jćS§2°~ńé‘Õj­h]qØöUHqóc³¶[żŒŚż@¾Āęóå˜Ų*F³?ČąŹėĮøņ[/“śN8ĘŸ»–ōHnÉ|üłėŹÕO£»ŪŹüķäk8ń.Ŗ N[oUXńėbY rNł¢L’dņ<‰Ē؃ķśÅ“Éżt3ęęgtšL-j›ÆdĮ(†„dpÓĮh„…čÜQi±?@(Óų»ĶgõķBčC”/E¶›op F2įÉuļ́łģĘnL‘öć›Ū‹W‡ßG!t„¶ī¶F~w>÷Ÿ<É}Ń=;5Ćׄ0óŸ:čŖś‹hƒ ŒD:+ƵæYąqķŽ1%¾˜Ea'!"„~T&Š„ņŠÆg żŽu|sd‡€µ€²ø†¤ŗ×:£ŚŪʫԔ– éūššæŻGdR¦³KäŹ†Łž®ø'īskÆĖåŃłŅ·ūAŸLJ¶¾¤¬TųĶž©{©ŃŠŲ\ē*0 iFŃź…‹”,¤Äk>*Ļsįj“Ń; ©ZŁšœ+ŒņlƒÓ–~ŪÖģĢ ¬×ÓĒOÜY\ص‹ZŠśnŃČIōåx<°Ś“‚-‘eme¬AeßP@ŁmxBł ŒĒ0·ĄŽQ“…{ėč°ė¶T{ »qå4’ųü_óbÜ §¶aźikoƒrŚź›ŗ‘HBß8Łd¬©ÉlöŗIeĄR~[\c”ą |(»ļm݁Ć2‹Ę°“õ¹VÖÜŠtFēĆ*ŚZd1†Ō3˜¢qėųL‘+ÜAYw›tv†_ńÄŹ=,+«ĖofÕf%oEC÷Łļj½b‘›·™»ķŻŒ/ŽüX¼võ¦vHNpšį“”€‚ź’ZcŸŸārģ {śH )røBüÜŻē†ÜQ¤lš|«ćäøČ.Rēy4J£Õżkńņ*$ÜN’žtŽ|Ę2ģ±³ć¤ĢeØĒ>ܹ•s%¤©Ž¾Ždõ<-\ŽĪŌ& ¬2ōŚģLuv+rū« 0w¹ßIz°0­ōUĆūĄīį¢Õ“¼Ż /b~»_>ĪȄ½Ćƒę„ģżņcžIŠš@O˜Ā:ęōp6 Ō¾L"ŠhkR`Ą˜†¬iܝĢ8DŖ?÷ī4¢ßŃ©~.+,žkŽ$QżĶa¼fl?i“Œ•Ž#ī·l„,^łŚżŲÕ§¼© …ģjĶ—+ߎśŗß¶Ēõdn£B[± µd $¤ėy[ū‰£äØ#Ä«õeŌĶO"Z4ń‚×ó÷ļŘē}Ć#ž{šc@ׄ˜™U6mvĘKŅź„„są·šžNįDb’T ų&›ģéäjæXLRųBDŁANfLxéŲ|®L,å” a"ŗ˜œŠ£8;ćGŌä?Ŗaē /‹3Ńd‡jäw~ō&vā²Õ_LBöF@?Ÿ2S-…ź6š”BÖCŌ$ņՅfNāS"I‡µēvĘ&iĻC}. ‹ĪvI’ŗWBņ‘Æź±>”š{Ėu¦pםdµŽ’`¬Üꔚé%Ūšģx¾źĀoĒ.ĶZŽpčL¾ēŽX,±>§kqŹŽz›&&»4ˆÄ"Ą]—F»ą5üį·.+xĄC—į@ļʘźX«0€J¤—W$l-2žAw’łcäŚƑ jƒ’Kż³ć•J¢„ŃĖėĄ¼’ž—Ń‘K±“l€ŅM1ß=t…NĖ€ųų&޾,āś–ĘØ'Ü ŻŹĀĆS )„*f‡Ū’§Xł€`0Žb:•»óvp×ʃlvEDCLćn6½}ø¾"UQ~«P¤īžŌ§ y’2ŽāÄTśćj3Q‰_ēm²i_?»¦yRß]KY ļę²u“ņÅĄ¤š­P…z’{§£y›f¢”§Źӏz¶:÷WcemOX% ™š~ ŠgŲØL瘒šźŲ!å‚M€®æ~uēp\ņģ7ĮŖ½;ךDėrEhińß½Q”˜Ų¦„R¬ŻŒXmG™ eXąŪŠĖ݆8HO‹cVŠ&ł™6,Ā B# ū­K>¶éUaM";U)ƌļ…oNFŽ%Q‘Aը͹#’dF¼‘jfzˆO¤ų¶=×’f7Ńō4¹Ä{%~uŪg:SVĪ}Œ`ģ?|B+«¾„ƒė]ķź„Ž’xÖ„£` ¶żPY”Q÷ŅBÆĖ— ÜŃŗ6ū§Ķ@śĖzn­¼#÷eL#•&“Žcij}«&v”qÆ3$X‚{I`x“kÆņ³”Ł}÷ŽN@ÆjbS”eØd.™ß^śeĻ–3Ž:ė—¢üŃHįÆóƒv5-šsWb%ŻG[cĮ[©G‘Ż ū«Hņō‹Ćē+ _Ų6I×Ėö «X2Ń(? >{ÕÖ~3\ŃŌĖ&Œ”=yĢŠ\Ū •ĶæMūql¹Ē‰{«žŒ»Āōכł¶Į©(ÅĢ<ūńbĬ=Š­*~$ńdthØq³^Żö©&«ō×o—˜sŅ7ī嶒Oł[ƒ‰¦č.n­Gąś%j+¢åȗęÜ«†61Æ>m(—?T ö˜¤ ÉæõüÜł©dūaāĄ”n"S2'ŒKTµģ• rjńSŪ҈Hī3jŠ`“¤ŸJ±1q*ź0Āį”ą" >Ź˜Įg ›)ń«ķĒ›µŸ¶$#`^ŅųH|)21ćć±»bż1ąUdz)»3! įuN“y'=3ļƋžŗĒ ˆ*&š„ĶD£aŃOnz29ž­°b¶”RŁuõ§ŲƒŪ³ņ…Lœc`V ūŸ|ćģV ī\ŹÉų„KHdöŽŗ~!× N[Z­ō7ČB3£‡4VĶ»,ā?Ą\˜mXf•Īø€åw|,°ō@šŒ×Hœ&Fü0“ĢK[—ƒķąŠĢ“yŒ&rŲ™RThĻØ ā[­|… śHˆfǶNōXŠā5搏}6ĒÖ”–lŹa–ņ'AńeY¶O;x6nņG‡‘ežĒn/C^ĢĶ ?ŪĪ9ĆAI’Ų ¢ečń6ĀĄŃžžOŖŁY+'D} (ÅF=¬^~J(ßgY’$4Ryl–­XĢŸš˜™ bšP–Ē“śĄ½ń’®UKr­Ķ* Tžo²ģO9“į/Źŗņ}bIH?¹Ü_Öx<@1jx,÷o§ƒGĘ5췌›B­]ų†ŃŠÅf‘¾īc°3'ŠŚ‚JŪ§ ź\åAĮō»„”–nŁo‚N—–#WW¤d_,aeµ(ł‡Qf›Ēō)7`*ˆö§AWµRćC~bęåPMUŁ“Y¤Łėiaœģ.ŠWg“Ł?°A KŪ®%;)įäØē ćg%”%˜&{„ńœĖ› ī“0F“ļŲi¼ÜZĖģY–C:00MH0ŽsWōGō©üš„w‘{³¼ŻFĢį©÷oźĀ'tq44.•,R¾ā«×®čj‡ĆĀ|¼EčƒƒSĻĄl %yó~dž rXŖĶ$÷|š›<ĮśdŒ/Ą: ¤;ĶŖĶ::†.9§W Ķ.ŁH‚Ękσ~Ī–@‹śĆä³ß÷GńdŽgøŹ.õ'‰šk!:øI®ą–¾Œhž»źŃĪ)vnį v.ĪĆĻāēĮ»¶ĀE¹ŒŻź« £R€œUŹW‹` ›#†3{sCŖ*¬æ",ĒÖĻ…׎%{ė}Fį»]Oö·jóa×ī¬Ļ‚pٵwS„Œ 9‚»o:š¾A`Gģo{qŁ6HāĀx<ÆžøĶ···'ó@ģ~Ņ/ƹwĢ@ūBˆÅp—…2j»[÷łMŗ““Š‹tŗ7œY¤kNÄ“¦²"õ/å*!Ź!(w IЇöéÕ(ĘžģšNńqĻ’œż’ M’Å%|Ū;\™ėŌ]= c-’ˆ8ÖCAe"l|ӁBƱɉHŠp¢Ø©ŹŽĪ=±}£G”ŪJ ž€ō. endstream endobj 799 0 obj << /Length1 2394 /Length2 20017 /Length3 0 /Length 21401 /Filter /FlateDecode >> stream xڌ÷PŹŅ† ćīī, ø»»»»[ø»ww‚»'øww·ąī.—½dŸļ’«ī-ŖĀzŗ{ŗēķé™EČI”Té…Mķöv.ōĢ L<QyU9f&+ 9¹š„‹ š?v8r  “³„½Ļ?"D€F.61#—@y{;€Œ« €™ĄĢĮĆĢÉĆÄ`abāžO ½@ĢČĶŅ ϐ±·:Ƒ‹Ś;x:Yš[ø|ŌłĻG• 5€™››“īļåa[ “„‰‘@ŽČÅhūQŃÄČ job tńüŸT|..<ŒŒīīī F¶Ī öNęŌtwK € Ščä4ü% `d ü·48r€š…„óæŖöf.īFN@Ą‡ĮĘŅhēü±ÄÕĪčųØP•–(:ķž,÷Æ:Ąæ›`f`žoŗÆž+‘„Żß‹LLģmŒģ<-ķĢf–6@€¢„ƒ‹‡ ĄČĪōÆ@#gūõFnF–6FĘoŻ !¬ 0śPųo}Ī&N–.Ī Ī–6idü+ĶG›ÅķLEķmmv.ĪpķOĢŅ hņŃwOĘ®µ½»÷ČĢŅĪŌģ/¦®Œźv–Ž®@i±Ē|˜ąžŲ́.v&&&Nn.Šō0±`ü«€š§šo'ó_ę _¼ģf2€_,Ķ€æą¼Ü€'Wąļ:ž—ą˜™¦–&.c ¹„ܟģf Łæųćü,=ŗLćĒ `śė翟ō?&ĢŌŽĪĘóOųßGĢØ„¤ .'NūoÉ’uŠˆŲ{¼é9Xō,ģLffVēLJ/’›ēæųśæ­JF–’ŽŻ?2Jۙٸ’%ā£{’āöļÉ ś÷µ”üoūyØžŒæ;“ÉĒ?Ģ’Ÿ/ĮßKž’Ķž_Yž_Ē’’īHĀÕĘęo?ÕæžüF¶–6ž’Žų˜gW—»!o’qCģžoØ&š_Zhjéjū½Ņ.FwDŲĪücĪé¹Ų8že¶t–°ōš*Yŗ˜Xük”žs%l,ķ€JöĪ–=;zf&¦’ćūøy&ÖO‹óljżķ~\¬’-+ngboś× daē99yĀ} Ą±¼™?®Ŗ)Šćļ 02ŲŁ»|,|Hü0³w‚ūė\9ŲŒĀ™žEF‘?Ä `żC\F±?Ä `’/q2%ž3€Qņ±„ž+€Qś±ežŠGu¹?ōQ]ž}TWųCÕ’K\ՕžŠG=•?ōQOõ}ŌSūCŚÕ’ŠGu?ōQ]ó}TלCÕµ’KÜ‘Fč#Ņų}Dšü—ž:_FÓąGŸ€’ŏćcü׀ż ųbö?ĀĶžl”åž+ų²³ž…n’Č’—ߎÕéé?BĢ’ -ž‹lͱšt°ųųrųńaūGA¦åÖ’Ąé6’Ąķ¶’Ųü‡ö?©Ų?–Ś} ų?üźģ’T’Xl’?īŻ;üq$sųųZ³³šżéóæ­N’Óʏ›ČčšńŽŲ’i=Ū‡rWēä’°8ž?zńN1’ĢžŻžŃöpēĒüæł?ä9Ū9[ü#ÅĒ.žģéć9dt±pžćx>$¹øŪ’cĮG׹GwŻž r’ĒŁ¬öų~¤÷ü~4ĻėoüŸ·ĆÄÕé£Y.æńĖųļÆr Šh·²hoĀlUÜžP#ŒļNæ?Ɇ8ų+ņFsO×ķP9P”ļń†µ0jYø{ž źq ķ”„ģ½ŁZ ‹ÉŚ`Ó'=Šk„”ŅĢx—Īg’éŌYĪ•å@¶«KǐÕĪŌėņ‡Ź°ū­Š56ćõžBÖ±$ŏŖūļ—Š”Mg `“1QŠ8\\¬`ĮĀYU"µĀsóŅŸœ Mž'J?¦Œ±°ļ ®VЁZn§ćŸœ :ČŽf|=źåĄ“5œĢ‘ļõŠć<ĒS޶P;« ’ńfKļM’’śu‘­Õ€ņ>ö(G‡ߥMi`·Ų¦„(‹ŃĶŗ'? ouy9$ÅÖb«bø£x§®Ż-“Īcu~ć¢ß īĆ:ŁŚ/ˆ­£TĶL©Ų4»öMirvRXž{™eZ$ć"#8bH)ór–6ß÷‘r½Ó»!ūųŖ;O@Gķ'®+ĀĻś„ļ=6ŠØ0~ˆ–MxE„ˆé„ M)”ˆØ¬`ŸL¢%oĶØ„BHzƜŌt KCžMõś]ō›¹ę(Ą½ņ†Vb(ŅpD“žAß¶ĄĻĶ3N‹É®öŽ6ŒƒĀż–uĘ5­ [kV*ļ½Č'e»ƒ@MZ=žwmWߎ;\•fsXׇ‹ŸŌc„»c7óęē@į|³ż d‘ެ|ÅūŠN.łC9ĪČ %œ€VÖÓ(åJc?6”ŁVDöN‡bÓ6Uk›FēŁœ/~<|ÆN³—xŌŅ$cqąBß­ė22P‚ą† ¶!6BIšs:^Ą~ž¦{’4Ę6‚7“ü¢ö[`枈śˆ5|aōēŚĀ”šĢ/f·Lļļ‡4Š7‚„1ÆxÜ$ oó=Nč`ź®S÷ŅU“gĘĮg2Ī„žŖXœv–+tØ"ŒC<.’cŻ£Ćā/ĪjD“Œ ūʇA­Sća·bY ÆŽ† “®ćs?Ē•¹SQY*(G¹ÄÉـ‡¾·£AÉtāķäģ«¼Ūśād{I`øĆ 5½¬d|N^=h/—Į‹ SĄ¦ßŽągya3ĄéŠöä0ĪQ‚S 7ąxUĶćŹ ˆĮŠS‹Ŗœ† pvˆ†Õ¬ O:ŽēŗÉ B¹tƊ¼[ĀŽī׏sWxµtnfŌmXx„Ū+¶«5Mō0«Æ0+)Ɇ”š³'}¼ ’NĀ‘ŽŚ(8¼®“>gI›ī“ –½lŗ2”.‘}”^t^&±vaהƒ£/–8Óc¤,uܾ3ƒ°ĮžF%NzžNÜŪܵ;ŌhŹV \ . Ó^!³ļ‘»ˆČ8H€Ļ+¬#źRd;̅ߢ™]ź›Ś"ö7ćeąŃÜ ”Ķģ||«1IæĢä-‡Æ˜YæĘm‰åą<ܙŸŻ öќ·] :{@·ių‚ܱónm­ ¦} I‡i~F>ø"eyé¼ńP<£œ¶æ±Ā…'ŪQ“”Sm»xßūVnC·)®»Ų—Y<‡WÆĄT LņdxŌõ4† ęXdŪ§Škj›²˜²ó³ł –Ä/žL3c¬{'ɳdć&t5Słu©(Ҿ!‘ 4é%?ķŃüql^g±äÄ'–7ų/åvŌ—G]‚²­"¬ŠĶݘŒļ”oš”æīć>mŖ^1Ūžv=ŽāE{ŌĢ¢‰ŠŹs@„¹¢±F05Ū¬Č$챿倇ß܎Žś÷j`)L³ <å‹õfRœå‚/Ńѱ}pš¦€@’“ōŠ\6„żĒ7~¾4č'²*éĒ \G¾`‘‚Ī*„ū[0:7żsģ.ęĖˆzD ød+YgaŁĘß6ŽŸ0Į¾‚bą/óµ*68LÅ«Ē .dDļ–>;/Qæ­e¦2CóśĄI_ŁØ 1 ‰ÅŪö&ĮžŌOžš«ÄÕ£ guTĪ*¼ŠĪ“iŪ¦ŽżJ†QŚ įÓĖäqJ¼<oæ^E3ѲI5€ D‹.¤‘ĶUā•«ćŹ’[ś‘½OS7̤Ō[“²P²ķ†³ĻųK ^OØMH &ŌeG*`g1ÕauŅīīŠCiąįČ)Lڳé·Ņ¬šD!źŻjżķ4źĒCõļz” F“B7 y.żČ:ą/…b+Ŗ†šé—Aj!Vż£SŠf‘a QØö xWĻ ×_…ūFÜż zĮš˜N–Il 0•x ¶Ķ•?  ™©§ÄĢ„‘ąUō“O õ“TńM‡µ\Å6}Kmy)Z eü-oŅomŖ±æTsó63V»'Æ3Lš›.{•›ö 0LÓ9”(K-™Ē|T­ĮB>ÜɅ3›_ĆÉ7ąœŗ‘2ĒZņø£DbvCÜ&³‹Uūø-ķ°Śż4†gS]?Ņ>= Os#TÆXĢ-“·¹ÕvqŠaŸŻåœ)sŠZµ×-“,‰•¾¦N<\ūÖ ĻlÄjśķA*åģØĘKˆ)jŪŪs~i”u’¼žĖ`iŲņQź³»Ä %ėžĢŠdq8§ećfÉßćė|Ź6E­ßéŪĘØ45°ųšŅ‹eŹ%ČA¹ę•žõń×Ē­Ö°_& ĢJ—‚xŖgĻ«CŽ3ŗ7GM^‚q›Jc³ąvyV|>Ā Ńx©WZńu»)Śś‚[‰ŪÅÕÆÄ#ģŻRāwæ9N¬óˆTn? u)MCõŲ cuM¬Xā8d’UKĖö¹ō.ėģŚØœų“³2Ļčk\ <øJ9Š\‰ŗĘŅö‘qEÅ@pōĉŚsõn׆>³üiņĀ»¢¶6w6?®…ĖF<š '4fy;MK$‰¹¾ē¦ć¤““Ā+Ü·1ŒWX!ø€*ŠŁIōˆŠ^Ņ×+¾ÕĶ[t ¼æ{ą‘ £ņĒ啐&›B|-¼p‚sl ļķ¾@Vśa:ŻoŹd\ĖH°Į–„ų{ć^­Ó֘÷āāP0^Ck­)d¼Œ»™—=Āī…ū¦t{°Xƒ§m¤—ĻӞÕģlr@Qm’ 2ø±ņø3õ'ޘź…—.$‹9#¾l/k°.Įü3h3u‰Ąt Iń|vÜbz±`āµ­t„MŠŗīĄŖL!Ų‰÷emSĒQ˜<¢AqĪÅgaą€ łøĄ!F&lĘ|$C1u…p‹FmŠe¹¢ĖbkÓ}ī,zKC ųóˆŸwžaVyžHR ¶¼•//ņó|ĢłÆYZ“ō.fč7퓉žZ󸌰ådł[AnÆ>„„q_“šźņ~‚ö'yŪh[U»aGźE¹ģy+Ē“,®·XFš²0āvTź|c¦µ©$[䞵_„Yb±oHD.ǾK…`ćZļ"żPe"ņÓH_±©†:'¢¼ q¢×½WdĮĘ:jĄ;ŲQzs[↠4ij׃U))¤ ©}PI9äˆRTļ^ćfFé®7}󣓘·ƒxÄW¾Nä”OŽŌĘ”ķ;ārża‡3·©hOĆüA“’Ä­ģ.}¢ÖNø3­¦j:Ÿ³Ōæd3rŒÆ)śĮ •ŲdO„‘%Ōa¦ßæ»c=”€Ńz{V0(Ł¢Vwy\N·Bį.ŁL/£—ƒ!/kŃĮ‡+Žs¼,⼟~=¤Ü£’Ū ŗ­£ķįVtõ(. µb8ÄśrSåmo½š³}sĘė6tķփ͇›^ių;ž5s4Ė„”˜åh¶ÄæfĘ”®pr¢xäī—”8ūŻŽ&:‰ö ł «®³āJ Y<ō§I)/F^*ž]-L8Fń4JģŠ]ßFF;–™šĒ¼>AĶŖøā•8+ć:Gbk‘3÷%ø—¦ą—ųą„ÄČ׫Ą±d쓉1^~?ż™Kü¾Ÿ¶BŅŚ/YĢ*y>=9$§`-ĀĮ¦ĮŁrÆōYOśæ! åhāwĻτɰ”ųgo£ņ’Š©^¶É?™Ŗ ėĄ@+҈®Ś•$Öįńp/Tüņźƒ}w:]bžżZŹęćŒyŠ( ½=•–mc‰é7FH«3Ć[YaCaš%Õö=ķ6™5о¶Š:Ķ©“ĆzĆ#ų½z­cĖÓĖXžjÉsaj¬/ė֎)[Ś4ü%X#­ ĖC/„Zx•zÖ4тʜnͶ{Ōƒ8sGŸÖĆRæī‘*™ōŖøI_ —ȶŻ1¬Š%ĮWš¤j…޹wm²v'£w¼ż0iA6Ö§XŸYBŖĒȂ¦ˆ‘vī ‡÷‹ĖF¢Š¢uŲŪŁ„ŅŽģćibՍˆ=¶%Śā˜5¼īO dXg5'Ÿ.Q(ĶQŽ@f¤ś§K B„\ƒčcĘŻī‰Ķ%PӆKPC 3æŃŗ’~–ės{Q ×Ö7†øØʁ:Šś9 ßE§°×°3zv/ī÷4Šx)ѲG#Źyü”‰A=9¹Ł}@š@µ¤į7”ęs/VŗĀéū·„#¢āŻ&8a½ÜŌi½šdĻCˆ8ˆŁ÷Ÿc]ź;– , /Ū\K–JĪN¾Łć%ŁĪy«=jĘģŁ Ÿ4ˆ»ä›¦>’Ćh|fB‹Åvdäh2WōÕņ®8‚'DÆ1ž=1˧Oā?4ū`~’&Ÿ”׹›ä_šÄŠł:ŒJ–gÖ%Z5,Ÿ’Ąßń¼ŖĄTøāD>ŗ„vżśvz‹\ĘFĘ,6n­3w ē“­˜Ī§öO æ’ŅRÜSŗźš°k’? Ö\]Ł[«gUyĒ–šź]LĪō­•vD#uNB]—ĮN’ńėēåłNä’Ö‚“ć<ą3#Š;ŲĪ˜ŽŹē’_<Ń\_¹Ę]`U—,Ķ9õ€ˆŗļ½ģĪŪ)o>žƳOWµ#_Yģ=:ŗj6ƒvBŚLMžėµWw›³8~ ¾]°’żėU(bxSŗC·'Ā{!ó“!9G­År°&+!‰ĆĄ”_ĪNvmāD6Äå1†ĢįĘ öj*šā̾zķ²††¾×~:kĀŽāmśwC Æž.µķŠHBó<ƒ=;VN”Ö”ø‰Ē}OTŌĂ%3››`H'gy<*<äo!ĻXq“œ[;Į3œQZ(D†7ŖōŸEįųUwŽ~ńŗå7ųŚÜ7ĪĶ2-Ąó”Ó!Ś³Æ†”ŏŽ÷šÕ%§Q×dĘĪŗ„+¢sJéó(Š„iķ|\ÆÉšźh„‰ąbŒ ‹V&=ŁŚåg^tÕü ÉÕyĻ5ÅÕä5_V3Ś.EŸaCźt„LŽ|Ÿ›AĶʤ×'žšWŠC*Ö®>z%t8­éU¬VGte؍vZlŲ ņ1ƒ(å9{†Āx·¦¶¤ ō™/ƒ ē?ĖńŠ«„eŸ£^£ē~Į›sŻMp`Ū:× Ēx ŅŻ{ß÷KŪg|*4…5%ü–lo˜P5>"­·ZÓlĒ›—8`Œ‚w‘ēdæ ‹Ŗ¬÷œ¤_KžQézŠö”\GΚ]ÉQœ6&-†F8WĖqŅ2xŽÄCmKČ«’UH4¼eŸėӋoŗŁW¤>^ˆĪO̾/āä !:†°Ś±#3¢Y™!¤Œ¶A%T7P®® Ķž¾ƒøQ<ģ•˜0Sh’¬ŽĒ`“ēßX¦8Od)`ƒlõLtN¹Č~Ž_­JJ•Ļ{9źˆ<¾VõB -;€ż©¶ +;Ś]÷;¬„Dž÷2ˆį’ŖŽżåG»ÕĆ `ėżūśt?4iS, gQÄń3ońńƐ“VYŽ›±^Æw‰Æą•×!`½<¦ęNŸCݲ\B8"`ō¹70b°ĻõY @o¼”zK– | ŽQõ©HOē×Žé„ J”ņ;±=ų•Żmī–£7|`ßKåóĒ0īIr!Ļab¬żĆX©8š$N–)Y|>^'jź‘ėR7\ØfŗšWü»S®ņV–³Ų)ś`9P˦Ąl* Å%&Äš²ÕēĒ  fV¾Wåµ.°½F©vÅ@.Šžšn,…Qi½OX?šŲ)ąfDĀēµŪuéć^Ī$ⵄӶ§•bsa Ū4x¶LJR[`óī31ė¦[Iß¾£ŠJ<°bŽeų¦9“2ˆ +j:§³[Ńkfq,]XT(÷;ˆŒ†÷2ń!péø·æF?ƒ•@@9«„X{Éy°cϚ8īÓž2wzĪ6!Œ°I}ūzR'OcĒŖčżZ æ0“ųĆA)NE½÷[7KŸD?¦·÷}”™QgP}Ó:`©ńQųL`uņĪvźĘßv_ĮҾpō«~{Qē]ū¦w˜ÄŽæ‰%ī^[I¼KhłlėӞ”_Šw3y„2{jl ėŗcWį7ØP±ąÕŪ4żŹō@)gAw퉦ś+Ńj’@ˆģ{©žO‘Jęä ž/hØĢśˆ@°ż©oœ}ÉfÆ}÷B»ĒčA·ø+ˆ ÅKė”ū„óÜdOfŒL›'¾¾ŲÓX&Œ#æ)…`näR3x3{+Žę³7žń±*ė;+Ø‘Ų’ ¾V¹Ŗ8 ćz3qCĮ7‡ļGæÖR V÷õ[Łė~Č.VżCĢYbāi‰é2ąÄI#Ŗ‚†"šāN¬gz‹Īœ9š‹4ō@É/;@b½‚1åö¼×ełĆ™K {ĖHTAZ4»źÉNbֆŒŻŻ÷HĢ@ņzcš±…ļ:æŸ6%µÜ ˆ,‘¬¢@=œ0mœ Q@†ōšüf`ś^Ķ y Ä©“U”"žjoƒV$o²õłf†‹&č'€DæPĶDG:“q“Õbhø@ÅXįšI/Ŗf©RRéÄ>t'ä7Č3ę:c2§ņ:į*Črę*Ą²ŖŽ..:wņ%ņÕR¢2¢÷·Ńwézżõh6j”'¢åŋbš8ąīę=WeĪÕˆžņĮSĖŌ¹S§’ģ@fŁŠŁĻ~“^ØĶž¼Č·0±B_oŽ–ŒE,)‘б„[‡XĖŽÓH Äc™8ŠÆAŽ^#F£²œē§ÓELÆ;Ų¦ŠMs”¶8¤S›fh£«G§Ńę^ŅF7ہX<æ}(hjŪӐå쟈oÜ’m CœgV®źŻøÕYŽķ¼½˜5xN¹Gb!w‰ļOG‘cłƒSŠÕŅmmĒ;¹®ˆŗoł)Ųõó†‹óf¶übS<īҊ5”³.pöż:Gnˆgæ\ķźŁ†ćbæå®bĮ qæ??ŠŲ4چ3ļłœN½¼rcwĶ})ø3įy Ź4ĒöuSĻŽcź {¹uŖ>gP‡c1æŗHRĜ¶Lm2‘l˜q¦!dŗ±ÄPl? ,”:0e›<±]ćIœķ6(ĪĪ?‰ƒ—’õ鯏^]“2”ŌŅ7i G«šĖi Żü¼Ą2%°Œ-Ā)Ōcņ7r÷eQGĢ;™ŽÄR‰""ßĖHĆJŽEOåx̼Ż|›)†ž¦®˜ŲŠõoōš6ėē?@śÄ”P¶ē r`¼jOąCCF+tįrΧ‚ņĻ«ŒÅ”މęƒsNnQŌ'žóŸ|,A[@¬Åqćø*FDķ¬>ɋC˜ø_ WZÄśćn†&ņK ež~kŸ§¤7)e¬Ń*Oųū* &6ł®9ł÷ZBży~’čXbÅlxī{#Ž[¦3¤ŒƒÖZ¦ŁĒ~ÖÉä5“Š"7Ÿ!¶t‡”ŃϧoYėōžĖg@­Žjuڈ²Ńq" SÆĘ7Ļl(­X÷Ą»Ukgg²A¦”ņ¦vÅ \FČæ`JF‹“×­uōŖÕr“(Žéåo”ĮV4ÖąRšr™Œ!+ĶŃ­«‡,°œACJ32#`Š£–ÅŖqløWFĪ!sm›ę“ŻōŪcś"U ›Eˆ ŽČޓޙMŠfXv<ŪüĶõzŗĄ ¾Ņ‘˜"pC·čė€|ŸšP¬ņmšE?Ś\U š—sx%żQži”fGæl¶Į;¹§Ę–ĄöµäÖżžāøāēł™Ē]£ŲµŹÅ7µĀĀńxIćĢO3䨌;›ė•4EČ,d8ž½O/łvmR”r¹d Œ|īšFH…|‘ęŲ”żÕõ`ėXM¬KD{¤é²šPĮ¼EüoqCąnŌ£mēˆĪ!RŹ“ĆĪĮńĶ;Eńa7= .Ŗ·8Ģ“{_ēą!nx"ŅŅ”°"XĄÖ؁…æ­īUĮĮķi¾’,}ĀĶß-½éxʼ£¶yĄ~#Bš„_’V`žXoe”Ķøŗn˜’ńÕ#@¢2R-x“UŽ#„£äÅžįŗŽu„X‘½ĀüBŒQ›]J•CÜüuČ=»Ęve/¬ƒ²ƒF‰Čo]߄MT:„d „µ \€BÆh¾(ŁsĄ¶c‹ü²ž]R«9śkDJX昞ŠģņWĶßæ!*Y{|1iš—%ąłspŹĖ4zOĪ,¶!B/(=e,>C«ä˜C]ĮAø¬?sÄh+÷ŲĒA8¶Nßō^ć‹£źW<¶įāDĶ/ö°ō3g]šА)ųžH]ĀĀ_pš„WįkŚĄ²w ĢP0󥐄(|LéU üŖŪc[«ĄK6>—¼‡Oń\T}‚dQ@ €wŪ­YzŖt·ŌÓ7BYu+čd”™UyQĆW ęd[ĒŚ,Ńć¤ó)Tś.5ŹOÉ6ljRƽč¶~Õ2«[MB~8%¼ßV×å„,yĢŸĖŁĘ³ŃÆ„L“fs ‰w“JÖd’Ż;Ї£¤Fs%»ž®yW0 *˜JŽÕ–|;uŽńSC”ˆc…’¤žiŽ”²®2ÕtŌ¶÷ńķ‚p¢`“¶ŚA“Õš.ėøaIŁÆ.Ūå¢\AĪq¶WąZĒģŽM–ą\šLw‰.øsnŃ?õküÖś ·+qś™GĶ›Op¦óÕVü½WÓ>3ńWC/$É#ŅI0ń÷ҹüĻĀ*IĮ,ó^Za(²&+ŹŌ!öX˜ł`žō!Ÿļ=+ É)¼säyuķ+qVę|K¢Y->…© ĢO†;Ė,B@ ōÄD¢®›mIPˆh40tć Æ˜ą·’ö ĄnpųdI¢ß=õź4ĶīœiĮĀŒc:R ä„€Ū,\Ų|#¹Ķ[FĆz °f$Zį5Š1°h>Fē÷¶É/qóM«Ą œÆåu×µŅč§×Wél;ž%RśÜ˜•"ÉyĆłY+ßÕŖQżœįĶ¼ Ÿ…ļX1}`vŪ<ŠĪ®k¦ššWpÖŖQüT )eIÜ [Ē“š¾$"xįf†§žģŽœŗ¾XMOE ÄhĄrĄ’ńIVĪT’€7Ó0Vørxā®Ūz³ŸI€”åÆ#µ–TP–uHÄų=ōÅ[š±«Wą“üüČFp”łW” Ödā« ”Čē…IšĀ•ćć” ‹Ų˜£ŖW0žćÆłGlµƒŅ˜3eą×QĻ摯Éhæl/3S}QåS³žą#AÉ8¹ˆ»ši؜n‹mšŃ¼ z‡ü–×ø(ŽĀĄĘ Z + Ä„8ŹĖ‰0üˆĒĮA ßBujp·påĶxÖv}ĒŌ”ķm\ą>Ė8.•bŻWÅqē\Š&÷°X5i’‚Œšžaüģvņbør٤éÅźĶ*ø–S| ÉäÅn]¤[’%K™sŖąLėžę{ZC_Ā]JUzd“TފŲę§_müp°Ń“ū­ gÖ6²»n#½ö|y‚‰«Mą»Į”'0…VZžī×¶ćīąųBh›kēFŸ Ūj ė¾U!”IłZ±*‹F鏰fL.óRļń5DGīn̊‰%„*“³fƍ—)œ­įG>ńķ<ó¼¹N5½Ź›¶>JD­äiŻ4"¾ŗdĀ2lX_é[R^…›²āõcCŠ»L×|’Ś`"^t0<ekd^&r--Ł÷^†³båÖų©«PĀ»næža„©Ē’Ė»®®ÅŖW2aˆH­u=dq«>0Ņ>^µ‘”¶wxL‚mķhōĆ&¢ŻžRø°ĢžĖØ`įŁIõoŗč*‘Ū/lÜ6 ‚T-*³'Š‘¶G qH”ˆÉĻt½ ˆĶą¤%1’¾&ÄP¦9Ö*aT©­Śgčœö¼õMōŹŌüDĪĮmœƒān)MŖzĢNēü…-qAˆ¶(öLÜ`µš“uHČJ[ŽŹĻmž²ž¼ŽGīµvŌ ‰§t`DA:|³)/ _¢¹G‰fu˜fé‹E~:ŗNź‡Š\ź¹Į6’(Ž®„܅ļVE:źē’cÆŲЦbķ:|%>½,PeXJž›ŒŃZßF7ś"—$q„m ’wŌ€YFŸāń†e%ļH ¾LƾžžŠ(Ćöč†!XQɔŠļĶSds&āIr„`IĪ —sÅÆg&Až 2.„\ “AŖž›Ō ³o6 Å}®Ś0“uŽDĻ+„Ąģļ_oļ…\ å~:@oOgAwkˆX¾Ż/…\VfC¾‰Kįœ¦ģRÜō *C^ ,7ųeņć½½³œ+^ÉQēĮ‡ņŹ›Ō.;ģĖ-ļF–›ż}¤ |ūDƒåŠ•ŲÓ¢łPĢ2Y˜"CšuV%Tcõ¼s'a& ŃMŖ\ÅęõŠ<ڧ)žš£¶]éZwØĻģ†”¬°Āó›į/Žlt÷ŹZ‹I|sŪ,Y#ĘīrW7„źņ©aę.+žp@įW^ŗVŠi+4źų½–\W*÷`¾F’FNō2ļęĻҦF1¦Üs‹0ā$K˜3:-Óå¼°ä$·ŲOą(9Ź×`^L­d7M÷¬Aßdž…œÕn1īāŚHʋmdłNŁĪdx[sŠœ4™žéE«„§U»É9–TtX“Ś!J—«:ŪĮ8x¾Ī wż6e߉ŚĪŸ0%’ļ¶{”V[ }Ö~ŹčVØSV1U޶Mā×±Ō“‘ ö_›ŲĄDö‡QQ#”}„N Ž÷Å;SuvTˆ »”.ųŃFpėXé«F_,ęp\B("éO¬ĀÜD&ųšź‰>ĆŹ›tį|‰Lzćµ™ų²X’Ädė”Œ„ēĄWO)čopkä€ƒĆ¬ #.WŗŲšLåa°f¤ŠČ łö;{{’/zÅ>2VX§;a¹ˆ¹>s1IŠB²é1)^žö“¬qĻ’ńŽüs.Ęķ<”mņĒ;MĢpˆą3d£Õ–c[ķ5 ‰•pˆ=ĆĢ«‡ulQędŒN»d×— ›Ń·ĪŒV0ʜoAeß%»‰˜„żB…f5/Ś"»„¬ń'X!¼ÜBó¤‰j:S®YŃf»g%–Dø=^>Ē pŖ#¤t²” ki/ ķ{™—*…É“™ŗģd6Ŗ‘H‚AqS=ĪMY• ŌA2©N$>Cփ®š4ęˆ~°,Ō[ā"ĪB EŹ( µšoV“&U&87ÜIž6ćčĢĒdČ ƒIĄļŗjĆÅ"ź¢+¼óDdłOHSåBRØ+pÓį|FZłć[ćNUЦÖƒ…O[|Š5Ł‹ÜYU™Ż[*;©Ø)w4Q# ZJѽ»Ē„ ä¬Ķ?|bŹ?Ł®p'“Ɔ?„£22®߳éѐi“łutĘJÖ֌¤©Ö DtØ=ÄÄīO-Ø\Öł/Ę7Õæŗw ė$¦}ü” Ą„xUc®ƒ6JŌĶĀÆŪT Įā’¦O]āāHkø Ē_{•¦hH±OĀ ›č0ęó$S„R/ 8ōI9Č­ ¢×&.OĄń¬EQ‚|čLŃs˜ĄuY•ćĮ+śŅ F¤éeŌųĘ3ˆ^ˆ˜·#lo•Zī²ŽøZĻ©˜Ā+U0˜±ncgM3¢Į÷ā±ņ&gē)±Ę¾sń*Væ‘lĻNF¢2ß\ u÷ŚFJć+%Ł (żī(B¶m²‡ś ų'Öą¾RdĆx–|ōdšÉ%4Ō(žwä¾_ŹØl¼¶iŸa7ŌĆ(oOaĖĆō‡µ——ÄC6| <öŸ|GI—†WQģŲļÅ[/s\PĖTɄN_čM8æĖ74ĪYĢj°É[=ų“śŲQ¾Ā€‘Źæ>&£N.™Żčå;ŪŹĖMó;įNö¢ęVĘm2Ēb‡s?å·@°-µ„ģłœŽöµŃ¼Ł(T“ČbƒķSā&ČŻ[£ R~؅7o£ˆ  _ą[•Ø!"ŒÅBÄFƃ™E Ė"„„˜ģ{~Oß3pyhf0$ņhĀ’W$¾ė>*?}äÉ6 Z•Šc,Mö{Nķ‚gķᢳå>ͦœ÷‘=é>1Š&?;P0‚ø QåŻ,O«Tō13>yöH(1|öęź§•€ž’ žnŖæ­™9Œƒį‹g)ā/eē“9#Tߦ«KėüJXé)…RX°-ßŲ&mŹĶĄHŌ wz‚”w2Ķ„ŹXoĮzČGĻųņ¤š›XKĖÜxæ/8šŽļŖI2™–-|ń.§‡vSŲü±Ū`ō–Ÿū®:±ļœXkżWhKs›b^³—‹öÅĘ,ΐ¬¶FĢŖlŁŚéŠ…=Ø~Y!ŗ%Ģ bS#ÉZֈĪDĀķCØ0ó†ōšK”œs8,TßG!šĒWSm ,Ö6lóR ÅČĆŽ­ŚWÜnÅXµB»=±H ÆĀōM— ō޵‚W­Ž¬”¦ā9*2Pņi–ó÷ó\okz;śTę¹”5ĒXīī’K/Õq°~Ž„”>ł5xĆ€õ ĢĀk—–¢$ČČq’ņ‚”XU1æaHŻßuǘń·!#Ž6N«ÄÄWĢz£Mtõt~‡ĻkŌ lu“™§«"›ż'÷G†…¢õTbTåŁ„qjϱ,Õ0Z£i5±.ČēU²ŚWW2œcžø K čuāūjSƒ‹5Ŗ,ŗƒĆ ©es6‡N0ĒłH0p›Ķ…Xsņ2©Uٚ_;zšćWåNž_T…ĶH3ÉĄjŖ%DźÕ‘꾉h©ŪEG‡J䁫”ц‹xØFŲ"ĖRNփ9ŻģJn|ź¶²Cø¤oUæģz ąéą‚ēAÓøoų‹}¢N»ŠF§/|‹z'Zƒƒ£ ›Õw‚JŖK›ļE[Ÿ£$¬vü¦Ę@»›öVh•s±Šo±?T¶å¾6Ƅd½dģ¼Ļ<²Ŗ =r–žņÕĢ÷Čł:aŹÉ›K€a"ā,Ėģ‹Šū‰‰ÄŹ…AĄŲĮšŲ«ÕÖLz†Jc]l"msīVŲŠĆņd:ź0Ačū„V'ńSQ­˜ŲINŻØ„üm°W-Ż‚[œ½Ąø@2/r‘ī(•7ÖŠÉÜż»Ž$s‹@¬|<Ž¹Æ­’~$I~ÕÅp€ĢuCåZƒƒJŠ9ŅÓŌ’®Į÷/y½čHŻyŪ4„ųłkźfvI¬Ø×‡,¤KS?8źŖ1­YĆŲ9Ͱźr¢soӂhīŗöīthPĒ?y“«+£^;ˆ—ÓJ9z  cńš5µ£<)§½€.ccyŲądN‰-ĶŹšē .ec‡ŖĢC d®EbcMdNÓB){šĪ3ĘWOzgīw‹ļ5ō7ĄßZ%¤uŽzŌĆäFøDC¼iö’ŽNˆaē>ü~Ŗõ>Ųaæ[T:ŗĖŠīNE”Š<²hpzńiÜ ³vµBRósV½āń!%.¦0’, Ņ—öz{*³*)zw’Õ x»ŃŻŗecYĆę\„ČjL ¦GZjHK Ŗē2šķ> 4<üžŚ} S¶ ²…Šœ›8Åį)Ėb&į{ģ)÷¢›ÓJG{ńéX¢WķśGHA‘*gfYƒ [—Ė·kĒyŒ¤–Ć£JŠ(°Ģ“p/¾©¦)ߛ¼§~·Ņ)BE¶„¾¶ļgį’ģνeéŹv×"×*eī8«÷‹n‰p‹±ph`Ē'CF¢ØŽ=?v'ÜJĮ‰WŸ°äĒ” ¹I`sš‹?rK4yf½ßŗ~/…‘H{Ęm<ƒ?˜Ž ”'ń÷€°ā[ŲĻ{;¾ć™‰Œ¢Šó9Ļ/fTÉĶ_ĘnłiųNmz³•ŠtZÖŌģŽņÆS@Ž8Ī›ŸūąFį .ƵµXĒW¼ŻæĆO©uQö4ŖŲ¦WhŖ“„‰¼Ūµ;\[,ź›²ŅŖ1[°¤‡söT æī)Ä„KÄ­ˆōżFSFB£‡Õ”ęn¬L)łņķjŌ>“;±iŠ„.:ŠQļžÅ‹M›“-K"”9üTšź V7 nóGPy†Bo6AčŸ4¦eń’Āč•čĘå%‚*ĢžBZMŸ£żcµ šžF$:ž­?#ä8ĢŅķE 7±Ö+ņ0µt’gI.Mv‚ņQ&jŠ…Ūė!³%Ūā`E6ߣœ{÷KžżŸs;§g÷ē%şµļÜŻ¾p¼Õg“óC–o¬ IŒē` ©»mŸū»bBO¬;½€/{tųÖŹ“:DVŠŃ;ŸWą‚ĢĄ`MC¬P|¶ÓC’ Č4`rEń®©Ż½‡±H.wÓ ææÉ]Ä[“‹­(Ōé„y~F>’Žwn “€˜{>66÷ą.6÷ļ.Ū-x·? |ŽĆƒ~nėDŠ©9dÄĄĮ?%rc°bEĖPwŗŗŗŠ5É91ßQå™)!ļ—“Œä Š\;¹یےż–”‰e¼»A“?w{ČtU-Ż]@ 'vŗ—PopF“¹±āG6T)c<¼ZĪ.9©‰•gj)½^už‚¶ēĪw¶/mÆ$-­iDRrc#õi+•Ņķ]ZSßJˬ l„«Y¤üŅ7hBņ!iįp*LĪ­8y‚Ė@ē.äĻJ^-~}ŌŽéæo(GĘnLW|xķ ŻvPɄ« ŻV¾ŽĒĮ, "ėtÕ}ū)œŖ®ØHŻ—Ź“?”®¢łˆ«W0ęŃo­n©ņččŒ„ln¶†KYŃ^9 'ōęMbBM%RŲļÉ×ßźZ$üŌŽļZįķ"č,Į=I²…7ę¾_™pA§jUčœ7ėįŚćŁśY"K+³÷|HŽ‘fę!0nz°‚fŸē€³OÉBRš.Įņ&]äūłÓ•Ŗ[f8ÜÄę„"›C—“Ŗƒ8įAՏ!ųÆtū¾łœ?Šæśoó…ü8˜"{ć),}Tȝågæ ē#Æu–šŒ6U¤Oij½6TŹ" G*ųśa5lB«Óa.é&ī՟j²©£FyŃN”q.Ėē(‚T‰rč0+­éaIŠf@~%VwoY©X÷’Ö>  ²ö›$wUÖøÆįS¬ü&ąÕ•³c‚EŽķbŖń(¢ņÓ48H”’ Ć]V»¦®«Ī„‘Ā)Š5hж¶’p FĮ±čeI_Ś'ƗĆSŪJĖš”ĄŒ™L§»@V)YGŗ“SĶ”[ö3|PõN—R'>$vĮ³• y­Öõ9ÜamZĀī-Ÿ%殊n<°ńĻŁų'…„“śdüC ū@¼£Ģ½œ2ųnõg—ū޽ ī†Ņųµüš†¢  ō6oÆŠnżiPŅ3$Łkģ‰NŖŌ~©ū`¬/¾õ7 bTW[ [³g'ļ}Ō?ļjMŚLløw“ķA@=a/ĮĮå`y-p¹µ:`čĶ Žc• ß”&ü¼ąhąō·iX(›B2ż>ŪÅ&Š<™5·rYgńe°ŲTėŖh\Ęžü}tTŁž.Ó@ʃ²«å|I ]¾ßƅó”äX’£ŲZv|tģ‹K3œZš³^ē½aŌBĒUß Ŗ3xŒ1¾:"Œ~āOŒOŸWzj\%7 +,ÉŽŻ$Ī="£•U©Õ¤$¾‚2% A@ųq.yƖ$¾iÓłĻ%ÉÆNOՏ2óĮ39»#׿éMJ¶:>ęFO™>ÆįVµ–cü„& ‡µŒwķ`@·æ Es%•ŃK Y³K]ūrCĮ„{D‚&ŠĮÖÜq³Ž,„Øwį•įNtq˜‡ŠhˆĪĒe%!³mNzŠŠįLŽ©:|E~˰ż,W›lM‰ö“ķuۃptÉĖӝ šUNŖvFG›øŁzD·qhšū Xµ:-1©IļņŶŽäK|/4 -µ'ńļņ)‡9ĮV(… ax­F™[žX$‹8šp>>ÖA›W Ŗ¾3‚Yˆ;©Ģ–=$°t|xaL»|ēŹ’›iåą"enĘg~Fbl 1 ķe«łŲ2z2凓š«Œ9é ĀŻ =žĪEd"ām`Ä»t›¹v”nä¼ŚC'•–2Nŗź §^ž’Xpw“š³¹ ˆŗ_)_ƒ~ż26’¾I»Aāƒ’Žā(ĆĀé².YŻa÷ ž±ˆ/Œ™™ōØÄÅó·_ƒł×ߛĀč–\4œŖk Ü”·H Śō>ɝ…} Ü“a|E¾Ä‡’Ecõr_ Æf′)޽ļ[F<ŲéŁR­ė& Næ k0vRfŒ C“Õ6ń“ŽĮ­•d=_®„~0ąÜä2-ė&ŠB®2ŗu–% łx 3~“ŠAsKyźų‰ Ø;Ē{Ab’³Ńˆb­~NĮJŠ\Ą' „„YāZ4SÆė ¤?' ܘÉn™nņ u®1ĢŲGķ§EQŅĄv…ŌRyÜ{ļŽ‘›¢iv3­ānL×-Xˆ`¼ ·%ÖÆ'&<ųH‡€äąēīöó3×Ņ)ŃY%é²P5}ü‰õ7Ž4»S·zr™T4\qˆTĀ”¶³qS :ާļųŁ'ųR?$}Ēc2”x„cÖō¦‚yKBD•xŗņ0QfŖ”†Iy‹W‘xVü­dµiõč Wŗ•KŻ}Z¦~u.‚=ī 6&žY”÷ØIŸ 9F5‹l~½KčöW®*T„ŸŽvĘÜŽ*ųōh:‹avą mы‘{'5«ŻĄhhĪp&µŗĆ)8€lŽmµFQĒK<ŁĄLB%O…µ{KNzøV#C–ņ“ʾĆɉĪŲåølXt‰„Gõ;]ʱĖēwÆ“ yō[bø åæ‰×™½ "‰[«P‡‡Ž`ś‘;HƒŪ¢ź¾Ń~“N*ør·g9M“ŗŚņé<„¬±Oŏ—°ąßX±~’ Ź-ÅĖ…£ąõ!ŌŌ³h˜)%EŃŲŲVQ‡“ŪvÆ Ž6Øz]ņ÷EĘvŽąp¢ŠüāólęjEc[Ķ=V iŠD \IõŖ)ķī꩝§#]»ŗ$gD.9F§Æąņ-ėB’«ęŪę~÷בD=¬É*؀ęĒ„†žšd6‹ŻŠzҹA³HJ4Ś Ä¼™£¼É7Kŗ]½’Ōh©ēHøÄ„lś·7‘rÓ=+8Ė?$5,åw_ė×;•ĶQNĘ%ÅŌ&ųeśH™aB/Ÿ:IƞųZBšĻ£ōāīx„?HåvŃéYŪ‹s…Ö>‹¦Ć‚ÕM®BŸ.å£=€Äž²¾•c;xčŚČ£2š(ÄŽįŹU3ź°…ƒ„{qRÉ3-8A¼\ĢöąfŠ-‘a‰ģĻ8¾A€üƒ6E{šž4!ī‹ƒÜ2МBs)[‘M"H›żøzåj]†1Ņ-J ĆSŽhH…IÉ,¾ĶŸĶõ˜[ßÕŗ¬x¢„ŹFP# ¶ŽOrš“V ®…įŠ !FA7łÄö„GōÖgZS»¢Šaš°DˆŁŹŻGׁt uÆöÖ6M Ž›2„‚ćj4uD\‰B… õ*8|ūqõyŲŅ8A‰żXPĻÜu•Åłé¾¤KU2vGŁŪ „Šs»øNSIäõ®/YÜģėāJõŽwø@I+č›7#­üQӈČõēÕßŲL’?ņ ī®·"™‚ŃFq”s(ĖLl†Ą“Ńi»Ü˜8Ę"Ņ+]ŚÉ*ćįüQóyŒśzĄcousÅ©P°"Äõ æüDķ­,ķˆė7,Š^ø\üP[;&Ly?L4¢ŗß ŌŽZ ŚĻƒ5ÓGc’·’ŖŽńõ«n=ēo¤é D%¢‘řœ#Ūū]2ّﺙ7ō˽`†&Ø>żŸīaäüyj믈B‚—–ÅaV……ü« ķŽYĒh56»­ .ŗł› 5mŻoE_’»!¼Ü$?t,ćA1QP-ļmŗpŃäM‚‡ģ¦†öä­8¾ŹZ@Ś °{īéjR] '2!%łZ~€¬>Ė—ŠĘšńEŪ°*-z”×1ŗ÷€ĄĆ‚H×BÅW“ūHGYżĻĆ._å%ČÕ½\¹Žßzkćmƅ[Ēą %i®dŽšä>Ž­ŽĻ[„ūg3*ŗ±Ļā„CGÖłW1Š’×ŲrśW-i”Óu©RģeF© yØNÅ+°×–¼põĒō8?=P²MJč~oLĮSh^Ū'|¾?c’cĆ ¦ćź×ū:‚ūfqļžÆHQŗų2’³¼6¤RMNČS½$ö”ĒU`v[8R”Ńe.>[ēYO³aĻua TŚāIåC؛’ĆøµHk‘ O˜ü»ÄžĄKvĖ žömWĻė"§‹P™(« <0EŪĄæQ7sķ!ĮOō8ŠŠ”yļM„!a-%bæčTĒbć:ƒfqn:ė“c¹±ļ¾›`ō³ŪęÕ®GżuS’üApśŠ¹‰|ī” ¼O£‹ō+ń×—> œ[é[_ßčæŻMøTå6ogP2|›f¤o胲ćį¼wT¹™ōBę“Ļ‘Œk`Ątåą©Ä’±ģ¶Ž|µĻ.…¤rT‚‘œ0DÕųyŁp”aŽX_ÆĆåŁ(bĶ”“%Öųz/A ©J“荇¼kŽĶ`5}Ą:· ԇοŃ[÷45‘ļ¶Ø¾NĄRI®ż „ŠH{Ųj"x¹ €“PöUeeMZ\‰Z&™Æø‰ų;<­Y– ”Ļ»sp-;·ƒŁķĆņtČšźxùÉęg"y¤¦|¤>Żmiü_[O‚•åDč̜а ½I2"‚?ŒĘ`ŚXļv×O+ģ1ē6zÉfyVVæŃs#¦!ńjā)ȼÓŃ?¾“‰‹“\åČ|±qh6&ž„-?—“”S3$cŚØ K¹mTŚ."4>;ųśa¶jfŌ52±ŚA.…R”£-čg>Ķæ£šßØügwHĖ"yū}Ų Ŗz³vŪ¦7…¾„‘ƒwŌī¬īßMa»gą^}“&Õ'\Då:ĻÉ®Šioƞ±Ÿ’•Óæ8·cuĶļ{A„oq5Pkˆ%eM"ē -”~>Hx Gaē›#m)Ü߉y?*YhM³ĒĄį(§k%qc(ā.%Eås܌öD:Če³Ŗhń€Øž~jé~ś¢“·Ö{™N^Ņ5™łõ¦äiūgAM³įAW²ØĻ~ņ,’ŻĀÆć‡“š|SŒō’©:UČ]ߥy“½ n/¢©ę²īŽ‘&p»=?I•Ow(°cNģߏ4ö»£¢ÆŹĶM1Ņ&+pĖäo‡5Ě&Qā’1#9{įČXÅŌUŒÅ+¢·øÕ ½j¤oŠżrDfš¾ĘxÕ±”ˤ¹Ć%ó^XÜxnu/£,Ėx²r’לZKįx·r‰yAĒÓBņ”Š«n¹ ŽU/ X¤¤ņ³ÆFÆWąŠā…£rƒ5½6 ŲP“ŌΈ“–<ˆōNīP€ßń$™ÜUM”8ÄŻ4ńx6Yi•/ļ‚§~\hжæņ…ŻĒPM†=!'ÜF!įtc.oŸił˜Vf~)Ų“&/ī1IavŠ? £2iĀ”/ҳ§ožē“Bn£XΰĘu½Ó¾“ń])6`ķ~‘&w.Ć+–īÖUĮ•§72|ˆj¬nuæGĒĄŠ‹µ !Ą³GõŪ†¼²©g²Ć膣fĆ&öóØ|½¬§7,qŃKh¤ĘøŖķ(cO„¹EŃā;=Z³ī 3Œƒr”Ż[›4”gg7#ŒĀD-†‘æ0³‘Āyõ¹Āw¶)`«esÕÜqŃĮw°_BŖ`¢Rō•ŁøÖĢT]°0mų^·±~‰ńbÄœ?&®›ß‰­Sl=Į‚˜7ógļ”Ų+ŪÖ|‘`ųRTę™6” /ējÅQüŪųH+|^pĒg¦V¤AĖĘlÕéą5°zŲ…H%{ ‡kó_`NMøś*‹Č.,™$ŗ}.½4X1I‚+ęēąvŹó-ĶĪæ#ŠŪ؁ē˜k¦yˆejęµœ?Hb}ąĘtøŖ b„cĮ8~1YsH}łźį§/iĮ_)éš§u“’sØÖ˜ˆŖL7›Kz»cŚåp®ļeұΣīõÕą*ÅŁ!ųoīĻJ[M(13@#_¤YŽiĪņоF^\UgAen¬ĢĶžŽčž•żß×?Ż ˆSš63ĪOł’ĶĮ ĘśYå°b¤BRm”­”LĮ:– sK.q²vš mŒ]0ĀmJ’ ŅŃw­CYܱ›ĀŃ\ŗ“iŗÕüt”ėŒdФŲ~£7č(Šž0{ćĀ¢+š>±ŲhsŪ±ƒõę$VF²dʎ­×’Ō„]@` ŖŲ‡RHę+•4Ųū’Ł„²W{g9Ŗų©[…6'‘ć$“¦»Ŗ-Y0[be G7ūˆ/#n€ŲG[ļČĮšŖoģ=’ńXü«Š‚ńČՄÜŃvš~_°Km)ß9¬äĀöš÷Ü白K€tFG¦É ėeļ-|UJ]k@ʶ äs‘Q ŠvVR’ŗöä†;] mżt!EĒ&īœL’e³&›UgQŚ]և¢7eĆPk–ófĖÜ\߄£] ¼¦X†6ƒųŻü“ąZŒis"Ę?]ó–o¼»6“±™lwHCJž¬žsźĄ[‘ņĮ‹BĘ4ēv^ĶWŻ?G-ōEéMķ4wIŽ•H§ÅdŪłkęĒ8’čßWz«°+%”,ø0¼ÕAQ¹§w^8u¬'ŖżžēÖ[‘X¤$#k?ūe€ē1žņÆ4„½;ąŌėč:Īöśh—±+“Īżń$źpˆ…nkŹ5ÜyēnµcanÅŖ&D‘ÅÉŪfā}NES kŸ©@Īśųō/äGĘĀø«ó\C>1|8s‹Ö©x"ų“Št§W@š“Œ­Ä/Ķėč–sTäAÉæąžœƒqˆżēdK®¢¶Ģ®ĶG;¶āž?žN¾GUŗ0ķYDœ²°V gšJMĄ×ĄK\QĆtW䘊į@ŗLåŻڧe¤¤˜’×5½ż~Š(łõ‹ģsĆ« ™Õš§™Ń1»;Cš—·īäÖ#¹ĖHy¬}³9‹Ó(›EõIz±= VٌE»‹Øij}`åjŠń/"›QĻÉ”&õFēž­æčU{Ģ«¬Hq ķxq©Ā„ņc¹Č437ޑ׺ £Ó['hŌ ĀNZ‘ū˜h:u†I ß†.lp4vy”©‘¢±wī6šø«§Éž²vӊož½ņƓh=©¬?um–óJUŸ/Kü¾Ś[‚%Čtn0ķo%(śĆ75“žB’ŪZKĢŅ{Ź"‘Gūsh,ćeµŃŲ7tA“¦åŽd:§(Ō^?氅^“óĄŌéÉ9¹j-Sې×Q\ė{"=! ŸLļ£9“~‹†ęmćrņi 6łHCdyE˜\ØĢ[NˆĒ³īźČ~7!üŲ‰-IEEŌēvķF%óEBŌÕ żĖ“čŁA“7‡ĒJūŖ¤1ļü6€FL(š0Žü’āSÓ×u†÷ŠLHöXŃł}čißtÆĮ“@LfT#Q­‰&ā§ļŽ?miT›–6W÷”¢šGDm…I¢īŖ™oLģC¼)193Š'żōÄ>ǧn.Ł“öÄ:Ź5Įś’ +…ƒBļ“?'mB©v‚Ī —Ļ!ķżö3-X8©‹š(že̊§…ę¬Ę…Ņ÷Śą^%x‹=ž¦Õ·i5‘|HĒBmsL®ø%K“ė0ŅbŠć0‚„Æ“טŅī[’c¬ž$ėÜׁQ6ąžą^É&WČöįgžA"˜Dlµ9=Tti„P‡øÖÓVsHłOå'ĆW¹8Kםų~[ømFäŠŲŠfÖ“6…Æn3¾77ūsŖšøbo™ū‰öON€u øGę$±ŗ‰›vƒ8DtüÕĶl8—¦ßŁ_ĄŹbsbt°éņ—ĶŌż]ĢŽł#|f-{óĆ©åŲ6/j”$ײgĒæ“3ē©ųœ]Ä į›ōĮ‡™‰Ą ń½t¼°ś×¹”Ś€ł&/0›bcģ÷h#Ēßq³’×xÆ(|ĀnøhmT»ŁÆ„=!Ģ—tÆīė˜Ź„óØ"e<¼_%’°1[‡e¶ųm?é“Õ4Į˜Ćl'^•žRš’&«L8\L=¹=܇žU¤<‰ŪPać@Ėyšćz Ū"ų°ĮŠžze1(C“&L˜~cœPÄM§8ģUą®R֛f-øĒņR‚ō–5$J5­·›A;īŠRDź’OAN:ųō/ė:œAĢjłZł—ś9Gٰ'vvDåŸå— ½Ź7Eƒœˆ³Ihå[,(>Ó0ØūÖ ÄĄgźiĖ£ÉBQ Ooubj– GµņY‹™ŒĪ„ŁśĒb/ĶŚy•Äó Ą5J”ā-‚“¤"vK'U¤ļ9wn !2=Ö{÷wYÓgtō8žĪ%“D±Lʏ‚vb²‰,b“ƒMWšŗ¼SO„åm<\o öbåŌ£mš“{sųŒŽüz<7HįΤ[ģrSAØ †i}{f\2{Įt«Ļ’©Å 3św1P?$ŲT ś x^Vcž`Ł•nef—ĪŒćwķł’ĻČGW P„:€Ž=xF߄‘Öż€)9°+p( 9£ćļo½Ņ½ø²Ś„‡g0éP9”£C÷‚ÉĒóź«ė¼mém·Ō£ų…—uHνs żŪQ’Z;^QŹ)jõ>! ;£FjU’ž:‰;½—}½Ś*QĮēd[č)1ĪXm§œĢ!³Ņ¼,x+«ŻT.’œ†,@?$÷ĒĶVĶ„ž4&ßeq…ŁégwĆżŹÆ&Z X–·Kq; ,"#%‡†ŁM/ÖRZ€Ń¢”ØDČ¢bĆĶSp ƒIZʁ ²l¼idFś·” Ī ożūöÕś•ł_ō§3vd jqˆ-ĒüTÆ$»ö7ųÅį_P‡F»µc‰?;ż*w”\Ü3`Ū2;59XĮļ͜.ŗrŠ49³ä PK6>,G²2ZłIŻE–«#*¬A?®Sģ‚xX¦ƒp•aVŌ«Ć»/,vN8ŃwÓ$H-bM2ō±±šœsų ·/æŌŽAAä{ేéāj2ĆĪ̹€!yIĀ’I„Ö” Ļ?¹øÜ^{Cśł˜Š¾Dz†‘A āJX“gJ©ˆLSÓōdēÓĪ8?0݆é†Ķ• '¹}@Ģ,=³ßU£ ’/ė“߬œŸŌ*Æø”“BŠ€ endstream endobj 801 0 obj << /Length1 2619 /Length2 14068 /Length3 0 /Length 15555 /Filter /FlateDecode >> stream xŚ÷PXÓ ‚C°ą:ø»{pwwÜŻŻŻ]ƒ;Į%8A‚·`Į%øėģī»É~’_uoQót÷é§õœŒHA™NŠÄĪ(fgėLĒDĻČ –UVfb02²Š322Ƒ‘©X8[’'‡#S::YŲŁr’a!ģ4tÉD A†²v¶)k €‰›‰ƒ›‘ĄĢČČõ?C;Gn€ˆ”«… @– eg t‚#¶³÷p“03wńüļ#€Ņ˜ ĄÄÅÅAū×q€  ŠŃĀŲŠ kčl“1Z”ķŒ-€Ī’qAÉkīģlĻĶĄąęęFohćDoēhĘOE p³p6(€Ž®@ĄÆ”r†6ĄR£‡#ؘ[8ż­P¶3uv3t@k c ­舋­ Šb(KŹä큶Ėüm@ ų§8&z¦Żżsś—# ŪæŪŁŲŚzXؚL-¬y1zgwgZ€”­É/CCk';ŠyCWC kC#Į_”Ć  ’ÉĻÉŲŃĀŽŁ‰ŽÉĀśWŽ æÜ€Ź,jk"lgc“uv‚ūŸˆ…#ŠTw†škekēfėõ?djakbś+ {U[  ¤Č?6 Üo™ŠĄĘČČČÉČ:€īĘę æT<ģ)™~‰A9ųxŁŪŁLAi},L ?p^N†®@€³£ ŠĒėOÅĄÄĀŲ`4³°…ūķ$šžAżw“ph3‚ʏ ĄųėēßOŗ  3±³µöųmžW‹ÄEµÄ5äižIł_„;Ą‹Ž @ĒĢĘąāāp°q|žėęßü/łæ¤ †’÷‡CI[S;×ß9€Š÷æ<\’ ʶ† š_9;Š8”æ§_‡‘Ńō‹é’óüuä’ßč’ņņ’:ż’7"1kėæō”ü’č m,¬=ž±³‹3h5dķ@ būMՁļ³,ŠÄĀÅę’j% A+"hkfżo!-œÄ,܁& ĪĘęOŃ’śroma T°s²ųućč˜’“tĘV [Å Ō­æT@ŠNż—RŌÖŲĪä×ņ1³±  =ąAĘĢĘšbm© ŠżÆį0ŠŪŚ9ƒŽ@éłLķį~õ” Ą ųKō7b0żFį߈Ą ņqD’EŒ±ßˆ 4£æ3€Aā7b0HžF¬©ßÄ.óŲe#»Üob—’q‚Ų~#»āobWś@ģŹæˆ]å7UBõ7Å¢öŲ5~#»ęæˆ Ä®õ¢6ü±€ĪŚŲƒę×eų?)+(&C'ЌY8Yż>25ś@I9[A–©óo9ĖæņæWė_(&ćș±5hØžådż%±±łŪÆic0ł‚(æūū 9ø€6ņ·(lÓßd`śü„“ųĖ/čśŪÓ/ĮoglæĢķ\’š20ū‚ā5’=Ø7ęöę@Ū?,@2‹? Øa–@P¬ž€ ‚ü™ ØZ6¤ŖÄoĻ, Ƕ.6Fæ®9³?el÷;$ Ѓ’‡”’żo5Č„=č͵żOūX™ž‘ž·y¬ ŲACba÷nj€Źaoķāō‡Äįw~! Ó_7Ēæ‘³žŚ9MŒ¬’ĖĄÄRżQm&PŽæ}ƒ^ ' ÅG† tÄ ō8żؤNֆNęøž›tæ38›;tk18»ŁżqäĆåj‹ė‡Ū#:ķž¹÷ų‚źķł;8'O ćßT’¹!]Awžė]Ÿ’Ć}W݁ĘpKóvĘ<Į–õĮŸļźqŻčvĘ”Ö7»"ā5愳9“/ä{™Ė@gŠO;˜Tc¦),–‡NĶ{ćRŸÜMøėōf¬„Jä9ƒ‰~Ł:£+¹æģ5˜Ųį˜Mr¤El”œ&(ā#hChS$©Ļ?…pō±ģÕģ=w9ķiql%7ČD©øĪ1‚¹]GąQšD¤›Ī_5ucQµÓ]T$U'ŸĮ£,bo…>Gcß{liĒf|]]Īü’ĘrńQŗæ–½:ō=6š§Qīhā6zB¶T‹¹ŪpyĖél?XžčWØéc#Åž+Ŝ4×·o”ی5Žā©5'ŸŹ“FĆąprŪ‰Q¹ńŃæ 1öv@” .µĒÖ§¢Œń°ö/Pt)•”zGFĻŽ2ÆAŠi¢2š~ßK… Ža#®AÄxDņš‚½KŲ(XKóŽ#÷Döā°|æŻŻüugJø(Uxܦ§€“$80ķŗ&hiYŲT}O–|ŸK}H4"H˜pŠŸõ†ķIń|³ 8愜±F4ĄõÖoš&“„…=æ>Soæ›óä°¼ĄkÖO“ąŹł­×œ‹7“=7>Sūšqóg$Ū5N’^öƒÄˆ4s„‘;F]ÓČQįż­鞰f!kKŗk—Œä“SFo¾VŖłNœ Ųč4üģ÷åöA›˜¦»‡ź ¬®žģf@ĪŁńŽ6l…Užb¼°¢q1g¬i*¬¶‰ź÷…‹ōGÖ¶ŁaADKĄG3‹«<[+×Äs%cŗĻf–p5ׯ{YQŌügĆ!}ģO“©Č h†§a)¾æ5ćw8™‰Ė©ēBÆ·ŁÅaœfŚŽĪ|ø;ų¼F\ńźu ĮnĪpR¶?ēŻ5a«ēŹŖ)Ɵ»^Śź=`ł!›#Ŗž óŅE¬Uż”č­9ż\‹ī¬e/ņ²f÷ø¤gÄko(jŹ” ½qŲ’įķ=Į„™éӑ4›Œlļ±ü²Ć^ń·M …‰†ĪŻ ć–Īco¢& •ÜĆxaJcÜGpKzr¤Dm9*ŁĀ›ßœ§#TžĶ'¦5jõEV0ļéŌ“=TC¬qLæ]ŖČ/Ч—ū  5L“ rķōivćµ*ŌōöšV¹,¬émGĻ ×šUŠvļŖ“rKRqD“} NĆ '§¼| ·@Iõ‘Žj8b†ZK@ƒkŲØc¼üw³ĮödĖT8Ž$“’D®żAGEŃ2 FĶļˆJł—E•ž*·‘ ‡ģńBÖ*×Į¬¤F1‘§}OS”Ń·>¦`LL`T4&ė—¢eŃ9$WXq3+<Įö˜>tįRĄŪk§sŻ~Z•8,X k Äé5ķZą Dj&SC®:åRa[sį%”.$ēńäK;$„_q™¼²ÕĄš ̤N8ė™]ā`vĻp|'°eĖĢĖFŁr _«ėF/՜å›śŲCq’§yĪĀ“3‰WŸć;ć„ E& =Õ|™¦gŗma¢ĖU—‘ąŖüāåņv-ŸkŚ–¤Ŗ·¢GkŠŖ’żś¬Ho5żņż>ŖĖ“rÜć,]ńSˆ|ZŠœGķ× Ö,,umö¾0‚÷ŠÕĒg‡qNā·ļ_“CŠŃGb…Ōʁ‘6ŽüÅלøjŹcž—œ^x•>oՎéĘņaõnļ\ 'ńć H9cO°“=āŁœ”>Ø ś}”Ō¶”V:ŁŲŹX7Ń!xóćgŸ€F äé^Lx¼®–ˆfÅ»ĘĮŗƒQŅ/õ_‹N£ęßõ¬µpųØū·īčB+©’ōåö‡†7ä),Eć»M‘ä²”2Jt>žHņa«)ž-ķWéMØq Z20ł~ķRļVåX«ž6£ĒD#HMł ™jCŽö‹Ę”Ń¢ ’厢Ēņ=M­®”–hY’ē¤Z—ęĻPœžX&0(«^j_ųŸĀ IÕģWžī ×Į—ØöSb«&/y!1f#ę£žpäßgve*/ ƒIĪQŽPÓ²K#±7‹˜‘ćŽĶAmÉG®‰ĶĄ‘{$Żøhiju(S c#ŁFL¬uxUėY§™µ BHøĀ·†hX›bģŌ .aNˆ²Y_Ž`w~ź8†Ó’h Ł6v–Ūp\OV9ō‘aǟIfŃLÆuŏäyhĻŗ%éŌ‹U’¬Ńv!Xž'9C[0ĻOyltˌI>ŃØ_µē󧉇CJ ī#Ošõ­Ūr1ęów#WcĪÅ‚9Åb‰Ų}óņ€Ļ‰ Ąl« ,ڃŖ9=fke`>żČ@jļAéüĄyöšģ®¦Ņų˜H«Ż ÷|Ū–bŗ_›i˜ęƒå„hµœAķ!4oo»5¤nÜJņyx $ßW°6Yō1ōŗj¹É$öó>V–A/]³+X.Ŗ›€@“šąüfēųFŚ®įQL”oŠ)%—s ²-›11Šņķė(7ö’ÆČŗ}C)©fA|gžÉ=Ÿ3Ż«GĆ!wå¼ŗ‰‡pHī„®y……0X>ī-åW†ŲŽb.Üł­Iå ŽY$'HEąyI”Č€W×¼}Ŗg¢Q)©Čcöē›`wČėQ’ŲĻC¦¹?57‚>čē=™“ėōߒ®›©gŌčē€m;ä³ņLŖż\Īš­›boĶØ—kū2ĀÓʆ†H2ž†g™ĮµEW¹sĪõ¶:•łāvfŲE„bž]ł]IN¬Č¹ņYĆ;œ±Ņ¼žL#3c¬¢éé/äI1 n9ėųć’óŽ”ņčƒĻšŽņ€G|+`ž‰†4А n®HN÷’Ø®źuP«[P+Ąüsæv™Æ|kźÉQ–󄣌3¤…ķ/uhDŸi ;JI[üĖ»Ø .ׯä³÷Ƨ¤ā]~MK?ĎrFŅ”µGcdB‡6ķ±ÖyX1‡›Ā 5¤{ˆówS ?r ōˆß#h°ėˆ½n2  Ļ„ ąDóeŒŚ„õ5čpdƒėœ+™†>ŪxV^TŪ?TŁŖ$Żu“ĪŪ¾iŚSkē/OėJXA…<)ˆzõ1łāqģģoŖæSć'øĶH艚ūō³¹sެē|#Ć;’•ŅĮžĢ»dŗ ¢”3Jū[3· €dƝn²ŌōP²¬Qŗ·óž¬‚ńs+Õb_.ū †įŪąo7¢ƒŹŗõĀj)CÉĆ¢»Ń0A,jFļæA„€Pļų£FžRŁĻ™-ƒ†!ģ„pČŃØ¼öє!Ž&Ž3·óĮÓ~^XHpī“ˆ23Ģk YøŅ ćĄzJņįO†‰Ž(­¦śb§%äZw·æ%šā“*-‘üFj0LŁ|0M,>½č”øDOğp!l#*¤ó™‡”cIkńŅ‹Q½!Q‹·ĘMołŻ“łĻ+†g°÷v~ŲwÕ™"UXÜń;O]¦%‡üqb t8?Įp¼å' 6ÖI6“it ęv¼æń÷œī†ĘHUŚy7gKf®²f–ģļ…¾ēaŅNØq‘Ń-!JzaŁīīūær6„­²ĆØ\B !A51MūÓ#4×"ŖFźĀŗfÕłŒmÉ_"YX )‚('yö}óƒ”Ó·{Qw6`Ęł”hb%Ćql^$&¦ ®Ę•ņšŸ”Vgˆ‡_ ąm]¼̰‚3nųĶy§P‰”}®cøvo}į>”Ż3õ؝u®LI.Ņ&1£ŒßŃ•<äzžt³G ģ€4<|<„_»>u<ćMÕMąŚE8SšŁ‡“ ;Ékhc½Éż2›—|nOhó%Ś×^ō}ž­®ģÄcŽ›¢ õ6Œ”ŃϰvhŖäÉTE„ĄÉģģµ»“®i¤Bl¤./x2Vä¬ā­OÅ(*‡„Ūā•Ü'–É`¶‹/Ÿ“„{b±eżBe,Ņ£č®K×rx¾TŃŪ}ŹßaĪL8½ ēGŸć£¹cü<")ļł |ŠY3g!Ib‚^7_‡p³Øµ_²Ć%U:ąĻ£ååG‡ź¢J7™UŹBS`` Ś•–µ¾%–zŻyEś‚Ąf+ž–ęNśˆ(æČœ®ĄČWV óšŒYCš~,źūw›Ö””#œŲj1?ł £d blN4b镊OĻü# ”فĒrų|"^ż¶M<Ā(Œ$ɋcźüń‚5„ ķńśĘwį_š$ģhV©»=ų Ÿ:Ė2,³X°¾ŻP³p#õĢ7 <‚UŸå–,Ö%Ņ}čbź‹\/ü¬’|Kƕ^²ņ܂2 P[¢“ŸŽx1-—~ꆗ+\.ŻÖ2¼”¤Ā–>ŚĶ¶'éCė¾t²8w““A„³otbäÅ)M"‰ī6w £PÜĄQ«•ƾRŻēSd# 0”«rsķ&ŗŲA`ĆŁPU7ć9ķŽœ¼x¤]Ń^£ļ›ėą?J«Ź6Ė‘¤M‰ka V `^¾ņXj­Ļķo“¹óŽHr/¢¹¾ĄČ¦&7Ez¾XUčSŗ3õęH¹Čw™¼;Ö8:‡ųqanua]% N]Cū鵚Ŗ/‚Q1 –Ė7Æ«ęšž¼ąE¼7y?qō†• œĒŽzŌ¹j׍@æ£[!Sk÷ŽC5ZĀÜ·üķ².!a˜]2 ~¾§ÄȈŽ6įģ1w6=‹LƒŠ²>:^ƒ4ˆRå“=l$DÄ"æžl°=ģ}źüÖ×=Ū€ Õ&a¶TZ*ų¼]xķŠjį°¾Nä(7Ü{ŗ8ĄÓZ—Ķ…Z½ąņÉw—C©ATŽ—ÉĮ®›! e÷4+üS_„rr=·Šõåˆõ厖Ģ0ŃÕjfvo4׫Ā~„©¤oÖ¹r»HcŌ»G”`·;ß Gx©œ°@ˆ‡ tłnę­\ķlG_æiń-ŒĮ#\ 4aK9Q‡Ń÷ę\¢Ō™ĶT6”·N“DM‰ˆ+µĖUD"bpŖb'Éyū·O»»‹4ļLõŖƒj ޲bčńZŁćpķŲĄĪ Ó7LĘn‚ć£国9čāW‚9 )i8MŒLęāv”¹ZC“‰n”QDķoŪŖ¶wÕPœĖ-į-^["f 'šǤh0eB“ōÕĮ9­Ō!ńśU +”2Jӛœė~kbļ‡sDį N#2kįŽīŠP›tcv‚[ć #ETwQ Ī®üi?c]=÷“”¾ ±Ō9a!‰‚ßfõĒŻ¼euiNJ#K®Å–­ę>ÉØŃž{“_/(|c!Շ|v„>üŽwyZQ‹‹¹0KhyāŌO2ŅNV…ˆ—ņŽe"€¬…üĘxTCś1vžĄeef`¢„óŻEB]ÅYdeh‚œŽš6£(vĘŃ u–ėz Ž*īł2F¹&ÉY„õGmb!!IŽ«Ö3-ˆĶŽĘ‡ń†>U1ßÅėBÜĮXa+Óø" }ZH€K<ųFa ‚ ø½.,<Ńø:”Č*T’q½bD¼įąžOF¾6dYŗ®‘ȐŅu.6—ØŅžÓ–T„‡¦Śov1Ć5»ņź=į‹Ź›ŅĒģ}=nÜYõŻ&­ešONZ®,<ŹŽ”W#a‹|ä]¤¤}Š&ŁEŁ]$ˆ8õ‹ł'Ūvķue TIR䊋dX*ś¬ć#JĘšŚSĶįóŹåģĻĖz1Ļ …}ŽéH¬™ĢbĘŹ r­Xź–øa9ÉČńī ?Ŗž”į<]=¢zeĖWR:ĪƒÜ¹ż‡­›©…Ÿ“dfķīŁ/]ædt¼‰ÓT~(z•3aĄRgöć6iµŲ5½~ŠnBj[%:вŁräs"¢±Ž3)³4įčŪöżīe'Œā“ØŅćĖ”ŚM”L”läÄW¼S\8L²ĻÉu"}Ŗ»ą™—āmßÉ­ ’ū‰[ĶŚĀÓyæć½ jįōÉGH??€[]½`ŗ ¹-Sx23³WÉŖßäÖR9ŃI›Ż~›@ØvrŁ„Žņ&j1µ8ż*7ķ<ōaõ!@ŁMÕEÅ0d(f” ˜}¹„.”.”4vvµ±6ĪŪµ™‚¬”=ß]ūćĀŃY6Ų2„PVXŠŚÆ33G e8ŽcōĮÆõźżŽ“b%Y¶‰VÆąū3¾–O=ŗ…ę=ĢYŁMb‘xōdʊš‡ž8Kng§FƉA3ÓQĮ Kąd³$±…A“$Ę®…ÕbÖķćIģW³¦1żī£Ž“cC‡r±ź-6ćˆÅ~ŸŁßįN­w0Åwx?™Dzu%Óu}›^DD”?še¹qāģ*ÕĀ·ĒÉÆŠ*‹«Å›ws›?5÷¹M‡3A›rA¼ŪL„¹½³²Į›€A†—W}3”öšS[²ĀsTł]Ż)Ę:7dä\‡ćāY”ÆZßž[‰żŚļøSų\bń¦²ŃX£I … Ż·ž+ŪXUégåśĪø./4š”,p„ńŹW˜=ƒķ1_ÅÜ¢˜/Z ‡¾¾Ļ‘y¹³U™“u? –ŠĀRÄa0J‹&7ĄākĆč ”‚°Ge zwv26ÜžØśéü›}~mčūē™šéyĮ¬ØäĢ Ą«Ė˜8¤ŚhŲv}Ł€+)…pgƒO4V§ÜćœCSZ^¬Ņ^[b"”īO|{ųČAB¦ū99¾1¹]XßÓø+Ķv²“"§ż$¶^sŅjÜoŚ”]:$6vɜņ źh)zÓ«ŲĮ×ļOW‰ü­3g \b^\XQEųŒ1<ń&Ŗ6²V~‰eāY¹!«_ņl,ϧ^YE#Ļ•žŌĘ*PKyį”g2LŽ'®±Åų„%“hv?(sĻ7²]½ˆŌ–«ł…Õa=ĖģŅ'{$5(O:]ąóB£4ō”ÕÖ}ć‹>ŸŲėRbžB2`{+#čeyeŹ%ŗ4b3·?²¬ĒN•iQKģgæ¹üu]É%Hśŗ7'ĶD}ykæ„gX\ę8dŸ ?;Ī‚ć[Ćł»°”†īųzĢ€»Żd|5 AųщU¦¢LmSėüÄĢłRr[zu’NŖŗÉŌ“ŹtĮIF¾Š”åašzžŃ8ę‘5Ō^ź-ĖŽu†“½b!q놩ČIĪCL÷±O°OصßytūļhŒÓwc˜9qGłÜÖĮä[!Į%ÓČ/!’./[ų‰ Ń2ŅÖvM"+ŅµŪņąĘūķ”X2óVń%^Ū ā…•$d9§sŃŅ5‹:3®¾”a‹ūŃĪjĒJ܍e`•™;YÜւqŽ!GuŠŁ}ÄĶ-ž…ŃŅćŅjõ'Iw u\ :}Y¢É%ŗ™{¦$ ŹW‰u(.=°Ø9¤ääX3?ä3ńĄ”Ó#<Šīä.Ū³Ń5ē3ž©@įÅy~ŗ±ĻŻeIÅŖP”śÉ5¾M`ofĘK §-Ū™—jī£f&z®&c×zÆ$ʱ¦OQ«ö&ŗ7ŗŃnR[ļņö*ģŻ8ĘdD’G½\ ĆHsah•““ęH|›6L4‹Ó l²bĘÉ>ą'<ūż·O/̽2”¢ß÷ņ5ū10^‘3ēŽŹ„”g03f°‘Ż*×HKŌoõ¬*°5&¬cN .<7ŸDĘčÄōķ¤¾CF!‹AYFIš˜ß”ļͽœ<¦Ł+®2‰ĮoV’ņ¢²ė“ęYä(›@īųNĘŲŻK•™ŽŸˆc8~Īóą=®ø* ą›ŽpõŖ–+ÆŻ„µ/Ldš(Äf(€­|D«óŖš––m7¦aˆŲW)ÆĪj$Ņ}ŻpŠŲ1œ±¤żĮ8ķŖbįĖ÷ŒmöFčdÓ©]×5%•iĆ˜©ŗ76<Žß›4ūąŪ/jphŅÄewR”]-$”bˆ›¬M ßg+€ßÅĶd<®"9 ¢.q_<ćPx !‘Ķī³_›T+µIXŽĶ •$,\N¼ń7;Ųē‹Rŗ¾1Ł2ĒÉPMV”“`W-iT{KV0Ž#ł8ī["śäąGĪpåŗTžwD›ćgć SNÉÉxÉŌ3Ō©LP²—ˆ$ÜŻŖę- ų Ņ ęF‡• #¢`w.Ń0}ńĄŚß›e7Ęy÷2ńŖ–ņ¶&^āYž„0¦4@Ź}²UÓ§Mö} ­uļ]YFƒ,Õó”‰óÉEõ ā¤Ļą3Ū&t$J+>Œ^D#ÅX“čloØ #ĶC’pWų>j™}lŃĮ|t‚Ń)õ“ ßdĢ"FF!‘&6™ėņń¤LŚe\Hš|čŸŌ1vȾśÖTΊ5‰¤ė K3ōš\nQļc e«j¼Ģ×@G˜;ŻÆV—/ĻkćH®!%ĶZ¹kŒm•PX5˜Ž28Wģ¼Ó%2ö•&§+{ņā>ˆXå¾Č\ƒt©łöL~™1ļ5}ńk¤ž÷™é0[ŝiß*>ŠĘĄÖ²'„ļ£y“²ĮL”Ām=ŁĘÅK«O Å֋$-½2ŌX+žfs‘õü‡D+‰Õņ†”ņœpŃNć㩱Ҁ×mŹēĪÜ2žI‡D÷×aģĻ –vÅ*Ev‘Öq”čbyŻ]¢ÕbĒĢźßZι-®œ¼¢ ĘÄä”|ę,5•BD“SjIGߜ=ķĆ ąiraÆšķ‹Ģ:n VœTIĶŠŽ§s0@›ē½ˆ-Ü8jÖ0½qŽ`›|(rLģĻjmz‚ÅŲ@ĮĻ—N“0eį„śFQw¶˜…#|S(f•M}Gé…éū`‘PŠ¢³<.v؇­ a Eé^å”~æpSsyŽŻ{EųšD!Ēfi¾>/8^Ī  ž×O¤ž^¬«)ĀØ(‘į„c“³…³®ĻŪF…M·›$7 LŽ«Véźfb‹ĆĮ„Ż[žĀM'PžŻu ČĆ<“–ž˜ģøgåŚx˜3_Š;”™.ÄśŹL·Ūåµ6(Œ9§o¢Æ/0üüe‚›Ąėqč.?ŪŹ¼š–īt1“¶R݃‘åņséWąš\ AųUN5|żLŲŁčk!G*””=åF™>¹2 å÷‰Ÿ­“b×s„¾éLó@Aߟrämģ4*Ó/‡w.?*0ÉóÕWE8^ęP:µTøę+Ü4`>\·/ØT„ꚡf6le÷[4‡ĻęZ•ƕ¬öä£ūJ™‡¼ČŪFčŠ;cėEźņĀ›īØA{›ŪB:ī£öÕ*=i”“,BÆ#Ć33VøóDg¾X/}Ź4&ÆŹŲõĒDų›OG^ŹxfmŠGFŅxYٶ¶¬‚ēā5ŽwA_ŁR†‹<ĮU/8źm„Šŗ®½NK(HVÄŒvJß½uQ~7q™-ÖĪ@E$čT½÷&ŒąK³ā¢Āü8)Wś ¦mÅ7†ŒV9-/Ø×ź¢ČŚZ!s,š81·ŹĀ¹8e•9É+5Ęł™d"gŁ./Ó·ƒqČ!7wŽńgĖŹ Ļwļm€V–‚ßjČŌ¶ēÓ%ßW¾-9›ČawoÅrž†»ŁåŒ²¢QpĶl¾YĘ»6ITžV”,Ł/[•7-ó3'šĪę[ČN±ÅdFųAK/AFø2² ¾Æ€Źšx==łÉźP1‡Xś™ĮāšŅjĶÆ_>¼@$¶ø"hĖcoŃ©! zЀ٠Us-D˜]×Õ¹lM‰ā~ n.}ه”Ā0īžÖ€c|8VÅBgźjüęęr‡c×?CŻćv:ü4ķ 3VĘ/-ŗŚ¤ŅŹé©ž€½ßIäåe·®.0Œ™m ģŪ.‡–Č•‘ęa›ĶÓ o#1O3Õ²„¹˜xĆĢį3»ŌŪ æĻ š:Iø“Į#±_Üķ½ˆWžH¢Ńöź 8Ž>µ*«•µ£iĮu° v7’#r,¶Z »iq›Ą¼+ŗóø@¹Õz!fŌ?QēĶ(½ä9>æ,ģćėYŽfŃ×`®%ł(ŗ&Ń0B%ŗƒXJ,™œNy—øiŪĆĀžĶŃ͇FģĒ‹lYÕÆ©ĶÖ˜r“øó#”@d”v‰ ›¶·X/&déy‹ÖX"C#£Ņ“oõāŲķ£9¹›«ējńƒTD½lZ1čÄr毟&T¹kraŠ®)¼żē£Žõāž˜Ń–˜f1<Ž3ŌHä”2žž*y:ßB«ū—„>č å“HĖ ĄH§x~Ļ="¼aäHŽyøƒbč>= ŠĆ „o$|#ÖØr›Hžń# hjV’N I€<Ÿˆ¹żMä(”Ćėp±B÷ņ–V’–}P©3wõ«ńĄ[ŌŚ:ž;Ģ$ÆķO,\v ‡’ŽĆøöµø‘›tWz->c›ˆœŚ]'ÕqÄ0 z×uŃX;ē-Žē! éFČxóaļ•? 1¢d“)„‘n¦µw‰¶å†Šhh«×²Ł›KĄ×t1Øģ*Œä{+kz_LžÕĐjŽā1Ī+’÷(Böqą+øŌzźāˆ—HL‘_žwŪĢ~ʱ=$Ąśvšõq:ņ††^Š1 _?„]”u’ļĀÄ;ÉĀ|kųŲe.üI©Ģ4ET?µ“ģF¾,B·M™Ąć¢ŽĻxŅj¢Ż ęu•üdłŪl:żl™`ƒ1 ­ ĘP{øÕ«GFĀ<}²ų=Ö>¾`VęC«_¾ˆłą©`¶+õFL_+$·‘»ųßć;£a2±Ž|Źćbļ’@‹Õ: ĒŽ¢śŻgDÖŌŠŽBUÅ}gA™)ßĖyķNىāüڈ`k‚sżlĻkż…ū6ńó.n½eńöĶgFĮ‘6–åPÅČjd„”¬­»†ž7CęLgļ.«-‘… üÜ„F–Õ7€ō“}“zéÄķ‰fcdNJ‰ŪhmL÷Ņ(—:ąb&q¤•Į_üsßOÆ*ģ³fö{ł¢r$„d“n^Ck×¶Pi¶< Ós.Z§ ‰%8Ņm„{ÄłŠ`•·*=A§G?>iŹĖ‘ؐŅ/Ńū!…+Ōž˜ėā ­ėx×rƳyóŃ2€ćčŖ÷Z|uókNč•GYŽ£ŲxK}‡D‹Vµ_óAP›“†Į£ż€Źw ßų…W¤–šĖMVõ®+“óW ž°Ó˜’¶¼Üm˜Ŗ1żó;Ŗ¶ö5z«’0õ²[gnŻ‚Ņ F¬HŚžU÷Yųö¤>fšühCsŁÄX¾)Ge”ä‡@+>jl_æV:žR±½) ©E+ߟīętåX–ż{>:DoŹ`}÷R·åē‚tŠ 7Ēū<ęŽD‰³ŸS©ÕŽŹN±Ė1ėO“¢•Ūjp|[’y;ىós„}įągB÷ž°BļžnņĒ5)Ģ _n*? Zµx-[Ėd—^Āxę·pē&U>N#{¬xzߤ¾­Ūūn”CL¤ łČ7¹¹EŁ|8&…Ŗ·I?¦łDT×)iłśŸµ«7!ß<ąŗęyY~ó1¦„rłŠ-lidX”Žźā+ŖW˜ŃūĘŽÄ#©€³|ŒĖŸ‚.QŌ‘62T.ŠMG˜³Yƒ`$µ”€Ö(2ėŖŌ ŻĆŚÕÜüÉK‚Y°‰+ŪK®lž,ĮMbŻ1ĮiČęG²ļ×"ļnŹpbL­™g¾Ÿ³ĆććĀa{ųiÕ?W'Įć…;·‹- ^Ż:¢F5Ž!ėuĖś>ŗŹõ[BÓy|ć–ī÷ƒHpŠ7Ā/ åp†2B9K©ķ2ŸXHū\ą \ ToāˆĆŠ<1Ą_5Ąœ ›Šœ¦6£ąPÜ/4’įeZ ~ł5­ Ż`“"ģW÷;³ZĻ Uņur \ŹR£Č3šöJSpŽąŅ„›"C­¶%ŗĒLhēęåĖĖąS¬t":B'f?†#ŲN®4Ē95XJt<Żų}Nމ)õlu#Ad>)Zß«‘Ęį]¬DÖśi7E)‡3)§ēźøÜd# ŗŪ¾ķŪüĄ(Č ŒQ·„ „ķ”SmŪ)Ųw(Óč8rKh5«żČKŁgó××|–“Ófh7 Ųj’;Åļū^Ņę>/°6x}… OĆč7'vźōY•o|ĢJš;U„#F{14ƒ}Æål&iĄq@“(ޱuźŃo+²iÖ@NwKe.—®\܊ƒÖ+żŹĮö£‰ ²q„ä…Ē šŒ!jåeś-”ļt@Ń,®!dŗŒŻČ‘‹Ä.Ÿ­ŗĢ eģt±3Į’³xss3’éE\[ dp§õ۟Š×)ū¹‘¼˜ÅU«"F€}Ł–"[&Aśó[„žˆpÖyųę›F2[NtT}Ē“ćmćY^¾B󻎂į{ķ‘Ž#fćg“IäĻ*’X+:wpłÆ£ķ“Ņ21zMņŠ{v{)0+ŚŻA‹Ķģ/ b½īf†qN¹ŻĖóAōIsvLR7•·ÅÄį|¦ÉJHgŚÜVüWW!A7˜[Å|¤–x<QĖ”Žs2ŌõöżŲų‘rACs zmģƒ)‡E³ēE[óI]°ŌĒCMå¹Ļó?b8[Ȕ-żŪMóĀų¬c¬ˆG)%±±ŒC]öŃĀūŚ„·ØŖ,\Ÿ¦%Z$rø™ŗ™Ż† &é>ۧކ4 Óœ%‡²ĆDćĒĻ |ųØPP<Ž^Ÿ1É棋ļŚļSź¶Ŗ«,°e¼S{=ģń.Č6l”āō††hķIƳBźXOS”/žpRžĢäŠ:āüiyXaåCÕ¬‘Dɝ3ģš>QC’»S³Xę›T›é\“z“ĒČ"ŪR24³Ōš]4!o„1MŃ,[ Št6ē ¬…·“rwļܝŒ&*ŗ”¹ó¹­&*(ÖTš`‚—aŽjތ/cüa±"•čŗ“č›č’NĖiÕ;”›m,¤"öUZ½H='„+*>ņPbŚĆe[fož“'*æy{ń‰ŠŽĒ|ŽĪˆüƒX/uāRZųWOē›G e¶Y ׊L&ć"ĒM¦żGĒ2×­ŽĖføŌ¾ŽÉ¦Ó'»Z§ NsBYŖ°ĄŅךdyAYńūĘ;KŅ/Kr¤šrkĀdĢō¼¬…o\­ØzÆüY޲ °£¦É£n«įóFĒłŸ1BMźb`²ŹRrś™Ļ7’F隐’ĘHĻ—¶tP”¶F·©ōlĘźDŽōŽ^Ńd]„üģvæ¬k0Š@=»EŅŲ7/h6ŃZ.żSŪänŻy>ī£Žł{ü:9b†²ÓLOø¤ą8^¢€+7ű²Ī{']Ö́J$ČXÄ®œĶoę;ķtƒć5² (čĀkcœčNœv4pŻg/,rČ‹hQŸĆ!E\“ ņĘģųOĒifyL ^%Ģxu{[Ѓ~n¹¼ĀÓ[vø ĖŻŽ¬š:{¬7ņzĢ;|µŖ6—Ö £ŠvŠvĖ,Š:aćPÕG0¹Žęö:ģä Ā®÷õ ›É¶£½ķÅ ßĖ›Ė?ŗĻ¼Ŗ›Ń4Š&ŧć ĶŪ†č‘Ķ4>—ųqŸą|z£²‚ ĶÕ]Œ~@—¬ŗ|&$¹Q0†~…ē`$W(•˜Ē“>AāöĖ>zYr•œĪ×õHØyīĒö³ƒäŌ¬°~B}h<ĮŽ_½+e:~ė÷T YCćłøĘūÜ<ƒc”¹›}^³üA’7ŹZz‡½Ql¦Ž*ĮÕ)€Ü0ņĄ7ėnax„Ŗ&ĶŅŌż'œ’l…;)n‚FĘÆƒ8čÕųz:śānZ{³ÉĖ®“.l–¼Æ›É3Hį«n*Ió›ļ¾ZÅj–TbÖæ}šęņĐ֢śīś[Ć[]©”7§ĒųZ#ĢIB r/Õ2Dį®ćå}|‘ī ³Ŗķŗ6YĻ[Ŗ— fHN:dJżP+īł`™’v¶B³ÖmßKż£ģ‚ź˜®g¦Ž«€Æęī_†/Ø0čØ!ÆxŁVŅĻ‹ŻébÉņbŸßŌļHœėŃŚ^ˆJ¶l"XĮŸ•|øpå¤Ö¢•®<«Ą›šŌÆó;Nw‚>qO{E ÓŅ42ÖŠō*ī[ę˳z ŽÜωjm5LüĢ“uūb=½JFĪŪ0Š$²8‰X#©ä)§i.„h“ĒgE5¼]:„śĄ¤žōe—Rq°§ā­Üšx³5’(4ź<ģ'™G ™Ę įpšœäż^…)ü³¤bbĀ,ĖŠ’7憗 endstream endobj 803 0 obj << /Length1 1386 /Length2 5966 /Length3 0 /Length 6906 /Filter /FlateDecode >> stream xŚWP“k³¦‰:Ņł@z‡ŠA”^¤w@%$ō&MPŖōŽ€HG¤ŠŅ‹4E¤(JGiJ—rc9ēÜóß;sļd&łŽŻgwßgwŸo&܆&ĀŹP”L…Ä ‹‹ˆÉŖz&&²€˜XDLLÄĶmŠĄŗĮž˜AÜę04BŹ’7€*Įālj,§‡B:^n€8—–—‘$ÄÄ䞢Šņ€ÄōD†q«¢<üŠ'g,®Ģ_Ÿ#? .''#ō+Pv‡”Ž$ Į:ĆÜq!n€ ŹĆśż+Ÿ¢3ė!/*źćć#qLj ŠNJüB€ė Ć00“7 ü$ čCÜa晉€øSgę·ŻĒś@Š0gpC8\„ Cøā€‰¶.`ąCžėžzˆ‹ˆ’īOōĻDäÆ`ˆ£#ŹŻ‚ōC 8Ā hčŠ`}±B ż „øaPøxˆ7įqĄ~Żh(Į?ō0Žh„#‚Aøż¤(ś3 ®ĖźHØ*ŹŻ†Äb@?阮@Ćqm÷ż=YW$ŹšēG ”šŸ$ ^¢fH„§L[ķgżcs‚a)111Y1qę Ą|E¦7õó€żrž2ćx <8Ž,‡į~@ˆ7 Ą¢½`A’ŻńļH\€"±€Ģ ż“g†ĮŸqĆG#|k1Üī‰b???ŻĘ­…tóūžk¾¢šŖŚ¦z*‚æ’ķSQAłĀŅR€°„” .&-ČH‹A’Nówž"’ĖjAü¹œŲ?µ‘p ÷›®yńšž³|$Ćü»‚> ·Ė0€ļŸÕ·“sÄ}‰’æš+äŪūŸYžÆÕ’Ļ ix¹¹żróżņ’7Äįę÷€[e/,Nz(œ8’ µ€ż–² Ššr’OÆ6‚“‡2ŅÉķļ6"0_ԁutž½CM—Ž „¢0ˆŸ/@X\Lģ?|8Į9ŗā^(ܬ~¹`8=ż»¤:Ņż)< )i‚FCü@øŃćNR@€8N”P˜ļÆÕDE(,.ĄŃ ą(4čēDÅ%ÄQæŸ6Šæņ:z”Ń8Įżš<®č_ē_ź†Į|aŽ ÷(G…—Śˆ–Ćefį„×Ä?µŻK“ź–ĀņL> pÖ½˜„9ź©b­bJ7œ*»ūv"Y`ópŲצ3'ōCšV>O½wAe[ø`ąč{§Œ Šbrz#“~ozė+„½5‘5o²ÅÄI¤Lx„złŃifå–ÜĄx¼OÅ‘ĘŒSĪkūBcÅĮõ ;heCOƒ¶Īš2Õ6{sJƒˆ?Pi‰e<ņ[°ŽĻœ›ėĻyŁ›žVx³ū‰tÕŻĖŒ“ž:yCI}Œtrtš0x<*RūŖe‰Ńå“1D•“čŪĘ·Ģ€qÅ6;˳#·Š#¼ZńŲŚĆ9½K–SīĻgwčķ(kPõ­©÷wXr¾H8残‡Ö®*“¶įذs1tT¦5īļ˜_ĶamžŒ³)Ö~PĈWvÓø6’ŹÄC/W]ŖGiŖ|A5NŽĪŃģš©Hč”Jł±Ļ’䕐ƒ`Ė ”Ė 5¶Õļø_ŁķžÖĻžL±–­½‘œĆ+€Ć$³ŃńżÖéŲ±pj¤:>w†qHȌ’¶ŃcøāŠ’ŽĘ²Ä€eŗß"_‡ļ†|õ„6IĆˆ›)ĪPó¤ŁÓ„ i³^Ü}497Ł)¤Kā}?V|³gutŸ3ŸöøDZyįŪē'_Y“L9ņ¤¾%oč?ˆC£ķX7ģ‡o¬~¶0’‰¾ŌhU”ʲZ-«]÷ż#tÕ{B"Š£œļ÷ Ėā‚˜[H^Ά$ S„4¬Įßž‘Wg„Ad‹}›jٶA.†čĢä~ÕõlGŁŌ§†Óy„cėX'ēśÜƒIĒ«ś­Œ4ZRå묉BŒ½n Å%mÅęĢ4ĀVĆŸhēš"/Ø<²a­“ąōyzµ““Aœ@]‚9ɝ°Z“z5Ä|\ķsė7|ļĮhĮ¼F¼~k>ÉŗąĮ³QYȾb!ķĘ\iöŻ,ž“¾ū*¼‰ņēUė*_ß*›™]įŚ ¦™öŸm÷ܖJĶś¶_ŅņŽL+šÆywįT»›ÓTź¢g²2œŹwxÄįWĪßj³@tÉ£>g÷y–52‡µK–e¦é|™;ÓB‚įžĄ„­›ÆNMžč­· Ą'’FdČŌ¼eQnŸŃūę±’tŖi%ż’Ķ:śõ%[e'UL£;Ѡ܏e/“–˜?V—|üΜ¢Š(ɂrÆÆ4Hcč^ŗÖTVt"Ųēā“­ŌŒ¬¹µW,Uą4įCveb°»åsōµ,m(.‘Ö7U‹ålšDM7Ū0Ļf…Ūü“=õø4Ö«bzfXŒŽ~*jj$n¢Ž}fÖ¬œ|į‚/ä²cņPÖS Ņ…A¦\óƲķ[Š Ń ś]¦×Ž™>x£7%Z>3ł|U#‚w{Bb?f%y±Ó†ŗŲ»¼Æó^'ƒģłÄ~ī-0LGäF=¦)Z‡Ī¤|k¾*r'oQ2Ę?oš™…Ń•³žHŖŃL% Eūˆ¹„5ÖļeT²ī8„ŌÕŲHńØŹWļś•ŚŠŗ!EÜ/…ō?ūĪ*C咎óGM”%ĢĶ;_łĒŁōŒ“„‚ÖµōO‹yÓć“x(})ī××½0|2?‚FozĪv»|ę2Ėgā³eÆIŹŚ“løY56£™vpś:”ż†õ™óTjGżņś‘Õm½šåū °¹›Æ©=”ĮZ“īŽpŲJR,¶Ž£ ĒõŚÖ.f>_-tV\oō“ oL6:{\=‡œŅ0Õ.͉uOµ4CƒnÜ”>ŽĶYx—½i‰·Ó×/|×`ĒĘhx'e—‰Ą$Źz[±WEBͶ”aKś„ģF“§p¢%±…(³Db:Bž!kŒĻUÓNŁ£ķØ/Īœ ‚M£#ŖfļŒTI}<3›ŪĆD†)˜­V^²T&вѬ<,Õ!VŚ…(_–ÖŸzƄ*²öŽ 7Öŗ:ĖlYŽKqŚ“gKbå)/®ž6bY=ŗóƝ:śĀ•īŻ£3ö¢{a§7tņŲŗ…Õ:üj&Švt¤’Hs,'ÓŁ,åŹ;Z;[ņĪŹ$¦EēĄWAK$įWģļ5·–¹²FźĖżČčs'Zz§’mi·Y°3wY–Flé%ļ]"y•†oõfŒSŸõ 0Ÿńń%ē-­i3Kģ¼Č9ėĶŗčVæ˜ĪT°ŖUŚŚ (FL=śįQŁųŻ–ģę»Cöq¹5µjŸ%˧©sru°bƌE%†m@›¾ĒŒŌT(ŠEōļ8U„”åĒŽäĪ2¹n VfŹ“\ń­IŠ?Q"­z­š2}”e²5{÷žYģ$/ßQų²HˆÜ`›čDœ*õ”;ŒŠ˜Öõ؛S“”¦­_0ŽĆŪcWTwÜWå±Ą– G'½—AÕ,v)$`”.ÓĆTˆX|ĶGÕ7Ńr{_°P±—+s²A‡ņš©æę‰d“©øJÅæ“āØZźøüāŠ,\f)Źßgœwv¢W¶Å?~õs”¬Z×ōī’€|ń„śØĖŖ/3æP¶·1ȼsź{šĢC²£$i~Õ”6Jā=%K‡½ öź^rüM`!et‹ÕƜÖ!OBEYq¼`t9’0öž°=„owŖg"6h9c÷Ä*žL°ź ¦< š‹ĻOE…Ł„xøƙR©J6Ɯp-$’æźø"YƒŁÕy™†ā,¹ĮäūĘ欃|°są¬ūŪõö&&ZZO-¦' uKgć²;cj­Y»ėöķi. 8¾NÖ@Ÿ•(},ŽdäPķ҇s”q¶£ŅŽesugśå·'ĪJ_l<5Ō\'ķä®CŽ~2—”ćxF5ÕÄSŠ\ŠŽUŹSäWĮRyüŒFźĄĪ@Ė“…~Š$|Ž0óōcOž×UA>n ŗ0»°Cöž‡7zØT»‡Rō … öq̆ä—‹ĘBc·Öļ×ŗTĢz¾ĪŻØ1ijϋ['ķJB*}Õ·ß<ß®[®A4‚Xؑ¼§sw†GL„BülõŽK>ūjXķ}‘#?ĖųÄ÷+$Ö}·b§{ŌøvŅ'¦C92¹ŲTēJ%½ķśet6ŽŒ§ˆAƳ+,X^»UĢ-æŹŻ‚ŻÅ$(,Ī*ÉʉÓ_3)xB½wŸ']M‘[$ÄĶĒ”ŪŲ;MjK/ W Ķp^³ėĶ‚ź•–ŻĒ›v q#ØŪī0«Źšnłd²Ģ-JgÓÅAČæ”˜é±qwō¹³n‘ü`¤;h„ąÜwč1|'Ü®«ZĘ?ž1W|Ė7ü¦,¹’¢vÉīõÆpb½{Ż“ƒŗ/ɵTå«ÄMLvÅ\Įż"ƒÆ µ¦×ÓtkäFEŃ„[Ze[Źr|ƒŗü̦é¼$Ķ­EČõ^Ŗóݰ‹ŪE÷c?„vmRP)6ŦO9dĀ7¢sY™ńŅ\„ŅWkzBķé¢Ē»ĻųŠ'H¤T—<Į1÷Ž„‹¶°•ÉŻjք„0Ųv)Ž“Ū‹Ē ”n=:ż¼U” ‘—“% Ņ”gž@ŗÄ%"?ßLŚśŠį)Ó¶5Ä·=ŗź~­Ø|tŪ{D¢ĶŚbޢ⠧’='’«ž<č«qč ļqŒŠ(ÆOņ`¶Š’5lŸJĆFĪ€“ćr#󶝎¤æ5õ4³'#Y-ÆĘøœĘĘTKÓģÕN9¼»ś{©’dnž5I‡Šš+—<Ėapj̈YVł:ĶÕ¬ÖĄ¶£ j|J­ĆÜĒ$ ݾ^Juø«V*ō¹ĆÉƒO/½6d5BÕV‚KdbPö¢šK»«ńp§ŹĖ]Ę“UA²rJJ'°“U‰“°ŲĻYßÖ®mäf”ģ¾”ž“Ķļ'ĮšŽźš äу§įÓ·³öĶž¬ŲŁÓwŒĪވBŗS*/°6)[×Ē—cŽŻ,b ćbcČī2©.Š™f—ėy[½™åp”öJŪA±-ÅR—Č >Pbg±ĻÕžXī7ō©B"8Ÿ-ąņ“&F»ŃŅ“Ä:W¹CćīŌOś!„_ē ēķ¼•ŽqižoSįå…LøS <¾}i_Õę0w6¬eÉ.q٘b6»{5³0Q œ›ę°=Ք3§=Šu)q«R¼żŠ<޳™£Ö›®Šä3’Č•¤Xmļ֌ŖmžŽŽęšL^K 㜊h]ø§0»uŗ(ÅųŌ¹”Õ“”@?B©+ngs?*rLēvŖń5ț'³–k„’z¦Gņ¹)†ēöpĄé ³h"z Į:QøAĒ.ųnĶS†6Ć7·õ›²Ę’ˆRądqéU‘‡Nķ÷ū2 EūŽŌ#MX>Ÿ™7IįoĀĒńå?³_[awūŽżP(`lXeHeųĄī”²E“yS énh·fHzÖWķ–^åĄówŻĖĆ*ŚĶ-ņµ š Ų~QDĀh}½ŽZ4­C‘Ł&ŠłM2£> É%ääJ˘Ļ ‡D±Ü³/`–Nģ­4Ō lfĘśI33µčæj¹¼F2įčœÜKä X>­ÉŽkæ|!tnHš6cŸ¤|µ$aĢ„/†¹,˜Ņ1ĀĪt|b]N@I5}kŗ† Ŗ]¢,i[ųÖ®Ģtƶ°œ_³Ž¬•n–čš)ĒŠ™3^I{Ą¦p—cü7Ɗļ¾o*uæF7E„Ż®6†o뙪:¹Õ–ŸÉųRf§½xŻ…j_ņ¤ėįóoėŖ<.kdnė§’ųUŪöy˜W¹ū_?/pę;½z¢ńP]yŌ}Ó_+‹jM½gx§vą]ßć sEņ¢ś®ĀūŃ0—Zó„õ£™³×ēoHRN6öŠTkóJ/Ä<?Å?³%ł¢’]©Dóf¾n_‚³ 7+Wdɗ“·1MhsIFzt”lmŻČYˆL+ū֎M™ČČŲ°—ųĪĻNjE“±.r©Yy+mī{†ZKĢFÕJŠč0ė‰ž®o˜ģqēåŖ³ėMh¼ž&¶ƒžtcĪÖŠéŗĮ·6ŁC—²’]_RVÜč&‹—tӝ#U÷~w=­įĮ`žĮŅEz’mÕk·fQ_õńŚ”eÓŅ\ņĆŌg9žu޻م—Uä ¹3Īē.Nö¾Š5zžē Z›d™Ył˜Bž°j.xv/ĮF$“s‡rD™ƌ¼&B8·u›F‚¶ĖĶĖ„¤ >č†õæ¬(˜õ#ę#¤Ī›¬D^’"čj›4ĢęĆX7¬¦sīŪõåpŗY±s}āķ< cEVš2Į‚>Šīj©Kϧ"Ÿx'=©ŗ£Å«žZņÄ+[l—Ķ‹µČWć“å3[ƒ7‚š2l³Õ:aµEņćzęóY Ÿš­OŃH–bq–³°¤#Y†]Že‘é±n›2ē” v…:mūL+`Lžtæs%ą² k}? ƒ9I(¾ å„čĪ+ˆ:ŪĖŽ½ėąĘA®’<‘ūIś)jM×¹³ĘŒĆNWÓÖ'źēaœĻĒW@y:Į·'üm“¼]gmļ°1 Lų9œ·Ā}ęDĻÕ;ē “›õŽļ Īm„ФėĶIļō÷®M2D’ &LvtšžA¢BL9ŃĢKR@µao×"LÓū< ż¦UĖdqyA›]†ēÉCĀÄt£i%ŒĄmvąĖ\Āź=¢l]ޚ$’ĆČÕM{²°Ÿ"ǾdÕłPLē\œXŖĮ}ė™5‹8<Ņś H³d<åóµęāĶ'¼Kˆ ćĶāƒA|團ÜUšęõŒäõī‡Ūjœo>ČeĖČ'Ū]€mŻź Ž\ŗ¶¶BSŖHĒĮŪPŒĻ?–6caõh‚Ļk%Ą`¼VrÜśéKo¶iÅöpņņÆ­1ēGåÆ5ƒ“bZ ³čnQ%ėe;ŁÆR^˜1H£’ų6x‹UĘYĖlŗü°œJ“K±XE#†I¹ÜĀäÕL2ŁĢ8eü*ņeģQł€ńg“‹€ž»ĒNćhŸ||0éc7M½ęłä7›]yyŅņ"'ŖķĶČ0› ķöiS}¼ĶL‹żCŪWƒł/Ę?=nšŠ`¶œŻĶs‘īrō~~3]Žv¼ļ‡Ņķś7%Ō.!w (§Fc„ó_Pø­t§ÓéĄė޶©=č)Ųz(eĒiįE¹÷$4B᫆ėkū“ą¼ÄG3ŅĘm#-¾FL(Nšō¤„”ĄŃr’ņspėŃN ņi*©rćRƒRz|ßČŠī…žĢ—L3 ųWŁ“…U.äIą+óˆ»ļÆWS™Œ ĢAUÕ¶Ē`īiĶžO£Ąƒkxų3ŽżŁ2ĀdE[/ķĖä7D¾l²=bš!©Ģ}šįŽÆU°YĶąš‹9MS˵„śžÕ\«dĻqā”é>ʞļ×ŖĖy^ffÅ_)ĮLU®ØžĄ;kš·_ńw)!^­Žé œōXĪ)-łĮō0€DµŠŹ;@pķ•ū,l.–ŻŌ•jz?ĄxYų£rć ĒöTˆjĄų“²±›ŠLA )įĻļ ϜÓƾZŌĢZMø«śŒ7š÷(Uō“qŖæFØÉö=Ónj”jÅÉĒįĻģ¤žZŠ”¦^YĖŚ"ˆō„§@-ŠŁ™cž ģG¼£õØf‘"ļJ „ę“ųP±ĶN’ęW°–-ßÅeŖŲų9Q»ąp"аŖ¦\&Ł¶°Ö;)Ł ›ĖEWŻ#Fš©ĘāźČ{Æ5VØé^£ŽIĄ<ƒæą»æ-Hs’ŽZ’³ų;-Q¾;ėɄSTÄė{`:*Ę ƒy^m®Ļģ«2=Wn»seæOdTr%T¬÷Wq”ōų“@ŖR”h+Šöʾˆ$»C„f •ž)³[Ž ß ³Fņ[ąi”C¾čSfļž¹6¦Ś£Ū…# īr"…H%¶‚)ų[j¹ŠlSęq÷ŖµõBw³‹[Ē/•*wNĢ•Ņ`×o“®z¬7ā.$„™Å#WUJ$šaŻŽVŻ’¢ž·m _Æ;xŹ]¬TX²Ü{,NÆ¢MłGd?/LŒ¢¤˜0ź80k»|śŗEk£.ؖnٚüņT"…ńv_×bœ0ń™l[īWæļuß#Ē3…æųąõI¶¼‘„łŒņ õųX9ż³Ź@‰\‘bgծܻ `ac‡Źr‹$6‹ŠŒ¹śś¦öęwĢć—•×ĖÅK6©Ÿ¦Uäz?‚XXŁŹˆsļČõu\Q& ­•k8oŅizӌūsÉōĮłÅĢ‹,ķÄ`Zć–ĄĒƒLÕÓóśŒŖ×.¼»¦ŽÓ/Ūé§*й“š¹]Ū8€£±ī©zŚĻ“įĘõP“„äž$|ꫜóĶ!}›?ž‹ĖŠŖ7“<’¢é#jĻ­,±©­}Yzż׃½‡oĀžź4oQn\¼ųUßĻÓBF_–¬ˆ9kOÆq„nĮ^ž£|g…Ó¾o‰xZĢisŖŽ !™Šo꓈(²_j¾ŖŖk‘‰ˆ¢Ī’&żŌÄŗ`׿•õa¤3ŗA±wK‹ā¢$Æd¶yhé!Æø8Ž©"Hlˆķ'5’šæk'|²×ü¬ņ°ÉćWlßijŅOį®L÷aē.…„ĢŽ[Jc垊p“šDō'.`$i’aš®Q²yo¦ųķ£’BšB7 endstream endobj 805 0 obj << /Length1 1539 /Length2 7022 /Length3 0 /Length 8029 /Filter /FlateDecode >> stream xŚ·XÓļ6N CŗA`”4l¤“tI7HŒ1`Äc“¤HˆHIŠ„¤ ŠHHIHHw#Ż‚ҼÓo’ž’ėzßk×µ}īsīsĪs?Ļ9Ļ6.6}#AE¤=L ‰@ ‚…@Ņ@e##M0‰ @"..c8Ś ö·Ąe CyĮ‘éQ”Q0cS 1L$Øåķ‹ĮŅ`Ii(IżED¢¤*øPG؅DĄ¼\ŹHÜɍ)ō×#Ź KII ü*ŗĆPp(ԁ aPˆŠ …ĆŠž’IĮ#ėŒF{H ūśś Aܽ„('y^ /ķ 4„yĮP>0ą/Ń@]ˆ;ģ/mB. ±3ÜėŅķ AĮ€ƒ Cxab¼0Sh¤yØēCüA¾÷AųēīĮBąæÓżż+ń;…"Ż= 8Ā čwƒõŌī ”żŠ@Āįāę…ÄÄC| p7ˆ=†š{ķ š¢‚‘ų§@/( īöņ‚»ż)ü+ fŸUŹHwwķųµ>8 Ål¼æš_ēėŠ@ś"’†Žp„ƒć/!ŽĀ&ø§7LSåOĘųĒęCÅA ŠLĢóƒ: ’*aģļūķ’2cTz =€Ž!° ø# óō‚ųĄ€h”7,(šßŽ’" t€CŃ@{˜ų';Ę sücZ÷Z0‚~½ž~²Ę4™įę’ż÷) k›Y˜i˜ń’„łoƒŅ((% Į II ¤ø0迉žŽ‚æä’¶źCą.ļ_5ŽH Ō*0Ū÷—Ÿ?›ƒēĻŃįž·‚.ÓÓ0 Ļ?#p$‚bŽĄ’σš;ä’Æ’ełæĄ’.IĶŪĶķ7ēOĘ’‡q‡»ł’IĮ4µ73 :H̘ ž—jūc¬u`po÷’õj¢!˜AQD8aš],ņ‡ī„÷ƒ9čĆŃPē?z鯳Ąpƒ#`śH/ųÆ«ż3|PWĢõā…9±ß.f¶ž[TE:üBq …‚ų0 €AāĄ@0fZ`~æ[(,„@¢1!@ŒĄ  #ųu®`LĖ Ć~Łž„"@aĒĮ;@a· ¦Æ…‘’‚²Ēæ Põ/(öś” £’%ĀŽ’@LŖ€ßš?ņ Ž(ęų݆ķįß ęƒ¦Ę‘P™—Źˆ'ŠL¾‚«ż²ųßŅOĢEū lѪö_“Œ^dMk—ŖMµƒÕl\šu•NV‹•g–ŖÄ"]ŒźĄŅgŽ%o!Rppź0ā"{Ą]Ł6™ģ{›ŗDMRėŃGݦ–Š’¬{“·¤Lw– Ńuö]Ę«ā?č¹s–Üć.?¹“¦›É®-Ūt Hņ}K¾ų¹§k–¢¹56LĖ'|uŸ3M”*ÓuKEģĘ[ÓŁ—¤9Å>Ū™”öźTw·:Ź&՟^7>_/óćB(ā…L4Ōł×[؃Zevwź<,²ąŠ3'6ĢŠp%»21yī‚ī×}æ1°T c! Pź÷żä±óīńjG¾Üäs}ż”(ō;S˜NÅŃGØÖovmPÓµ«€Łx’TĖL¤9B;wĀQ_÷„{ŚŹZōć~ƒWõ 'fÓĖ­w8ŅMM–Œ³“¹§ŖÖ#lxn=ĖdŻ“f·Ć¶y]YG%Įtäßć‚Ö:݇D¦tĖxŽäQ–ź‹ž³ĮöW¾ŖØ×‹y5ף—sHŸrCŸk”‚kšyæĪ^51ŃźcB° (Ə†ØZ“gÆé|²H©Ė‚µƼEųqų'y‚ŅEūd£øZwBėÉ`37‚NY)ļ«:n Ō#Ša?…Ę$u4|z–׿bZՐ/Ÿņ­°ŁM\ę}Õ,W¶Xc¢OŹeöUķŹ÷Ī ŖīݱUd»²™Ż#ü¬~&l’uńŸ’±­Śł¦ŗŁ˜Ibܗ[VÉ?·xĮģŹƒrń(K°6ś.mĀ [ėÄĻ=-Šß*śk†Ę2äĢéź"e8x“÷)§dā>lS -ZņŲn3 Q»Ż’"^/®ßŖė«Ė&%īwqżāP>“]å‘`‚óEs¤!˜ Ć[ŗD•ŃUNTł¹×ė+Ļ ¾vĀ8)żŹ];ĀŪŽ"._ŗÓ?µŪģNŁTF”)­¼@†*¬3 õŲ2W&¬fq.摾Æ-Ģ&~ø¹šsüŠy‡›ŖÅGĪūy>ضę탈Ś*s”ž‚“:ŚPd¤¼.ź&oū©‘µž/ÓyIŗĆ##Ī)X¾—¾ęi „c “¤‘ß—„€—Ļų\…¶SÖ. +¢G¶É£ĒäXŅū9DĮS¼ļŻIŽž]īņĘjģĒÆß[0X`˜ŅjŁz“ŠĻ:"‡ŚŒłv Óā޽TÅEŸŅ“ŗz¾Ļę*4ÆĆ¢‹‰æČTŚš˜ž—n2Ļu ™Ń,³å ;¼<½²ž£ĀæA…“"8EULz’äė[’•éč5ł>į…*»Q8/aŪ·T9·/V·„į}‡Õįm^UEIV¦Ų÷#­ÅrŌ”2HÓ$’J=Ćģ5ӓ Us6”Šø!¦mtŸ ØPÖ £ż‘ļųP,é|©DÖ ėŒģéL†#üH-ĶŚ‘³ūŻŹ [O†¤Cœ;ƒŒĶt"Iµ‚ź}×ēäĀjB nr$śå¾.ˆĻÅåUl³ 1z-šµSöžõ'ķūpƕ’+—ö“Ÿ1”Ł$Ŗ²Ń…Š& Uū&›°}DĪ,C¶bųן%Ž¦Žī23Š©‰«¼±ņ·>~™³ĖEK8՗ż.čį"A?{®ęŌ¼ÜųŹuóéØd’Ļg‰‹”O&_¼PŻ{ÜE.Ŗ`ō¹¦ų<ó) :­H}@:»ńĀÅāusv˧ķD@«›7†ĪĮI‘bå|M’:NóŃņŠ­˜’āhģ§BüYŲ§ęÄžĀķRķ膳ŗ™Š÷·{–#½!Ėō6—ĒT_óō>抂FØ«E†GßÖL±¤+÷æÄ”ŌĖæ‘dtē»Žõ]؆ˆdnsh-#­ĮbmgǁŌ’ė ówÉ7 ĘļÜ-fwõéŠ=eŽĶä|§2+xEpÅü²ĢßLž08nē|P1& ē·ōi·hdŹ]^ӄ"ģõć$#’Š4 \Q‡»ūI<DZOD¾3R~ĀįāÄÉuqYžŽÆ·Š”gÆžQń·Lœ„qlę9Ķ¶ĶAtĢ„;€:#ƌ¼Ø†–lUāÕŌŁ¼pv+gX æŪˆē2j¦ źKŪśįƒÅ„ŒĀ­bCę¶»TŸÆśŃ–ģ8'…ś‘y+×"NݧŪc»öę ›<ļųb+ `ą¶IEŠŒ»Š“zA=CåH¼ī³jZjG·)/1Pā–Ż×`õ¬Å‰Mz?“Ž“Ęś<å‹÷z^Ź…†ä§Ņą“™ /įø¹ūFe÷Ä ł”  9ŠxźČk–Ķ!¬éRŽöÆ{j…Ö+jõ =f~Ōīe8ūęN?ė“ zu¬>ż V~|Pł–OŪčIÕ^7‘zœęŌ\5LĒæ8§ØČ²’A]⁚„ĻĖõœøź #‚öž—#±Üćj„³ó GcNMVXJŹ{nų“;½z2”¼½<@vJFĢ ÓRqƍ"…$BŁ*Ł&øšĻŽjņ=µe ?Ó3\z ×l7”?gČŗšˆČŃēē~É'ZlÕ7Ś…$JH©o¼“ LwnÜY¼Hc Ń³{õų氐ŽŲcqÄÉPÖåi“¶‰§ĻܘłOlœżKóŚćl¦÷Ņ ›¾Ž@[9ė–_kĄUkūߓؽ_Ø"ś˜Bu_E%ŗ¹Õåä8PWq“½÷3^ ńž‡¼ū©;Jśu$Ni2wrš/ścė­“M“^ÆłÓ0ŗ½ŗ ßvZó¹* č:*N_l4`h>f DZl¾Ė ‰oĻŽmH‰™I}Y5ņN”¼Dҵm"ĆL3É).CŹDųRS?›gGM»TjŌdށĮ×¾Ķq|Š®ćĆ}ɤĖP:NŻõ»PšÆļj™\ į±¾›Ćņ~!©åÜs+ļlö łÕĻÓõ%Ø<ż#oÉ|oZnČ<Ķ‘­žj²ś¤Š¼¤ęÕq0īä6 ‹Xę Ø›É÷’æÅkͽSY’Ÿ³š#½;&ĢŪ`XœĖ±Ė#›z·‡ŚĻMįd’®Ų#ė–§5=xZ[Ģ-åsēē`…Vī‡Z‹öOt)7ńLÅ×äĆ‡Ļ ēD_|ĢTĶšóā”u)ļ{Kė»§Ŗ÷“pŽļēT]yžb[kH÷ ?ÉŠ«§ĶuyŃĀP8l¹B’4œŻ]Č6¾1SųdcˆĆ/ŗ`K±EŹŠ…>ażP Sß\ŗ'šˆJEKxuķM¦Ś‹`Ŗ¤hän‹¹µY‹Æ [–‹é5•3–m•M±¬`7vaHJ,öŚķöŪ}ĒĢ‘÷Ā©„|·Ä®Ÿ†•[ž;¶¼™Uķ]-ØØ|Kš‡}T”ĖYN—;‰uŪź¶YŠäā·WI/ūøīVńÜŚ® Š¶”“S.½MÕn€E¬RY(ՂžģŌ“įµ1VEŽjŽś*|wXf–ÜzcŅcbz— 4ćD:Ö­§Eė„‚Ķż|3QQ8Œr˜Łö-+y!®6nŚ~ū¶KņĪ ƒŽ"2ō4.ӂš)|’Ź Ń#”tĪ3×xģY›ö` N¬źŌõœ&Šī°ü€nīN–G|’×W„Ųģu€Ōjtģ@R?göm®ń[¹ˆVŅńgiˆŠO »,¬:źŸī[Ć\±Š™™}ŚĆÕ7?QŖ=Gƒ ŁfĪbkö(=»”ńÆÉjž×iUɛœÕ~ˆVŪ»§œ•2æ3 cIџѬˆj?x€S°XŒ½„ł.j“+(eS ø‹VFrxmĢ*źś’•\Æ{.,ŹvŹGwo}W0ĀqYĘĪæŒĆ_Æ,ųĪŗ¹x>}ć8 Å«~T„›‘[Z„&NH ÖĻ™X‰łĮpš=Ŗ1üq*$ōKåõó>Õ\×––RbŹÆ»ĻE†¶ó×ǘ˶To=B¬) {ż3¬µX;nzŻ‹čįņ=æZKŒ ![j=ļåWb’ʾ•ÄDÄ.VķŃõn€ā–3¶YīčAgŅ*aĪéań•g°`ł.Kc?0Ŗj|n†æÉØĆ£čŲŠżķģį¬O„‚†Œ`Nł¤hĆb(Ćuėś=—ᇦ8ŅŅ‚k ģRDIńEkŌzU’~É%!((W—™#"kœ.&;,]¢ƒcņšŻžż°xå}|€Gl‘ĶČ|ĀĒįćmqæZJYZXūūŌ²³iw§ŗ„_|[ė‰ßķ“~ŽŃēŅE tRQ9‘+Hٓ΅5ŽrӍėeŸĶČ ¼V¶Ÿ³äśvųęD†ÆõGšcžŃ*·# p‘#šk¾)£ŚÄēÖ艤“£"/pϚ{š&{®"5ŹQŠ£%I|­!ZČžķĆW&››pw»„ŻX)8:œ”‘ēźÓÕB¦UÉ8lĶd8™÷BX jIwV‚ó¼ņx÷’/ū„“yWŚÕHµVćśąäŒM­§ö‹SžQIų’“ž¢ņ&°ņVÆņ¢Ö—;žŠ {"@N޳yˆ…9t jC™\_ēHéĒBü4;Z°;_DÉ©L=QD ˜Ż›“øöÕa«į›š(<}42/qVė‚"lĘk¶±”-‹¾ńęŅÜ\8°Č„6Zķdr:Ł ā]$œIżkš ”]ĆĀK5xR–†Ę¼… ōżėĘy˜•@¹Q+„ČÓė'YnU}R˜æļų 9RO…ŗ¤{ĢŒOevX(kŽŹvv„g\o}Ž–Ž;]ŅŲ2T[l }ÕhßĻ&EčF Ō—…Ö%øRuāī¾ńŻžx»zM$š@ŌY›ŚĻĻ/A œG~$ż).¢ ¦óü~dz‹÷ćš,Ņ|š*?Ļ诓n’NœĶd–˜*'|“óäۈ—™Õ]TśIoė Źˆö^2Ÿė¤^gåćWW³żņ˜Į\vl«|HT]^;ęrŻįõlŸĖ˜ĮY䐿¶’pŖ‚¾X‚2ų±Ž“x=„Ø%Ø«<ĖNO<¾&yÓ-9ÖI«p(¼ÕÄ/‡^ÆZ8tĆŁæ|÷ŃżQé=9-ļŅ Åš‹>yUyŽŲĒū™ ¾\ÓŁMńåžfw¦'œÄ®ĄĶq‡UƒüŃŁ Ś÷ßCR9H÷–-WjķBFYÄßW,ģ:ٟs9LĘ!{ægĆŚ‡Cސ‹ééĖģ*ļ›|˜œ-DˆGTŒ ’%ŌŽó’ą‰½7Z_ݤnĘ6ūõ½Čų²Ż±Ä¶Įe²żåt£Öž(į‚YÉ< œÖ³+krī9ń÷=¶xcuś(3˜śÅųČO=ėŁ“’īTŅ"†§ńą©€‘)@å•üƒ‡ń˜{čÆˆÉĆź»„” žČ«—:¢Źæ+å_'2]įŒwF2†Xʗčń„­3d&$«ž?78~nFrng'†6 0e½ "l ČcAՒėRū:+tĮ»Äg2ŹvKQŻ!Ź™¦Č¢]›łøö ÄfŪŌ~§b4ŽĒ~¢•F^-~<'ę÷Ó“•ŽčœD%G:ӄzÉFtś€į]ß”y[ųÄ×"2рW«‘„OøNÅŅGĀÜ.’8%‰/c¬Ģ±A’7§kōWS[+É«3t4 KtŗÜ4½Vņ==Į҉odd“mū©°Ņiįkܜļoˆ1TN¦Yā vµµ³ÓøYˆ[ Ō†·yŖŅ’Ö5æžüŲ×±‚›½õ€6Ņ;Ļo¹”ŸŌ>'©z7§_IY|µX“Ŗ¬Ä7Ž(7¾t:œ7ŻĀSšĒĪ*¤˜kŲxģ),ņõ8óq®ÉņšĢ‡Ų VŻ'ķ;É®QĶ“V÷®¹«» N–„_Vµw<īĒ{ĖųywŁ8'³`ėGŹłŽD”æ½vč97Ø4„į%ē,+YŃMü :ąµ¢Q –…Er yUūŌ8č³[(qä1‹Tį;3ĪVßīŖł3ćœÓ}ÅØĘ tCa·oEoaķsż“"”ÜÖĻśˆ”œōp² łķŽ/œÖ÷©Tꠟ8@†ŖnRŸ@EÆ®°%@žWöō‹ JĀčj1āO]ł9† ߄ńšŽ"Ve<’#iøņM öĒ—PéĀR,hGą·I¬pS÷ŖĒVśÓ÷hgø¤Ŗ¢‡¹ tä9s5Ÿ‰°i“'ZĆnkMÄŖ¬*óŽ÷“^l“u®o ­y#GźĢ»_2„ m-8¼'ƒ;™ķņŚJWhŽl,"Ļ­ *šw(,Īäõ” ģ 6$¹ę ł<|ų&Ī4‡\ÉdGłh›'<·˜V>ˆ˜å³F6”/?iQÕ"óŌ5š&{²’“Ūgwȼ“füć§aāqHz辉źKįÄ r„z¶M{‹ÄvÆÖ­£.Ļ@}oąė;įU&Ÿ£å/¾_‘g‚&ó­PÉ ūOłśÓ)l®#Ļr]§³© ĀŻē²jÉ8(֔ßcŗĪŖU,=q¦…Y3mQŸ  x„Œē}­4 ”¼ĄüÉɱ9‡h7=]…å5žcĀBrłb¦¼~•÷Ć#»¼”<‹¹÷ĶU„];¦7iScC,e¬ō 'Šœķō›ėŖ²Q6.!­ßĮm‰•Ē£b§{ ±-ž¬Ł}<ł|ę÷6xōÓi—ń̩éŌAŅM"ÄÄ2ūرkŪ‡FĶųŃu× €¶ļ¶>B$ 8(oµjĮŸ\Ūy0żŗœacų$O@‡ĀøöX“iÖ‡Pˆä9ģyń ŠL±pgŠPõWm‡B[\ū"Oģ‹0s#s’ ™ļ1a±” > stream xŚøTÓļ6Œ€”t  ¤;¤¤;%$Ē€ĮŲ€IiéNéīFIé éPĀgśė’ūžóQQaĪßęY'+hhX!ģANȈ@+@ƒ^’qĮ*a@8‹ńšxxxp[9Į¹a®vRlœ0Ā  ‚ƒ\ŻA6€_”šVN ?©qć0ōķĮš?z0[„‡•+€ `  GšøAm@®dt€žŠ:@ĖżCYżNĄŸÉšqóżķīOė_ŽĄŠßĘV@ ĢÉŁ ź†ŚlĮ@KQį‰ąXAm~)ZAą0¤½•»beTų}u+€¢¬Ą ÉšO~p +Ųē†ƒ!æ8ņürƒL³ŌFęä‚"ą8æī÷ģ "óīÅógq”0ØĻ_'[0ŌĘö 7g(ŲÅ ¤ņōO$„ófByE…„ł ČhĻó+€¾—3č·š7Œäąēć sŲ"i€üĄ¶ äŽÜŹ@øŗü|ž-ųļ ‡`"Ö ;0ēļHdūĒYW°'Ą”Ł~|Ž_ÆæŸĢfƒB¼žQ’]b#% =eCŽ?)’-”“ƒy|øųE\¢B¼>>>!€°° Ąļæ~žĪĄ_ģ£ŚVą?o÷/*P[@ōČģżEÄżĻĪ`żslŲ’  Cö3ĄśOū?ēä"ßųžŸ‡ą·É’_ļ’ņņm’’½‘¢ņ[Īś‡Ā’Gnå†xż©ģg7r64`Č žÆź3Š­²»9żÆTa…œYØ²Ļ¹ųžpó>łĆĮž m0h’G/żU d  ҆ĮĮæöҊ—÷dČŃ:"w Y²ß"r²žW „ŁüA~A!€•««•²'A€rVm@žæ[ĄĆ …!&$G?€-ĢēWa^!µ•ėæį߀5ä_?sµ‚ [Äæ`?į’ĘāDĀČ2žlyĘ憒5d ‹ŲŻ ‚"›ģ/œŸĄc÷k%ƒ\‘b«®ĮtAęīæ(2/j”1=ćbŲų9a ±«iš›¾ŠĮÄ-j8ęR®#šņ»×†iLśšņņū¬žTÓ|µŽ”ŖPJRoUśœ‘„AJ²ų,Õ7pf9Į ł²ä8Ź"§Pę4Kį•ė™üöųA·&;MłĄZ/F›Ż`‚$szVNYlfźēĮ{Ų’aĻY›Ź(ĒTcƒr1œv\#ÉķE'§`4t-żŌ˜•”^«£~lŽĘ|,`¾5łšŹņUF<æY²$Ddšsœ6„ÖyÄöŁĒ‰d ‰¶ š&½ĆšŪČcNīożą #ŗDčłNĖūŽįž°ć Łt`œQgĘ~ß^üĮ‹Y"Cv!DŚ<¬Ū‚-6'vĘ_77]»½KIÜDFta’!ÖP€ OŸh^_}%MŪXģ„lĄ !>‰ćQMõĒJ”ŃגA-’É"¼/–&Oī=Õ9ˆ%¬Ūx Óóż¾yœµė ?–¹Zn—‰½e‰&‹*āIøy?īfGĪx:šDųĆJ®ÜæIé‹ē¹¶Æ®c¾mŸ7ēÉ6„›@"’ŗ§ż7, Fi:Mb„½<čķdIŽöTnśq~Bb=¬$6ČR©hŽl“_ ‹00°Rļ8oĮrķµm>’ŽĖgz)žd3ŠŁ|§IóŲłŗÜEī)€˜€eᄨĄF•F³Ø:nø”’S¼o"ÄxV“MAü Ü(ö¶Ķ8›iµäłū¦ŒQ-‘D ?”œO.z-““Õ=āQō^¢)Š\»k |śĢc¤%ōŽKÖ]wōbŪģ™ õÓ VŒpć'«%g”-DłĘ±s£łFŚ 'ź·üü­ŖZĖ`ŹÉ>8|žÓ”¤C{,Żn”¾ķ0¼«‹Ļ4éht3’N‹Ó[cgPĻÆ™“6Ņ tŠ?ɟū«”źŚóUÓ*ęX-®ššćƒąÉ_™Š‹–zX±B¹ŪĪĮ‚9l'fiģŅ5ų]B¤ŁWĀŽŖĢżu+·ĢŹB7 gĮ%!jåZCÓ1ō*¢ėg꯷~Ó%ŗ³@Ģ<Oļżš6č&ĆśøĮ>ZB2óĄąu–ļĘ·o:~V_K!hÉ]g"žč•Ō˜…Óˆåg²„=Uėā ō W&ļšäŪ†Iƒ a ©Kīm9 Ņ= ItāIYu’#Ÿ¤8C6J*ŗž3T|oNĪ ˜Ņ=¼ļ®+Ÿ¼P„ž„óŌ‡Fʂ3g|$‹ Ó‘˜ü•µ-d[VåJŪµ¼!Żc1ƒ¤ŲFeHŁŪ‘x)ģyG9x 7l ­Ņ`ė£6^6§z‰{4f\ӑwČsąž.vĀ4Æõz¶EI+Of?]984‘XbE›%Fµ`dÉß=~Žs€±‘ĮŽ DCś¼a_z-љżCˆ°;ž<…ä’6ÜoC‰ Q¦P3AŠüD 9B’Kƒˆm[(€ŹK§8,øU‹-¤ƒWxfkš ’%vˆnį]ļ’³3Ū]Ÿ°Is¢§öŸĪ%6ó}ŅÓ×å’Gö>ųżx;°˜ē·e‘?óZYƵ¬ž©–1Ҋ$ÖA©„]X‚)·ī©…ßįSC2¹3)Q2Ąų÷nĖ€VćĪŠ”„Ę™Ļs>åxšeA(ĒöLšļå»'9”Öł5ĶBņ Ķ/•†7Ēƒ»­Ź2ĢĪw¤ē8qQO­yÄ4{B”ųŸZįī=%ŗ»£ ¢qzs4ķCzēKģwqŌ—­®B—ļċLRvŗ6ŻhEq½ˆbț”¼œÅ©žĶo(ł²&ÅNtCĢ*—3­½•䄘‚|AĖEō;u)cBÆFŠtµw·Ž“ŠżģœeźŒQx¼°SdĆRŁū„›š«µ÷=? u?€ékŒ_Ųb7uōĀ' \§‘—5&7T}łźų"oĻ_GΚ&`¤‹Ø•‘™źŹE³mjŸĪϚsŲҾaŗäpĢ/½’ūĒŚ‹r3ļįXhŒFßZrÉ4`ņbÜR³œgMŌM^”!ōJ‡ l¤—ėŒČŠIXƒƒ_ö]:j>k2~{Øø ±#ēא²ėŲ°Ō‹¹Ŗ{Čśqnœ‰UöęöĄ)¤%zœ`āė ›yPö„RēKYUHžW6‰obģGw:ācŽq…¹“}I MĄ˜ŁśE“żyžŖ ņ}ÄĀK“ePF袶|ć®»ęŃ6ƒ’nńŽfnŽY_ž,EÜŪč$ßķZÖĶVĆ¹Æ«‘J„•į 5[źg¤Ž+®¹‡’×J >,åOFB4ŬŻ{“ėB)½y>54/zO«÷š„ų¶F<½G;š„‹ąūÆĀ”ss$•‰Ž–3ŁĮµ°J¬š†÷k” -²›I­ļ:®ŗqåŪĶKķöĘ× PYl±mqЇćǰ‡“WŹ|lĀX„±`†W“½ĒAŒ¼4 w½†Ņąnbāļ³m‘~ßī")›Ÿ^śÆ{› ·R×(]JFķä‡)ćĻā޶eÜõ¾ßžE?\~ş§ń¢-¾?-ō~ Œ†ż0U4zĄubN%*ęPcpØvAāé×ĘĶ‰1vÅaĶWū”ž+nÆJ&䩜±Ž š@ąe³6vŽqŚÉ"1iܹŠā:ąć¹ĀĪŒfW|œjöµ“āc&_.Åx‡¦ˆķmG?Ī^kC™¹ļ9Ė„yx8V4V;‰ķWóб[~åœÅĪgN‚Äż!2<{¼gæWŻ0āÅłūŸ7WNx¤«q<3&Ņn†bĖøö2‹j7ąGžT›Īo/śch‡11į Ø‚^ÜFĮ±h¦ĒŖŁ¾n=Ź×Ļ;D)¾°įSĖĶw¬ØtXöÆČĒ¢†ņzS”+UӬѹD¼‰Ż·*{¦³Ėä2óPµ¾uĮؐ*æG”āÅŪ×UĄ>ó8¢ß4ńq!MšÓĒ ³A ĪĪ5Šģ„ßźVŅ܏]µflĘ”ĀŠ…DÓh¶¢Įģ5ŌFbßŗ¶„;2ÄŲĒVŌilQĒ^‘õŠ&0[%8ˆsŠųµó†a³M~”M°ė­Ucß 4RėA]2lfń^49•„łČ† =ŗ˜xŠ0§ß‘DŌ›·¤>¾ŠÆŗ|ŗkž\zkZ|"—ČžŌĀßC’•tÅ ģ‡o&JŹcŒļ‚†!ū¶S‘{.ځ~—7Ó¾’?£3ægzµ|µ{1vą¢_Khcü6æ$²ćŠpŲ9ĖpÖr¾“ōuØą$’ Īü6‡›pœRӔŗšˆŠŸ{—G±”šzØu„7?”›µÖ‰ŹĶšČ„kOEŁÆš“łĮÉłōH5 Ö(S[·žųÓādOvŚ_ d]‡l·[ŽÖšü㉨B~yœƒ$N”™4 b'ŪĒć~ Ąe‘ā‘ŻLwƓl¹ōĶĢŁŅ āµN—ś‰“ŗÕ·+SOš0#iĆ ć&ųŖµmĪbWžq~ŠėĻ:ßčø’čµka‰iüņ;wĖĻøMuׯ(Ī»ż=/•ęR‡ķMpū嵎?MzSJńi¢Kq,= X[—$ł°ź-=Å=:ö‘Īrn žmŒ¾]‘6V™ÅÅØ o<`K§LÆ&³ŠSjĪr”ż{§dŠ×a™q9ž³Ÿ ӆņŹ;WŁ"³Žsń÷%¼®²4Żš¬’0÷ŠJ;ū¹‹ŽQšE}įžzĀGY³06 +’f½ü­ŸĘ)‹Š&Ŗ Wé±sĢ„ģę14ƒń,7@‚õ‡7Ģo†|%VĒū S/»h§Øk‰ī-–s$ń«š%ņ^x±8Ą%Ņ vEé-ŗPKt:>~Ūd)ÖĢTj<^»Ÿ&…Ś_:öÖĮ¬‘z&`$„šē-½ųō0@Róźå½Nk(Ķ+ kcV)†EöØ®”1ĒR/+ŲzäŹ'@ĄY„ņF^ģSõÖ+³ĀÜNź8²}›×> dĆE½Q‹”kéD܌d†kŪöTˆ¬ oGFGGF³'ū5dč'@Ū–¼5„ķņčĻRdNGĪ®²/Ré :5Æu¶Ņ#Š­×JÉxœĻī5½~¤ŸčŅ„8%‚nq7'K”Š Ż'љÅü™ļ¤ćĆģ-.1םƒčtŗa  oÜĻ*ųŹĀN~ėb zА ž‹v<åĮ’.ćw¢dĖ™°=o­9L^[ĻæņzĢŗQcÉōѧœš°„¾C‡6‹‡—¾źŁzn»-WĮQ9ēu¬°zlŠ˜śh§„öč•NćĘzIRŖĻAóYŅ{62@6B3rŖü½¹Gs(Lģ~Źz©Ņw‹rÄåm ÖŅī¹:wRÖņ‘:Üę*Qv‡_ĀiɇJ,—ėņĻSŚœŁŠ«Ų.0ī²,č2ˆņŁźęX[d5=ŠŠhĆijĮspgn®¾”_ż" ‰Ņ¬nošŠ×vó‰'‡w“MŌ^iēDqpeW•åD„Ö)~3øŅfhW åØč˜6ī “HóV°&_`mØ©3ŌÅķ1Eß³«pÅEC,«æ‰[Ī‘moÉNb)‹5Væ^3V¦±ęKlZoWōińŌ57žŹ ÄēÄyĶØX:›¢ütńԐJŚłÓk*µ•T{…IQ²=Øgp@. ćbń"OImAŪ¾į…f£i ŗŹ°Å^x€<։>¹÷Ź“-ö6¶ÄLJRōMą=Ė'Čoe¾Ŗ,·kˌ–~ŗŲA˜żŸ—­kņ;Śę[ĮÜT…²ż ÷OŻ×öŗĻżÕ–žłdi̬HĻǾ*Ó85ū.öŒRœ”ȝ.ī%aŚ}£uńū!rt Ų%F$±ÜŚk*āҹōś…įīoąähf›ÕĮ ’SF‘wnßFøh ¤¼$kBŁ7­åŃŗ^˜ću"ś©e]ėņ ,ĶWżÅÉ7g÷žŸ_.ä=RDŻĪÓNdF P/ܔ¼ÅÕģž|<›zE+žĘa·AüĒ'½ä”÷Ī‘“›oņ/¤»UƒŪy„ øky„¶1PĻ9>©éĢ„šR2 ĻTLIī~…ļ®{ĀTĶÖęĖéG=n„“–¹ż¢rū#ž‚D'ł†ė#e •DEo*«ŽŽŠG6Ąƒ2Ŗ?” xmīKÄŌĻ–¼Qrµ[7Ąč#eŒ Kfö­mźŽÄz‘¼¬T¾¹ ’“ŗ‡—Wƒ”įže•ՁQ¼± Ąū:‘żz˜i6nÖÆƒ:śģįK­…xŖp'|ī肘Ŗl]Ó.ŠÉ4˜¦„Ćć-¬;– ķ¾¾*’ü·ā~t'/Ÿkųg?°Š-€bė¤/^†n˜¤?”U · C/ėß)ģ)Ū& ‘‰ĪŅÆḺX]00 ØłZźØł}Īæqźö44+1ßļŒ9ą¶OD”ūöCIū¶5•»Ć_”›CwH°8œ"znŌŖ-5 µ;ĒVQÜ“īA$-ÄačhšųåL‹>Wh K:>ūįX”_։:bTĆ\DSLžE@Ö#aPR?ƹ$¢³qX‚Ļć †Iį¦?¦¦śš2…`1J¶!åP®;ŃÜÄĄJ·‰ńé7;vjĶę £|0š•0§}>†¬Č†Ź2Ź5Ć8åāŽĪęLr¾›NŸ®Š§-¬( {8Ńē M ŗ~ZŐłĪ.Q.2;z¼Qū(ę\\Ī\'V«,Qą{7»Ü†`7h;ć›U•ü½Ÿ¹Z ;ĖYŗ4Ę·«–A~\¢d:<}E_4@9Ņ ļ‡ö¦k›īŃŲo¢™E[Ÿtcßī¶ļUXģńKL]„ p  õ”ךNdՅSŖęŻ•iÉ2iÄ«­ģā!Š›Ü1‚CēžSµņXoLõžj*’ ó žēpTłĀ’LTŹ6ÅÆģ €pņŖÆł\Ö\ń³-Ļ”<“ø×—”¤qėü(īNīą)ٌz¤}.jŒ11YŪLPŲ‘lõ.ń1“?¦rĀsĪJĻqßsx Üó°H9GBQhc3lįžŲ”}ɃV”ɇ/Qœ8W¦ģõøž™Ēā£«>dyS{9,YŗłÉCóKvƒ¤\,‚ńJKpU{3Ä£×b2B7’^mE br„ĮüĖŌw;—;QŽ:[…VqgÉ»a[ąq’÷½žIuŸ„oJżˆÆŁö’Łź’Łj°öė÷_ ½Źāƒ@Ÿ” /9kį2=³glŪÉ}™²°Łćd,.›<ō„N·Ķ½ē(=cØ[ iž—,nGþdōRK×¼Æ(z; ĢēŖ“²Ķ„sł¼ŃŠm­ÕśšƒŸP·“§‘ĄóżĪ>]øN?Ö¹‡œŻdüzĒ­Žm{N&Ć|9$ÓśäĀ[¼µ.MÅkī¹Āüżw#{Ī®„Žøod0dz@Ģo_ $§Az‡#z—[}L4‡l;<ĪŗƒW+‹oĖņ7¹į¤)€Æ8śkį%&§,TX¤u­%ßŅ>o[‡ėŌSŸŌźAˆsś/q”Tޘī”(„+ė/˜øIŌ¼Ÿk’ęE†lßl\’+ģarn€ ł§‰$5(`$l¤\ŖĄAĆĻ…bÓT‹üS-RC|įóļŗužµ½Öŗż6’„]ĖūŗŲręLŖ0f¾Yż“°0A{°'¹/Lœdü0½ńāźżÉ§¬ tXeU12™'Kśf42} ĻĢ ĪŻØÉs'?׎Š ųt«üRI×ÓDc-Š•ŖGÉü=«k7÷‹k×ē ÕZå€ųūēؚUĻ»„͟°eķX— µOнeS›¶ōpN蓤ÄŅZ²ų‰{”œF]{Łśj924žģŽĘ'„Ÿü£ßr·“ –ō9neOxø¢k5>W'gšM×¢5XźS–‰Va ķėČD›6Źn ‡‘”"ķļ ‰=­ŖŽ;– Õól“†1R¦Q”žĶzU6LŁ ;ŠzżžÓˆņ·G%W(”ĆÆ\”«XĢęz>u 8Õą_;9·Śü3—c)Db q䊬(į¢9ļĆ“tsT/ŹhrŖŲtcü_>ZßĘ  Ÿ&Ćå>ärūģś\THF`ƁłpMo²Tkz…U¬’lDVg\{Ø8(Ÿ³‘^ä4PĘŹIÆ#gŠ@Į×¹¹t W{”I>v¢}ĆTŽiļg§zŌG%„r|{üłgß"ö=Iŗć »½8ķ"qW•’Qk „ӖŗŠö5„gP£ÄsÆdÄē1aČŅīÄr‡b!+ÜTÓõØ<[dnż +@ĶÆ¦ś"0Ź;ū@¤Ąćē&ģĄa<ž¬ū1yŲŌ>ܜRͱK÷p<¢xē‚ÓŁU«—ēJD+w^cjzłl­Ś“>(`Z8­£źßÜ2€O÷¼tŗ°3é“#†³¼JއzX‚_“ŽØéĀUSr(‡œE‘·ÜŸ!œĖ~Č:Ļ$ŗœY\)$+(źÕ!hģ ­fr²‡8–IłŠ^wå±F¼)˜œo©ē/D/N¹&Åfĕ»‡ŗī“…ā½6U`ʞX9¬ŹżŅ1”hę•īuĄ·Mó¼>ņŪ”ĒĘ2P†Öóa‚{,'Śõ£Ŗųma“{ŲÄt†/²„ĀaC)“F}fŲź(Å„…®®4D”/?)]WŠŽņvt«Ynj%h“T7xƄŻŲņ‘ łƒ8<%ķ`ŅāŁ軄ūń‹ŅßēS™œ“É«U 7O/Cϱ{˜Å7—ŗ āÄŲ0…£\ī1–¦YʄšZ %1ļV Ń'+GK&Uµ3n[õœI®aĄyĆY·ód)FĢ^ Ž®Ų‹ø˜B6WXę™T})ć×q—ƒō^ņ>‰AŚtrx8:9#­rĶshi,^ó¢>"VcC C y j™§;Ńčrō=I„Ųā—?n,Ga{.„œŗ÷É[¦Ģ²A˜óŒž×c–ßg{ōD/Ū³9Š®© É7ć²at1rˆt(\æžŚ­Ą|ƒŅhRüó»jjéWUÖŗÜÅä¬L²h{o’Uč!Īčk1ńzĒŗ [4“xwµHA„g“hč{•}aM*;cŚ}Ό‚oyŽBEŒ‚ŗ×”,ÅļŲŹŪBū×5¦Ąa),{M¢ŲŖūŅóßVĖ£°¶PĻ=,/%ˆ6Ÿć°|ĮJ'0TŠU;nlćAÆ\ķęH”æŁFsė5XLås8ś¬¹Ä}ה’T’ȃ“¬(LUSjŌ¦īƾó7{ŽRqPĮ*G]b³”É8Ųrh«ģ™uS’Œ›föČs:m«y‰ķ˜/xął›D×6 ø\TiFĢ' ė=·;’“Ī3jCžµ ŖŒ9 Ł{šŽ0NŻ5R“ŸM“3žÜhrĄø!SÄŲe€’“ūMėĮŖ[Ø™æ Ü?Õ3źćąÕē“éD<“™Ļ}UYÕur\ÓL4oģ…x(n²n÷Ÿ­{N ÷PϬśBߙ‘„øā~§³,d˘É; ƒö»ė›éŲ\#•Aķ?*å«~ßŖJ™S]ljē‚ŅĶ‘ŃŠó8ŠūøĘÓ¦UjŅņslœ$s¹Į__d[ŒX54Œ"D¹źµn8ń™nV‡0šĪ<Õ w(DV=…tö{Ö ņöQĮ–Ī>ń.‚s=BŸy„jEeo!¢'å(//j‰×uĶŃjGłļBø"@ų$)c«¹ģ|Õ?Dóąsņ&ܼR“m2T:2„Ģ<čē—ņßE£aVõ€ā׳e>Æl“³ö1t=ĀGēgrJT5 xÜem>Sɬuŗ n%.ś”¢„ń+ ż“=„±·ü+ā˜¶Ė•Ž!ø¹n6÷\ŗn€2ĮVić vTٲ8õɘ½ø,3|}L­ ÷ĖsJ]×fUR–fQF¦b‘@;ßyģ„Vē®ĘŽ)ū£ķøö †›'²©S㾇iž½O€yö čīFķō°T_ū§jÆuØĘ»/Ę^Ą‡é‡ÅSÜĘז =/8Ņ]?ĀŁĻ[n®Ł…Yr°õÕ|˜W$R"–s§Ļc<vFÆ2“kH•-9ʳ ‹÷øfó;ģĖqZfÜ%¾ØÆČóߙ-§hŒ ArĢh:ų}k(gØŠū^GŚ:¤YlŽß—Õä•L6VäĮŁk¹2ŽVbūŽś¤qŗBUZ½„o§¦iŖ'·2XĢęÕ{×Ōyꈲ…„wÅ߉·nµB Tåż]؊ņ߈eīqm≠ĻbĻŌīū„}⛯8WåQf†ń5ģ0Üķ£Ś¢³}žr(‘Cčåi](؅®eßā.ø„șœŸ@¾ķl©¾3a'«w†dK-ߞŗEźłh‰WgóŖguÕćjÓōė÷»¹°²ˆ”fR2ļõE„8nY Ė»¬÷¹ß×~¢’0\źmɾۤ~.ł‚xł›ƒ((ä ˜ Hxüi”Q’·cņ»–'ŖĻlæj0¦;äCo²č`gg Ye‚f}7Cn¦²v”1&’— 9ü< “üSÅÆĶč“vf«„JåÖōFpI8‡GźU\é›/bŹ—09v&ÄŅt 2|¬ ½äĮ×ęj˜ˆšŌÓ8–ŸŽÖėėä˜O#**8•9ŽLōRpZvĆü’¢GŖ/“fh¦ĘݦŠŲc*d`> stream xŚuT”kŪ.Rā"-%CHww#- ŅĆCĢĄĢŠŻ)Ż„”t ˆH·Hƒ" ! H7’Ø{ūßß9k³f­™÷¹ī¼žūŗßyDÆ­Ē%g ·‚<†ĆP\|ܼā@M=cQ /Æ7//?ąŃ#}(Źņ xdA ”p˜ų’rP@@@(4¦B”ż4į0 š«#OČ',Ī'"ĪĖ äēåūŪŽ*‚Ü Ö@Mn A)Ą=P[;ŗĢߏ@V0OLL„ów8PĪ ‚€‚A0 &eqBWƒzp0‚ņüW VI;ŹYœ‡ĒŻŻä„ä†#l„Ł8īP”P‚„ Ü ÖĄ_„O@N?Ģø€śvPä\nƒr! @4ąC`Ht„+Ģ‚¢‹õT5€ZĪŲg?œĄæīČĒĶ÷ŸtE’J…żĮp'gĢ ³Ś@!@­ĒÜ('³žårDĀŃń 7Ōd…vųŻ9ųXNBü‹Œ€:£ÜHØć/Š<æŅ oY f­wr‚ĄPHĄÆž”}ķž<&냻ü’:Ų@aÖ6æHX»:óĄ .®UÅæ\ŠąĢ‚ ńŠ Š!.@ˆŲŽēWz}OgČo#ß/ĶĄ×Ūī “A“€ųBm č€7䢮_ļ’mų÷ ĄĒ“†‚Q@+ˆ-ų';†Ųü9£‡€zMyŃŚćņžśüēÉ-/k8ĢŃó÷ßóåQz¬ ¤ Āń‡ńlņņp 7—/KLHČĒ'*śž;Ķ.ąoņæQmōÆęx’ÉØ ³Åžp@_Žß<Üž’ė_+Ćüw…'p“–!@Ö¤oĘ+Ä Fńż/Ąļ’›īełI’æzģźčųŪĢśŪž˜ANPGĻæŠRvE”×BŽ^Ų»Až¬²&ÄźźōßVU½r0[“Ĺų¹y’ąPäcØÄZŠŪżŅߣ@×p„Ā Śp$ō×ÅĖū_6ōցŠo$z`æMōRż»® ·žµ}üBĀ@ņš¢EʏV7zM­!æõ äį†ĮQč š£/ŠŽü«„Ds†"ŠS°ūeüóóyх!.®čĮü¢A'(ĢłpuDAŃķü ŠyœPōžBžÕ-؁@ļņoQ”©ü}žżā€@< `Ąģ,b’:¤å“FŽŚėŪ0ī—Æm‘ńƽB(ę问v·3•'\äŸYW>LӞ) Ÿņ”f’q:āa֙ø˜Ŗņ…”Ō»"æĒ•7pvŠi yh §²I‹\!ŚMŠ”%|fŠmŹ’d4u*Ņ%°^µVxՆ\7Ū:_ß§O„F=—ĖmŪŒ6¦gśŠś`lv?–ašīŖÆj0z… =‘o‰”<ó\1Ķų°°š>»Æ7M`?_½»Zø2Œ„’ŌK>w0±Ÿ’,![­‰Į,/t¬PšĻ@YäƼˆźķž5kźŲD(³o?ßM8|Üų˜[–Ś“mfBĖŚ×jÆ÷õ‚Ö‡@b¾–ˆFPŽ\ĪbJ^ø|„é¼Å{BņÕÉ’u€£ˆ'Æ-SŻ÷@ ƒ÷ÜgŽDģRy'8²ųLY䯍1EmšĶ-ž}ÄI# ų@…ē¬"Ćä\w¤£Š#@g{iČ ŁŽ×~(.œ©y“Ł~[,ō“B!æĀ’X^n;Ä{U!ø£|Ą‹Ō÷d8Ž@Āć ¤§™«>ł"›ļ]@ŽžÖÉ1 »M”˜2\ĻØ_ü†;‰ņ•ρ)eŖöĀAšz³”ņJß-ā |µĻDµ’īė?abŁģöšHlSÉ{ō˜›£6‘Xy:®gŽ9j¾eIx~yij9ō%ėĪåė!šeøBĆ®œŅ‘Šī[¦¶²vCBn³¦%@‚ś†N±®0ā®É|će’ą–Wß¹~÷!½d8»'¹¹üLŽ‹AŽ’§[°\˜LچOérĮ‡xsÅ%õ…q_KŻīØdņ±ĒavĘ#¾]…/†°}Ųhž5iO!Ž!03vśi¬+S䣜IÆ ²~”—H“­>wd5uS|ŌšŚKS|D™ŖŽh~كŠīQ©A™y÷° œūd²!fĄ$°Šk ŸĻōDBp5ŠŁb£įÉ®óE™‹¼"˜e&ņtŽŒåyųāp–?ŃÓijžēõ>…kŹŲ:)}Śõ›ŸÆjz”Ø#Ś-ā[7šĘÓ£—¤n|-˜L²=‹’wGś¤«m“²Y:ŗ‡3™Ņ}ŪĶ3LŠ'Ŗ>¦°!¼ķ•š‘ƒ}‰µ²Ā·ü ź\©”„ō菭ŗ$»”ZĒöž'ßEčŻ;ÉŌ?` nž&®8kå]M¢ŗ²-¬×4’öț֖¤­$Żųå§°2Ą2V‰QöŪĮž/ūŠ/K§9™_ŪŃ÷Ķ—FĘ̌QķøÜXkqŌ źr+E8~"†ƒ?ö¦Ź§xœąM `k*ņ Ó\¬RyÖĄ3ŽŠē†ŽŠ‡Ē1(®%Hœ÷2»X0š3ŒfžHfŚ1‡!_“29僕hŠ&ūł³ĄÕķÕ„°4Żć@ŗźŖ½·N{ĢqÆ_÷™o…æ‚=č¬ 1·Üføŗ™NŲĻ|œŒ ÉV £d9Ö¹’Ą^Ģ¬ĖŻeśÅ‹¢cĒ«Ē.÷ÄPš5PĘnŒ<÷,ńĆ|6Żn&¾ŽÜĮƑ/ŖB‹ŖŅÄ»žŗ^M¬–׬u¼õjxĢ@3×Ģ@^Ä2n(ĄõŻŖwŅĪř1vĶł³Ī<$ˆ:5b˜u[šĻMū!3æc!MŌ¾39æ*9­śUž<˜»rpUų³FD²jŹŚ!iܘéŏ² ūO¬?<1q­Č U©Ś]ćN}¬»Æ›Ó$ -9ę(Ńģ5z¦šĶˆN\Üē"&c/ŌjēÄ?*Ŗå:Ö`]īäVk™ö³„b‘ÆļMH)ć5©ÕōŻZ$ēė°Hr˜ēŒ6ÉĢI|čéR›NŖÖ ևуׄyĒѝ.ÖŌ:"g`·Ÿ€’ŠC<óļ·‰•’k£>“¶”[źOĒĀKœCw¦£ jü?‚½²f½‰»pńMŋ‚t‹éSŌņyū0Į|łąłCu,Cś,<żŹ®5ĒąžPć7Æī«b]DG8¾łīÉÉgņĶøZą<$ĢŗeKXal‘5±Źääü«†Ų¤„,„±‹ōKJlZžÜ”ü4­yŃģź²‡ø Ņ™Ėē‡ez6\ƵXH0kRgé^~°6ŗ¬Ŗ;¢§ĪŻ“=ęłALé×ēāĒXņ“—«ĶU9§éłźĖ‹]čOlĪN(3üi½ŲO4ҌļX' “?łdaē»`Oč$…W„ał•õ~i;:±żéŗ ;īX¢zōŁMveE˜8Žž"ķ~ŗam¢­Łća2MĘŖ2^źc]¢t޵Ķ³ĀžXanūlŠWö„6/N\@™~šmü”ŹQŪų+LqąQģŲjĆŌk.Å‘ü³‰aĢŚYu–{ōß§žķ“Ÿi¦…›­7ˆĀ7CžSńt^·Ų(ŁMÆ“EÄ×ęźäÅĒa“]Ļ{J_¾ QiOĢ,<6…į&5cÕõcĻUų!ø'2dk Ī[j5H†>q¼“=ų~l_·f«ƒ”€Ńą 3™ 7ūRāUcĒm—4h[¦Æ—|H k‘o€žĆ»„TØ+Ÿ5$šN‹`Ų4S:ŹJ¶°ĆäܹT…Ä0ÓĆ(˜Æ „ĶŻ÷Śn[0T®0wē+zåGĶ8–M]1…Zƒ™zX }_ü+@ŹžĘrR.„OńrEŌõ#d¾²YĢ–ūh°® ņÓMƞ:ˆ9’Tz-„]āišā]ĻV7²ˆv+Ū“C.ÆQM„ņ”w7½/NƧÖõÕvż”(ī÷I‡Ę(œ«™üGØC'ļ5Ą¤Qźā«l•f»{ ųŚx±qōEIGrwŠķBJžlęQģĖĄ [ӖÄ{·˜ńõ$ŪU&daą€M›ģŲ|pć•UÖŪŖVŲ׈o“E±G·ØæL÷ö–’ėĖ;OnųįHO]!JE¢ń#u-ŃóŖG;šfV}‹-Ÿ{Ū83O!wé]ŻŹ‘©Že$ČŗŌčŖYć§}„Źk¶DvŠi#źäc$&ń3|āą„m ;Ūv"Q8}Ч»¾*Ič>Ńņ‡Į­C÷Jgp}“FātŻ|›āńķ“MĆMÕ*Ō—S'Yuωēėzeަ׿tc¢k^Įź”82-žYż¢2aΆ®ć«HüūÄ£ˆ•õ;„*B½łerßOž‹‘„Sę•VQīt,f„¾Ōš?“ė½ī@«Ąķ¦ŚY€¼šGŃ@©†Ė¼Äę€!1QAĆwŻūåĻ# ć]éB]Ļ.,łuÆ/ŸA›ē$€K¼²]¶§¬¼ģ=cTÆ6Ūó‹Ī£B®ŽĶF‚ĮħļÅq‘fČłƒ£ĀŗkR·¾ęŹQłŖc'>ĮуŒhm‚Is‚LŁeÓ7ƒ+Ų–|ėŻ,¼3` z»ŚssŸĘ=Ö „!抭ģ0ļĪGZ†J'+ańĪGœpr˜pÄ tŪ½½ū¾8Ųåd.mDΆo® hHÄżwbūßė) ŽBtążų®ÆĀĀŹTė=d»•Š«~*'¦ŹÕץīxŁĆ”Æ_s Ŗ„@90ž<¼’č@ČI^Ӛtd6å3 æż|b²-ß*f ż8}ĄwWcä’yj²£ńŖmU"Üóć‡sŹcŗ0–;"G﹈;ܜµnėœ0Ģ@žåŸGvśĶ7’ä+‡Ņ$G^QŹÆד½³4ś•/hĮ“µų ””v'«R¾E^—~L@‘N ZŸUvĢ;q+¦ømžŃÆ®'I…}H ŚnŽ«Ł;•Ļ•6’šc©īˆ½é§~dōÉ< 8›OońE8SćĒÄ\Fęģ >ŗµOT8›n³ŌĄ]=šęUaWLĄ[.>üĄ-Lčň‹“g›£g}?į[ŠĀØŅrįtąå[Cģm–ʰ8å²@PŽ8Jī½ķéŃ"ĮÖķź,®ńS˜Ėdn?›„ńJĻ5ĢoÕc%;ˆłÉ0ų¶<¢®ÜŖ>“ bPŽŸbĢłzJ]IU,¹RŽ|;Ē}˜?Mt6Äh»ž=GĮÜ,1VEFÄuł?B°źż`äė?ÄUX©œ{C7: u$Śy«FĖ2"ĶŲ#xŅB(™©’0ą*Įs¹)=TŅ[B@ÉA‹&łOUļ7H[ōUl¦sDÜæĘ «Å?āÄń),—fĆ[ė±2ģzW’]U£ĒUy[¼+ѓ;_Pš0uMŅūÉ7+Ć«įG‹ĘžŌ5^Ō÷düķ…ŻĶŪVr- ÅøweƒŸ¶2Ą½kė_w\ō či-͉Św-Ü7]R:¤IÆ#¬ņ‰vŸw'=æūź()v£æšäOļ®ó}y—ōÆ„¶CĄ÷gö侓ŲÜ3jč¹ŌöĢO,ī“Z +˜”·e#¤ITįW]7׉©’` ž†œ`(`¬©rŲó(—|ó²anZĖņó'ö·7Öõ;k~ ÷n.÷’ˆ¤dgāćĮzā«ōģLC–IxŹčxņmČ›åµŸˆĒ&ßÄu•ˆ*ŗYó•ēūŖ¾ÕĆóšyŸo{†rzݵŁŌŪÆk0oŠŃŠįĘ­÷Ŗś„ģcž‰|ŅĢ£}‚ցšų÷&Fõė;ņ˜Ī1±ÆźQ$m ÷B×÷r]N§ĮP‚Ū”‹éłņNäBÓ0‘ĘūOO›|Ø"Sį= +ē‡ąW®Š÷Étoѵ²ļ4Œś³Ģk'įž…<WŃ ÷½2“£"t-ߋǓ”0 ŻćŹŗōb³®ŒššØĮ«T&fóšųœ›c`ŚĶIę8REĶbŚz±źŌ;Ų4WƒUėóå©¶Rø·U1\ĒC ø#±ĮųXö4}_JXßéې³Õdš¦JPžGhĻ¾Z„}Óóɍż[ķ¹Uė8¦Õgų®å4~…ōė„QŻ+“żk+x@Ė€ELÅ6łņµWć|_”™‰@F܇>G­ĀÆĢ ¦—RóZÆŌ–8. p&3éŽ%bµ×MŻjɔ—<jė~#i‘AIņż©¹øŽv“9·z±!-OǼ€3V I³’‡˜Ģ’4­6 ķ}2mBVŗ¹ąķĄ3Ƌ¾c}uŖZµŲUń(ųéTIéxńżwHé›y±Š£źŹ–{Žp/*2³éĶ“M‡¦–šFs­lRI¦Ū åŠ~®«$ń˜rģ/ąå ¶>p¹Ć^Āho€¹Ö¦bŗ”ūķDÜäĪe•©lAʧ°… ·uāƒf!‡{ĮŅ(Śžāµµł%YŹžŖJdžœ‡iĖ›Mūķöībó_ü8Æ&šŚwS‹zó;˲IZåš4ĀÖwR‚³ž’—aŸ;phLģą¾M±ó’!ų]$Yź'Zš¦]:(—Y™0@Ļ8™-r³Ÿß µ-eš\ŻāDVō\dźmBnćū·S™šfu±ČååŽõPiĀŅNs|“śYSZÆv­œóĮśfŗ"ۃ<|D?;ČXԚSø¤4źrihų‚9r¼ī¤Mh¦]Ü^ꮾ£˜§ß^€\ǽū$‰¹?gŁÜ‹æEĖ·ĆCÓõZŲ§@ńņ“(óf»É7õd h8ÜĖōui÷K­Ķ¬“®xŻv«ŠŲćfKņėRĒįŻĆĻw9ł,)qó“ī*ac'|)Ņėū]J † {Ļ>Eķøt=)÷šZ’Ś…FųNŽ&)Ö“õ+¬é`‰¾—– 5Uß <ŅlĮ”™Š² ĖV8Jęp0ļƒ Ūˆ+O„„D7]Ujæ“`8ēѕģĖßrryĄóŒė ŸüLž`4ē4=DJk c[l{2ƒåJßIŌ:÷”)ņˆfy4•@®Uį: 1_d’Ūde½¹S(čCœ,s6¶ö‚Él|énR‰ŌÉs²wA“Ō‚²›8S9Ŗ±“ŽŖ~ō¼kbÕXŅ)ҾŒ›[bVJ5ÓSgˆ‡«õģĶV^k:Æ9¬Č'ČŠpc‘½@aelÉ’O ’ endstream endobj 811 0 obj << /Length1 2200 /Length2 18482 /Length3 0 /Length 19779 /Filter /FlateDecode >> stream xڌöP\Ūր‹āīī4īīīī.Į”Ę„Ńą.ą„ąw—ąī‚»% øūeļ#ŁēÆźŽ¢ Ö7ęš9ĘZŠPØk±HX9[eĄ,¬ģ‚)mv;;+;;' 6ģü‰Fčęrvü‡†”Šü&“6æ)Ŗ8;=\^A>Avv';»ĄŻŅęž +€ +@ŃŁ čŽD#åģāć²±æÅłĻ#€Ž’Ą! ĄĒü·9@Āč²4wؘƒmŽo-ĶZĪ– Ųē\Š Ū‚Į.‚ll^^^¬ęŽī¬Īn6¢ Ģ/Ų  tŗy­• P5wž»4V$€¶-Čż_ZĪÖ`/s7 ąMą²:¹æ™x8YŻoŃZ Ź5 Ó攕’„Ą ųws¬’u÷o뿁œž66·“tvt1wņ9٬A@€š¬2+ŲĢ 0w²śKŃÜĮŻłĶŽÜÓä`nń¦šwźęY €ł[…’®ĻŻŅ ävgu9üU#Ū_nŽŚ,ćd%åģčt»#ż•Ÿ4Č hłÖw¶_®½“³—Óū’5ČÉŹśÆ2¬<\Ųtœ@®@é뼉žČl€`;;;?'?č z[ڲż@ŪĒų÷!Ē_ā·üß»8»¬ßŹśƒ¬oŽ»›{`7 ’ūü/!qp¬@–`€Šä„ōĒū›hż/~»77ąūŪųqŲ’śłļ“ńŪ„Y9;9ųüQ’ūŠŁ¤ōTō%ō˜ž]ņ%%½ļYøx,œ<ģNnßۃ’’śłožSżßRusŠæ³ū‡G'kg€ĄæŠxėŽ ńü÷dŠ’{m’AÕłmžś?ćoÄĪĆnłö‹ć’óümņ’oö’ņņ’:ž’7#Y‡æĻé’„š’snīršł·ĘŪ<{€ßvCÅłmCœžÆŖš_ ­“y8žßS°łŪŽH8ټĶ9 7+;÷æä wY7ŠJ¶“ż×,żē2Žb8€œ€źĪī æŽ;oVģģ’ēģmõ,ķߎ-īoWö÷šm³ž7®Œ“„³Õ_+ČÉĆ 0ws3÷Az›€7ā¼ēxŪU+ ÷ß#`cur晎jōX;»!żu±¼<6‰æD’"^›äā{›ø?Ä`“žC6™’€MīqŲä’€MįqŲ’Š[<å?ōOå½ÅSżCońŌžKüģ6õ?ōOó½ÅÓśCoń“’Š[½’’Ą™’”·xč-žå‰ēķĢŅŁįķ’ž#įęžKāčųĒžÆŪc³ś¾õųĒĆ[„’šŸ? oi[’Į7uė ÷_śĆ)’ŁßŖ“ł¾©ŪžIīķRm}\lN’Šx“żÓž-»ą[+쒁oõ:üߚįųLß ż‡ēæ2wž¾eźņ'•·8.oŪīüĪ¼}SŁ\’LŅ_ät’{žč¼äö|ĖŽżųęõO'ßvƒ ģõĻŽŖńų¾Ućł|«Ęė}³öž¾Ućó'ż7S_ Ūæ|’ĻāYzø¹½}›ž~C¾måųļ!č “DZ^p¶ ³«ėø«• öbł9Åɍ:ts… ÷C†Šs_#DJųž’ėKģ’DĻÜ^ģżÖgék‹½>»½É¦_F¬ Žrc¬µÅ.³ß7,‘‡#weĪ=„īnC3.'+¼ÓVĶÆ+ńY|f×óŸóYrĀ“­Õ·U¶§štĶæYQ ¦ābį ųł¹P Ā:%²:«%ė$fēŗØŻ/ħŽ“Ieī3Ē9yv†VŹ™!AŪ㇨.JWY‡¢Ÿ~õń)™}ĢŅüč“!xL ¹ź ¦·pŸŠ£ŹVųńķBžāGœ‚¦M«üšō`:“ŌVåŁ¢D®·ŻŽ‰c·téטåTķ"_.ŗņ¾Š 9lYDä%DŁ™ßaõ¬¹˜J~Źu£3I&Śī©Ł³EĢć™ŲĶźZ—ļ9f,ĒcCŻāAĢ’¤»š”9qšv‹¦ė!Óą:ĀŽ~tyd ō˜óG²#ŖŻB?Žé“ 9P>nśÄ#[[ŪVŪDŻ įpæÕCžóĒ劀Žx¬©\ŌĄR_tN9Ч2„‹9“ÖCKi AĶ~s¤?ų¢}[ü=!mjŁ7ƒŁėl³h¤PæÕw̐õģsŪ.Éx¤ńkXƒ0TļSŻoŠkfšCö™^śk8©NŻ„ub r…’t¾kœ‰%søxeźū؆q޾€ÓM±E­īśņĻkꔆ+P%õy½Ś¤‚Ļ乺ˉbGėæ8!.**¹xĖ= !KǧĢü±ź=¾Ōw@ģUķ~IøīžŁ_G5©"R oĶju1;R±KŲŽ*G6‹ŅrTöūGpž„łb¬•‡Üņ €¹B†‘jcׯ3¼ÕcFh”9n"8 ,BvCzꩃy}O"F½īqGź0/ĖNՈ¶ś/:BDE¬ƒęä|śĆßy ŽĄ«dųīĖ!wko£§^Ū§Šį<’n†3AšW¶­Ŗ.~Tćłcgąwqh»ö™%Ō›ļŠ5ÆĻ~«ś‚T¶wæķ’’²ĘˆŃš¦“ž¼² j[CĆ~j¶)]õs‹)2Žõä|Å E(‘ķüFæ)Æ4Kā+Š—”U-ˆė“O76c’‰šžgĶ5Eóö$ŽlIī]®÷ō‰Š€;mó0+ £ČbóMņs.:‚oŅE.Y š#ńū¼ųļä[—ß­Ų‚ *Œsl.‚C8Ēo†‹…£i6“¦õčCqx<š6iæoX}Q@,“Ö«ķW§ßĆvrq’_CY\”åĄź¢A5Ķh©]—U7”ž¢M1{>°ŻŅw—“ lŲ„ŁGOšL§œ±=i~mŠ×åćĆŖ¶„ŹK„"Ī€×žžŽÉ£Ą(KA’ŁdĻ}ÕŌ|ę*XõW±ō7ė»HK,|ΐ+«1b³qr3^šn ‚ĢįŪł'~¤¾Ļż1€Œ:Ü}cUöMwŪøŗ¹ģ‹A©čcɇ$ī©LØq[3Ab ›Ļ…ūęš`Õ­“Ź6Ŗ"HiĘsźįņŽ,¬£|@©€D” Ę{Ź„l Æ+¶ó™bPóBś×Ļ_ šyyyćÅ“‚0ÜØ8[®! Ć1ć™.»Ē<ń*#ź?l- ō¾čŠ£č įóLLżŲŽĆ¬^ÜqGRĀńģ ‘^āu· Ł-ķ*†¾0Ż-µ9gSÄī——0ų$±šc#Ģę¾Ī™ŲØ:č ž†É#Æ=Šā<ĻŲQ³&Ü'bK­āŠ~æ³rūŁcļŪĒ•2)MdBIN’ø^ī“T&V^³śą^į.F®ę&ć!W"¹»›{rµ,*(Ń-śŌräæ1< ¾:®@÷¢)c»öuś‘Œ¤=҉Āåä‹?ؽūƒƒ«<]a’h ēĆ5ZZ7BżŠ„Ś“Crg ¦*łå];ńųg÷rēDˆÆŅą‹ĒóJ¤ASé‚žĖl*ĖĘÖĒķpśĖÖ_Xd§ü–żd Ž ‚”TōZ6Ī~€īĮēŸķe‡l&é³Vŗ’(ļĢG1 }ZåSŲ?zd’Ą Ŗū¦Õ²źüĶĄ žĪ†g¬ü@ŠØ6Ä=× ÅM®“"µĶ P7ļÖo i™ż«Ń¼ÉĘ·¼zәpśµx”1?rAe®ę~³Ģ•śUć¹žmćÄŅd§Æ±,®ĀR~·ļjĆÆ=å)?J)™Z/ɽ¬ĮĪ¢ƒjöj.Z—KĻpn Aa„O^WLNRsžŻ7 `gˆœ†ĮtófTŸr#xBž“Ne€ūĻśŽ³éé¼|«ńģŠŽÄ>—b§118iśs”Ä"¢=3ŽŃAĖ¾łŖ ŃeŠsŖ #n;ŻĪÖĶŻ!9 H=-m ~IŻžEēĒ2ėāŽ»Ą Ü—.I!b>ŹDOOÖs­¤£¤Ž °š¤:‘- ņ¬żČHa@…ƒ|rifā„šŲ:īveRjū<µ„ČŁtųŻĒ˜•ća‚XšŽ}ĀØōK„,Hņ1Ų¦gshč—,“cČ”[ ×^}#¬ÆDģ” ­Lž»€q2^Z4(9Ē ł&~BŻ#{Ą6čšć„ū]•…ĄXėƽŖf™[X; »ŃÖé0ėnGüo žķ‚ ©÷1ĢźøĒČ04”H]C™X“K_1ÆLB”t0V}ŪJs—Xßo×»ļćAtӕeȂ¼äh9Ē,Š„…õ?¢_“Ÿŗķ†öœ› ¹@ÕOēŽø œ£Ż¦{vép]Œŗę·õ%ķ· “,Č8ļĻŚåķ¢9ü]ŸŪ+LÕ9ńüÖĶłDOŲ׫oßp;ß›ķGbü&Łł‰‰‡x™Qä™9—y‡qY1ŗ¹:ɧĆó®Ķtķ¹w†įą 'ā8¶ż0"ųśÜŹ1‡aŃ…*],šŒļ?.k ½Š]Å~k¹ßņĆ©@s-“Gį&ʄѤ%6įĖć Lnвr½x^b^Q5²uyć· 3DĮO<“œēēGx-†zÓŌ/Ż*‚źÓ=F'=S^Å7ķl—žāv­"SÆ[¦Ź©āE·å^żŖß[įĀüe׬ō…ŚĒbN¼b‡÷N§h¾š«”Zöē±œœ[X*1įffrŗnTX[cj„ćaōšĮĀP"9żĀQF_tf‹‰ óŠŪGFØ4aŌĆ.H1Æ/-ʊŠvn>ŒŁ&EKMAw8į$dh¤b?ą†2-5†ßvټ|ɌB~~ ;좨·iD ¢³īsmšj/f)Ī?‚oÆiag ņ˜…© žv >1ū~ŗōżÖ æW\CĆA‘Z1œ×\Ū”Géā1żHq¼2×tć(ŻÜu{zŖÅ—ФG6ÉnA7oæjš°GÄN*±NßĻw£ŪH6'Ów#¾‹é(•ĆŒs÷$³ ĢK¶ÆPG¶!Łe;#h[@æ¼I05ց ĖkīMõ=$OFŃ>e¦Ö-›Ą“›^Īų.go9u³}ņ¾0ŃÆDóė=Ō³2$ņ/ü!cO) Ū_ŌCčō<ł>¢üGüü·čćw…hµå#ŃŃłZcj#(žbb±é)y›ķóP»m‰ŗöī"žÓ_ ”ųGżźGś:Miޟ}/m„„õ%Q€ĒĶŗ®EÓ{ŠķŌzéHĝź~aZ‡˜M¢‘öOBéø–»~ś• ±VöC03l9cÄf›Č˜Ż“”·¬)x&aż >į; ²ĘTźh`roĻ—öĶćt?„-}i>äfź=ģźŠž)(*įčņ Ķ¶°ÜJ«’?7Z“žæŖĻ,®.äUür[6G˜{R[ī;Ņ1[²…7}č œæE€^·O²ń>»6’q/o6oFŸvĆ=€ł€Ž4»…%æ,g’ÅFFŠ{Õ{ž{ڟņ įa“„†'xRŻ…Žk¤«ń_i”ŹfDXCZą{ˆŁdó{h’*ŅēĢ š×Ćė”š’H’Ml?2J§­",®5WŻiÆĪoMXŃ&*Vńė²*|šS‚3H‰­i{æ[©ŪUt“4Ž:}ny4fqéøNYK•§OVdƒ!zˆ‚j‘č7ŗ4™RWė(R~±ßŗŖ1ZŚ3„źvSł°ķ{“S dæ*iq\t~ś”h.Šä»®×ćžeU¬o"i¦fŽmĶaķĆ:mÖ>V“fĄG=/IŠ/WI·NĘCüL <^ĘņžŲkõB:”ĆŸČÆB·>Øō®Įbµq_dFLÆ3®Ć \‹¼7Ģž­ĆūљI™fr]ä¹öCŪŽą9Šéį_įź^ŅSʬ±S+[#¦Ł%ēhžŪ}·Ś"ś™#ęƒāótdźżĶZ_9ᣦĘm”8z„Ī o5põ`¹ķ+“^ĆP*ųŒBϚŠkč¤ÅQBu¢#Hyūj· śŁpŽ`FyUķ¼øšÖG±R#™¤Gš‚ZXøĆ–N Q¬ę!ZÖ łkž„Ó;ø™ĮžÄ|€ÓBūTl§='W²£tŲØ $[IŽÓ»¶ƒļ³¢b!õ •IjįÜĪ(W;jŠ„g·…7 /ūqnés³ŅŠŃ‚Ćüdöm/œb‘Ś0'ĢÅūˆ ma ’2°Š]“n†ˆxcµjZCBs®²–#TwÅ––é„_2ŗ¬”‡ -Ų‡ŅĘ»1c?oŲ.žÕk†ā(– Dē䬑e?.ī¾’¢:(Xź;0™³–"y 2hw dÓ/aāX5åv_'%"€õåaƃ…œz¤~HJBéuše3€jTQhļ„ĘGŠ{܂ųaTd•I‰ėŒ9”šŪ„į4‹×].Ō®6ĪՏQī &Ų„k07 ›²“Ų,\ĶĮ„kż4Į`ŚPõ0ÉĒÄÖ_ä6Üä3õÜl½ƒśšŠLßü¬-ĀŽēŪN”ČäG…ó„¾sbĪōć7&«‘ŹcĘ‡Ō„dT )2œkM·I©Ł`4k{ZM€Ļ.Rˆ‘B– kϹødPž—‘^Įč[ū~J¤„5įLV³ˆF,7ś Æ-¶üxõä>23x=ŲC{Ó ®“*nP·–Å/¹ł<ŽøĘj~œF/E±“ )mŃ{@2‘ 'SęM“lGsÜ:cp<ŲwŖ¤÷œÄq‘·‘¶ŸĻf`ļŹcä¹ø÷ī×@ ³XjAś½d„ųs¢@Ōxč˜~œ°,čÆ"¤¢a€—ļ½Ŗ<<•r”Ļ lnā’nÆ, īsL~E›¦„“~?°RGL`2ń#'SM~öP¶Ėr`EUWźlc D~ąžt’ÆÅŽģ4įŚ©¢\›Y츐¾Ā ŁÅ„žséķõhāĆ<Š^½Čä”Y„[£1¼7koҶƅ\¼ ¦w€ÉĻ™Ž‡Jāžˆ5KvĪ/‚²oxH ĀQÉ(![vˆ¹gLķ€9?·¦*pϘŽlć”!dj¬ž3šJ ž™Ļ7ÜZé9ŗ«K¼y—ČĖæšqT`ńWöĆ%®éȘś$Zh±Ś—żXŠĘŸ‘wŚt |”düĀ‘‡ż ó°ĒEÆ 3īIdź“½ŅŁ7ĘqVgŠźöż=źR„Ū1ŃnŸEœŹ^Šw” –@iŸIŽtBO<‰ĻĒy2 $ŠŸ5!·0ē„o”(rAļŃ/ ×?/Š’šŅ„„ļĮžŅ£”šĄ| –c2z߄ éfłZ¦X4]ł3g%e¶†<Ÿ~›™ŅX‡.œßM¢]’‘'±·ÖpZD6•Iįc”eę© Ń¢-^£×ċšāŠĆŲuę÷g<*wyQę•^‡<ė …Ā;Qƒß¾DW¬į×]rĻū%\Żßß5$³Ŗ%įøØ4RnŁy™Ÿ3Ć’Žź ¬ø0+ÄlŃOMõb«+(IēBÕį×f~PTõÓ“h–oŚĄPmX”7;Š+J÷“Ė:Äš¬ŹŚ„S`śķ=źVŒ;~s³$©¬’/—|Ÿķ­ Ķłc!䔼¶@Q:“”YīŪČYĆŻt'™ŸżÆńuģół<(į÷Xqņū5cł–÷N§M[)ią~9Ū3Ȑ@¬óÆ^ÕįyU8óĢ1ė!YĆf„9ÖļÖĪ÷™±G$Ö!:[ć=øÜŚ ЁKžwdęoķv’eœšÓĘ-— CxŖ1ęg­ĄŒ>«RæĘJtƒX^ÖØVnQ Óuvz‰öÄõP+ ƒ¹xŚs…\…”•¦BŌ.2“sä—XØ `ĒuQI3@ó•…E„°8»I^kŹ4ł„™Č”måĒe Ek =žĘ©ʘ &Ņ#g,±dK ““ł;·QŽ„Ä`H¶ÅY”E%>k{zeäo½L:æ)ŚVöĻÕ ńĶżN%Ł$Ÿ īē¦żŸ{Ŗwy€_C8ć2\T;KAŁGń0‡pęmNDnms2,,€|@ž« 2Ńwī  ™nīŠŖmķ VģČNvzĪ•ZŻÅ 3ü(nJ>ęįšZAggūū£@W\ovdßäū} ģ!_¶’zjL2zø{"łś³'Dśī—š“Żņ™uó•ußSv:³‚źķāńOHÕ0Ńl3«„4{‹{ß8‡ćż‘^åTżöjā>÷»8Ī-Ś@Ķ!#@?+rļż^ƙ(›m ō]£Ų¾ū.šĖ“ęŪöÜŠļŠ,Č}śõ5e›š^lT#Gćұ!Ł°ÉžŁ½1 ™Į£¼Ļöä Ī<ŸQ€÷59QgV±³bÄÅll±æ­?fB›qśßżĮ‚Ž4 ֹ٠@:põ½;9WH[rŠ ‡ %²€Ü¾?Ÿ59W:Ó}E€Łˆ˜fĘj_Ņ_Y(‘/€v; ČøÄŖx!!Ų£bž”§āæŚŁgóZøöøėē`©4I’™ķo –… ŻČ”{ŒÓšżŌž‹Ä!žu;ęøī!x¶^9SęĘåKŗ/ƒøĒb«e„ńNīÕŽ¹j0_WŹxœj˜Ļē4FŁYŽA¼NS3zՍŒ½A߬KˆQŸś™@ÖT«wO6.‚k‰°Cīį6#;¼Į+~ܼԱåׄłŌؖ=w<¤<¢pM „īņPLÅOnpøžRȟ”°\š Ćs¼¦ēäō«X„ä_se7;L‰Š%yŖ—iö¼Ī/|TÓŚ8:ÜRšŅķo RĒ,;ņŃŪ„"¢(ײHŠd¦Ķū&<‹ėȳB Xœäˆ¦·QgŠŅfQ7ēå~)Ŗ598¦÷Ų[žć‡å¹“«UV—źOś×§cØ¤Ä»ģ’š{rz0"ōW>I7įp†ū.ÆĶų6ŚłéųcȎĖwĮ>įpWńĆGń”tś•ł„ómēĮ°›LnPā…D¼…Ę™‘¹W¬fm°B(®·¢ÄkØÕŸaT¾ć@“’āJ .󉤯Ųoö«EåK?vĖ­0/ į_~c³8šżä\Ž*śėĢīćr3%Æeß ĶÅ$M6§Sļdķ—mĶÖŪč‡LHu©•”~ęTy“c¦µaŗĀ‹aRž;˜dŒü¼H ö-«bGsßęē¤ņÆ ŽV3z”M”F ҉š:(“ļķ¼` |*µo.Šq[bū¾­Mi£įGŒEb:—®œErXŖq\ÅaĢIT<ˆ#€l¦…włg=eŠ«(Ł%ŚęHķ 7£:ŅĒ]ŗ/®dųĢ mõL<††öN|N?©ˆ،•PĢ·ā_’6~…’P„ĖIˆŃs€Ż’^łūé6³q‰Šg3NŅ4ų7fEP䆉ŁŪ½HÜĢØČŻ<““ā.3XŽį „Š’fĒzšųœņģ«$\>ól¤M`•ŁäęZPMžĆQaI_^§RiŹ"Žø)-R7¤,ąÖ°Y†‚’ŁŗĀ<×w3˜+-;‡»(ēųõÄ Īž7šgM­ł7ōÆO:ČlQŠX.8а[¾ŌY¹ZĖ2%e›žł§mĻp*ö< :‹ģ ”{ņ@Ø,āXGĻę²ź†\~›­gźiu!¶lļ™"̈Ÿ–šs\•Éž –sܚ!EīĪĀōÄćvN_ś<Ż»ĘTwåNT…ń(žaµĖՋ½%§ iē.‰į£™łg·®žÜžGŅ~Bv ß˜ĻĒl°ĮYMŚįl“j"|’®ĀsaļgžˆnĢĮy•^‘ęŲ÷§œQa«Ö”<ʞÉ.٬Ó)AųīXµ†@±)=‹G³++=Õń”įM"ČčXšdõµ3n·Ļ0yu¦/ƒŚ±Ū#Óį‘ǵ‘Š2ōŁčW—9įˆųõ*]Ū l*K‹*TuÅŹ.Z#ßgö‰Ķ’ö˜§źc×jü±ī;ĤļŻ.6r‹gŻ*pĘ­~Ӌ]@ÆĪKø© m“éNŽĮSŪĮĻU mų:Ėő ·(Ģ­™0-ƒö5O.l¢/ur•AĽØćEÜģŸiźI#T7ß±ģČJ*ĄŒ’Ū Ż>,»7x¼·‹Ģźöhý:ƧQÆ/OŽWœŽŽ“YDĖŻĄlČѶ@+m{‹%D„{öCņČńŲ9$ŁŃė\øē=šD€/~Ž•×¢5týƒfż8'Ē(°ģ÷ŠØÖ+rCō=ķa—źø15š3u`ERVĀʱ,t(YEę4ŁéyžUwA__gł8 Œ¢ūéś|š;3ĶūmīźĻģŻ–ˆ•*ŠėbŅńWYqw:·c\®2Łwc!7Ŗ³īœyę­t$[Ü\K>L!µg§ōŅŠil`JwR‡<ŖĶŠb^6ę ƒ¶å šŅ#l<‰€§Ū¶™DŽ6¹4·T?ē@†)¾l“<č]õÕ­.HūŲ$˾óØ%¬if”Č |‰iXGþ>•§{—°ļŽO“} r ęņJØĄLųĮ™ąQ8¦~B ¼ėšĀ,ĮJå¹:3I4e9ROä“X¦žŌWŖä/{­żEīg=² Žŗeɽ¶t»mŁ2Iӌµ ŹĒŃÄcõļAz;_FtEĄ—2_žq|§Ü÷‚V0įµ d±\k©<÷ķyh®¬ŗ‘ę¾Ž×”ś?żwÖu¬|Bny$#ĆR±bÓ­6§—£ÆėT¤–$Ē©1ī…Hr9Ģćc`żŖx-³"!ōG2ƒ¼»æC»—xEłč(Z ~al –µü¹’µüōq.x&ņyū¢Ę’N[‹¶G®ü¤žńÜ(‘æ÷°•‘"×Į'xžņ•pæ$¦±¶²öĖdßo%¬ŁnĒ‹xE?/Ü+Ś‚ĆroƲ`ę)—NN;-łL}~r::ś”l]^ćKÕōweĘp£A±%%“¦±õÄJė[²Ę­!a@’¢I¬1ńUž¾ÉbŽĻŃ³Ōžē‚“³&zWf|?ĄļłZOŒL=Fs„Pų’xßĶ3©ÄPŸ§*)Œ_xs²BŪĢĻoČCēģ·sq *¼o¾ļWP晻|Ž*5’½`»ŖUJÜĄ¶\ļx`o½&ršUfŽv\·yß?Xƒ’xM/{B3i<šĻĶĶ-éhĀBd”SÜ"ø¢{ ķ$S6-éŲ0÷%+Ą·©ź+Ž˜@¶&’Ņ»xiēŽ‹¾Ģ”›q÷ †’_d‡œłŒćŅbo~†„Pß4Ģ!”ōoJ“ĻŌ*d!·[ōKDHbļؤ_¦¦Ć-Ė.Ͳ ¼śt2э䛕čŁn愰Ž%ĖõTōŠqDŒŽų9eķ:°ĻEI"WCŅĘ„Ø—ö|}Żšg Hڰ#ŁŽō¦÷oq)“ŲBx®ö3WĒԜø/ŌŚ? „Īh–ŪįųJ+āfCą¹ÄĄ¤ī¬ń‘Rė#@Ū®Ō†®'µÅœ¹ū¹+įN± =ī¢YņįT-G*%Ąe.WŪnfULW’e”PQ4ĀLDĀōĒ;®\ˆ_”b.+|sČž€T{ŪnäZܖŸ<‚ā†M„z~Ź`’L{éįHęxž”ķ{æĖ<ųČÕDjĒÖ½“ļ€U5ĆA}Żä[­¢=Ę9=©Ž(`)iłą›bŪEBGüzüąDŠ04-;ißŅeTŪĪÉöF‹WŌeŚĒ|ÖÆ²X‰£õ[ŚĀ)”Ā,°ŃŒ…Zˆ‰n@Šzīבō » ų`y~M«Wk ćż#“±$ŗ ĻOJp|“rA$r™½”ĒLX’§œć}Ķš†bĪn’:'üžb¬)ćē՝(mĀ’ILWwćešpÄ'8‰Lø‹B/’;ķź©IŽęU ™/<в9ļNÉīÉŲ9zTæ8™»śI$Fm§ƒ’qǜˆī“¼HÓ“1)ī‰&N4C¾·Ü<čį œ H/{Ā$ņRśģŪ|śuŽ7wŹč>sŠw©Tķ4Ķü98Į*­ĢĄž:c‹čåą24ł«č<¼¼§Ź ‰ä;…īQ%¹CĶ “½±aߎ··äļÜ.×Ȋ”^ę×" Ry6{lµ¬^ŁĪ¬ ų ēx3•uŻŲpŠŪ£Ź8dE$€§`D^|ć“:.ˆŽ:Ń‚—Ø:é¢q»„ā—3@½ńžų"™wŁķ6¼+5t=EPŠŽ ­WĖöÓ`ÄcÄdʑœ€Å+‰Ī™2céēäPÅ>µ‰0€R`ö’ ĆīĀpoŽkŚĻöŸ¹Xŗ6*K;Ū3tņäYż;œŸ™G:…ī ¤ŹŖ_10ļ\b÷S,ūؖÓr;”Œ~ö€÷±ó÷:zĄ•3 "ć!ēswMäŽo›G4¤õØi™Ē N‹°o@&ĆÕW =Ż{wŠ36˜~®h€ ¢@»EM'Š“ŠŻ­”÷vy:ž^{©¾I¦ā Ź ĪåGsh‡¶“Ć—[X b{ә ķ{Ī-ŠAÕ5t·[*w×óĪÓ²S€¹kHyīŹąY. “°V–ŽzųF£Mų¾Ń|ē!RØEś³mMs|p2xī§*Cø_…†rź$ą8IŪ®“h¬]ꈒL3–¤’ūÉ< k `µ~»Č —OŽF¶Ģ#‡ ļ9ćØcr‚AD‰_ĶnšĶ®0QĢ3·č£ę£×8\'*j”ļŗ2i¢JÜŒ4Śģč}˜5£XVŃÉęÅB<< ŁGHż)7ReF’ŻrU,R÷ŗŠł`3ī*HÄł›F†},WtąƒÆ|:eü' |ńņ>V8&J6ćÕyRDqõ7pVWŗ†ģ‡Īš6±-Ś­%§ōuꟿÄyŗĶňš­4Ä“ g?Փ¤Ś_‘§£iq|ž,bæųJ@¦>U?ų’”P 8˜Qµų>xÅa]}1ßĖ»ł.–ĘŒĄ|ÖŪA i«ńA·ŹØéēnŃh­‚šM5Øžŗīчlļ/_J,üsÜ ĢZzłɾ„ÖzūQöA¬*“ŽÜu3֌Ūčbč‹D;ļė$OQlśhb(Ŗą™WiyLŖXō-#gć,HÉ{C'”–_ķPPzĘXÆÕ}]ōČŲęDœ$\ńµøŠ’ä²ŚŻģāŻœbŲį|%~æ”±ŽPŗp¾W„’ه• n”ŖŅ¬X>‚„™®\ä^ ģWD]"vŽ^F‹<¾Ōѕ<²|[°Zõ×b¬±Æ-r$-€&ĒŖÄ™Ł86k›§¢Š“S”k¬~õÆÄź×vĘį……ž€$$¦ēnƒ™Ź.޳9Œ"”Bś\$£'&Mż~XÄę{•4ģ62ÅćWynü¹ß½į™›ūf«OŲjZÜģab°@bĪ’į;Æ<öźe²÷BšÆÖč[ČŗĆ4`G?Ź2œeiö‚ó'ˆwŖĪ—8Ö ˜ūŖ–{b•ćeo~.[2›7°4—r¬TģķrŪŗG҉JóēÜ^~Œp—Ā gC­6vŽ^’Čæ?”ЁĮQöģ„5;Ó2 QÓ¹’šsŠŪfuVs|=īWKłśŃ„»¦”Nw“É‹„bayŪ£īʏ^²N—2¢6ŗšž=1!Ļ“ņĄ8ZžÓˆˆ:A¦2ƒüż'·o_(DéH?ž<†]9wӟ<šˆUŠXšļ–ŪŻģ†]½@ŪÜ“9µū;sa‘’P»ĢWntUigØr{ió M—²Ó)Œ¾#ß5ŅČ3Īę/ ϚČbĪÆc+h^īÕöT«Ń{Wč“ņ¤Ÿ‹cfūļ?‚)7Äē×d•­‚łHGŅu-B~sśx`TĻšo„'<)žćńŲXŖCōāŪģŽm޵)S&ųs‚¢;–Hά o$& /Ń'Öw=lü1±“ ¬Xł;£ ?ĒVū?d%ęģćāüv(× sMÆłČMߣŁ×ųøŠ’O_ ‚F„į‘Ÿųßh'TR"õ: q¦÷‘”fNĮ˜W-SFóõ&E“ŁlŽ”ŃkĮ³E&ķeĻaø»iþȣĀBYMjaös/FĄ*ū![¹toæ^`0Ā&c²…ø«ł‚pŠq<@Ų-˜™Ó²lŽ}z¹‹±jņ» Ŗ˜½ŻĆcŖŠ« ęO>'é\ÉI¤"”KYkaڶzöżŻNcę^ļ?<‰BŌ^šu„nß •¹)‚ĖL“ZD+?)‰£®„fG¦Š9+¬ųĖR敞4K7ė?÷ūgOUpnœ•¾AP§ézøqnp,ćph嬑*,čnÉõ3 ˆ‰*0WŌzļ€ ŠŠ#|Ī©×B½¹ 2¶#ņ[ÖĶ]­hWq”-cĶ•Ü!{7Ä*ürŠ„¦FĖO”¼ŗąOŠ˜}ʆ&K¼ńžµ€Ī¤[›įރ™$©ĆŖ˜9MCŽi¼0'CJ5¢}åŚāu…[^°p®į7×.ļ§Z–ģēL] ”'ū óu 3)h>ŽP=~źŸÕ X`NCT§¤ļČßHˆ_ŚtMż(Ö+YŪć'$qŸjEŹĶ'ł]ż!ļ]˜`ēEŽ}˜Ą(.MØøe‰;ĢkėĆń„æ Ü×8±åejгŸ^Šœū Œ~å(&w"$l+ī1ķyņ(n–f-­‚ˆ5ā{IŸĢn3~õ®WśH<˜ģĶj;ž:@Æ šE{‚÷ĪÜytäØnŸG. ĢčBWĢÄ훣õ«ī^?˜ĄzŪ»iš}› kū¼0³<Ö·ū-aQĒóŤŖ+Ą;Ÿ(~0“źņÕp—• ‚¤°ftĀC{ŖŠĪ‘2B»§=š“<¼6‚—YĆ:r¾·ČxŅ^¾żńš°r“n¬LŠ­MQĖĆčö±į;Y­t’ģ§»[ؑ@³ēI#Z‹x¢B¶µ$2ŸóŌĻ›yō e~#+؊j¾r n/YŪšMēR²2D`ɰ>©±o‚“Yٱi£Cc+ĘŚ&‘ v쬠6ę(‘²a ź9ĘbęŽ YĮ|Śh7‡Š²øŚčér‚Ķ„«v)| = š”ĮO¼+?ņ$ŕ˜Ķe¢ŗŚ‚­ZĶ“b‡„qot ­#lfמ¢į¢0/u™ęn S%k× Īoø¬hLżBzJYb­ÜØ ź°# ч_Xéć¢&u”ž2L€^ĪėĆ"Q“%J—HĖÄŚU$ŕ]+ä Č9!'EŽcœHŽWݜ0ßćÄ2C«M,Ɓ¾Ēbjś®š5n^/ˆ9į Ė.š–“%-A<ĶO€E{v!dµéüō3·cĘś¤.æVגö†.j)6‡.uŃ.!µœtp†"䌐ēūŠÉōšk¢v^Ęn>mˆœĆĢQ( ÉKgO¹xƅ‰„.B}L•QÉŚŽq©" ŽĒÄN)ė9GŌö±Ī„WŠģGĆKBĘŅ_.āÖ>{0qŻFĢkņa†K…ŦžScfFą\K&Ģr@Œ"‡IĖq²¶‰ÄRŪ*UN«æH’)Ģ cŌɘ¼@1Ų’*˜•=øåJ-ŏ²<écvŅĢ1·Z™Ėc“t[nNU{XŖVKdõ ßžo՝ĖüNFŹimDIDФŗŪ2ć†`¼X+©–åźµ”­½öÅųs vŅ®•"h2,¬T•Œé7ßęØžņ üi$­Ļøē7E›Š¼ĻŠæćÅŪ„B—WŠTI¶WÜ~ žš˜"pé³{o—ßŚÉƒ6źlh‰'–cŠžJ—ąüöŠ»øē4တčĖj7¶‰&¾­ā%Ÿŗ%ĢOˆ&÷-×Éź=B Ļ.Ŗ83F³ŗŻ+aÓ,i8q»§ļŒķ ķ1ī[įߪgcō‹ļ‹nPéŪŪéßæ¬ŅL®«WØ|pYĮī½H¦mč³×åµw}D.NBć[”ϵūI2*³sīSš,į9ŽŒ2½ē{3õųžݼ Ī“TC Ļ h @]ÉdėŠxÜĻÆ!Ńņ+ų3žt^ÅkOF4+őō/?_ÉVØ&ųŸg6®#ņœĒ4×zNä<į%“髨™ślóc-u®·QØx[EļPPC°åāó‰©Oós¦6u&św~PåoV–J÷ ®BōĘ8ÅO@¦Č¼†4UŽ©śĢ…īJ¦÷~ ę±0§’­āK˜Ģ«Q2»"„xā“ü“c¹i]xŻu‚Įj³/e¦«zšęL‡ēŻ»’e3xV¦Dŗ]@“LźJxą—¬Zæ×)XgČ>łj+žætŲßA4š`,›Ŗ¼¤. µó=iž¹4>ķ•?éRÓšł¢†ČR„/aO`&|©U'ˆH¢p‘ū#)‡Ó>؍r_ž =#‘;ĢKrļÅż’ƒ³ļ<ąNh&Ōøn*¼ś…x*[łĆü”sa_~j#²­ŖC“ä<‹×^ēCÖüZ؊śµįWƒTįVęØVśHž>ĀRź@kW2Ņ–hĪ^¬I~ÖużLx“3ØŌ¢gļĶŒ›t(”¶bTå 6¾8ŻJ~1Ųķ{Ū Ģ[Bō_RØõN…?¦|MŹ“0Ńbė—x\dB±ńˆ9rńŻ“×Y-ņ/0hÖAS!šĶ>‰+5>j ÷¢ ²Šaź¼ęDId§ÕirŗoL§ˆģ‚{‡š{Žhių¹“šł3o3Ó7œģMs5ÆJŪāÕeE@E…"gćļā\NؚņH{śÅøū—4^_€‹Ūļ ·HmQqF3T.Ū+ZĻW¹ZGHqw18£ż6Ä 5õ™”(‘ bž\* [*©*ÅÜĘŻL†ĶżŁF>'µ&Ī ƒrdt“Ę >“wZČv1Õ ŗŲZ©9¬B$Œf>äZe Żf:<Óõį:/~6Ć]Ł5Ū –!¼(ņ¶ÓĆx…Tjś †5ņ)ĒDōābū„¢Æā§lĀ—ņ岎ė gC@8ņĢ“O79±\Gā{ ڹ`įƲ94höœNT"cBŒ“Ē—oĖ*°5äÉ5&ü-ˆ÷ČšŖ‚/łµŒ'‹ĖŠģ£k %i÷­hŲļė‹5'„ņģ]ĢG©ö„ń ōūĘĶiŸ‹ŠīŖŗ±÷*§I©Ž=4 ODÅeJ0˜ä=_}k*Œ¼ĶĆ+'ęO‚¹0ģn_ņŸ§łžœū;n}.'O¬č^ÆĢA•ĀóØ³Ś–Ža ½‡-/ą­n~ß*ŗdŸœ-{Ł?ڮВR’Ž© øźķ)éÖn­čKƒ«ÜŻē0m¢r_“Ģ]kwL‡łü3Āų!’`@ę"ØĶKllY²•¾§‹ó­GŽC©k6݃}ŁÕżŹ+/Ā«ĢVƒ«pAĻmbgоv£®­ēōŠœ9)Hŗ^!¾n‚ ’㌠]TØW§,õ‚’'³ Lō—¼’\„5ö=Jæ¬@…1£żn„ „Ńy¾oDoAÓõyŽź}œč},«²•AD”³¤yšnp~ rźYĘ (F¹ńœL^.ƂßsŃJ ©fM¼æ‰ž“GźN—’€ØoÓ%‰T«ÜEz0\nxŁ9‡ć7ĶŻŃÅ]^Żx:AĪśØ+ņ É))“ņ Ō#ļŸģ铎j"n³–žĮ ćMwÖZB˜ą(žSš}'gÓPĢTX6‰hZ„µEū2¤d‚õƒOÉžę—A5RHōŒ[f™ĻTU8˜Ę$‘Cmz0daUō ÓįSR¦„&ŹfFõJ&­ĀB±ę»Y ¤„.ŃJ‡Ļ l±I"¤»ō^o’擁X§Å)üķq J=;ۈ,3ńŃ%ˆ÷Ņņēl=iŅeöŁ“±:ø>g_¦ŗx@n_#%Ŗ¢IZ”*ėL~`$ł¼Ÿ‡„EZåJ ÆķAE"Õs2ĻĮ™”E²™¢1ŖTæ.ÆŻ„œZc} <'t2õ|Ł™;7ĶĮæZ¬m„r”üS²pōo;Q!e`[ƒ½uŚ®{6] µ”S|z4Sū±Zr8rÅUæś}ųÖćĻJ?SxēŅźŪ¤UMŽ~Äöę-/Ä~Cų–p[ä¶eīł†#[xµźø `He^vļ ’BPŌĻ^8óʳ ÕӔZ8¹ü¶­7(—WPIŻsäŚxŌlž@Ü;ņsść‰Z7Ī­%ėĘ;QūĮvŌ;øC'D²& ¼Ū`Ü4U+¦ó¤Ž§ŌŠÉE?`eeõt¢?FHc${¢BtIoƒbz§-m‹LB^…‚V…yZR#gD9'į$,õĄÅµŻG‰‹’@«Ēn,ķ­‘·b½c’/Åż Ė[‚ń‚Ł®õżĶ˜”č·ģŸ•ń³F2Ę}.lKhIVȂ·:AŹŁ6øk­¦¶[u’"©™a=Igž#āxųŅYYÆZא»š«XäĢĢģlź{%W+ |gĆž¤¼šœŠwŻÆĪfte=—q‰æ:„õrŠųßC¢×Œā ŽˆŖšeÄC’j™ÖŠqs—ĄFEž4Ē·¦fžCėŪūČõf+æŹŲ.T°ÅUo |•¤łĶAĒĆj:™ ˆæeżĮh.ŠāCĆĪ£>ńLW¦?•GŌŌžŽœa4)GŽl–®Ejbl8ĮOØ;³Ä €īŻKlš®Iq† RŅ,GLÖ¼GėˆčN©-ćĶén3#“©Ė¤-TģoÆŃŹó™€naęõī¢×XIžßöC˚¾œ,]'G„{#ųÄÖPB7$;.tKĢ9Įvߗ«ŁJHĮ@YmJŃĪŚ¢?g²Ŗ£.¼Åšc2ķ8Yōē’¾˜)ß`Jŗ'÷$ē’‹‘Æ,7;BĪ$LS¶ā;ĒE•  µķŸ4A5Ź“:ĄŁ_¼2¤²•Ą`a¹Qģ1ĶģyjĒŲߟ6<É/±„Ė)ަŹnræb!ò†hæ fJnöj°¦Ųó5Ņ«ÉĄĻY3³Āʆä†%,GD‡\ ĪC=÷ž[»$Œų»ā>œ²ŽūÅ.ī+~‡=×éøwJÓąį‹Ųī°Y¢×ƒn¦sń¢ uRC.1Šh…‚œ½<Ā•|žŠĮÕdDRꎵĮoŗķ”5ē~Ł“›ˆ&ÕŖ²éĮŲ\3õGįkLsēDĮó²'Ź›Źc,kņ<öZv6…$’/ŌõOݧćU&Ņ‘Ē9øŅBoķ³fN±)pgé7¶”ņi Ņč$&O“ńątžmĢQbt›æMó¾2¢©hRL–Éń¦l͘¼-Œd؃da<įש’u?!Æŗ«E¦Ų¬™½-8v.ŁføT¾Ź“ÜwōŖqjģYåD·‡Up‰%*Čłš1»¾?)la«OćQĻĖČ}ļeąk(żB}Už:)<%Ų§‰›ääŚSU"Ķ›s¹į‚ šģ hƒĢŒ‘]Au2QŗŪ* 3Z’¾š¾,£Fŗ $E»x\‡ay\AĤגńśäC5-|NŃhķ9ū<&dß½½ćÖŖ=_YļŹ;©÷••ŒŁCa^×·wŒŽcežHč¼Y† ;ƒ¾gcß˜ķž"ź–³ 8@– ū¹Ł“ū#„ėēpl^eøˆÅ# ¦79A)œa„V%į„;»@PL;ŌēYbv^/ WŻÜšČ”[‡ė*į†ĢĻĄų—IK1˜?#jWūiėbVń~!ĖP8­M5°ž£ˆw3źÕĄnb™p!ö‚’Ę<:Ćæü5 ’1ŗĒ6™i£$'¶Kņ—cX~ŲUY-fF XŪGæOęĮœóŪō#šā—_jĀżM¦JņH$@@Ņ/0Q[ŁŖĪ謓co<“–µ›õ æiOG‘t\Ū/–ĆdsxéĀVG‰Ņxm*·č5»uJTž¾T,V`¼j“ōĒ}”š°a«nq%b™ˆ0ce÷T†?uG^Göų“mĀ~ÄØ—gb !éł.Ęō–0É ć/S,K ę žĶpZlN“ĀҲ”~÷xœ‘n>Œ²SF=ģ¾Ćü“ž‹°¾Ų5-Œ.øŻu;HŠœÅ•žöZŹ—ŪFæ¬p Bč«°V’X_×\ HäęāĪā× óbļ’°ÉUł±Ż„›<$–•*BE=ä" n½}jfµļ¤KÖOߢŠRžEüŗI¢@¹Æ5Ո3¤Œ•C%oer!P"XIJŖjgŽ_#÷yĢŗ ēÄŠé½eŗ¦?“ĻzŠŖvwŒµ8š. Ēu±łóŻ‚ŗRIŠ#é%Kăm#^!ź IŲ.G‘Ɇעv9E>āø×k=gé÷ų¦RĘóŚįÕ?ē—äĻä»¬ļ”I <±IäQc·iög+ŲFOŠuē;ŽżxjÜpqrµ¢ldĄ-1e3˜•æįÅ«)įgŗģu²›Zxƒh“d†'ĀõõŒł+Ńė{čåq"Å­ÆŁöŗ*ń•õÓĄ=×+œ(Z€™å ĪOś_Oœ+/|ŽPžW¦å„2)ŅēćÕzpĘŖPE.”ł÷ōżćŻP$.šw>¼g—°£4ˆ–'¦  ³EńcĻx“æ— õĄįKßĖĻ~PŸšŽ±zŪå~ˆKŸæŽm‹šėņk¾W"@{®ęGń“žžļ¢[Yæ%MK®ü‹ō2«’r†ł’7CDé#•…ˆU[xµ‰f®D®§Šl–-öĢű…+įéųDsÆF$£hJ§“õ©y¾eŲ+–Q,Žß/žģ¦¾£–[Š ĒŅņńóŁv©n¾-‚ķ@łĖŗå½ųԜbą(ŠmlyĻ8ų“|%˜ģ€Ē§FżČŹ³Ńc¼žhü#qBl9)j[ ŽČēŌžˆdäCҰ «YB‰@Ńų&Ł"<ߢŻēg+²²§4-5Ÿ¢Dvš}iÉ%#ńT‘Ą endstream endobj 813 0 obj << /Length1 2754 /Length2 19522 /Length3 0 /Length 21091 /Filter /FlateDecode >> stream xڌ÷PœŪŅ ćœąąīīī,@Šapw īĮŻ%w īīīĮ Į]īģ}öŁÉłžæźŽ¢j˜§»Ww?-ė}‡‚TY•AÄŲÖ$ikćÄĄĀČĢ SPSca03³123³"QPؙ;Yž+G¢Š98šŪŚšža!ę2tĖÄ Ą† ¶6Yg+ €…“—…‹—™ĄŹĢĢó_C[^€ø”‹¹1@ kkrD¢³µsw075sĒłļW5ĄĀĆĆE’÷q€ˆ5ČĮhhP0t2Yƒ# ­Ŗ¶@s“ū’ø ę7sr²ćebruue4“vd“u0¤”øš;™>€A. cĄ_”І֠Ø1"QŌĢĢ’£Pµ5qr5tĄ+s ČĘ|ÄŁĘäGØŹČ”ģ@6’1–’=ąŸāXYžu÷Ļéæ™Ūü}Ų“µ¶3“q7·1˜˜[J’ņŒNnNōCćæ ­mĮē ] Ķ­ Ą§nQ‚žĆĻč`nēäČčhnõG¦æÜ€Ė,ac,fkm ²qrDś+?qs\ww¦škicėjćł_dbnclņ cg;&us{gŒų?6`Ņo™)Č ĄĮĢĢĢĶĘ Ł@n@3¦æØ¹ŪžV²ü%sšö“³µ˜€i€¼ĶM@ąHžŽ†. €“ƒ3ČŪóOÅ’"$€±9Š `25·Aśķ,™üƒūļ`īŠa €łÆææé‚'ĢŲÖĘŹż·łß-f’ŠPü ©B÷å•¢¢¶nOv+€ƒ ĄÉĆ šž_/’ņ’/÷æ„Ź†ę’äö‡?[Ļ(€k÷_.’Ģõ?KCųßжąiØ’'ff ųƒå’ó ü}ä’ßä’åå’uų’oF’ĪVVė©’cš’£7“6·r’Ē<ĶĪNąĶP°ļ‡Ķ’5Õżg@ĘęĪÖ’W+ćdŽS« iī(iī2V6wšż=1’mŲ»•¹ HŁÖŃüÆūĄĄĀĢütą•Z‚ļGp³žVĄõæ%l€¶Ę­+'ĄŠĮĮЉ<_¬OšŽƒÜžm£­ųĢĪ`bė€ōWK99L"‰žƒ8L¢æ€Iģ7ā0‰’F<ą)üq1˜$#“ŌoÄ `’žŲL2æ8žüoާšć)žFąxJ’"np<åßįĆoŽ ś±˜Ō~#0[õß]ć7G×üĄŃ?žFąčZ’"ptķß|Īš_ÄĪÅŠ<>ꎖæMĄĪŒ~#°‰‘!ŠŅŃŹŠŃģ_) +8o#C Č dāō‡˜ćń6é_',’[‚œžĒž‡ķ_ł’9¦üq€3ŚZ§īßÄŁ’’X[’¦ņ×82’ ŁĄÕ2¶µ²2tųĆœč·S°č‚rž„·wÆõæ^ĄłĒŃŹŠś/ą‚˜üö¶01włĆķ_j[ē?ƂMLėM’zƒž4Ół]\vpĶÜķĢ@6X€eę@pņ@pW-’€ązż&Į .ŒÕ_[ł[®īŒĄ—2ÓļPląH6ĪÖF]›¦d~:0ŁžĪģüžš‡ĢĖī·ģŅü·łŸv³³ü#żßfƒo~&;ųQż‡)ēß2sŪß-e×ŃĪŹłą×&ūß<’BĪ ĒæÆ§}³’%“uYżq,ż£ü,`ŹæŻr€©9‚¬Ķ’wā8ž²¹üѰGšĆšßüĄ4žĻ–°€Yüę~ 09™9€žp™œ\m’8öįü{ Ą1’~ļqŚ:üYkp]ž€ą„]’ŲA°S·? 8ŖūÜ'ß9ƒ=y€ž“Į’\Õ@gp£œž~š‚ļń’āæ_™@ 7iiŽČhQŲzW%B菰;.0C±«™BĆą¹äŠęü€ ŸHS™įæįp#’8Ō¾ŗ#A}-¼LņģyÜTŅÆŅņčõ¤ūaj·iq§"’X¤¶ļ"ƒššž×³½—†Ÿ%td‡,E޽37Ŗr֝kƔ[m_ÉŹhšü®Ź^%§ņSÉ4C¤ś—O~…³¹F™sxdpN ļh1ĻÜŠfÆof0³'^Idc鐼O"پyjo²FŻĻy¬•©±:vā“ćk㽃¾Ę¢ō=H’Å]š,*ų²!°ÅLƱ1ŚGā5ŅAś“WG^—ŁŹa‰Gj”Ü»„–ÉļcĻČ]U;Ś»cŌ<:WWI©<„ʂ^½½ĮÄŪP:c—hxEwϽ­%˜k­ćk¹ćŸ5:Ć:&ۈHŪoWD×ğCģ½±ąˆ®öø;½ņ-ҋɫ={,&NģfÜöÜTŪśK%NQ‘ąóSŃŠ±ņÓ¾sQ Å^Wc±B¬äi1‚@üŌE£3„æ,©¾Āh¾÷Āž3wT;…[īŃĆÕ•ØŽŻ*a¢@†Ć³ÄūSūmjj8} ɚDįŠ×ŲįŅZLĖ;üŚ5żłł¹!}ń8„cßtFĘ)s"e»ŁęnoP¾ü€KBĆ3³³4iUŌ)Ļ Ą}¾Ø”ģ2ż*W\«6ĆÆ:£ģßŲłŠ]öMąŗd[g”Ø'~I·źżē”Qķ™.ķE÷a·ĮŹ/5!Õ~š”ā:±3‡锘õ»Ķs|d»,ģ=‹>­× Ī„$­_9ZģVbDeZ ¶rĆU8OÅ9\v*m‘ģĢ@HéŌŁ9ö3gW­¶ž¤“¬ŻLÖV§Éé”į¤åÆ_ź2„Ģ®Rƍ2¶^h—ŽA‘ū"÷3'(½ JćõC'óĻ9/¦‰*öRŸśÕ_|üÅī¾K¼>ßé}Ö8¹»0G ,=ƒcģ²Õ‡Žš{ž©Wű¹šk2Ī6Ö  >äTčˆĤ}(śź¤äaõmLK‚“Ä„’tĆZž0ŹTž/. ~Ļ×I½BI ™‰™Żö8šz¤_ hYL]o÷Y;sŁ™ r²Ł:„K·?Uqy¬zM±Ņ„50n¦ž]śEHøłkQ5–Üq„J}l,ŚY·ŪęąęŲ1®,o"ŸīFŲ|²etC2Ā»Ükx£F ˜ĢēÆEÄļ<™˜žPtŲå>ņ›Ÿ“(SSyGĻՌ ŗ–¾Øī©‚Ņ©øÅ_ĻG¦·kY'Ę;÷¼‰o%Ė}EēŠlg"›cbéĮt%ŸjdĆ!/½R%ʔ£B*yNI¦„õn„kś=ŽMšq¬eä+[‹ĢŅåh, {¬ K␄ą°é©”"e+» QTUķt•ÅźŽ~ų^"öM Fƒć™ēż•ČĻ-:”ŃcņżÕš#įøŽBjMŖ=zčˆŃ>©’7ų q£j¹Į‰s8Zę¾0h¢ō–™ŠEū”č>ć„déĪē-KZ›Åæ1¦ō ˆ!źØĖgØą¬SŽ!ĖQ”ÉmĻ P fcdHl*+Ņó*x†«²I±~@ęü”½)Äp6§‡ó1’ŹwåąŚG‡ŃŽ,„öV‹0ūāŃŹß°¤ČutI±BŻn¬Š ¼üj;M§ī‡>¶¬é“‘+évņ›ŃVĒ^æaµéˆrńNh#’!^M{R]óž\זxƒ×ƒübų/T»Ż›fzpŻoŌŌ¢eJm¤Ć@V?¾ēa“Å]DŻöä`®ŻĢļų„ųŽ,¬؊ˆķB7P©`JµXšönJĆrŌ;¦ŹŠ˜N”`Ր( (Oˆ<©ńäśxÅNĢĒäxņ:ܤū°\¶%žfŁŻō9ˆCw£s–šŸĀÓz鯲 ·­8،FŒÖģ铤oJńUÜ}[ˆŠŠ6·Ś½R°šöĪcÄ Õó PķW]¦‡³ĘLŠPŒš¶??Óö¶%an5·£ w€°ķīFź‘XNk¼mŃ|å Nؓ~yŠL:*ģ¼3`¼ÉŖńĘG÷Ā¼ČĄ„Ą,Ņ›^.¤~\fépÉV€üų“(bCŖs`É!pŌO™®•{bN¼äz<ā…[„—ģ"V” ņŲ‘„©^<4 Ų–…W"ķ,}ńčĻčł*ĮHĆżU$Ćɀ.yÜöhé(”¢Å7ĄŪ`Ōėŧܐ¶bĢx_9ž†ŃI†ČĢ>vį%”˜–:ĒžŌ·¹Ś·Rp?Pńķ€:b[?É`ō&ZÆ/’Ów6ÆČ3fčĖ&»žÅ—ĒEnųDĶ"{qł¾¶Ö(Ļ՟5ŲńƒĘ® „^ (R²ÆL ŅTķŚäaK©‹ ćłÜ‘ł›QŃżŚč£”Qłü\ž•ņvė=·4X˜[–Ć«l'©j¶łOb6Žģ‚ ŚÆƒUž-ø]źŚÆ<%Łó³R[αģ<Ė‚›¶ųöķcLžł[ŸQݶ“¢Uƒ¼2LxHŹ„:?ž3:Šŗ™HI<1ŗjņ=„ŚŅw"ā~•·“”«÷„ē1A05}¢‡“:ō*„l%ōĘCU4¤ż:K~ö®ĆåżźwĮ.õą”ĻXĻwųRŖ(ģ›FE“ÉŌq–/iūšėż„/šEKÆ«oŠSįčx^—ŃŲ¹0"܄Ш§ŗ_66PŠüPŗ;ĆÉŹ=†·Qm•ŗõ¼Ź€Ś/D¢ł{ ھ"$kķ÷›Ā†_AnI»„FB1ū‚dćo!_‡ąµ:ƒ~fĢㆪ˜ŠÖYĮ`-EņØ?KÉV ‘aźŲév#/ĆŪ›}YģŹļŒ+:V‡āö˜‹÷ČŻ_o—Ŗõ}€ŠĒ}ā%–‹ą«ø~ČÕ|„ż˜x C¾Ā‹k4Äc·S'©gœ&:N“÷J #ė±Źū÷Bp¼92£į¦}Ė$jˆnp“OŠŪĢZꄮ Ąßż‘Ņ£eƒœ“ümƒ÷£Ÿ&’‹Å®ł6ēž3y;{5²Ŗ®°_,æKļ2ž«ę¬r`ŪÄ»v!pīż®^¢n¤ˆzGuxdŒ™1¾£2ŠeŁų'"ążå° Ü_‹Æ²..fŪPżyĪȎ—ħƒÄfhś²A”ōĢxæ›#Ńģ‰ńĮ§nÆÕ©‰¬õµ_Ÿųš„ß ŁōoĮYC7*ŻH>ŽĆa簐 ńn¾ŻĀhJŚEĒqzOܳ‰#DŃ4u›h®ŚŅńHĖAy†7Ģh’ÄOŽ@[0<!öž(rŗ\{8ēĒ Fō!š»Õū× V0):÷‰PPeNŽą0£ń£—›ō1üPXTTaÆ švµČOƒ hņ»ĖƧzńxaĆqN;1t‘ļ>`źNJŹTØYŗ„[˜eIĒ#0Ró"um’*Ķ bü2 •L‘ogßQr%ˆćS&ØwčįFæģ©7ŌuHßę“­h®oŗĪ\/s’ŽW[{žX$*ńMŚoūérߓc»76ˆ†ŚŹ; ųz ˜t~/#§HŽõyÓ^PÜÓF b>”<8;ęᤋA*zæ·¤>śsH}óYģnĢŽX#ŽĶ—aB†ļč9zPu ņīNjŠŌ•¤ ²ćŃ!=Cp8oČ«]<”ĒK‡¾…ä.ŅŚjĄ±i̜š|ŖfšCk½{@ČrzöV~:Ipź}›W(ėV›Č½08óhe‹÷“簁óŚ«ĪŪPB’śĀ+ŠĆ&¶®Šč§ ®īOs6žĮв$õG/©Ļ9’å–e5ȵ°ķJÉmĖ{tušš ‚¹IĒb…9äš’»”¤Ė®MųŁs-ó‘tīŗ“N–®g8ć÷²ņ,8BX uƒBXd}éF…£*]ØDæŚ›L€ “3Łum•Čü¦VŸ#%ĒrhUŹMų©īžė# ‡ęūźĆsĢI;nś?^ƾķ?bŗŲnŽµŌ ZsŽ3żį“šœ1ŠīMÅn•8™°+|_Ł”Æ$³ŃąŸ>Įä£ćįĪ`ģ0†ē†bB˜Ū6Jņ€É%»15~ø0Óy[§šY¼C•M@čį‰ßtlT’mh©l„š¹ßb‰9·ŗ»ē®`̃pGf¦œ4E- 1āC ł ż7b’¢¦œQˆü“m?J‰8ī®ŚŌ'DWõیöäÅå^śŒMó‚-ƒ&ZŠ¢®]¤ż•Bl>mCęēfĀNÕfžuw?õ=±Iįąd­ÆĮ„ŁāŗĶ#ÖĪ™Į朏ŽJ‡ųŒjFõŚsMŸÓ0ōŁĀ5ņźNńsąźŁ?’EæĆÉÆ™¬?:ŪBEE)¶ –MŽŅģ¢ģxŪä„©M}x4)-8$¼2Īe¬Ōóuo8Š^3"Ų0öærµ7‹×—Ž…˜–LŽ8ÅżpaŪ‚GQęlJ?G¤ŁÜƧųšūņÄF³o»č+M•lØøß= –”WāHĢSń½{ bĮ„ģg ūPį_j÷¬ö‰ŠfŹnøīÉrĒ|Õ¦…“ČT\ķĘ-ŅßĘĻ™}d¹­å£ŗ.š„­Ó+°G㟠žuéóŠÅ!ՉāF׏1×C&$ŃG4N¦³*U#ó$6ē¬ŅwqŠPZĮÉ F€Œ1KŚĻö/1 Ų0eJukÉ­RœśŁ?£Ī*ta*vŠ­āWŠżŽÉ[K^NĒ’¾/”¾}ęV$å×åQxeKsž[M5ČŻųü”ĶcƒP§q„Š8åž4«Ńč5OŚOĢjČcă¢Ė»9Š9oj„`™’ķš_¾ČŸÕ%|¬«FY^æO0T„Ū4ōĆthe_ˆŸĘæ7n/IīJŲw©äĄ®…:jĪą½ķ7ł@×P6‡zu,]łĖżī%mvŅŚ:Ā7m…O¢¼RžØW7CŚ«\5¾»Ŗ:¤šžz°¾£šģnä]]įī~UgK?Z‰Õ>źu į}ź`š¶č"P•ē>|ļ ”ŚÕAŹé‹ Ŗ„fŠž· Wķ£–«f˜2źš]:eņ6}Ö4» eöåģc>SK.+Č<ŖēFŃŻÆ`ĄBUNli‘‡2­ŹHq²źĀ‡]cZ’}+şø‹ŃFXC!ÅŲP®mĪś}…ŠxDĢxlßō;¬{ ™6|TĪÆjM®¶óĪ©daņZ¶…†°ģ-JĪSi†£ŽÓfjč²¾ēŠ`L½›tČŪn)ꤔžLć™·v€õźįrØĮ¼”ŗ§ą ¹uxłĪæN]j*„ׯ[Wū¹ŅMłNĻWn{}·kSėA+H|$žģ®1[Ȥ‹8y9mĆ£)īćČۃŠ}¶§ Ŗm:µ ×õēl·;Éöøyøįx@"¶3Ņ诔ó3$E' üwqA<ž-ĪęĄ=DZ²¾®H@mÆļ]Ų°äbƒ:SÄęį  ³äi²[ˆĒšĶö~>6/‘XÉ--öMųEU"éį٭¬CšĻÆŲ…F:JB=ē}|o³?ø†l4 H”s|"ĖŅÜõņ囫į<„JųEõÉ8ü@īžŹŃ›õ ¾§Š+ģ‘üĒĶØ·ęlĪ_>`²A©„ŪsÄy>~ˆć?d}ģäĀ7ńņĖN%ų&’qV‰s’‘  Ź€—dbö¼ Ŗ®£.¶ˆøņķ9·éHņk)śÄ×Qwo©£‚ Üa!`Ü*ģśeRŚ+ז2)·čp[”äćź(Ūk⠜ś9ēP$¹†@U”1fmž’w­ zY¶P[óæPų?†‚äPō>l6ųŅ!’¢¶oņ[K5¹Dŗ›2ó֑³üüT/“łžFÕcHTF­įĖܬĖęč >—ńC‹„‹¹W¹łķ ³½ŻY’ŠĔƒķŽōƒJhmŖ‹Ēł~z_Ą(téœ=Ś h`Tlt›Ņ,TŖAUičvö–ųM7ķÖā@.dĖē…]1±«¼°Š„kęi2‡4BĒōqU±Š=(īi÷į7:³³zü¤ ,äUņ ė 2 ‚/8s 2§,!Ęļ30eyN)Se¢”ƒŽW&śL£6¾i[D1 銏߮JjŚ+xO|ŠrN5R†nš/wIŪ é›*XrhŪöŚ®a’ *Ź® ˜6É †žŒ»ńSŖ[pöi±žx,”>=§,eĒŌrHJ‚«A:%{ŃĄ0T‘ÉĄ®m|ū•ÕŗčĮi‘šI§WxĒ‹O¬`B׊sgīć5J f#=T«XD8„ĪM˜ŹI˜–AѾ¬¾hå&±Yį¬żł!÷R¾!ʋ‰ĀŚŽy…Ū²_ūéF  rųɆžF¶ré2{6Sꁶ„®s¦ļ.Ųāŗę"½b?“ŪæĀ8+„z(FۃT}˜·•™×ųŌ æ¢k>Æf:©£æ”]ÆbLTńõ%#沈J‘ŪM!”žN‚×å Rų0Y tćLÉÆbŸ­xĆ7¾ ­7QµÖon«ĒūA‘æ~“9nšŪ Ņ÷hŪ æė)JgŪėžš„žVmŚæhūXš¶ @~ņį¾į5»žeµģ¶2› z[–hQĀVąoФWĻĖ&&Ƨ„>ģBĘļƒ3X+"Ä#Š1b7ƒ7艿š 0Ņžż†Ņ[~ĻĘ9³ĄļūJ¶†Īč&cž~ŃQ¹ÓMi Ėćwļ”ł™.ąŌS„ēR~žt—“ŪÕĘ œQł«žä1ˆó¤ĮÉÆk<£pėxõ~dFžNßS‡SČŻ'Kęs5NŗšIxŻóÓ³‚_×v˜”³0®}H”óEć4ißi‹ õ§‡+e©śł"3לĪFć6ūĻw6ĆķŖVsŒ'Ž2xs…ł#Ģöć,1t„Óā6ʈUD{² 6‹„§lh÷Õž€ÆĄwPŠ„–B@&°IĮäÜ!ĮnĪć1ßįŲ0ĀV¼­!!¦r•ļFAÜ„Ǭ± K<„Št©uW72qIoŹæ'¢¤Ÿ –†Æ@ŸśŽ*„ćoō³÷-e|±r§[c„ &^Zźėq~“¹5ŚHr΁ÆæŽ7 üčApfJ·.w_ĘŹ„Ā]łjéÉųˌ1“æF³Ē”ė¾)3ą7ž¤ŹĆoT¹O0=3cQē2µŹdŁ-ß:6Q‘;Š„;„=‡ģqŃŅlXSFČkŽŖĢ¢ģČsÅӔךŽų6ų/\ʎÅ~'c ķl}5„¢K¤?Ón#”Uį* ßųórU^[X§§@æ)!­§*€éĄfkrĆī%ä×qœž(…9 ĖĮ?¶‰YÓKulāĶÖKVšģį‘ˆļkĄž"‚åžZŻqā_Ö|\«éø‚ČēŻī·÷YwBQäyźóÆØĮGɖNĖש©Q6ū¾PŠfOŠŗ£ŠĆFżīgqIü†œ¦,ćxÖ*%Rš%ݱa×»ōDŚo$ 6ćĻŃō²Å-Xp˜OB•RŠņŠ“:~Ō&o.)¤d‘¾!OvŃ©Ÿ6-QIÄČt¦-hSĶĶh¬/··)ŲĮåī]O+Fą­}­CNö1–ł*ŽÅHŗĢļl¼ČŲ?ķøĮŹ|*éw¢Ö»ŁK‡ c2?™Ÿ˜ W¦BnŠ?@Ėž ’ć–F0PŲ±™pkŖ`ć@õhR Ƽ„±š@W`GpŌišuqĄŅBM ÷0¦Ä*ØBįŸIŠj+ŽIx{ß*ņčøIś†@­NŹG†d°ĒÅt58ÕĒr‚ż{·³ R‘k”ĶŠy&ŃJĄK×Ūdć‹$»Ā9Ļ¢ßhüwUxÅ3uĶeöŒøJŲ™Ći­ŖRv/äB>x•ˆ¬¢ÆaĆ[;ŽA¾Śo#*ĢtöU­†1ó-ęśŪŽ”[;Š&‡+=@m¬S­½Ė[&ö'ĢĪŒl§–±~ӊƩbO­Ų3"2sn Raš©©Žå*Ēk1&Äcfˆ¢äŁĘĄ:WÓ+šŻÕ·ś¶ź9%¾8“ 2² >%ꊿ½œŗ ™šLŖ˜(/{æģš/1[óźÜ¶åŅĖ÷֟ŗÕ(ķč±ŅĘ5c–೦&uыü­UĪÄ^„;T”83FA!÷…*ŽČčl˜ą÷$oSŸ MįČ~€ūŹa’ęU3‡ī«Ž§’A=MK車±ę8 7żŽ@ū§* \ļ¾°ŒģGGć  Š}9Ę1źę¬‚½’ĢŹ{,qMtżv}Ł*ķŖėūż ¼EQr¹.hb ŽZ2N-’|Ż@™ŠoN˜ ų—Jo—µŽĄķæY™·CEØ\Tū„A3Iśķ„HĶ?°¹§B×Ŗ×°ókŻ…z‘ Y’ƒå¾| +¦ńę3œūI¬(LƒžĻī™ĻÅ¢MŖńxXLÅ,ÄŌn‡IÉAœ­łš„įYÖ)§ŗS”C³Ļ…*¶—4š?䊱r“x„pƒ—ņ°õ°ŠĪV4y²ni!„ēžxRo ~>„Ū_ʖ©¼iþtž‡Ó?Šż^±=s!¤Ŗxa$™šĄ•tĒL”g”œmonó|$”vŠßĻ•å@ÄóśłAÄz­ņnäėVXMÖu.–ß{ó¹’(£ßoxvēĀ–.Õ;–}OF$ņ¦ųu¾F˜…õŽKI:øPfČz'tŽič魑 u­Ån#ZM““²10ć<…ģł ˜ĪNK2š“õ8%8×ļłŻp3žüwĪ:ļ£ Ń5č >:h!ÆÕČOˆØ„=½ć¢ ³°?Xā’8A·”¹źš”Zįó{Ź-šĶ-{jņ«9Ö+)n$”ł“-a^„ĶCÉčó¤©ó|\–o«&Ė~¢[æµ<é¼£>ś  ĄĀ^RJ\ÓÜŽTN$|6£qɧłÉł¹ĀõĄ‚»rƒśēĆZ0ņķ[8~P=ŠŅ ö›»ūā}§ ‡ŒĆ¦‘±›„Üõ™ąu¾ö$?L"gÅ»™ż)_ń1ģ°2,©ŗ2Aµ-tlŚčįĘØ(v|Ž=‡B˜M÷ÖżźFŽx\$r†K°8iU)‰®5ś _ *ĻļLĘā+„>āĖ(Ä· ­lĒfĻÆĻp ¾&lķ?C– ’0­0¾ó‘„q{mAScÕł MÕ°ø~1qļIVWV*!oÕ „ę@Ɗ%’±(s=}sÕĶ„_goexø¼WZ '•`ńäæMkd³Š÷Ø$oļP",G¢¹Å|ƒ¤¼åŚ$įYåZÕ+WĀ¢uó£Ē;.b0 qߥB¼„NqŒĪĮ€6Śći·Ź¾Ēōč—Ófś6ļż…¬Ž‚éÕ[³Y‚†4ķödqń/'­ĆsįC­ ¹ŖŃ§°‘šosģ@ĘĒgBĶ™×<õ\kyr†/hŚŲ&hÅõÆhXż™–Ó~3“™}wk3ČūMJ×&²49/z6µa|‡“›ū¼nš¤Yóm6(ć?ūxW7øÄ-HvõgBŝīPivVānĖ£}Jn<ćØéõ5Ē‘§˜KĢ΃ęD꽑œąŽæ=5myŸüSH\”²āh}  ’ŃŸ—}«ūm²#~‰ūūūV—›yG ;ö¼VvšP»NZ‘™-ćł1€€pĀ}ōŹī"GŲsI¶T@ Õų[£P˜m­5÷ƒFņśĻ¤ŗŚz 5|ŖO‚°†"žÉ=‚uøĖ³Ź”bž«Ÿ_M…łwœš®ņ>ŠēŸ65%«NĄŗF”Ų×Dˆ" Ī'4߬ Ņ|żå³Ib¢Lž„Ķ@†Ū~ŠÆ1G€ńްozĆYG‘ĄÆĄD]|-J eą{Mxz’Ś’ė"“Źšź&G`žņ¹ä•=ZŠņ町^Į·EŠŽ?9 ån—/“².ģæŌ£ų1cuśŗÉ¶Qcµ`]ix9·½ļ ė@ÉĒäó}§”|SŽĪ`‹C¾f¤ĢSŒ|T† QeÓÅvni`āņĄƒÖ°Dqq¬Ģ[„ᕨžņX՚¹"rX£xb}kaė­Ę×ÓiįĻ]]²ąŽ“te֏Ī{C_lĄ‹ƒ‹Ejq’Ł[?Š”o ²bõ+(õŹÅ =Wų£°łÕź-¹zZ%z\wåf(+.U‚‹0š k)ĮżU žŚļKWI4倾ѹēõ¬Ė:…ńå[R!ļļeą.¢-žYXųĆšG_Ļ`:Ēßl F,(čć,4+“ݶC|ūA@‡ēÆ÷^Ķ7 ékĘO qψk†4*ś¶Īģ1“Šq/ę®lеæ&#·OžČ“ULy.ĪŅ%Kģ>—Ź y‘TÓHdœWKƒsŁĖō\I“xGrĖø&;!kźä®.ŠĻüņŖē!ä‚BOńśÄģ“3-„ĪŽ #‡ßioiDU…‡µ‰ņ³^ȆNjT7Y Į ‚³;ŪeBøĮ²½Ö5ÖkohwŒ¾¹v¦m™Q įųm!…ŲŌRSÕ>­qū]{m-ŌE FŒ\³ŗ ƒOØxśģFˆį>Ö]Źķ Ś^B©“ū:åMŖoŹ8äśye°Ć\öĶyČńĻįV Œ“Jź2’Ņ5źU³ uĢ™uBÉ&V̼ éˆ)2Œ™hńrę½‚SKlŻüÆæ“ć&{#2-ĻĒÕT,X€VüœįA¦H²M”üX£×/»°™?;NVBJļi¾£ŻÕÉ 1"Ū½!--Š)¾TčVYĒ®æi‡iė›Ķ„$ś~Ų É¾µ“‰ĖEZé*E ŅYīŪn¢™Fū—C“ßq‡5’Yć…1śUDj„T)R®¾p™P¬ZqłBš„ČLź –Õ£mļ|1Æ`Œ„ŽŒ’™JōޤŠ"f3ŁčŪųšģ£ƒŚˆ$ś±ęįŠņ[<«°‡s×ōėö%”uXĮ5rĀŽņ"‡+ ‡Ė§TPF&”VŌ7ķ'cŁŹīiyĪ•,+żQW¶Š‰O™P¤d=åĪ^-uҵ¹%ėń5аœjg-oTš……¾ėę§ R0ž]Ü ­hm}J#³J¶Šķ…vĒRĪĶwŁĪD ŽČń…Ęg×uUSLŹk±ŲõēœmhhxŚŗ7jĢÄØ…±pšūŌćŁÖÜ枙Ŗ5e=cZ"›{ca(„iæļø•³ōéŅ—Ē Ž¦ÖHCkœ˜Ž„H H_LŻ1Z/FŌ§¬~¼nv ŠėšŹæ"¢RüˁØ7ĻQ̌+ČZG ^”Ž9„ŹäŖūB(]nC$HŁ„×iŖQb¾µR9y"¦g²BŸÜcįĮ–¹k āzž‹e¤čGŌ3”żŹ@×C®›\¢IÆäŵ鄷Ā! Oøb yÄ@µI·¼§Ó'³ŽA¤«•]ȋ€qåģĖ֕S³ģܰ6²x8OEż‘2¤žÜĖŗ¹5"¶ÄĀ2fś–äķÉRG5-ĆM_ č‰ī˦w2Ÿ\Čpōö%²ęri6ņ#©ā&­D~qHÆ]ŲrKē;Sl”!E iŁ»Cj%•‘üŽa×:“óĘŖGŽ–Ģ)Ÿ¢æk'Ų;WŻ@ļ–~ńŽ&nBļģ"byŠ»ˆ.ļ{0y‰ÓƔƒēī&ąPöy‡4é ŌŻC»œį‹ˆ÷!ōxŲś:œ½z 2ŗīŁÉŽh!lķ [ŽDk‹ŽĆ2ug'fō0ąż¬§%l”|ŅĘ'CŲ7Ąō$ß2Æ8± ±06DóĻ¢fŚ„k®ż#PŌ%ŚÜÅ5‰nāĄ™ī ÖĮ/ā±Qük”öŲ”æYöR·£ƒ=lŚĻŹā+¹©AŚń”ųt®:ōŁ”Y?7éŠ&)īŌh8(«ĮŃ#‘`żō»ŗ0)u“œKķZ»ĻX±YćęRć4Q•Ŗ\ŽļäJŸ­~'{ż«™ųćMl--ś ŌŹĮŃĦX!’ų, ‡Ķī|ƒq1ŽAåi!0¹ē3öXe:…ŠŒKŠ• .<{v—o¾”!Łdt5É~ŌZtš<Ÿā“v>όU\śi?&^`±"¼¼ƒ»øhD)ļęrÜąŒ‘-‹…?–.“AH¼z4õ_?A d\."ÜBK#‘W]cxYäĘw`ŗū"²wŽųѳܚAg+÷āūb Uōēą¬ŗ7Q7ŸĶŌĖts#suXQ`¾¼*8 ä×Ū׈Ö|KĀš¬#]§7ÉņźĮSPR‰Ę\ «Ģ1QK€|)ćķƒą„×Åć[\0›`£°:Æ ’ŒM–BKŲy­Veī+ŔXfüsš( & °ųt’cm)•}ż‰ł±Aēøäįüųó*’,7N$eµŖaUÖ·wŸ'ÖĘCŖjcJg“*Eć(L›Ś ’H“¢ėė “Ż0Ŗ™}­ųz Lōæhuåń@mk”õæ+jHg;Z–rDˆ‡Ŗ|Ęr‚Wć9SB-æµ[}‡{s>pÉy<½6` äXNöŹkM!£Ļ#‚É#(ß_Ž9!u>Y3į7Œ¹Æey€ĘžoĘ®G;­učŚR O3vr™/†°Vlab޳.oc“š‘…˜fö ćœĀlŗ4vsCųœE(-‹ą¹„žīŌØH0$•¶¹ø…øŽŅÜĶ'Mnb„K×lõOUĒ9/ø.Ŗ¤ŃÄGśV˜+p‘npĮ¼łń“‡…CŌųŖĖŃō‘²$Fł¾JÕ57­tY:{·A§­”Ó«µžC@@Ć©J¦ķ°1’~«…ž\ėē¶ŸÜQ"h:(””'¤ZX©1ścā^5ʁ ł2Č2ULĢ·j¦žÅ ĒÉĘ6ā| ­wg3ÖŠ§ JŚĆ…|ö ŗxa岋cś°D]ÖtMjʓĻīMžÆzb—„£„¤V$ӑ čøVŻø+³42zI(«YŖÆ°„“›óJpō;‚–ū¼½ææ ÜŠ:¾Š½=QøÕŃp?AĻ:P­"sŹG‹S„o’Ęd¹n”źEŗ`ć:Ž“p*†ßU÷I“łõ<ŅCå¦ĢŒ$¹Ū”W†'›&ρ¶m¦Ķӛ҂ŻōęAŹnÅŹ!Ó;āĮ†iŸččž*Ń»hĆ])ógŒŒ(ÜņY!žn²[~WÓ\ Š×±ą<Ł&“żŲĻ҇¹K¾cµIĄ·ėÕk2Ö̶†~"8ĢV§%–6 5ŗšź(”9ś™Ķ×m{Œ§Œ±ˆjŲf£‚†#fÄō(Ā÷ÓÆj.*%¶Øõ\ź5×¶||üŹ/šRJšāQ˜¶/ėšĒI ьsB ¹K¼÷N±ļŃ쐤Pé"ŪŁņŲ¢S9ÕµĖŚ-󱵕}€äƒUa†ŗO_ Bž·.*Tj8ģœŃ?S“ÓōŅRį¦ĻnqŁÅ6śŖŹüā† ō“7¾­rQOU«19”½§ńqM÷ !Z÷ÆņļŌčŖO*˜6āBكq-ØāS+g ū–‹jæUŪFFˆįjw8čŗČS­8Āę!!›© _kÓéÕĘˆ ¾åpTR¢;†ūb’&²»v„ńƒt¶ Æ"·Ö$ķEŖEu—b-‹<^Œ¤¢×ņø‰ńõščjn8S”ÅE>¦“•-Ÿė„µņ<™P/Վ¹R„/«K±‹4‰*Žż‹%Ü·²tŹ_Ż.»»¢jwsŌų(yŖ¾vĘgo˜!!$^ML’tgF{4ļlD;ÕēŪ—oSFØ™“(W ÉE¹†äd)AŽĮʃ…±ÅŲ„żp›&Š–}'܆‡CįŽõ zB†‚1#Œ)b>W•ō‚v2 øo‹¦äĒō˜ŪłcO04ĢŗL'ŃB7XtŒÜ‡4 #?‡0ū ~‘/„L‰lz >B#wG•X§ĪĮģĻipžmļōš:Yü’C_\Ķü:Š`’;,°ŻķAÓyє)Gc¦“‹IvßYVš Ō(u'_‡T€āCŲØ—’ ĻĆpŽznēQ0ŌP)-¶©”+oW—frĀwģc®7ĆVā3—Ņę2ó•“5ÖX#Ę}F0Čé@6ž„]}b C- B­Jö:@D®f^ĻK xĖ:'v‡vNī©uÓ|;éč×R4A$;ą]š`hłŁDŽóŅ!ŚwcīU /ĖPāqģż ĮˆWrÆ0WÄ÷­ÜĖ€}«9ļ0ķ{ēÕōč(†Ūd’¬źÖÆēŠn£Ÿśī¦ÅäjÖ!«só%‰” &ŸVC§eÖ}ŚÖE‘›źpHüÆ8ĘŅģ ō.sÄ‹k—®uŅņØS ėAī /qäΜ¶!ޚ1²O½ÆrN\7Ä?ė®ąźX5åZ֠Ͷ$¾Æ6*_Y¹C“¶õźQŽ“ā“ļÆhFe¾©gõ TŸé¶Üš@»ƒĪł… ~ˆœG”„s€’ФK™­üéc^qdvĻ+’žĖēÉW›Č-h€ .½7‹ÕR»CåXZ!0˜š ŻĮ­]¾½g¢ę¼Œg{h€aNØ«Æe›2š9XĮ.5wgę^}Š?Ć;cČ“bł…p^å]ļßDo†£R#‹vNS^7‘jæzu£&ļ®vĀēcBh‘!{ž/æ.Ō]µ;Ā)•¹·÷ ¹ĒX½äń߉śKÆeu¹ļč)|†š“ź’|Y¬¢0$xļ9<ćŖfŠŲJŽĶy{/UK’Ith~©z0¢NyI;o¹ Ę#/$ģ#Æ)Hē(ö+/}Zbwū9x…æq ׿ł*ĘčR2“š“wRfš19āĖz?Ü~:ß·’KõKŹ^bøķ×Fv”ŒŁqG„/®T0_L’lųÅ O°ą&½&Ø'?bžaÉ[Hp1L߹Ȏ0_ƒū\䉉ĄĆtĒ{“ŠßŌ‹ŸŠĀØ(ŖĄ­bxuGǵTßīłnźF;e,–ŽhÖ¬1¹Ŗ®7ó”;3Ķw@¬Ė¶#<|&°4‘ń4& †Ęߞ¼}Di›@jN™‰RMÜŽlžé×RŅZžY`luYŚIżåT īŹŽ2„^„ģö½÷‡Qų>³iĮ‹ćóžJ_īN~M‘€eOn·µ–š®ĪØĢ ˜€yG·Ę‰%–ųZĮlG“Ó÷›vĻz4 ē#3‰ĆõÉC#ų\ōöoƒ8xL·4RßŅ·Ą/7ŹM“ÉȦåDĘĘdOœ²Zq—Ü©ć:¼Ź.`ĖÜ9īQWl|łN2`„÷`7ĖKŚåļ-éæ«¬Hŗˆ/2ƖļfŽ ŠDµĮīų„kÉØéŗė×ģ(Åó֋(»µ# pÉ ±nj®ƒ ™Ŗµęś¾­FĶA ¤ī”ÕEōxߊāP½nĄ[ŪĢ;Æ żüÆ"Čø;˜X>Ž\µ¾åĀ9e‘ņi„<Ķqŗī§8ŌøżŌćÓ'tźZ1<>äµ}* ŹŅÅžÉŚ÷šm™Vef¤#ƊŅī•š=R»+š×Ü^XŅžźūĢф”įi½n cspŌąČ1»lÅ×ŗƒj`ėÖјČeŗī=¢©Ģ9ٲŒõ„J^Åw2Ū\ÖØ™YĆĢĢź=™†•šž‡Č&ö&)<¤?kūe’iCóö×¹Ķ3ÉąÜķci²XESÉĶ“1¾ßhˆµüÉŻČøi¾-ŁAß×N#ė±’ėūÄD>”N’ŖøjÜŻwKč¾V]cqåōķMŪ§M~Qy1ēiø÷#Ē“ˆ6W¬‡ķ4z cŠ'sA Ö Ü2Å«ņŲl"×.˜ŒĶHłiœ4ɐ$ł/ t$8±ÕY3ųÅ—Öź(NuRž;$r# 'ķvF&4_•Ü[垻&č&ē®ĘėBšjq†×ŚkŪęIĻM§MbÖžÅi&räōqHXž‚ÖĒ—6]66™$ӂmUXdĶČ÷į“zéÅĮi_äńõš‹IkŽOxŒ\øósý8ƒõ+>SŹø( A½n¬Ų–žģq®œ†–•æ”Pjž¢SŽńhū•]oĖ&ō>mcæµś! ÷m(śZ(éOBhqĪw•±÷}OTщ‚¬;DchĶGܚ:ł2ǬĮ|¤7Ü.u 8{/§‡\¼¦]"]Ÿlö;חóŃTYO%ŠZ£Ē.W¼P×MYŠZx“†+ā…äß]•ĶdaŌz?/drkĮ_ļRӊģl4į£|¼ 9Žég‰ĢTi€3õ‹7…Uƙ͗Ą0śąŗśķِ Ę’ ždó†o«,㹘~#Kr¦FaŚ ¤_b¬źJ\į»üŗĆŲkBoŠCńKŪvZ~9sDā¼ Y}qĻ^_¹Ō€O^Oœ“f8=1§s‰2,:ūĀÓŽžyl‰Ä Ø)ļ;śōóYN²µĒ€ČIZv©³Ū~ŁVÖń8^ī2Ū,u¹ećF\({åĮļadŗęi3 jN²LM.Ōõ>s²{ŸŻdl°±T/…«—(8W·®›źfJņC¶.ö&Ȋҹ‘jÄß™Ÿ*2¶(Ž„lņ2”ä|äņž0ı+ Ł¢łZŪ<„Ŗy Ų(šÄØĖöa{¬*doqČ3Œ¤G~ŠŽ[ķ±!¹-Õepj3k…”’SŻeį•ńŌŖÜĮ×ķ±õ²:sDÉä˜Ļ,(“GéŗMEó*µĖSęņʐ¢‰ ŲMŚūX¤Ō<©ņm%U˜rz©£®²-yb[ĘłćV¦PĀž€ŽøŽ»ņĄ”¼•If4”‚}3 » ¢S$g;½LN…¬“ļK€‹ŻVŃ _#0˜C.Ŗm>}š°ÕŁhĘ`² ƒ¹)ķūH „T¹rĆėVŠ ĪÓ¹2£3› {J8Ń“’°¤ĪĒ"0óG±°’)sŽFˆ;{ŅC©ÜWޤ|6±3Ä{_V·RD$„;.zcĻ`k…j|?*IpūKŌg•RĢĀ!bšj·ģģ%R\\ķ'Ī·¶-Z9YĄ»A|ē–¬‹ē. °Ų”U¶^ŅĻnŸVn±/ÉømHzŲ‹6°d—*gŒęSš Ž½½“’NJGUfÕ"ć(¢±š!<:½ćp½„_*ˆ ņė­BØEįÓųś§ōĪ 1ę¾śqZ/€Żq‚‰L[??»Œ0Ć±Śš(łZ­śf”£VID”aļģ^ņRū¤jAnsęĶą’a°M›Ą]Ś9Suŗ£Ą|“õźũY”{Reb”Ź¬V×[ŁŽWŗöwöÓŸ$Ōē7© “Ž '“%é©Y“¦&v)©—G’dØÅičåjĮ½©|½:ļķgóó(ŽÉv£ēČķBšžBрī²3Ó¹Æ7„&ł¶ żĆ{Z³ŗ”ā÷†eOģĻĆ9 )+SmŖ@¤¶©°¹434¬n2ÉŠĆr3ż87± w,č^H„h'IT‹vCr:©ŅĻfØ{øŚš8¶é7ī‰=iWMķftŪ 5ŸońӂrUzx&vėaQŖ½s®»!µ{Ŗ2•ß•N,Ӑ«!T­.X*×ęĀą¦ŠßŠhslÖĒķī-Å÷«!]_¤*—æ`oĄ_Żå Œœ²¹³§„”fł~Ėf¶Ņ:Å32ų!ŠMśƒē}8(^~™IC6. ›ö@u~fv7ʔ²ƒ“9DT„ŗŅZFååS&ót Ēs³°ī ŚT³kē{X„iKH«ŌNŗd Ÿöœ¹ņ ’wē*1Ęču¾eģēt[{­o1ÅÉü2IĖN@ƞ”­ś<ŃäkŒ³č‘ó¶ŅĻ̓‹’—HC»·[ēŖėš›Wj3Čp¾5Īv¹ŻØrĢē½S¬|ļSşąĆKgx…øy‘ĻrT)ćQūAŸ½?]ö"2f é³Ś­-ø« µä`­-B³ļnJ%ŽväČžŗńńRj ÜE<1}؁wАŹa7yOńŽ(.Z“gć—mGoĘāČ®Lt‘łnŽĄū™y_ źk¦©Eµ‘"jeÓ^8 ķü1˜ĒŽūs”ˆŅXĒ<æĶ§żŌģD=$rėóéS„4©0GņZ³eŁYoėĶĖ—Ś41k›qA“urS¾DˆšłÄ÷ŁgE$ÉlßȏiCŗģ"vē’ Hą”§Ib¹ÖP‰‘/¦¤Ł«źaėü ž1m?¤c=–ÆČL* Ł®Ųg~}ōD‡]÷^1.‰`‚s„ØŖmøŁZi%8Õ!ńē»6Œ¾Z„u¹·ĶTKĄŸo%5ćąF»ĀV2RŸ`!ģõź4ć™b9°ēBžńęXŒ8Ę.ꎶĀøˆ¾]’² ūj¢Gnį%–‚M'JO¬š]Eŗ)ÓęĢ«@ +F'iƒNp5«Ś1ɝ˜°kiA{/'—•Ņ7؍…7B=!¾½#ü.‹āø-ć¹Ź„¬IÕ'ŽõˆÜ«· Ä’-rJ ō†ńą,‘ĮIė~Ձ¶æLėD ŸŲūŖeą»o·ąÜzšüseÕ½‰¶†^׋Ōʓ(§xdéĆŖ£čŸ½Õœi[½äŽjo]˜ækB“>J°hTļƒ‹km”N:Eč®…ź5_ą©TE>“„³õ(Ą—×®FH†ŽAu¬kį³EeˆµiE› |żFååÄt!X4˜ĒhĪ®nHƒ§äT¬_l[ɲ·¼ķźCčƒłš‹Oš ĻÉ÷Ń4q­ä„:įz‰ -ŒZŠZxbĢĮ0 dNĪ“4pɇ)®ŠŹ§vå+Œ†ŽJ,Žœ&Z÷LpˆY‘t’ O™‘(,t«nėq¶(ӝ£`å2ŅŃēĘ:ćŻ(”ż®°&¾µ±.«Œ©§Ć%‡źųųŲ<"ĕFLōFFA)ź·ĶųŖ‘¶(ŠŅ3kŒXO¹±Ōėaa6ŲŁe¦“IŁ:Q’W€ÉĄß“ó‹ \Ū7°ō0¦'tؐ=b7“#H¼HVŪęzŁr©~wõC+P žƒ4Ž1%ȲY°‚¹ņ¶Īķ]ĻT Ņ‘NÉc[EŅVčB|?[Š£‰C8žĮ¬¼C<(+µĖ÷Faµ+¶#“© ŽŃz2’uIŻ ½Ģ(޾ZŖ“Ŗ¢%BY 6¢BxPėh uźļˆœ4eņ’‰-½2y²€»˜Ž&Ē[•;HˆEZķ­’§„RäĒD>™\ećŲ=,!L‡ć‹Ėøóŗ8;ć§HÆxæqeĄee īVŗƒrhūĀÖ;ż4}g]ęże1d”¶·¼å;vŠ51ģŚvŠ«7Ž]üø9e6Ŗ]^…żŌĶö›’ŪPt­ŽkžÓ“ˆJ’‘°ČČ1¾r‹B™ēą^–2KąÓr·IŽŠ×)÷Ō“ūĒ·D|p¼vģĆW§†ŗhk|bū€­\īŚļgü#b‹ž)ܲք¹ž\Ņ9oŒu&›8@%é\SAӃ#“YŲ”d SĶŚÕÖ}'}†‡ĢĒŚśĆūėżFrZ£Z²$Ē·¦žÉĢNė“$¾‹÷·wśā`*ß֋Ö¦ÕĢ63€ ģCLøŌ¬@F1Šų“ާæ÷(K>¬ø étā ¹EhV5¶ī|aĘÉĒńā=$Ė‚ˆ-JŗdĒĮ#%X¾“ĻՋÜÖ3ĘģŌ…r"Éx1Ŗ®T·YŠā./šŲ‹īx·鐓iC–CÖQ²`ōØŹĀąŻ+™…ž ݱėA¼ģ.FŹQ7[Š›æ$Dš‹­ĮµÖ’Ėlö€énA&Ā@æ@b}'a/:åšÜ4$ķ9Č1ƒ ŒĆ‡H÷H¶’±E%QYó¦L,ßAūžFģb` jČqš ō~ļīE,¹ ØC5öÉ"DNŽ3śOńmłrĒ€HĪ"!ŗ‡£cD—Ö©»0ō~‘Oč%£Ā“ųZč ˆÖs7HŪ" zõ½ ųZ¼“xņ“‡”_~…ˆŖä  4šÜä½FšÓßµ§¯þ•¤ńŗƒĻ„ŽśÉ«ž»öIęMīś?3@ƒ„P™‘Z_2=Ÿ \µĀmććŪÆ¤ˆār 9xšīfΘō?ź˜kā0Še”ĆђSÜ„ro@—ˆ–ø9Kä k™rŽßĶ×¼„¶,Į I*†ž±›s-ø.‘.ɈŒń˜d7]±¼™Ö`Ė÷ъo£ GX&/Šr@ˆś‰µ’–+qiŸVÖøn+øĮOņ1P Ļ}ÓÆ@łŻ¢Gļ•“¾†wʗ™aΘh”-”š|ēx}Ü֞z Č„K©’Žī䧖a@mŽ$FōNgÆ s:E‰Ŗ÷øŻĢ”öŅež>'˜ĻmDĶ?ā‘-)7Ź–=ģøÆ"Xkä=HY\å ɓkśg0ĄłE¶Ń4ö )H¼—ž&’]k4Ö /¢s”5ŗĻźšÄ Į½YŠ=õ%†K7āš59#RļJéŲn4ÅWšĆ€®”2ƒqo( Øv@«L„«Ā ÜS‚¹Ü5Ä %›0¾KĄ Œļ„Bŗ(¶VŻb 3öf^Uv\°{æŁėdN#†WCīzMgŻ_™ź(õ섉ŽbPš wCŁ„$q…ēœż&BT’©AĀŻ aQ.„U ‰3+d’æ¶IįfŅC4 {Y=”ÉĪ$čkK‰Ŗ"óøŃX:9–o£hÅŹ“ÜĒŻÜ2õr~Ż9VŽę˳ąMĪ·²/m i*ՑĄ¾ŖéO"6=-HwÉĮH¼ēŃż%I挓Iwf–«®›¦ų'ŒlH] m¤>Rcēü~6“MĖˆŲ(q»§+\ē%āfŸ¬ēŖ§HWā_¦ŸˆyVµ›™©żķƒÖ¬µ“Šq‹«ųš’š!üŚŽ˜µ?!&ņwąųČ[<Æ~ƉL,ļch˜õłø &OŸE §~¹|ręÖN-_z*y‰ŪŻća~\÷m”t5ēHŲʏ/ōó•WZÜ#QąećŹƒBγūĆŁA”Ÿ &MaĢæ)wŠc.;=`Ę÷Ą4ŸöźŚE€%Gżø~ö[±6Ü·‡vQåpuĀßōłÓ³ź'¼ŠąŠķ†}7ÉšŸĢX£ÅżĖėŗ5&ćČū*ŁoøĖ‡+¢’§įˆUøŻ9Ł»¢;Ęä„WKŌäÆ9?Žõ^žƒZ+°”¦įÜļuwŅŽDf*i1%‘µha MÆ3›1˜{mõ²†Ęxēc`‹?·‘²Æļßõ ‘ÓR›$CüŚ‘} ÆmēdńćØÄY’č0AV°V8"unš„S Y2\ŗ” %ŁÜ6’,Ę˜w'_؈s~¦£ēģUĻĆ +K§„LŖ `6‚‰[9eüÖ­Sšs…F8§Ŗģpe /¹ż‡ļ:I­Ūß~G©ˆ"›Éėōæj7–Dīų¹…±ĻÕ'Åx”ųļjŁ7ņĆŽ@¤"«Ø{*¾EččŹY³“u‡’ēp:=ŸRķĢRœ^ü©5„•œ§ą^¦œĪĶ…čP«uIs˜Õ˜f¬uÓy pš-‰˜7­rJq!Ž”g¬ŚQ½ź£OHvňŖHĶü@ (·“³|¾Ą«×ŹēA/A¹ozÅčv2RŲ„s|Ų[Fµą¦ A¾™³¦¶Å{cjčEļd”Ć”F…tÅc4Į‡³”ħœĖ~L_§¤­’Ō9¶².*|õŅ'¤­Gb½ÅņYTłg[\ā[s2•3µl„ü\ąŅ$gŲU”įįRr^ząā}3WāŽsŽ:µĻø,\»TJ¹#h{ĘŌ#ą›BŲö,Ó*ś-ÓĪ_©ļyg¤2Į Š`én꩎|é—_HHG¬mĻŸ„†ž¤ņü?0…cG§š –vÓnūW7Ž™ó ķGUŻŌw#tuü4įDż!ē‡A=8@‚f¤õbĄˆˆ‹ƒ[„!ŠČz`°½ėóiMv'3rŌéc„•ł®Iłė¤Ų›Ó1ƈŌTļRKBōżÜ/ Øüöī„ćĻųœ0@¦‘q¤e*„Ą„‰K³æc±‹ˆJs© Cx5ÉT$Łå)õ'dģyŹ›{ ƒ€†0ąŹ2 ˆ!±ŁŲ¤÷;n„äĖĮZŽKĻ z $BJ±ˆ*.‰¼¶äÅ>&{ œ¬6œX±Ę.¬ę¼·ŖČw‘ßtäĮ˜”cĒZi.uš%®fÅ=…˜1i÷M©kx°Å½9ŖM²9bĶĻīZédī}ÜŖŲ-QgפĒÄOÕĮ$U¢jēåUj?‘!²Ϛ&kć°{ź€koc؞ ö036Ō· ųbc)§#]{ėČ!2¦ŁöZM;Œę˜A¢ł5sÖ &ü”ģF£rŲ…tŗ\Ūv†Ą60 …zā®Ļ—²;ƒž©5&ÆŽ—CśŃ}k‚kÆ6}÷^‰`ĖĘūw±Ā¹xbßć—ė‚¢aw?¶W“1?łb÷ …Ö2ō’elvž7t;D·ųŖAŗŠ}4‰t¦FĻ:÷eĒ9r Œ£dÜīøń (YQŖz·6—SžK˜MĻX(Øæ„†E·ņš€F^w&uQ­‹×»lų|Nā¦ß5“¾·×4gAоV½ņÓĮģ”+Žł‘mwÉG®Õp’4”ņ¾›˜ 6+׹Bå ‘ ŽiCŪ·M×7?$ņ’‡žH$ Ķ#6T]',ŸŸ²ß€n„•Nuņ:_–^ēN)/ssĀ”¢‘ż%éüā\7vZ"ģ<½åÜ(ę/ćRʼnOs 3\’uʧĖYr>[FŒ,čYŃ©ųŸEćœb>3B³0ųĶRƒPzaōœ QśĶvÅĆƞYŚ­W—G9Lm#ŹŁŸčļŲZŠ®Hx=«†0Ćį䏔I>ƒ ·0¼ÓOt`ENÆ4šh8v£ü(uBĶĶÖĆaT6:ī Gą>q zeåUrIc€B WX#ĻaįņŚ”„ą¹q…²ShļŠ8tn jĀ2»©ĄÕ—‘‡žÅ“1­üM“ś¶?r Ń> “é H·Ų¬o} CyMńćw`3%¾ŲĮ³åP\™öā óż]ņsĢēš/ŗāŪ‡ųė©9¾q²×¾Āš4H·ę!Ū¤`5jcŃĀAū„ćk†Ųt@.§Ņ¬|ł¼ĢmUXמź%+“·!|™«vļ˜Zr²’/zŒa4Š„?`Ęqʝ,ēŚ¼6tĆšzHj ¾z³)ŪHņ ŁD‘œą®==(vśGŒFd ł/ ŸģcīüyÖ*ūAæ|¬Ćķ}ĻY”‘”~6DŖ¾D=Ŗ:š)_¼ü9~5AĢŒweŒöE‚\qo³cž, žŪÆŹ‡į°…¤ Ē ¹·h ‹)ó~`¹jŗÆ —‹Ī GĖC¹šs^Hl³XÖqäsŅp( endstream endobj 815 0 obj << /Length1 1618 /Length2 3556 /Length3 0 /Length 4561 /Filter /FlateDecode >> stream xŚt<Ōü”B$’YłČ·ģ™Ģl²W878ĪŻ¹;{ĖØČȖQ”)$”²CŃ&›Źž™‡Œņ;Śß’’ńųż÷xÜŻó5ßĻ×ūłz ń›šƒŌ‘x”GĮĄP%@ÓČĀ&@”Ņ`(TŠQHČCĘ¢~Ł…¬PDSś+B“ˆ‚“©6-8™h„ĒśŽX& Ąä”`ņJP( …*ž Ä•-ø }<EbŅÄü‰W72µĻÆæ€(B €)*ŹKī¦źž("ĒFp²Ź“ŚĒęxEö’§„ØŠ™LP‚@|}}ĮpOOt=%& ųbČn€Š„"ś ĄeĄī‰śI Ģ(XøaH?ęx4ŁNDTƒ@įHŌoEØŻs=CĄ„€Āż6ü üĆ~—ū™½SƒŪM†#xOēĮ¹h ˜č‚É~dIŽCī±$<5īĒ`į.ԀݣĆõ³œŹš'?‚ˆ!I`»Ć²S†:fmRļé‰Ā‘IŒ;ēÓĀQźÜż!?/ׇ÷ÅžBh ‰Ž”ō&@,q/o”žÖĻŖ‰ńĶEd”P؂“4€ņP~7ČN j× Ū1S9šM„ Ę QŌĘ@ܐ‰ŽØąĄæ’"F @bdĄåŠĮ1ž©N5£Š?0õž‰?ĄJ• €ī|~’;GUĆś’ ß½bˆ†µ…‘¹ÄOŹæx? @RŅ2€¬” §( ’[å7’_Üw­¦pĢϳA’ŌÓĆ”ń€ā ŌŁż¢įóS¢?—F ų·ƒ1žŖf śGüPY(‚śū?ÆĄnŹ’Oł;UžWń’÷D:ŽXģ®_ōGĄ’ć‡{b°ž?#Øjö&S7ĆOŻÜC­Q?ÖŁ…Äx{ž×«G†S7DēŠż=H Ić‡BšbČ·]Åüŗju,‡2œ0;ļ ‚A”’ńQWįA}SHŌĖŚu”ØõoGmÜY=)Y9N$Āż”T}IÉŹ0źŽ"Q~»Ņ `žLMØģ‚4žČøs„Šņ¾cśā7Ś9ł„Ō_P€øžeę/Ø@°AjeĻ?F­Œū R+ć’‚R„šŹČQU*ų掣6#ż©!äæ µ™ļ(Emę· ’Ā›H¤¾*»ź¦ĪõŽ}ĀP(?‚±· PŽt/‹¬žZŖĪė {#%Ćܲt‰Bo=ŖĶķ3q6BSe}Y:?¶G½žĆxģśg¶©ŪŪ•6PĒOA™±J½åÕūŠ.#’AļŲT7fH†ŽRćuuvĪŅ8¤+Ē|•Ł _Źé1NIÆÅ±Īģ©3*ĀUÅk÷ŻęˆTĢ‚™hŽ\Ž=Ą„  ĶDY£ž]S¬ń@½ćC­ž iéō›/ÉĒu¦Ö3›_JÉ·ōݕ܋Źäžf&P²§OeL6Źń8æ:„Fµ¹6E#(Ցį¢.¤W¦‰…2 “5ź·īŸ/y½āßf¢²Œō±d^ĮwZ®qP€¤5–Źōš/ ^ÕL[r3 ¤©5ÄīÕRÕµ{n6²ĮĘwu®rśŅž²Ā†»F“¬Źž™#f«Č²ŗQcźĆ˜\üŽn/érÆÓ¾Nč͉Mxq, y6ļŁSū>9ī):kšč’Ó)N=īmAÓ£cĘĶń••²hĻń죖e÷øĆ°–rŠA›{Ķ:ś3Aõ…jž,å„Fƒ&EńŠš Ā%Y–9Œ„Īī:ÜB9Õ_27!ĻW·ʈ<^wŽn¢•čö×,¤»÷ÜGŪ3Ų¦Š[ü|LÕ^ĆÓą‰¦”«aqIąš©KõQ„Nŗ īūŠ:,—;Śo?š¼r¦äÜc…ā6֟ŲõńQƒŠ+§ļ”+¤!fcłŗ…žŅW­®±Ż /¦)S×*ujJ™I}eŖ‡ė=Æ^sŖé€IküZV¼S,{¢E˜žé3o‡sūߔŁ*?fƼĪxbĆ*Fn¶XŽł~‚©6ģčPе٩œśų°Ś> ś ūA±,³ ,g®Ź÷‹Iåa­ōyœE ŅU¾›Z}ģpq’Tś–„Ž8īÕ™“”Œ?Dśń]ž­e|RŚ19qų«2ŌI–™+B÷HHóäĻÆVĆh@¢ƒoņՅ™ŽjyqbĄĄ”EŽ2zĢuj†>z&@7F(-bkd»H,{µHć[īwŠ“ŪHYķ?xæŗ‡G(sŪ]ÅŁźEŻla«yÆņ•¹ö8«ÄzĪ·{3MŹī;FĻ§łÄĖnW šĻ°mYŚ8ҵ=żąķ;č‰čūG¶öփ’“Ē,éŹ>3ä<ÕÅ7ķ£{u‚2W"ĒJ“ÄvkÆzŃd®…K©H†ßó€ōflō³Z"h|Ø×ɾv¦<£pTØ%3uq®ŗ“ō~ Ī.9‡B+uŖ„v*[ˆ‘j_J%T[ā²Z-CÓżL|^$pX·Ī±'KÆčõݾčŌwٟ%®˜čßté®~ąˆķzż{œ@fˆļ¾ŗ(ć;]UĻóN”øĪ'_ŅP“pé?7bJÜ££u6Ą„ĀŠ—®e☈‚SJļteNhÉlD+¤¾ŽHb>^¤w±»ü–B{kuݦŅd·™<™Ć“öļ¾ÉcŻßqøæd dρ„i Yhė¾f.Ÿˆōh·ŻĻ«é…ķ­“@æīÓk]-|g'²åQr|@M,ż»ļƒÕŎbņ€l9S¦TnłšLŃßō§ÅOŸ±a“łÖXŽ+Į9^ؘŠnCæ{ĖI2chĪ„½•SóCšį#[‚g@oÓŻOjLK՝¹¾µ-čā4ģ1ضHČ8)C{/£Āt¤Ŗēh¢XŚÓŗķP˜J¦¤ļ®AĒĒg³Ī‡£ģ^„]Z›d°^Y Ś€”.“ņ¹$µkņ5¼ŌĀt!åN™ÆWLŻ_‹9ü6å’Ęg”¦ėņ'”*ļųņWŻ‘ńøó*äēńo{’Ź(±†śŃŗõUõDQ3³ JÓdŚ~×ČGĶS,5ē§źM]©õę×Ü^“QgąŗńÖ¤+ZĀ©Æ’ė…xaśō«ÉZ|ˆHŠuMskP r*„ģɁ½5Mķ”׍Īķ܂ŗL£[č|†Øž”+_¤Ō¾Fóµų¢p¶Ī1>Šö:ŚYŅ0Įt•=Šćo’t”^ķłkW”³Ų“Ąč¾")BˆEЁiXnø=a>¤’]nf!ņ@Ƨ›ńÜUMnÕįŠĻq½Lėģjj~Z':ŁļrLčƒEØM·żŸ‚sHļzƒkĆ¢é ;¦“/&¹›ē҆%ėE— ŹÆū<4±7ībŒ€:¾<{b¼yĮ‹óJµė›ĄČ„—’bNžĀŽō›„·$¦Ķ{*$B2CjeˆšĆĆ ņ*Ē|ęĆDy>KéÜÄ»Ę)ę}gł³Êv»IŅĢvM»¬#A¾Ę­¬ķŸ ŗŪ{“s ]KäļˆŌxĶõč ēŁĀD˜š7ŪŗѲh”öÉćܞˆńĪqŹUs?Ż‚ŚčĘ£³U·Ä¾,lĶߦčĮ·åÅ`ŸV™Ēīo¹4x€{»:‹åz›ydUB®} ĪŖÓą˜w³»ē(X`ÓBł;ꝍĄ—Ö^Ū OĀ©•ĪĆl4Nßr·rN*īį¶ĖŖö+n;L«’Ļœ¦xm؇鵓¬¬t֋;š\æbł4€+a^UZfįk«p‘©•_“F•ŒšL»6ļ‘s>Å@yÅÉ9õډq2Lv’«J‘÷ĶUÜ+ÓCō[ĪLćŻl×öqžgn æI÷€vcj‚_0Ędąą-£2Žū¹Ż~ńżńx^Ч ÓåĒ sć wGGčå‰`ž=-M$_x‰6›Z³Āgūt°)„Ńėʆfłļhd,°ŁZµ}<č%BT_ÜØęÓ ¼’ńST~pKķÕ»šĖūÆTŪ:ŗG×1ÆÜayö°õ„ź>7t^h6˜Ł:,ējD±:@øĘ.©',TrĀŚž”žGŌXŒŃ³V»©±qJ/N_uK€†üyļšā-®³ģ”…č~Śē'¾r¶Żw0’½°žõšĪAóŁØs}˜ö̶ ÜVū’x’ģ endstream endobj 817 0 obj << /Length1 1328 /Length2 1345 /Length3 0 /Length 2190 /Filter /FlateDecode >> stream xŚS 8Tū?q:œ‰ī9=EéŸršŠyyåk<Ę»4HJe›Łc63{™=Ę$Źó„t*RJ]½UR$œB„¢$„ĀķH(é”p*īĒŻ3=Īż¾{æł¾=’’ZæµÖ’·Öo/šō2eó±@˜ƒ”ø)B³^vt Ń˜A26öFp©_Ū÷…ćœ°®51ö6Ÿś˜Ē“Ÿ°Æ7v&ścŚkFöHQČŗY“M϶f$[Ķj*(™,l7ŁZ7mÅąk™»œŃévķŚś&Źšõ¶˜{GŃæ²aÉl“ŠŽŽ‡™Æœl~)Īżp^ųVkqaEG£&%YKĻĀ‚©£WŹĪ,͵Ėc74–¹,’½_Yó&uēÕ§ŒŪ÷¬ēOϚLBŚ2 ŗ»u%nż™Ż¶^–›ė»ԁćåŽzC»É1ż%qŃä@Yµ× §?C/]{y³Ižp°!:“=°éİ^ĢÉ?WŻó« W­˜eĖ mYlöD«yݶąŌ³ėgTŌų›éœiq H{¼kŪt{,ŽņŲž^˜q(ē0{Ļ%ĪČ­&C·—igP’YŚžyŽcµ>Óµ)8©­īīGĮ¼“}–ļöp^¶¶Čφ£õ5Ķ‘- īoYĶŁ›ė4Iå!ĪMŪ ”‰å}„gŚ®T6Żŗ›j˜·˜S}ļD¾doēź(ē§Ļžņ ŠÄ±9×?śg5nÄŹ}¢=,ūOš×ō ½C:öd$†£ĒM?׌åķüżŽ~VFa/k(ēU±öeJŌśł [O{WŁoÆh=ńΐÕ^dv*¬(Cė¬pżj¦ÜŚž€=o=vŖtź"VĆwŚ66鳝wf†e…ļæŗ‹*ÄN²J…éĆ[ó\–Ē,aöLõĢŌ“üŻó'#—SWoTh$=h Š|Ļ]ŹI\ć²%ļ3HÆ:x×„CM8×9ņqpoL/Æ²©SÖ~q­nKŠ&õD’“^Ź€M³_÷?tł»÷õå>ļœ{„Œ ‹¼s’6c¹5%U3ī5·ņŌ˶1Mć\[µBłšy]ī”ė &:Oź­·e8N6śĄ>å_ĒŹzē’*µ?z¦®ē%ģÖē-½4/±¤W1ÉÜ/w³§iŌć­o”&v7ZCR_oŠąžœžfņ$ˆfsēūW„ģh„v£2é²Y¤¤C+¾±“]`čļ7ēĄ9ęʕuÕāā”žÖł²ˆØĪ˜׊GšŽœNŚctš¶wu5ņ\½Ć`ŪL×į?zźSĮš=ėÄĢß]˜3ĆĶēuń“£ŽVN+æŗį‚rfˆw-)ץāXlŌü”Šh·®į±aßż§ÓڶŚü±ōī½ū‡ θϚßi»kå‚żūĀjŗ¹”*Ńp䙿ń C3ž·H`ÄūtMK뻾qi³gѻȫ‘|Éū’SŪ'½£„’¾·O·f9mŹ«üēóGa‰‘æ¦×»Ć¶YŪķš=/į’Æ$[øyū.hy<łš«žĘ³]©ē>i=‰ōh¹³øƒ-—ßQ,šń!»~jŅ&?P–¶sš“GQŅ•ŁūK>@m×iłkS˜QoÖŻŽ[’`ł`ę endstream endobj 766 0 obj << /Type /ObjStm /N 100 /First 957 /Length 4438 /Filter /FlateDecode >> stream xڽ[ėSŪȲ’īæBļ­SaŽU:U’%IH²µ (ą³~°~dÉžõ·{z$dÉ`‡ŗUx4’fŗ§ūׯgMĘ3g]fįć¬Ļl®ąšgB‰‡ž‡ž‘f ½€ž“$†÷īs|–£`zFf4 „T"Ó ™ŹĄ[ ŚĆŪÜAĻāhCüØToõ@€D †µ T$́ŒĘIXHP®Ę)ć¬p™A,ą…@Ez§ą->Ėóf(„LŖ„õ`e©+å\ «-Į\+Øą8=Tč {{9ō“„¹šcT)“€žAzZ*>0øÄ<³ m”5ö4hMģ”4ņpČW#ąƒ‚y/‡Ī%  a-†'|=X©Ą€5™@¾F -Ōø ¢ĘŅ@ĖĀZŒF=[œaPOgŌ w(—ĘN¢ ų äĀā”pFŽč)‰”Ą°A³čģį[\³•Q˜arBŽVć<Ō0CKĀ)Ž3¬×Ė:­2DÜza2Ć>£s4Lģ8E™ZŠģJ F žƒx\†ņ‚Y™ĮļÜ?ą{&¶Ņh•@‡S{yo ®½ē2 s|łDĖ=ō¾|Ɯ›K·„’ń1§–†Ó“ŸŽTŠw±LŅ·ĄŠ6ØżJ›®Zā^ bQKOHt°ĶZhTtxgįĒ`‚óĆ8…J–~O„٣ ЁĶ#ŹŌ’N06uZˆ vO6Ł@XjāĖFˆö9.¼§u B2Õ8Ē]@FT#<˜3„°“'=“]9¹Õ½zwĮā°“ėwŅbžp­ī)m¹üÄuې9BKOPJŲi„äÓĮz¬ ŽćN­Ra˜PØM®ĀLŒ€ ”ß=šiK“AŌ}¤£ą0ŁźĘä¾!p³Wß!‚£ī„0āÓZ#l°5TfT£č] .—śšŒ l¤Z£F'‚$7!‚źĄūōöWZ¢“¶ęęPœ cēVnÆlak*6…åAH!}­×9öŃœFŚa¦wå{ˆ•/°ˆĻKŚhŠvađFSæ„ýNF$ŖŽę>„“• ”ˆųČpO²bÕēK9mØų”ÆL, é‚ƒĄ.%ōyėL(¢,&Ią!ؐõ›Ų÷*Ēt pĄn:¤eĘåA‡VĘ.µ°«ØV|Rm¤2„$œĀU„Ź&ĮŸ6Pϱ„'„J˜W„÷Śą:`CˆA¦Ž‘†Ø[ ˜’ž÷€}üy_dģõlŗ|U,®ē£ūål>÷§Ć ¼łķÕé‡wē’:8Łæų*8¼o™¦!ūū³‡ģ÷°Ē{‘ćÖN)ÜeBęg/×Åt‰IfĄ†÷oŠŃķŻ“d łą»°O°·Ėįxtżrz;.ą <øX“ĻlģKœńˆÜ ēÅ2ū6œĻgĻń »Će1Ÿ¬®ļŲøX,Bg2š®’K |=²6|<;üē?O’ųÓŁé«O'(ń—>aSų÷ł7Ć c-°E™ž,0/Å(y¼/Ł>;`ÆŲ!{ĶŽ°·ģ7vĢŽ±vŹŽ³3vĪ.ŲGö‰ Ł»f׳ÉdČnXĮ)VLo†‹;VüµŽŁwöžFš÷£`ßg«9»ewģīēż]1e#6f6eÓŃ“`36ƒöžŻēÅt\|_R”~_ĢG³v?^-؜-Ų¢ųó£¶dĖ»yQ°åß3¶b?Ųßģżd’°Šł¬ ˆŁÆo.¾}{M€Č@‚E˜Āžž? £I ȇ ’Ļ첂e<›®Cx@ś0łs'Tžb­fąįE¢Åķįé@¹m€:zsųéżuŲė9RP9¤hƒē²FJ7BO`²œ÷Ą¤]‚’)JWóįuZŗŻŽ&wĖŗ?ŻŌ7Ė{6š.‹Ūłp|3Z܏‡?kE‰ĘMz·¬ūĖū‘jNy×øM±ĆióŁĶźzY2žoF×Ćń>X¬Ąh–£Ł“|÷£xX‚[/F؉&Xł6`ż¶’įģĆ>€uņ¶,ˆęęøöx•zb\w²0t+tØ·k±ķ3ū¾²oė1ī~1BĒśNS8ψż7ų &„ą<•åq‡+ån~œ#ŗDé£č ĖaC½Õ·Pļįåū£ćó ^Ū©]!¢r%žé?‹r½éUīŸMQ¶JˆŽß]QüÆłPšē2ß+Ėk04Œab ōr‚™ ^“쟦¶ŹAgGēo_ģ÷¹‹0%¢øūŪ= %Z€|֛†J‹G”›’m“ß}zy¼’$;ļ“ *»xž+čVQŪęƒ@;·÷fׯ`ĆėÕ²`Ćę»ÅŸ!0¢’Y,C‚Œ}Ź„:FóėÕäūøxh„䛣rxĖЇėńpŅ‘°Ē9ūæ1kO†×s`±cņ¾¹‡Qå \Ėė“ Ņ›įGć›'äyæUźų|šźżēć`2=õ˜ŅTåŽ?Å˜ ƒörj­k€/€tņ@Y=Ķ’bµ ö ńó­Bū§oŸ÷ĻĪP|ŪK‡ĮļŸC|ÆzÅö‡¦UUtMɶŠōļ?ž¾¹@Éz½*7>Üńg‘ĢŁ^É⦄*Œƒ’tz‚[“kʝoé/NĻĪp·qž÷č /u ģóč@o«PHaš²U݌Šy±-»Œ±ŻģQzŚ~”3Šä[%ž/g§ŸŽ‚¢/Žõe[ Bž’#½Č+]o—zŽuŌ¢—”%­’ælę¶ŲĮ5įŲ*Ø~;śņįøč…#–¬ų³gņ~4šö)†ļŸa]n †ŠŚb8½yj-ŠŽ“wœ‘lJļ€ćjr,G·Óķ²{±Ąż\+³·ŅłÖ[uĻ·ŹaGo?žģ“{B½-«YnĆłž/£ķ]/Ś?›’l•³Ž/æ^¾¹ ’ōnd!0•iĖżŠå¾Ąz'JĆ{„ĮdŒEGÜ{¬š~éłVłčĖŃÉśĻ(_’ł+d¤p¦‚æ‘qnÓłėS·_š÷ĘÉäüµō“ÉpyĒ®†sü€Eׇ*Ō£ĮW+Øh”°“Ph’µżŽ‹éuQneČq?C½Éš~±œŃ.›¬ĘĖŃżų'›ÆĘĆčT(Ģ#ēZ;ųõ|«„tųśąšąMŠt_ł…]nšųßćTņēPtŌŠn¢•¦:īē£Iєz«øpyņå%śĻĒžs S„ażLŪ{럐‡ū²šÓU{"÷,= Ø2yk+жìŲīčóéłåTīĒŽŻ5čVį„“iÕ ŃP-ŽVŖ•R>ĒŽŗæ¼ 5É£:)u»öSÓģĶl<†0Qm²[»ė¤nŖĻóZųUg<[¤ß°³$ ?uCĢc5½Ö׳y±)%‹­Łž—Ė'd+=Ūj¬æš+t‰ßį›_·•ž]õ0··Õ^!ńtŗ)ėVIķĆ«—G’:¹Ų?鿎 ‚ކ4ŒæąL‚޶­ “×Ņö~Qę3«RQĻ›rō¤ “ŗZ†[|ŹŚ. |ÓńiCīšƒm¤É^ę‹%2Ęu½ƾ‚Õ\Žn–w ,M¶ēŽž¾²Ķܶ™£uTÜń‡Ė{ė·gßžv®ĶŽ?Ā^ÖģÜž}ū;§{Ļ7©>ÆVŗ7; ßś„Ķ]® oū„·;ßś’”Ķ}Ķģ žMŁć]%żģ[_ “ŁÆžń}µ=÷µ#ł6’5˳)ö6eæƒÓ·ĪĶ[ĢsžˆŁŪłœ¾uŪę.7s šŽļr' mękf§ó„¹Im~½7Ļ(Ū¼×lN70‰Üb“kœ ¶yÆG:Ł€ņŠrh*mąJ÷†SŸČCņ”‡”³œĢkØLˆ§Qå5>×zw:Ұ‘•<™qńq2¹Ū™‡„sØnd¼m+ɞ¬ńjwē”# M¾f#ĘÖD^6ņvjwŃ•2p%{r'GĮ’Ķą1¦‡‹:q1–8yD¬~ŌžT*€h‘č\’JĮšgä„<: 1×īQ ”écb(ćd¦D€GD¢÷Y²¤šĄ0q¢$½ÆŌVkŅūÕr<šā¼糘ņ0̇wD2ÆfŽ–ć"ńGsģe&Ź“€(V5ńl^üȄkV4;žü4ĢÖgĒ"ą“xX†’dī „jZ|­xiu®+īؐ–µŻ“ālŁ5ŪŌ³ec6ž7v²ÖUõĀHļåÉ鿅n3©oZŠ/ÉÓ% ©oōĘŁ ÅŪ.śZń†o¢„Šļ\—®ÆķFZ L ŗ†AĖnZ4[ū®Łµ~•ߢl¬ÄꤺéJMHM‹„ŖAQ-PdƂU—øŖ†AńM³eÕƒ¬a¶›VœŻµY+^n“Ž ÕņŁš†øĢRuŖĶ²FK“¼7„]āŠZńBoœŻšŁå ¢†AšM“x†Īuńn»iÅŁ]0š¾ ßXˆl0o  7Ē$^”·\Ę'üņQó \o˜ŁP?ļP^i?ētĀŌ®ųJ׎nRVCļc‰jy¤+Ī7Y¬ÆĄń›°±i ņqŖĪæ­ōkÓpŁ•äźÜŪJ½Ķ™©Ź»ņnv[Y·A¦‘s»VSgÜVĀm’Iµß•{ėŌŪŹ¼ EŚEÖłŌl ÷¼Ó8€Æą÷”ž’ąŗģV endstream endobj 861 0 obj << /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.13)/Keywords() /CreationDate (D:20130313171404+01'00') /ModDate (D:20130313171404+01'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX using libpoppler, Version 3.1415926-2.4-1.40.13 (TeX Live 2012/TeX Live for opensuse.org) kpathsea version 6.1.0) >> endobj 823 0 obj << /Type /ObjStm /N 51 /First 425 /Length 1875 /Filter /FlateDecode >> stream xŚ…YŪŽ7}߯š# Ö·ņEBH Q "!(!ā!āa eŲ!»³¹ü}źøŻ½ån÷š€zöø\uźø\m7”Vd%å“26+ļ•IQy­l&å‚r<ģ¬ņÖ*ĖV™^Qą‡VĮŁ TŌ–ēŖ­J*y£¼J9ØÄ†9e~’2&hž”qšųGT†tä5dĆ?2ĒMž"9ެ##Ī(k9rāÖ%ö眲äŲ”óʆĢ1)ćĄ|3ĒuQ9ćaœ˜v†qVĪ“¹Hœ“ چ.ŪxN-k¶ńŽ3&÷œ){MžX Ī+±/OC¬JLĖC†?Y‹u‘ˆEt,W"ĆŅ 4ˆNNQęæyÅ#œ2‘ †¹$fJ‚YIN71ƒ”eH§‹ÄŖ²łāńć‹ĖׇÓǁŻņ’ż|qłµbå׫żĶp}ĀŹŽ cMńĒ“'r¦›gźķ™œ]łćåšļ‰“Y»į¬«ŗnʙ¬é4Ó63“µ’p*Óļ7·§™ŪūŪ™ŪåÓć»xč±ĢĖ„–„ˆä:é¹Y_ē·'ZĮŃėŽ—Yk§7½X)u‹„¶aŪ‹ŌĖud·³ģÖn{ŃĀK%Öz™5Ū‚š ½ųµ3«k¶Õ5R]ŪQ×Ģźšmu„ø¦#ī¬mWŚqZoĶ”ū%<–„—e+«¶ĖTµyržr’iøUæ=ųöųžį/§żĶi§L.¶źĮó?ŽĒÓõń4<2@ćµ@óu;ÖnåĮ︃˜żž4|‚K7VĶ[¦xųt8-hLfo—T n1Ż €GtćĘ­Č;~…H‹ /9Mń&›”÷Nš›įŇ̉*‰‚>żpsČfϰĪ~6üøuŌĢČ›ŲąÆŽÆ÷oöšł#Œ'Ę£nš×ūā+ĀWZroØ­fō3yvƁ4K1©wrx©AĆ?ūė?3ĀOė[FžæaÓ äÅõŻéCt0”9³[b¼ļ“ŸŲHćļ᯻żép¼~äPW^×%°… qƒMŹ Ų£v|^ƄuŌ+«®Ķ’}Ė©µßNĄ£IŪU8-`z”QqKėšČ°bA‡5n€Wž8\ŻŻ”ĶmĒ-ß„_ŻŪ®Ø× /¹qŒ-iM” $j 5˜bAƒM Ä‚[mĶūŲ÷v[YĄ@•ĶēżÕŲŌ¦µĶ™A—²Q"„ń4n¦Ō8źl¶b6 QMMcDŠ©(I„qĮJ$ įP.6Ģ2Õ¶š£ĪV}bXQ'cZč“$S }’dj”OvĮÓ ‚ķ5.łŠ—ŻŻmŠBד?tĖfM,Ś‘kx”sz¹’–ÕńDĮ›‹bŸķf£>-§Ńaä‚8“¢Ų@J’ŗ+ Hu„÷H‘ĪżeDŌŁjƒXiO2s‡cč.V*čŠX¬$ļŃū„‰ēŲäśĖˆ ³UŸ—gyČ7-)”who :HÜ=ŗr»Ö#昻Äu¶Ś yš2÷'7!2śØ”‡YŲ¤%€l¤Bó5¼āīŽŖĻ‹,Ś¢”‡ŗ¢ƒ<YO„žź“WjØ¢»R%iŽ‘·ˆ•Ö*å!ČdīņH“yšŻ On»+—ü.ƹ³²UŸWp˜.+?°<±©ü@@¤`ĒB+ū^Ą¹°>$nśÄu¶Ś –1]‹»ņŻCå&+? r~ÓXŃļuæ¾r2Z‘ŗŽćU’U9 L‡čDÓ2a¢o¹¼Ńŗhi‰ś³KK”ąxY‘L%i»M+ćķĀ9gŖų –ėF‹ ­„nÓ2EJcĆīņŒ;i¹E¤ŲśeŒ^„goĘ.0ĪÅ,tĘ2›©ŽŽ½›SD’qƒ+8,×|å8nw¦„EšŽk īqģąhŒ=²č±ƒć`³:L/™-§œO„GūeMŁ–;Dģąx?™^ŽR+¼œūƒ;›JŚ­¦œK„ÜcBģ„B«3 ÆG mo:r6œćf:“Š[® ¦œK…@9Æ)„r.×±3P*ŅtP’š „&;EK ĻäSč-ēœĖ'zĪt‚^§žRaį]g®:˜ĘĶg:ȔĪ-P\.Pźv,9Nš¹V/Ž*Ģ…w§ sįŻ©Ć\xO…xŚæūX®eĪź3™b³ń*…qŻ}:¾ŽHycY‰ąuåµDš®š>NŒ^T9Hg„õi|Ž:[ĶÄ^~g‹4~–,’+1>C}ĘśLõ™Ļ}[ßĆ«ūń{ołļ‹ńiėÓÕg æ>°‹Kōź&19Æ\ė™%ÕfŖŻ3U“7_ø Č#Qõ]_ß©n„ä+Q_uŖ‚äćöĮf«…N!*Żśõ/ÕĆoŖ;)‘żbgŪZUŖ¬ė>Õ÷@ŖĒ “¾OŹÕ\yżvøe£Dķ‡š’>źņéž“’x¼Ā—ß+.ō4}’éīōńp]éSpŁ ‰ņō„ųjųńųūpłėķ0ó“ĻĆõ×%CeŅü½łū¬° endstream endobj 862 0 obj << /Type /XRef /Index [0 863] /Size 863 /W [1 3 1] /Root 860 0 R /Info 861 0 R /ID [ ] /Length 2102 /Filter /FlateDecode >> stream xŚ%—[l]G†÷ŚĒ>ĒN߯‰ķ8¾Ū_ā8±“ŲIģųēb;±;q;* )T)BEØR+ źEBHS*BņŠŖš@Š:ńŠ›Pō… ¾ *“Ėłž¾|žõϜķ=3’šY;I’äó4IŅDz_’$ńlšä&ö”HŃfŠ*s mm/a)Č£-¢ķ!,€2“Ėh儽qŽTąÉńš~¦^Y|„YCćÉiØFĖ£é_րZ“j4Ž*­õhŠōŗ  ķ3J›@3Zš¦Śö£Fc5Ņ m"MŅģahG›DŪ%<:ŠĪ”Ż%<:Ń6Ńv»@wQ ж {@/Ś ŚĀ>Š6Žv›p ¢]A»EčĄa“«h[„C`ķŚMĀ0Švķį0V Ż>“MĀ£€é*Ń6ćhuh× 'Ówķį p‡fė„§ĄŚ “5Āip dW Ļ€³hšŪĀ0‹¦y¬žshŪh+„ó`mm™pœ/†¾ķ2įø€VŠv‰š"ø„V¦Pƒ—Ń:Š.ź­¢õ”éQzI–Żk Īj‚ėh#hz -Īu41[ ŌĀb  MSЦh·“Ś_m<ŽˆÅ MŖäI™FSÕū ½U/8śr—Ö -YTĢ’ūßVž+±ÉØt&£¢’˜ŒJ]6*aIÓØ4%9c% %c5 c- żb= éb# Õb3 Įā~@ŗDņ(š%UQ/¤„ĄĻ±tR(v'vŅ%ö’$2ÕHjD¦õ€Ć€4ˆĆóĒQ€åćķ–Ō’K’ü(’\ĒöŽ“SĒ“+Ē)€ći€cqM[Öō”3<„‡Ł_ÜŁßˆAāœ%Żoh0ŽĶŚiᰈõ"–Š$DÄpqɒ±h0fdT$M#9W-™ž†z×x” ×4Œ1RܰdqAćpXÄR‘*b¤xĖ’•OŌ{‡ßŽ‚C@ė·kÉ ßRļ=2™fĒ’;oseĢ „ Źlµ\į>P9KüUZ Š©\fÉĆi:ąk€Žš:Pö€½ Ā’_¾«Į:½›€Ī݃@§rƒ%æ¢Ć¼ģēķ'héšm³ä·ĻhˆĪgŚŁ.Kžø)³xvōYņń?¤qī΁AK>ł”4FĄ0lÉææ§ÕŁ£`'Ą˜YŚ«!Jūn0I8NšUŌ«÷8¦Ķj’"ķ4˜są¬Yóūź˜ `œKąø–Į¼Yw^æø.ƒUp\k`\×ĮM°b6ü7żvpųś% GŻwĄ–Łä9»ĶÜ4i¹dÜå²1ZŪf ÷5n-).Ė#X%¤f7OHĆ*K…<ĄG0W(3{ę5 ®ą­˜LØ8,4,*ĶČkĀ!ąµ€‘F ų%ą—€›Žm ĪģaA?£­Ģ­‹¤«ć"`‰ę ķf/żTƒ•3Ü~ž%ŗć{@č2{õÓEÆŪY×væŁk?V& Ų,`³€ĶٛVÆīn–8}õčOŅp]Ąpį8Ąņ‡,šP(Śģ½O5ׅiŽÓĢΘ}˜©—«7ÓĻĪ\ę6 ³fOĘ5ė¼Ī›=}Qž x#`³ ÅYų*ą«€×ĀE³’š~ę ø)ąŗ°n©½ ŽMplƒ-K+žU® Üj_…K›¦Ō±‹–0J ?géÓ%B—TŽ+ߕƒ(·£‰†äĮ°Tƒ2K'ßS/ˆiUvK· üåõr×: WcéÜmiµ€‹Ła×`éź§źĄ ŽĖĮ5‚&Š Z,Żž¦†pr9īA‡ė\›„_ŁV7»ė¶ōėm 9å]?ąņwzæ>KŸ»§^ŖHĒŻć†x{ö܍Zś£Ÿ«—›ĪXśü’rQ9rŖÜĘ-}łEuPļŗc@„ŸjøpŹŅŸ|1„'g*¹ųœŹ7ÕfÅĀżõ ”vŖĶ(Ęܼ„o¬ØcLī2X²ō­ėź ĖY¦qPd¹eK}GCØĆÜ5@UåÖ,}ē©:(¼ÜM°aé¾*"ĖŻrNŃM|I\wŽ“ĖQy4o eæxd×Ņ'r„ĻYnń‚Zģ“Ē9ēxFTŅžŅŁ³æžżõ-€­õl­gk}ĄRĆłP°ō?ZX_Tl³°›yģć-żü±†“KųĄwZ®ü3upĻx ā1W 2`¹ŚŌ«/ ,ą¹čżåšæ˜ ņź8b¹ö·¤QĘ{|ąĒ-×Ó! Gdģ“§ ÷Ź·I˹Õ«óOe²^|ŚrcWŌĮ^śypÖr“ĻKĆMžśŽćOć,wZéā1ˆg÷½Źi¶Ū«ˆŽ*u3±Ż~ °Éž õl­ēĮS&{6ŽsFxÕĄ‰ŽyV§Ū±ŻE¦O}ä-·>£!Ė=§ƒ"+³ÜcY +·’ڵöXÉDæZ{­äį¼ZVņź9µöYÉ»CjUZÉߣV••.ʘYµ•>ŠŖe5VśņœZµVśf“ZuVśŁļŌŖ·üņūj5Xž„Zµ-’śwÕj²üļoØÕlł~¤V‹ö|_­żVŲŌžf¬š‹^µZ­šö×ŌĀ„»± ™¾\ē¬šŃϾ+AŠēu Øu 4€FŠšA ŲōŽ Ś@;8:€¾Å;Ačśļ}  €Aą€>͇Ą0£ą³Ā‡SÅż}r?ł?Sāq3 endstream endobj startxref 516457 %%EOF ADOL-C-2.4.1/ADOL-C/doc/adolc-manual.tex0000644000076600007660000061105312062616431015625 0ustar coincoin% Latex file containing the documentation of ADOL-C % % Copyright (C) Andrea Walther, Andreas Griewank, Andreas Kowarz, % Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel % % This file is part of ADOL-C. This software is provided as open source. % Any use, reproduction, or distribution of the software constitutes % recipient's acceptance of the terms of the accompanying license file. %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \documentclass[11pt,twoside]{article} \usepackage{hyperref} \usepackage{amsmath,amsthm,amssymb} \usepackage{graphicx} \usepackage{datetime} \newdateformat{monthyear}{\monthname\ \THEYEAR} \usepackage{color} \pagestyle{headings} \bibliographystyle{plain} \parskip=6pt \setlength{\textwidth}{433.6pt} \setlength{\oddsidemargin}{23pt} \setlength{\evensidemargin}{23pt} \setlength{\topmargin}{25.0pt} \setlength{\textheight}{580pt} \setlength{\baselineskip}{8pt} \newcommand{\N}{{ {\rm I} \kern -.225em {\rm N} }} \newcommand{\R}{{ {\rm I} \kern -.225em {\rm R} }} \newcommand{\T}{{ {\rm I} \kern -.425em {\rm T} }} \renewcommand{\sectionautorefname}{Section} \renewcommand{\subsectionautorefname}{Section} \renewcommand{\figureautorefname}{Figure} \renewcommand{\tableautorefname}{Table} \setcounter{equation}{0} \input{version.tex} %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \begin{document} \begin{titlepage} \begin{center} {\Large {\bf ADOL-C:}} \footnote{The development of earlier versions was supported by the Office of Scientific Computing, U.S. Department of Energy, the NSF, and the Deutsche Forschungsgemeinschaft. During the development of the current version Andrea Walther and Andreas Kowarz were supported by the grant Wa 1607/2-1 of the Deutsche Forschungsgemeinschaft} \vspace{0.2in} \\ % {\Large A Package for the Automatic Differentiation}\vspace{0.1in} \\ {\Large of Algorithms Written in C/C++}\\ \vspace{.2in} {\large\bf Version \packageversion, \monthyear\today} \\ \bigskip \mbox{Andrea Walther}\footnote{Institute of Mathematics, University of Paderborn, 33098 Paderborn, Germany} and \mbox{Andreas Griewank}\footnote{Department of Mathematics, Humboldt-Universit\"at zu Berlin, 10099 Berlin, Germany} \end{center} % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \begin{abstract} The C++ package ADOL-C described here facilitates the evaluation of first and higher derivatives of vector functions that are defined by computer programs written in C or C++. The resulting derivative evaluation routines may be called from C, C++, Fortran, or any other language that can be linked with C. The numerical values of derivative vectors are obtained free of truncation errors at a small multiple of the run time and random access memory required by the given function evaluation program. Derivative matrices are obtained by columns, by rows or in sparse format. For solution curves defined by ordinary differential equations, special routines are provided that evaluate the Taylor coefficient vectors and their Jacobians with respect to the current state vector. For explicitly or implicitly defined functions derivative tensors are obtained with a complexity that grows only quadratically in their degree. The derivative calculations involve a possibly substantial but always predictable amount of data. Since the data is accessed strictly sequentially it can be automatically paged out to external files. \end{abstract} % {\bf Keywords}: Computational Differentiation, Automatic Differentiation, Chain Rule, Overloading, Taylor Coefficients, Gradients, Hessians, Forward Mode, Reverse Mode, Implicit Function Differentiation, Inverse Function Differentiation \medskip \noindent {\bf Abbreviated title}: Automatic differentiation by overloading in C++ % \end{titlepage} % \tableofcontents % \newpage % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \section{Preparing a Section of C or C++ Code for Differentiation} \label{prepar} % \subsection{Introduction} % \setcounter{equation}{0} The package \mbox{ADOL-C} utilizes overloading in C++, but the user has to know only C. The acronym stands for {\bf A}utomatic {\bf D}ifferentiation by {\bf O}ver{\bf L}oading in {\bf C}++. In contrast to source transformation approaches, overloading does not generate intermediate source code. As starting points to retrieve further information on techniques and application of automatic differentiation, as well as on other AD tools, we refer to the book \cite{GrWa08}. Furthermore, the web page \verb=http://www.autodiff.org= of the AD community forms a rich source of further information and pointers. ADOL-C facilitates the simultaneous evaluation of arbitrarily high directional derivatives and the gradients of these Taylor coefficients with respect to all independent variables. Relative to the cost of evaluating the underlying function, the cost for evaluating any such scalar-vector pair grows as the square of the degree of the derivative but is still completely independent of the numbers $m$ and $n$. This manual is organized as follows. This section explains the modifications required to convert undifferentiated code to code that compiles with ADOL-C. \autoref{tape} covers aspects of the tape of recorded data that ADOL-C uses to evaluate arbitrarily high order derivatives. The discussion includes storage requirements and the tailoring of certain tape characteristics to fit specific user needs. Descriptions of easy-to-use drivers for a convenient derivative evaluation are contained in \autoref{drivers}. \autoref{forw_rev_ad} offers a more mathematical characterization of the different modes of AD to compute derivatives. At the same time, the corresponding drivers of ADOL-C are explained. The overloaded derivative evaluation routines using the forward and the reverse mode of AD are explained in \autoref{forw_rev}. Advanced differentiation techniques as the optimal checkpointing for time integrations, the exploitation of fixed point iterations, the usages of external differentiated functions and the differentiation of OpenMP parallel programs are described in \autoref{adv_ad}. The tapeless forward mode is presented in \autoref{tapeless}. \autoref{install} details the installation and use of the ADOL-C package. Finally, \autoref{example} furnishes some example programs that incorporate the ADOL-C package to evaluate first and higher-order derivatives. These and other examples are distributed with the ADOL-C source code. The user should simply refer to them if the more abstract and general descriptions of ADOL-C provided in this document do not suffice. % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \subsection{Declaring Active Variables} % \label{DecActVar} % The key ingredient of automatic differentiation by overloading is the concept of an {\em active variable}. All variables that may be considered as differentiable quantities at some time during the program execution must be of an active type. ADOL-C uses one active scalar type, called {\sf adouble}, whose real part is of the standard type {\sf double}. Typically, one will declare the independent variables and all quantities that directly or indirectly depend on them as {\em active}. Other variables that do not depend on the independent variables but enter, for example, as parameters, may remain one of the {\em passive} types {\sf double, float}, or {\sf int}. There is no implicit type conversion from {\sf adouble} to any of these passive types; thus, {\bf failure to declare variables as active when they depend on other active variables will result in a compile-time error message}. In data flow terminology, the set of active variable names must contain all its successors in the dependency graph. All components of indexed arrays must have the same activity status. The real component of an {\sf adouble x} can be extracted as {\sf x.value()}. In particular, such explicit conversions are needed for the standard output procedure {\sf printf}. The output stream operator \boldmath $\ll$ \unboldmath is overloaded such that first the real part of an {\sf adouble} and then the string ``{\sf (a)}" is added to the stream. The input stream operator \boldmath $\gg$ \unboldmath can be used to assign a constant value to an {\sf adouble}. Naturally, {\sf adouble}s may be components of vectors, matrices, and other arrays, as well as members of structures or classes. The C++ class {\sf adouble}, its member functions, and the overloaded versions of all arithmetic operations, comparison operators, and most ANSI C functions are contained in the file \verb=adouble.cpp= and its header \verb==. The latter must be included for compilation of all program files containing {\sf adouble}s and corresponding operations. % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \subsection{Marking Active Sections} \label{markingActive} % All calculations involving active variables that occur between the void function calls \begin{center} {\sf trace\_on(tag,keep)} \hspace{0.3in} and \hspace{0.3in} {\sf trace\_off(file)} \end{center} are recorded on a sequential data set called {\em tape}. Pairs of these function calls can appear anywhere in a C++ program, but they must not overlap. The nonnegative integer argument {\sf tag} identifies the particular tape for subsequent function or derivative evaluations. Unless several tapes need to be kept, ${\sf tag} =0$ may be used throughout. The optional integer arguments {\sf keep} and {\sf file} will be discussed in \autoref{tape}. We will refer to the sequence of statements executed between a particular call to {\sf trace\_on} and the following call to {\sf trace\_off} as an {\em active section} of the code. The same active section may be entered repeatedly, and one can successively generate several traces on distinct tapes by changing the value of {\sf tag}. Both functions {\sf trace\_on} and {\sf trace\_off} are prototyped in the header file \verb==, which is included by the header \verb== automatically. Active sections may contain nested or even recursive calls to functions provided by the user. Naturally, their formal and actual parameters must have matching types. In particular, the functions must be compiled with their active variables declared as {\sf adouble}s and with the header file \verb== included. Variables of type {\sf adouble} may be declared outside an active section and need not go out of scope before the end of an active section. It is not necessary -- though desirable -- that free-store {\sf adouble}s allocated within an active section be deleted before its completion. The values of all {\sf adouble}s that exist at the beginning and end of an active section are automatically recorded by {\sf trace\_on} and {\sf trace\_off}, respectively. % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \subsection{Selecting Independent and Dependent Variables} % One or more active variables that are read in or initialized to the values of constants or passive variables must be distinguished as independent variables. Other active variables that are similarly initialized may be considered as temporaries (e.g., a variable that accumulates the partial sums of a scalar product after being initialized to zero). In order to distinguish an active variable {\sf x} as independent, ADOL-C requires an assignment of the form \begin{center} {\sf x} \boldmath $\ll=$ \unboldmath {\sf px}\hspace{0.2in}// {\sf px} of any passive numeric type $\enspace .$ \end{center} This special initialization ensures that {\sf x.value()} = {\sf px}, and it should precede any other assignment to {\sf x}. However, {\sf x} may be reassigned other values subsequently. Similarly, one or more active variables {\sf y} must be distinguished as dependent by an assignment of the form \begin{center} {\sf y \boldmath $\gg=$ \unboldmath py}\hspace{0.2in}// {\sf py} of any passive type $\enspace ,$ \end{center} which ensures that {\sf py} = {\sf y.value()} and should not be succeeded by any other assignment to {\sf y}. However, a dependent variable {\sf y} may have been assigned other real values previously, and it could even be an independent variable as well. The derivative values calculated after the completion of an active section always represent {\bf derivatives of the final values of the dependent variables with respect to the initial values of the independent variables}. The order in which the independent and dependent variables are marked by the \boldmath $\ll=$ \unboldmath and \boldmath $\gg=$ \unboldmath statements matters crucially for the subsequent derivative evaluations. However, these variables do not have to be combined into contiguous vectors. ADOL-C counts the number of independent and dependent variable specifications within each active section and records them in the header of the tape. % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \subsection{A Subprogram as an Active Section} % As a generic example let us consider a C(++) function of the form shown in \autoref{code1}. % \begin{figure}[hbt] \framebox[\textwidth]{\parbox{\textwidth}{ \begin{center} \begin{tabbing} {\sf void eval(}\= {\sf int n, int m,} \hspace{0.5 in} \= // number of independents and dependents\\ \>{\sf double *x,} \> // independent variable vector \\ \>{\sf double *y,} \> // dependent variable vector \\ \> {\sf int *k, } \> // integer parameters \\ \>{\sf double *z)} \> // real parameters \\ {\sf \{ }\hspace{0.1 in } \= \> // beginning of function body \\ \>{\sf double t = 0;} \> // local variable declaration \\ \>{\sf for (int i=0; i \boldmath $<$ \unboldmath n; i++)} \> // begin of computation \\ \>\hspace{0.2in}{\sf t += z[i]*x[i];} \> // continue \\ \>{\sf $\cdots \cdots \cdots \cdots $} \> // continue \\ \>{\sf y[m-1] = t/m; } \> // end of computation \\ {\sf \} } \> \> // end of function \end{tabbing} \end{center} }} \caption{Generic example of a subprogram to be activated} \label{code1} \end{figure} % If {\sf eval} is to be called from within an active C(++) section with {\sf x} and {\sf y} as vectors of {\sf adouble}s and the other parameters passive, then one merely has to change the type declarations of all variables that depend on {\sf x} from {\sf double} or {\sf float} to {\sf adouble}. Subsequently, the subprogram must be compiled with the header file \verb== included as described in \autoref{DecActVar}. Now let us consider the situation when {\sf eval} is still to be called with integer and real arguments, possibly from a program written in Fortran77, which does not allow overloading. To automatically compute derivatives of the dependent variables {\sf y} with respect to the independent variables {\sf x}, we can make the body of the function into an active section. For example, we may modify the previous program segment as in \autoref{adolcexam}. The renaming and doubling up of the original independent and dependent variable vectors by active counterparts may seem at first a bit clumsy. However, this transformation has the advantage that the calling sequence and the computational part, i.e., where the function is really evaluated, of {\sf eval} remain completely unaltered. If the temporary variable {\sf t} had remained a {\sf double}, the code would not compile, because of a type conflict in the assignment following the declaration. More detailed example codes are listed in \autoref{example}. \begin{figure}[htb] \framebox[\textwidth]{\parbox{\textwidth}{ \begin{center} \begin{tabbing} {\sf void eval(} \= {\sf int n,m,} \hspace{1.0 in}\= // number of independents and dependents\\ \> {\sf double *px,} \> // independent passive variable vector \\ \> {\sf double *py,} \> // dependent passive variable vector \\ \> {\sf int *k,} \> // integer parameters \\ \> {\sf double *z)} \> // parameter vector \\ {\sf \{}\hspace{0.1 in}\= \> // beginning of function body \\ \>{\sf short int tag = 0;} \> // tape array and/or tape file specifier\\ \>{\sf trace\_on(tag);} \> // start tracing \\ \>{\sf adouble *x, *y;} \> // declare active variable pointers \\ \>{\sf x = new adouble[n];}\>// declare active independent variables \\ \>{\sf y = new adouble[m];} \> // declare active dependent variables \\ \>{\sf for (int i=0; i \boldmath $<$ \unboldmath n; i++)} \\ \>\hspace{0.2in} {\sf x[i] \boldmath $\ll=$ \unboldmath px[i];} \> // select independent variables \\ \>{\sf adouble t = 0;} \> // local variable declaration \\ \>{\sf for (int i=0; i \boldmath $<$ \unboldmath n; i++)} \> // begin crunch \\ \>\hspace{0.2in}{\sf t += z[i]*x[i];} \> // continue crunch \\ \>{\sf $\cdots \cdots \cdots \cdots $} \> // continue crunch \\ \>{\sf $\cdots \cdots \cdots \cdots $} \> // continue crunch \\ \>{\sf y[m-1] = t/m; } \> // end crunch as before\\ \>{\sf for (int j=0; j \boldmath $<$ \unboldmath m; j++)} \\ \>\hspace{0.2in}{\sf y[j] \boldmath $\gg=$ \unboldmath py[j];} \> // select dependent variables \\ \>{\sf delete[] y;} \>// delete dependent active variables \\ \>{\sf delete[] x;} \>// delete independent active variables \\ \>{\sf trace\_off();} \> // complete tape \\ {\sf \}} \>\> // end of function \end{tabbing} \end{center}}} \caption{Activated version of the code listed in \autoref{code1}} \label{adolcexam} \end{figure} % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \subsection{Overloaded Operators and Functions} \label{OverOper} % As in the subprogram discussed above, the actual computational statements of a C(++) code need not be altered for the purposes of automatic differentiation. All arithmetic operations, as well as the comparison and assignment operators, are overloaded, so any or all of their operands can be an active variable. An {\sf adouble x} occurring in a comparison operator is effectively replaced by its real value {\sf x.value()}. Most functions contained in the ANSI C standard for the math library are overloaded for active arguments. The only exceptions are the non-differentiable functions {\sf fmod} and {\sf modf}. Otherwise, legitimate C code in active sections can remain completely unchanged, provided the direct output of active variables is avoided. The rest of this subsection may be skipped by first time users who are not worried about marginal issues of differentiability and efficiency. The modulus {\sf fabs(x)} is everywhere Lipschitz continuous but not properly differentiable at the origin, which raises the question of how this exception ought to be handled. Fortunately, one can easily see that {\sf fabs(x)} and all its compositions with smooth functions are still directionally differentiable. These directional derivatives of arbitrary order can be propagated in the forward mode without any ambiguity. In other words, the forward mode as implemented in ADOL-C computes Gateaux derivatives in certain directions, which reduce to Fr\'echet derivatives only if the dependence on the direction is linear. Otherwise, the directional derivatives are merely positively homogeneous with respect to the scaling of the directions. For the reverse mode, ADOL-C sets the derivative of {\sf fabs(x)} at the origin somewhat arbitrarily to zero. We have defined binary functions {\sf fmin} and {\sf fmax} for {\sf adouble} arguments, so that function and derivative values are obtained consistent with those of {\sf fabs} according to the identities \[ \min(a,b) = [a+b-|a-b|]/2 \quad {\rm and} \quad \max(a,b) = [a+b+|a-b|]/2 \quad . \] These relations cannot hold if either $a$ or $b$ is infinite, in which case {\sf fmin} or {\sf fmax} and their derivatives may still be well defined. It should be noted that the directional differentiation of {\sf fmin} and {\sf fmax} yields at ties $a=b$ different results from the corresponding assignment based on the sign of $a-b$. For example, the statement \begin{center} {\sf if (a $<$ b) c = a; else c = b;} \end{center} yields for {\sf a}~=~{\sf b} and {\sf a}$^\prime < $~{\sf b}$^\prime$ the incorrect directional derivative value {\sf c}$^\prime = $~{\sf b}$^\prime$ rather than the correct {\sf c}$^\prime = $~{\sf a}$^\prime$. Therefore this form of conditional assignment should be avoided by use of the function $\sf fmin(a,b)$. There are also versions of {\sf fmin} and {\sf fmax} for two passive arguments and mixed passive/active arguments are handled by implicit conversion. On the function class obtained by composing the modulus with real analytic functions, the concept of directional differentiation can be extended to the propagation of unique one-sided Taylor expansions. The branches taken by {\sf fabs, fmin}, and {\sf fmax}, are recorded on the tape. The functions {\sf sqrt}, {\sf pow}, and some inverse trigonometric functions have infinite slopes at the boundary points of their domains. At these marginal points the derivatives are set by ADOL-C to either {\sf $\pm$InfVal}, 0 or {\sf NoNum}, where {\sf InfVal} and {\sf NoNum} are user-defined parameters, see \autoref{Customizing}. On IEEE machines {\sf InfVal} can be set to the special value {\sf Inf}~=~$1.0/0.0$ and {\sf NoNum} to {\sf NaN}~=~$0.0/0.0$. For example, at {\sf a}~=~0 the first derivative {\sf b}$^\prime$ of {\sf b}~=~{\sf sqrt(a)} is set to \[ {\sf b}^\prime = \left\{ \begin{array}{ll} \sf InfVal&\mbox{if}\;\; {\sf a}^\prime>0 \\ 0&\mbox{if}\;\;{\sf a}^\prime =0 \\ \sf NoNum&\mbox{if}\;\;{\sf a}^\prime <0\\ \end{array} \right. \enspace . \] In other words, we consider {\sf a} and consequently {\sf b} as a constant when {\sf a}$^\prime$ or more generally all computed Taylor coefficients are zero. The general power function ${\sf pow(x,y)=x^y}$ is computed whenever it is defined for the corresponding {\sf double} arguments. If {\sf x} is negative, however, the partial derivative with respect to an integral exponent is set to zero. %Similarly, the partial of {\bf pow} with respect to both arguments %is set to zero at the origin, where both arguments vanish. The derivatives of the step functions {\sf floor}, {\sf ceil}, {\sf frexp}, and {\sf ldexp} are set to zero at all arguments {\sf x}. The result values of the step functions are recorded on the tape and can later be checked to recognize whether a step to another level was taken during a forward sweep at different arguments than at taping time. Some C implementations supply other special functions, in particular the error function {\sf erf(x)}. For the latter, we have included an {\sf adouble} version in \verb==, which has been commented out for systems on which the {\sf double} valued version is not available. The increment and decrement operators {\sf ++}, \boldmath $--$ \unboldmath (prefix and postfix) are available for {\sf adouble}s. % % XXX: Vector and matrix class have to be reimplemented !!! % % and also the %active subscripts described in the \autoref{act_subscr}. Ambiguous statements like {\sf a += a++;} must be avoided because the compiler may sequence the evaluation of the overloaded expression differently from the original in terms of {\sf double}s. As we have indicated above, all subroutines called with active arguments must be modified or suitably overloaded. The simplest procedure is to declare the local variables of the function as active so that their internal calculations are also recorded on the tape. Unfortunately, this approach is likely to be unnecessarily inefficient and inaccurate if the original subroutine evaluates a special function that is defined as the solution of a particular mathematical problem. The most important examples are implicit functions, quadratures, and solutions of ordinary differential equations. Often the numerical methods for evaluating such special functions are elaborate, and their internal workings are not at all differentiable in the data. Rather than differentiating through such an adaptive procedure, one can obtain first and higher derivatives directly from the mathematical definition of the special function. Currently this direct approach has been implemented only for user-supplied quadratures as described in \autoref{quadrat}. % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \subsection{Reusing the Tape for Arbitrary Input Values} \label{reuse_tape} % In some situations it may be desirable to calculate the value and derivatives of a function at arbitrary arguments by using a tape of the function evaluation at one argument and reevaluating the function and its derivatives using the given ADOL-C routines. This approach can significantly reduce run times, and it also allows to port problem functions, in the form of the corresponding tape files, into a computing environment that does not support C++ but does support C or Fortran. Therefore, the routines provided by ADOL-C for the evaluation of derivatives can be used to at arguments $x$ other than the point at which the tape was generated, provided there are no user defined quadratures and all comparisons involving {\sf adouble}s yield the same result. The last condition implies that the control flow is unaltered by the change of the independent variable values. Therefore, this sufficient condition is tested by ADOL-C and if it is not met the ADOL-C routine called for derivative calculations indicates this contingency through its return value. Currently, there are six return values, see \autoref{retvalues}. \begin{table}[h] \center\small \begin{tabular}{|r|l|}\hline +3 & \begin{minipage}{12.5cm} \vspace*{1ex} The function is locally analytic. \vspace*{1ex} \end{minipage} \\ \hline +2 & \begin{minipage}{12.5cm} \vspace*{1ex} The function is locally analytic but the sparsity structure (compared to the situation at the taping point) may have changed, e.g. while at taping arguments {\sf fmax(a,b)} returned {\sf a} we get {\sf b} at the argument currently used. \vspace*{1ex} \end{minipage} \\ \hline +1 & \begin{minipage}{12.5cm} \vspace*{1ex} At least one of the functions {\sf fmin}, {\sf fmax} or {\sf fabs} is evaluated at a tie or zero, respectively. Hence, the function to be differentiated is Lipschitz-continuous but possibly non-differentiable. \vspace*{1ex} \end{minipage} \\ \hline 0 & \begin{minipage}{12.5cm} \vspace*{1ex} Some arithmetic comparison involving {\sf adouble}s yields a tie. Hence, the function to be differentiated may be discontinuous. \vspace*{1ex} \end{minipage} \\ \hline -1 & \begin{minipage}{12.5cm} \vspace*{1ex} An {\sf adouble} comparison yields different results from the evaluation point at which the tape was generated. \vspace*{1ex} \end{minipage} \\ \hline -2 & \begin{minipage}{12.5cm} \vspace*{1ex} The argument of a user-defined quadrature has changed from the evaluation point at which the tape was generated. \vspace*{1ex} \end{minipage} \\ \hline \end{tabular} \caption{Description of return values} \label{retvalues} \end{table} \begin{figure}[h] \centering\includegraphics[width=10.0cm]{tap_point} \caption{Return values around the taping point} \label{fi:tap_point} \end{figure} In \autoref{fi:tap_point} these return values are illustrated. If the user finds the return value of an ADOL-C routine to be negative the taping process simply has to be repeated by executing the active section again. The crux of the problem lies in the fact that the tape records only the operations that are executed during one particular evaluation of the function. It also has no way to evaluate integrals since the corresponding quadratures are never recorded on the tape. Therefore, when there are user-defined quadratures the retaping is necessary at each new point. If there are only branches conditioned on {\sf adouble} comparisons one may hope that re-taping becomes unnecessary when the points settle down in some small neighborhood, as one would expect for example in an iterative equation solver. % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \subsection{Conditional Assignments} \label{condassign} % It appears unsatisfactory that, for example, a simple table lookup of some physical property forces the re-recording of a possibly much larger calculation. However, the basic philosophy of ADOL-C is to overload arithmetic, rather than to generate a new program with jumps between ``instructions'', which would destroy the strictly sequential tape access and require the infusion of substantial compiler technology. Therefore, we introduce the two constructs of conditional assignments and active integers as partial remedies to the branching problem. In many cases, the functionality of branches can be replaced by conditional assignments. For this purpose, we provide a special function called {\sf condassign(a,b,c,d)}. Its calling sequence corresponds to the syntax of the conditional assignment \begin{center} {\sf a = (b \boldmath $>$ \unboldmath 0) ? c : d;} \end{center} which C++ inherited from C. However, here the arguments are restricted to be active or passive scalar arguments, and all expression arguments are evaluated before the test on {\sf b}, which is different from the usual conditional assignment or the code segment. Suppose the original program contains the code segment \begin{center} {\sf if (b \boldmath $>$ \unboldmath 0) a = c; else a = d;}\\ \end{center} Here, only one of the expressions (or, more generally, program blocks) {\sf c} and {\sf d} is evaluated, which exactly constitutes the problem for ADOL-C. To obtain the correct value {\sf a} with ADOL-C, one may first execute both branches and then pick either {\sf c} or {\sf d} using {\sf condassign(a,b,c,d)}. To maintain consistency with the original code, one has to make sure that the two branches do not have any side effects that can interfere with each other or may be important for subsequent calculations. Furthermore the test parameter {\sf b} has to be an {\sf adouble} or an {\sf adouble} expression. Otherwise the test condition {\sf b} is recorded on the tape as a {\em constant} with its run time value. Thus the original dependency of {\sf b} on active variables gets lost, for instance if {\sf b} is a comparison expression, see \autoref{OverOper}. If there is no {\sf else} part in a conditional assignment, one may call the three argument version {\sf condassign(a,b,c)}, which is logically equivalent to {\sf condassign(a,b,c,a)} in that nothing happens if {\sf b} is non-positive. The header file \verb== contains also corresponding definitions of {\sf condassign(a,b,c,d)} and {\sf condassign(a,b,c)} for passive {\sf double} arguments so that the modified code without any differentiation can be tested for correctness. A generalization of this concept for more than two branches, e.g., akin to a \texttt{switch} statement or a cascade of \texttt{if...else if}, may be done by enabling \textsf{ADOLC\_ADVANCED\_BRANCHING} and performing selection on elements of an \texttt{advector} with active indices. % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \subsection{Step-by-Step Modification Procedure} % To prepare a section of given C or C++ code for automatic differentiation as described above, one applies the following step-by-step procedure. \begin{enumerate} \item Use the statements {\sf trace\_on(tag)} or {\sf trace\_on(tag,keep)} and {\sf trace\_off()} or {\sf trace\_off(file)} to mark the beginning and end of the active section. \item Select the set of active variables, and change their type from {\sf double} or {\sf float} to {\sf adouble}. \item Select a sequence of independent variables, and initialize them with \boldmath $\ll=$ \unboldmath assignments from passive variables or vectors. \item Select a sequence of dependent variables among the active variables, and pass their final values to passive variable or vectors thereof by \boldmath $\gg=$ \unboldmath assignments. \item Compile the codes after including the header file \verb==. \end{enumerate} Typically, the first compilation will detect several type conflicts -- usually attempts to convert from active to passive variables or to perform standard I/O of active variables. Since all standard C programs can be activated by a mechanical application of the procedure above, the following section is of importance only to advanced users. % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \section{Numbering the Tapes and Controlling the Buffer} \label{tape} % The trace generated by the execution of an active section may stay within a triplet of internal arrays or it may be written out to three corresponding files. We will refer to these triplets as the tape array or tape file, in general tape, which may subsequently be used to evaluate the underlying function and its derivatives at the original point or at alternative arguments. If the active section involves user-defined quadratures it must be executed and re-taped at each new argument. Similarly, if conditions on {\sf adouble} values lead to a different program branch being taken at a new argument the evaluation process also needs to be re-taped at the new point. Otherwise, direct evaluation from the tape by the routine {\sf function} (\autoref{optdrivers}) is likely to be faster. The use of quadratures and the results of all comparisons on {\sf adouble}s are recorded on the tape so that {\sf function} and other forward routines stop and return appropriate flags if their use without prior re-taping is unsafe. To avoid any re-taping certain types of branches can be recorded on the tape through the use of conditional assignments described before in \autoref{condassign}. Several tapes may be generated and kept simultaneously. A tape array is used as a triplet of buffers or a tape file is generated if the length of any of the buffers exceeds the maximal array lengths of {\sf OBUFSIZE}, {\sf VBUFSIZE} or {\sf LBUFSIZE}. These parameters are defined in the header file \verb== and may be adjusted by the user in the header file before compiling the ADOL-C library, or on runtime using a file named \verb=.adolcrc=. The filesystem folder, where the tapes files may be written to disk, can be changed by changing the definition of {\sf TAPE\_DIR} in the header file \verb== before compiling the ADOL-C library, or on runtime by defining {\sf TAPE\_DIR} in the \verb=.adolcrc= file. By default this is defined to be the present working directory (\verb=.=). For simple usage, {\sf trace\_on} may be called with only the tape {\sf tag} as argument, and {\sf trace\_off} may be called without argument. The optional integer argument {\sf keep} of {\sf trace\_on} determines whether the numerical values of all active variables are recorded in a buffered temporary array or file called the taylor stack. This option takes effect if {\sf keep} = 1 and prepares the scene for an immediately following gradient evaluation by a call to a routine implementing the reverse mode as described in the \autoref{forw_rev_ad} and \autoref{forw_rev}. A file is used instead of an array if the size exceeds the maximal array length of {\sf TBUFSIZE} defined in \verb== and may be adjusted in the same way like the other buffer sizes mentioned above. Alternatively, gradients may be evaluated by a call to {\sf gradient}, which includes a preparatory forward sweep for the creation of the temporary file. If omitted, the argument {\sf keep} defaults to 0, so that no temporary taylor stack file is generated. By setting the optional integer argument {\sf file} of {\sf trace\_off} to 1, the user may force a numbered tape file to be written even if the tape array (buffer) does not overflow. If the argument {\sf file} is omitted, it defaults to 0, so that the tape array is written onto a tape file only if the length of any of the buffers exceeds {\sf [OLVT]BUFSIZE} elements. After the execution of an active section, if a tape file was generated, i.e., if the length of some buffer exceeded {\sf [OLVT]BUFSIZE} elements or if the argument {\sf file} of {\sf trace\_off} was set to 1, the files will be saved in the directory defined as {\sf ADOLC\_TAPE\_DIR} (by default the current working directory) under filenames formed by the strings {\sf ADOLC\_OPERATIONS\_NAME}, {\sf ADOLC\_LOCATIONS\_NAME}, {\sf ADOLC\_VALUES\_NAME} and {\sf ADOLC\_TAYLORS\_NAME} defined in the header file \verb== appended with the number given as the {\sf tag} argument to {\sf trace\_on} and have the extension {\sf .tap}. Later, all problem-independent routines like {\sf gradient}, {\sf jacobian}, {\sf forward}, {\sf reverse}, and others expect as first argument a {\sf tag} to determine the tape on which their respective computational task is to be performed. By calling {\sf trace\_on} with different tape {\sf tag}s, one can create several tapes for various function evaluations and subsequently perform function and derivative evaluations on one or more of them. For example, suppose one wishes to calculate for two smooth functions $f_1(x)$ and $f_2(x)$ \[ f(x) = \max \{f_1(x) ,f_2(x)\},\qquad \nabla f(x), \] and possibly higher derivatives where the two functions do not tie. Provided $f_1$ and $f_2$ are evaluated in two separate active sections, one can generate two different tapes by calling {\sf trace\_on} with {\sf tag} = 1 and {\sf tag} = 2 at the beginning of the respective active sections. Subsequently, one can decide whether $f(x)=f_1(x)$ or $f(x)=f_2(x)$ at the current argument and then evaluate the gradient $\nabla f(x)$ by calling {\sf gradient} with the appropriate argument value {\sf tag} = 1 or {\sf tag} = 2. % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \subsection{Examining the Tape and Predicting Storage Requirements } \label{examiningTape} % At any point in the program, one may call the routine \begin{center} {\sf void tapestats(unsigned short tag, size\_t* counts)} \end{center} with {\sf counts} beeing an array of at least eleven integers. The first argument {\sf tag} specifies the particular tape of interest. The components of {\sf counts} represent \[ \begin{tabular}{ll} {\sf counts[0]}: & the number of independents, i.e.~calls to \boldmath $\ll=$ \unboldmath, \\ {\sf counts[1]}: & the number of dependents, i.e.~calls to \boldmath $\gg=$ \unboldmath,\\ {\sf counts[2]}: & the maximal number of live active variables,\\ {\sf counts[3]}: & the size of taylor stack (number of overwrites),\\ {\sf counts[4]}: & the buffer size (a multiple of eight), \end{tabular} \] \[ \begin{tabular}{ll} {\sf counts[5]}: & the total number of operations recorded,\\ {\sf counts[6-13]}: & other internal information about the tape. \end{tabular} \] The values {\sf maxlive} = {\sf counts[2]} and {\sf tssize} = {\sf counts[3]} determine the temporary storage requirements during calls to the routines implementing the forward and the reverse mode. For a certain degree {\sf deg} $\geq$ 0, the scalar version of the forward mode involves apart from the tape buffers an array of $(${\sf deg}$+1)*${\sf maxlive} {\sf double}s in core and, in addition, a sequential data set called the value stack of {\sf tssize}$*${\sf keep} {\sf revreal}s if called with the option {\sf keep} $>$ 0. Here the type {\sf revreal} is defined as {\sf double} or {\sf float}. The latter choice halves the storage requirement for the sequential data set, which stays in core if its length is less than {\sf TBUFSIZE} bytes and is otherwise written out to a temporary file. The parameter {\sf TBUFSIZE} is defined in the header file \verb==. The drawback of the economical {\sf revreal} = {\sf float} choice is that subsequent calls to reverse mode implementations yield gradients and other adjoint vectors only in single-precision accuracy. This may be acceptable if the adjoint vectors represent rows of a Jacobian that is used for the calculation of Newton steps. In its scalar version, the reverse mode implementation involves the same number of {\sf double}s and twice as many {\sf revreal}s as the forward mode implementation. The storage requirements of the vector versions of the forward mode and reverse mode implementation are equal to that of the scalar versions multiplied by the vector length. % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \subsection{Customizing ADOL-C} \label{Customizing} % Based on the information provided by the routine {\sf tapestats}, the user may alter the following types and constant dimensions in the header file \verb== to suit his problem and environment. \begin{description} \item[{\sf OBUFSIZE}, {\sf LBUFSIZE}, {\sf VBUFSIZE}{\rm :}] These integer determines the length of in\-ter\-nal buf\-fers (default: 524$\,$288). If the buffers are large enough to accommodate all required data, any file access is avoided unless {\sf trace\_off} is called with a positive argument. This desirable situation can be achieved for many problem functions with an execution trace of moderate size. Primarily these values occur as an argument to {\sf malloc}, so that setting it unnecessarily large may have no ill effects, unless the operating system prohibits or penalizes large array allocations. It is however recommended to leave the values in \texttt{} unchanged and set them using the \texttt{.adolcrc} file in the current working directory at runtime. \item[{\sf TBUFSIZE}{\rm :}] This integer determines the length of the in\-ter\-nal buf\-fer for a taylor stack (default: 524$\,$288). \item[{\sf TBUFNUM}{\rm :}] This integer determines the maximal number of taylor stacks (default: 32). \item[{\sf fint}{\rm :}] The integer data type used by Fortran callable versions of functions. \item[{\sf fdouble}{\rm :}] The floating point data type used by Fortran callable versions of functions. \item[{\sf inf\_num}{\rm :}] This together with {\sf inf\_den} sets the ``vertical'' slope {\sf InfVal} = {\sf inf\_num/inf\_den} of special functions at the boundaries of their domains (default: {\sf inf\_num} = 1.0). On IEEE machines the default setting produces the standard {\sf Inf}. On non-IEEE machines change these values to produce a small {\sf InfVal} value and compare the results of two forward sweeps with different {\sf InfVal} settings to detect a ``vertical'' slope. \item[{\sf inf\_den}{\rm :}] See {\sf inf\_num} (default: 0.0). \item[{\sf non\_num}{\rm :}] This together with {\sf non\_den} sets the mathematically undefined derivative value {\sf NoNum} = {\sf non\_num/non\_den} of special functions at the boundaries of their domains (default: {\sf non\_num} = 0.0). On IEEE machines the default setting produces the standard {\sf NaN}. On non-IEEE machines change these values to produce a small {\sf NoNum} value and compare the results of two forward sweeps with different {\sf NoNum} settings to detect the occurrence of undefined derivative values. \item[{\sf non\_den}{\rm :}] See {\sf non\_num} (default: 0.0). \item[{\sf ADOLC\_EPS}{\rm :}] For testing on small numbers to avoid overflows (default: 10E-20). \item[{\sf DIAG\_OUT}{\rm :}] File identifier used as standard output for ADOL-C diagnostics (default: stdout). \end{description} The following types and options may be set using the command-line options of the \texttt{./configure} script. \begin{description} \item[{\sf locint}{\rm :}] The range of the integer type {\sf locint} determines how many {\sf adouble}s can be simultaneously alive (default: {\sf unsigned int}). In extreme cases when there are more than $2^{32}$ {\sf adouble}s alive at any one time, the type {\sf locint} must be changed to {\sf unsigned long}. This can be done by passing \texttt{--enable-ulong} to \texttt{./configure}. \item[{\sf revreal}{\rm :}] The choice of this floating-point type trades accuracy with storage for reverse sweeps (default: {\sf double}). While functions and their derivatives are always evaluated in double precision during forward sweeps, gradients and other adjoint vectors are obtained with the precision determined by the type {\sf revreal}. The less accurate choice {\sf revreal} = {\sf float} nearly halves the storage requirement during reverse sweeps. This can be done by passing \texttt{--disable-double} to \texttt{./configure}. \item[{\sf ATRIG\_ERF}{\rm :}] The overloaded versions of the inverse hyperbolic functions and the error function are enabled (default: undefined) by passing \texttt{--enable-atrig-erf} to \texttt{./configure} \item[{\sf ADOLC\_USE\_CALLOC}{\rm :}] Selects the memory allocation routine used by ADOL-C. {\sf Malloc} will be used if this variable is undefined. {\sf ADOLC\_USE\_CALLOC} is defined by default to avoid incorrect result caused by uninitialized memory. It can be set undefined by passing \texttt{--disable-use-calloc} to \texttt{./configure}. \item[{\sf ADOLC\_ADVANCED\_BRANCHING}{\rm :}] Enables routines required for automatic branch selection (default: disabled). The boolean valued comparison operators with two \texttt{adouble} type arguments will not return boolean values anymore and may not be used in branch control statements (\texttt{if}, \texttt{while}, \texttt{for} etc.). Instead conditional assignments using \texttt{condassign} or selection operations on elements of \texttt{advector} type should be used. Enabling this option and rewriting the function evaluation using \texttt{condassign} or selections of \texttt{advector} elements will prevent the need for retracing the function at branch switches. This can be enabled by passing \texttt{--enable-advanced-branching} to \texttt{./configure}. \end{description} % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \subsection{Warnings and Suggestions for Improved Efficiency} \label{WarSug} % Since the type {\sf adouble} has a nontrivial constructor, the mere declaration of large {\sf adouble} arrays may take up considerable run time. The user should be warned against the usual Fortran practice of declaring fixed-size arrays that can accommodate the largest possible case of an evaluation program with variable dimensions. If such programs are converted to or written in C, the overloading in combination with ADOL-C will lead to very large run time increases for comparatively small values of the problem dimension, because the actual computation is completely dominated by the construction of the large {\sf adouble} arrays. The user is advised to create dynamic arrays of {\sf adouble}s by using the C++ operator {\sf new} and to destroy them using {\sf delete}. For storage efficiency it is desirable that dynamic objects are created and destroyed in a last-in-first-out fashion. Whenever an {\sf adouble} is declared, the constructor for the type {\sf adouble} assigns it a nominal address, which we will refer to as its {\em location}. The location is of the type {\sf locint} defined in the header file \verb==. Active vectors occupy a range of contiguous locations. As long as the program execution never involves more than 65$\,$536 active variables, the type {\sf locint} may be defined as {\sf unsigned short}. Otherwise, the range may be extended by defining {\sf locint} as {\sf (unsigned) int} or {\sf (unsigned) long}, which may nearly double the overall mass storage requirement. Sometimes one can avoid exceeding the accessible range of {\sf unsigned short}s by using more local variables and deleting {\sf adouble}s created by the new operator in a last-in-first-out fashion. When memory for {\sf adouble}s is requested through a call to {\sf malloc()} or other related C memory-allocating functions, the storage for these {\sf adouble}s is allocated; however, the C++ {\sf adouble} constructor is never called. The newly defined {\sf adouble}s are never assigned a location and are not counted in the stack of live variables. Thus, any results depending upon these pseudo-{\sf adouble}s will be incorrect. For these reasons {\bf DO NOT use malloc() and related C memory-allocating functions when declaring adoubles (see the following paragraph).} % % XXX: Vector and matrix class have to be reimplemented !!! % %The same point applies, of course, % for active vectors. When an {\sf adouble} % % XXX: Vector and matrix class have to be reimplemented !!! % % or {\bf adoublev} goes out of scope or is explicitly deleted, the destructor notices that its location(s) may be freed for subsequent (nominal) reallocation. In general, this is not done immediately but is delayed until the locations to be deallocated form a contiguous tail of all locations currently being used. As a consequence of this allocation scheme, the currently alive {\sf adouble} locations always form a contiguous range of integers that grows and shrinks like a stack. Newly declared {\sf adouble}s are placed on the top so that vectors of {\sf adouble}s obtain a contiguous range of locations. While the C++ compiler can be expected to construct and destruct automatic variables in a last-in-first-out fashion, the user may upset this desirable pattern by deleting free-store {\sf adouble}s too early or too late. Then the {\sf adouble} stack may grow unnecessarily, but the numerical results will still be correct, unless an exception occurs because the range of {\sf locint} is exceeded. In general, free-store {\sf adouble}s % % XXX: Vector and matrix class have to be reimplemented !!! % %and {\bf adoublev}s should be deleted in a last-in-first-out fashion toward the end of the program block in which they were created. When this pattern is maintained, the maximum number of {\sf adouble}s alive and, as a consequence, the randomly accessed storage space of the derivative evaluation routines is bounded by a small multiple of the memory used in the relevant section of the original program. Failure to delete dynamically allocated {\sf adouble}s may cause that the maximal number of {\sf adouble}s alive at one time will be exceeded if the same active section is called repeatedly. The same effect occurs if static {\sf adouble}s are used. To avoid the storage and manipulation of structurally trivial derivative values, one should pay careful attention to the naming of variables. Ideally, the intermediate values generated during the evaluation of a vector function should be assigned to program variables that are consistently either active or passive, in that all their values either are or are not dependent on the independent variables in a nontrivial way. For example, this rule is violated if a temporary variable is successively used to accumulate inner products involving first only passive and later active arrays. Then the first inner product and all its successors in the data dependency graph become artificially active and the derivative evaluation routines described later will waste time allocating and propagating trivial or useless derivatives. Sometimes even values that do depend on the independent variables may be of only transitory importance and may not affect the dependent variables. For example, this is true for multipliers that are used to scale linear equations, but whose values do not influence the dependent variables in a mathematical sense. Such dead-end variables can be deactivated by the use of the {\sf value} function, which converts {\sf adouble}s to {\sf double}s. The deleterious effects of unnecessary activity are partly alleviated by run time activity flags in the derivative routine {\sf hov\_reverse} presented in \autoref{forw_rev_ad}. The {\sf adouble} default constructor sets to zero the associated value. This implies a certain overhead that may seem unnecessary when no initial value is actually given, however, the implicit initialization of arrays from a partial value list is the only legitimate construct (known to us) that requires this behavior. An array instantiation such as \begin{center} \sf double x[3]=\{2.0\}; \end{center} will initialize {\sf x[0]} to {\sf 2.0} and initialize (implicitly) the remaining array elements {\sf x[1]} and {\sf x[2]} to {\sf 0.0}. According to the C++ standard the array element construction of the type changed instantiation \begin{center} \sf adouble x[3]=\{2.0\}; \end{center} will use the constructor {\sf adouble(const double\&);} for {\sf x[0]} passing in {\sf 2.0} but will call the {\sf adouble} default constructor {\sf x[1]} and {\sf x[2]} leaving these array elements uninitialized {\em unless} the default constructor does implement the initialization to zero. The C++ constructor syntax does not provide a means to distinguish this implicit initialization from the declaration of any simple uninitialized variable. If the user can ascertain the absence of array instantiations such as the above then one can configure ADOL-C with the \verb=--disable-stdczero= option , see \autoref{genlib}, to avoid the overhead of these initializations. % % % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \section{Easy-To-Use Drivers} \label{drivers} % For the convenience of the user, ADOL-C provides several easy-to-use drivers that compute the most frequently required derivative objects. Throughout, we assume that after the execution of an active section, the corresponding tape with the identifier {\sf tag} contains a detailed record of the computational process by which the final values $y$ of the dependent variables were obtained from the values $x$ of the independent variables. We will denote this functional relation between the input variables $x$ and the output variables $y$ by \[ F : \R^n \mapsto \R^m, \qquad x \rightarrow F(x) \equiv y. \] The return value of all drivers presented in this section indicate the validity of the tape as explained in \autoref{reuse_tape}. The presented drivers are all C functions and therefore can be used within C and C++ programs. Some Fortran-callable companions can be found in the appropriate header files. % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \subsection{Drivers for Optimization and Nonlinear Equations} % \label{optdrivers} % The drivers provided for solving optimization problems and nonlinear equations are prototyped in the header file \verb==, which is included automatically by the global header file \verb== (see \autoref{ssec:DesIH}). The routine {\sf function} allows to evaluate the desired function from the tape instead of executing the corresponding source code: % \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int function(tag,m,n,x,y)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf double x[n];} \> // independent vector $x$ \\ \>{\sf double y[m];} \> // dependent vector $y=F(x)$ \end{tabbing} % If the original evaluation program is available this double version should be used to compute the function value in order to avoid the interpretative overhead. For the calculation of whole derivative vectors and matrices up to order 2 there are the following procedures: % \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int gradient(tag,n,x,g)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int n;} \> // number of independent variables $n$ and $m=1$\\ \>{\sf double x[n];} \> // independent vector $x$ \\ \>{\sf double g[n];} \> // resulting gradient $\nabla F(x)$ \end{tabbing} % \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int jacobian(tag,m,n,x,J)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf double x[n];} \> // independent vector $x$ \\ \>{\sf double J[m][n];} \> // resulting Jacobian $F^\prime (x)$ \end{tabbing} % \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int hessian(tag,n,x,H)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int n;} \> // number of independent variables $n$ and $m=1$\\ \>{\sf double x[n];} \> // independent vector $x$ \\ \>{\sf double H[n][n];} \> // resulting Hessian matrix $\nabla^2F(x)$ \end{tabbing} % The driver routine {\sf hessian} computes only the lower half of $\nabla^2f(x_0)$ so that all values {\sf H[i][j]} with $j>i$ of {\sf H} allocated as a square array remain untouched during the call of {\sf hessian}. Hence only $i+1$ {\sf double}s need to be allocated starting at the position {\sf H[i]}. To use the full capability of automatic differentiation when the product of derivatives with certain weight vectors or directions are needed, ADOL-C offers the following four drivers: % \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int vec\_jac(tag,m,n,repeat,x,u,z)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf int repeat;} \> // indicate repeated call at same argument\\ \>{\sf double x[n];} \> // independent vector $x$ \\ \>{\sf double u[m];} \> // range weight vector $u$ \\ \>{\sf double z[n];} \> // result $z = u^TF^\prime (x)$ \end{tabbing} If a nonzero value of the parameter {\sf repeat} indicates that the routine {\sf vec\_jac} has been called at the same argument immediately before, the internal forward mode evaluation will be skipped and only reverse mode evaluation with the corresponding arguments is executed resulting in a reduced computational complexity of the function {\sf vec\_jac}. % \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int jac\_vec(tag,m,n,x,v,z)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf double x[n];} \> // independent vector $x$\\ \>{\sf double v[n];} \> // tangent vector $v$\\ \>{\sf double z[m];} \> // result $z = F^\prime (x)v$ \end{tabbing} % \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int hess\_vec(tag,n,x,v,z)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf double x[n];} \> // independent vector $x$\\ \>{\sf double v[n];} \> // tangent vector $v$\\ \>{\sf double z[n];} \> // result $z = \nabla^2F(x) v$ \end{tabbing} % \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int hess\_mat(tag,n,p,x,V,Z)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf int p;} \> // number of columns in $V$\\ \>{\sf double x[n];} \> // independent vector $x$\\ \>{\sf double V[n][p];} \> // tangent matrix $V$\\ \>{\sf double Z[n][p];} \> // result $Z = \nabla^2F(x) V$ \end{tabbing} % \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int lagra\_hess\_vec(tag,m,n,x,v,u,h)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf double x[n];} \> // independent vector $x$\\ \>{\sf double v[n];} \> // tangent vector $v$\\ \>{\sf double u[m];} \> // range weight vector $u$ \\ \>{\sf double h[n];} \> // result $h = u^T\nabla^2F(x) v $ \end{tabbing} % The next procedure allows the user to perform Newton steps only having the corresponding tape at hand: % \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int jac\_solv(tag,n,x,b,mode)} \\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf double x[n];} \> // independent vector $x$ as\\ \>{\sf double b[n];} \> // in: right-hand side b, out: result $w$ of $F(x)w = b$\\ \>{\sf int mode;} \> // option to choose different solvers \end{tabbing} % On entry, parameter {\sf b} of the routine {\sf jac\_solv} contains the right-hand side of the equation $F(x)w = b$ to be solved. On exit, {\sf b} equals the solution $w$ of this equation. If {\sf mode} = 0 only the Jacobian of the function given by the tape labeled with {\sf tag} is provided internally. The LU-factorization of this Jacobian is computed for {\sf mode} = 1. The solution of the equation is calculated if {\sf mode} = 2. Hence, it is possible to compute the LU-factorization only once. Then the equation can be solved for several right-hand sides $b$ without calculating the Jacobian and its factorization again. If the original evaluation code of a function contains neither quadratures nor branches, all drivers described above can be used to evaluate derivatives at any argument in its domain. The same still applies if there are no user defined quadratures and all comparisons involving {\sf adouble}s have the same result as during taping. If this assumption is falsely made all drivers while internally calling the forward mode evaluation will return the value -1 or -2 as already specified in \autoref{reuse_tape}. % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \subsection{Drivers for Ordinary Differential Equations} \label{odedrivers} % When $F$ is the right-hand side of an (autonomous) ordinary differential equation \[ x^\prime(t) \; = \; F(x(t)) , \] we must have $m=n$. Along any solution path $x(t)$ its Taylor coefficients $x_j$ at some time, e.g., $t=0$, must satisfy the relation \[ x_{i+1} = \frac{1}{1+i} y_i. \] with the $y_j$ the Taylor coefficients of its derivative $y(t)=x^\prime(t)$, namely, \[ y(t) \; \equiv \; F(x(t)) \; : \; I\!\!R \;\mapsto \;I\!\!R^m \] defined by an autonomous right-hand side $F$ recorded on the tape. Using this relation, one can generate the Taylor coefficients $x_i$, $i \le deg$, recursively from the current point $x_0$. This task is achieved by the driver routine {\sf forode} defined as follows: % \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int forode(tag,n,tau,dol,deg,X)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int n;} \> // number of state variables $n$\\ \>{\sf double tau;} \> // scaling parameter\\ \>{\sf int dol;} \> // degree on previous call\\ \>{\sf int deg;} \> // degree on current call\\ \>{\sf double X[n][deg+1];} \> // Taylor coefficient vector $X$ \end{tabbing} % If {\sf dol} is positive, it is assumed that {\sf forode} has been called before at the same point so that all Taylor coefficient vectors up to the {\sf dol}-th are already correct. Subsequently one may call the driver routine {\sf reverse} or corresponding low level routines as explained in the \autoref{forw_rev} and \autoref{forw_rev_ad}, respectively, to compute the family of square matrices {\sf Z[n][n][deg]} defined by \[ Z_j \equiv U\/\frac{\partial y_j}{\partial x_0} \in{I\!\!R}^{q \times n} , \] with {\sf double** U}$=I_n$ the identity matrix of order {\sf n}. For the numerical solutions of ordinary differential equations, one may also wish to calculate the Jacobians \begin{equation} \label{eq:bees} B_j \; \equiv \; \frac{\mbox{d}x_{j+1}}{\mbox{d} x_0}\;\in\;{I\!\!R}^{n \times n}\, , \end{equation} which exist provided $F$ is sufficiently smooth. These matrices can be obtained from the partial derivatives $\partial y_i/\partial x_0$ by an appropriate version of the chain rule. To compute the total derivatives $B = (B_j)_{0\leq j {\sf int accode(n,tau,deg,Z,B,nz)}\\ \>{\sf int n;} \> // number of state variables $n$ \\ \>{\sf double tau;} \> // scaling parameter\\ \>{\sf int deg;} \> // degree on current call\\ \>{\sf double Z[n][n][deg];} \> // partials of coefficient vectors\\ \>{\sf double B[n][n][deg];} \> // result $B$ as defined in \eqref{eq:bees}\\ \>{\sf short nz[n][n];} \> // optional nonzero pattern \end{tabbing} % Sparsity information can be exploited by {\sf accode} using the array {\sf nz}. For this purpose, {\sf nz} has to be set by a call of the routine {\sf reverse} or the corresponding basic routines as explained below in \autoref{forw_rev_ad} and \autoref{forw_rev}, respectively. The non-positive entries of {\sf nz} are then changed by {\sf accode} so that upon return \[ \mbox{{\sf B[i][j][k]}} \; \equiv \; 0 \quad {\rm if} \quad \mbox{\sf k} \leq \mbox{\sf $-$nz[i][j]}\; . \] In other words, the matrices $B_k$ = {\sf B[ ][ ][k]} have a sparsity pattern that fills in as $k$ grows. Note, that there need to be no loss in computational efficiency if a time-dependent ordinary differential equation is rewritten in autonomous form. The prototype of the ODE-drivers {\sf forode} and {\sf accode} is contained in the header file \verb==. The global header file \verb== includes this file automatically, see \autoref{ssec:DesIH}. An example program using the procedures {\sf forode} and {\sf accode} together with more detailed information about the coding can be found in \autoref{exam:ode}. The corresponding source code \verb=odexam.cpp= is contained in the subdirectory \verb=examples=. % % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \subsection{Drivers for Sparse Jacobians and Sparse Hessians} \label{sparse} % Quite often, the Jacobians and Hessians that have to be computed are sparse matrices. Therefore, ADOL-C provides additionally drivers that allow the exploitation of sparsity. The exploitation of sparsity is frequently based on {\em graph coloring} methods, discussed for example in \cite{GeMaPo05} and \cite{GeTaMaPo07}. The sparse drivers of ADOL-C presented in this section rely on the the coloring package ColPack developed by the authors of \cite{GeMaPo05} and \cite{GeTaMaPo07}. ColPack is not directly incorporated in ADOL-C, and therefore needs to be installed separately to use the sparse drivers described here. ColPack is available for download at \verb=http://www.cscapes.org/coloringpage/software.htm=. More information about the required installation of ColPack is given in \autoref{install}. % \subsubsection*{Sparse Jacobians and Sparse Hessians} % To compute the entries of sparse Jacobians and sparse Hessians, respectively, in coordinate format one may use the drivers: \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int sparse\_jac(tag,m,n,repeat,x,\&nnz,\&rind,\&cind,\&values,\&options)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf int repeat;} \> // indicate repeated call at same argument\\ \>{\sf double x[n];} \> // independent vector $x$ \\ \>{\sf int nnz;} \> // number of nonzeros \\ \>{\sf unsigned int rind[nnz];}\> // row index\\ \>{\sf unsigned int cind[nnz];}\> // column index\\ \>{\sf double values[nnz];} \> // non-zero values\\ \>{\sf int options[4];} \> // array of control parameters\\ \end{tabbing} % \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int sparse\_hess(tag,n,repeat,x,\&nnz,\&rind,\&cind,\&values,\&options)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int n;} \> // number of independent variables $n$ and $m=1$\\ \>{\sf int repeat;} \> // indicate repeated call at same argument\\ \>{\sf double x[n];} \> // independent vector $x$ \\ \>{\sf int nnz;} \> // number of nonzeros \\ \>{\sf unsigned int rind[nnz];}\> // row indices\\ \>{\sf unsigned int cind[nnz];}\> // column indices\\ \>{\sf double values[nnz];} \> // non-zero values \\ \>{\sf int options[2];} \> // array of control parameters\\ \end{tabbing} % Once more, the input variables are the identifier for the internal representation {\sf tag}, if required the number of dependents {\sf m}, and the number of independents {\sf n} for a consistency check. Furthermore, the flag {\sf repeat=0} indicates that the functions are called at a point with a new sparsity structure, whereas {\sf repeat=1} results in the re-usage of the sparsity pattern from the previous call. The current values of the independents are given by the array {\sf x}. The input/output variable {\sf nnz} stores the number of the nonzero entries. Therefore, {\sf nnz} denotes also the length of the arrays {\sf r\_ind} storing the row indices, {\sf c\_ind} storing the column indices, and {\sf values} storing the values of the nonzero entries. If {\sf sparse\_jac} and {\sf sparse\_hess} are called with {\sf repeat=0}, the functions determine the number of nonzeros for the sparsity pattern defined by the value of {\sf x}, allocate appropriate arrays {\sf r\_ind}, {\sf c\_ind}, and {\sf values} and store the desired information in these arrays. During the next function call with {\sf repeat=1} the allocated memory is reused such that only the values of the arrays are changed. Before calling {\sf sparse\_jac} or {\sf sparse\_hess} once more with {\sf repeat=0} the user is responsible for the deallocation of the array {\sf r\_ind}, {\sf c\_ind}, and {\sf values} using the function {\sf delete[]}! For each driver the array {\sf options} can be used to adapted the computation of the sparse derivative matrices to the special needs of application under consideration. Most frequently, the default options will give a reasonable performance. The elements of the array {\sf options} control the action of {\sf sparse\_jac} according to \autoref{options_sparse_jac}. \begin{table}[h] \center \begin{tabular}{|c|c|l|} \hline component & value & \\ \hline {\sf options[0]} & & way of sparsity pattern computation \\ & 0 & propagation of index domains (default) \\ & 1 & propagation of bit pattern \\ \hline {\sf options[1]} & & test the computational graph control flow \\ & 0 & safe mode (default) \\ & 1 & tight mode \\ \hline {\sf options[2]} & & way of bit pattern propagation \\ & 0 & automatic detection (default) \\ & 1 & forward mode \\ & 2 & reverse mode \\ \hline {\sf options[3]} & & way of compression \\ & 0 & column compression (default) \\ & 1 & row compression \\ \hline \end{tabular} \caption{ {\sf sparse\_jac} parameter {\sf options}\label{options_sparse_jac}} \end{table} The component {\sf options[1]} determines the usage of the safe or tight mode of sparsity computation. The first, more conservative option is the default. It accounts for all dependences that might occur for any value of the independent variables. For example, the intermediate {\sf c}~$=$~{\sf max}$(${\sf a}$,${\sf b}$)$ is always assumed to depend on all independent variables that {\sf a} or {\sf b} dependent on, i.e.\ the bit pattern associated with {\sf c} is set to the logical {\sf OR} of those associated with {\sf a} and {\sf b}. In contrast the tight option gives this result only in the unlikely event of an exact tie {\sf a}~$=$~{\sf b}. Otherwise it sets the bit pattern associated with {\sf c} either to that of {\sf a} or to that of {\sf b}, depending on whether {\sf c}~$=$~{\sf a} or {\sf c}~$=$~{\sf b} locally. Obviously, the sparsity pattern obtained with the tight option may contain more zeros than that obtained with the safe option. On the other hand, it will only be valid at points belonging to an area where the function $F$ is locally analytic and that contains the point at which the internal representation was generated. Since generating the sparsity structure using the safe version does not require any reevaluation, it may thus reduce the overall computational cost despite the fact that it produces more nonzero entries. The value of {\sf options[2]} selects the direction of bit pattern propagation. Depending on the number of independent $n$ and of dependent variables $m$ one would prefer the forward mode if $n$ is significant smaller than $m$ and would otherwise use the reverse mode. The elements of the array {\sf options} control the action of {\sf sparse\_hess} according to \autoref{options_sparse_hess}. \begin{table}[h] \center \begin{tabular}{|c|c|l|} \hline component & value & \\ \hline {\sf options[0]} & & test the computational graph control flow \\ & 0 & safe mode (default) \\ & 1 & tight mode \\ \hline {\sf options[1]} & & way of recovery \\ & 0 & indirect recovery (default) \\ & 1 & direct recovery \\ \hline \end{tabular} \caption{ {\sf sparse\_hess} parameter {\sf options}\label{options_sparse_hess}} \end{table} The described driver routines for the computation of sparse derivative matrices are prototyped in the header file \verb==, which is included automatically by the global header file \verb== (see \autoref{ssec:DesIH}). Example codes illustrating the usage of {\sf sparse\_jac} and {\sf sparse\_hess} can be found in the file \verb=sparse_jacobian.cpp= and \verb=sparse_hessian.cpp= contained in %the subdirectory \verb=examples/additional_examples/sparse=. % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \subsubsection*{Computation of Sparsity Pattern} % ADOL-C offers a convenient way of determining the sparsity structure of a Jacobian matrix using the function: % \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.3in}\= \kill % define tab position \>{\sf int jac\_pat(tag, m, n, x, JP, options)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf double x[n];} \> // independent variables $x_0$\\ \>{\sf unsigned int JP[][];} \> // row compressed sparsity structure\\ \>{\sf int options[2];} \> // array of control parameters \end{tabbing} % The sparsity pattern of the Jacobian is computed in a compressed row format. For this purpose, {\sf JP} has to be an $m$ dimensional array of pointers to {\sf unsigned int}s, i.e., one has {\sf unsigned int* JP[m]}. During the call of {\sf jac\_pat}, the number $\hat{n}_i$ of nonzero entries in row $i$ of the Jacobian is determined for all $1\le i\le m$. Then, a memory allocation is performed such that {\sf JP[i-1]} points to a block of $\hat{n}_i+1$ {\sf unsigned int} for all $1\le i\le m$ and {\sf JP[i-1][0]} is set to $\hat{n}_i$. Subsequently, the column indices of the $j$ nonzero entries in the $i$th row are stored in the components {\sf JP[i-1][1]}, \ldots, {\sf JP[i-1][j]}. The elements of the array {\sf options} control the action of {\sf jac\_pat} according to \autoref{options}. \begin{table}[h] \center \begin{tabular}{|c|c|l|} \hline component & value & \\ \hline {\sf options[0]} & & way of sparsity pattern computation \\ & 0 & propagation of index domains (default) \\ & 1 & propagation of bit pattern \\ \hline {\sf options[1]} & & test the computational graph control flow \\ & 0 & safe mode (default) \\ & 1 & tight mode \\ \hline {\sf options[2]} & & way of bit pattern propagation \\ & 0 & automatic detection (default) \\ & 1 & forward mode \\ & 2 & reverse mode \\ \hline \end{tabular} \caption{ {\sf jac\_pat} parameter {\sf options}\label{options}} \end{table} The value of {\sf options[0]} selects the way to compute the sparsity pattern. The component {\sf options[1]} determines the usage of the safe or tight mode of bit pattern propagation. The first, more conservative option is the default. It accounts for all dependences that might occur for any value of the independent variables. For example, the intermediate {\sf c}~$=$~{\sf max}$(${\sf a}$,${\sf b}$)$ is always assumed to depend on all independent variables that {\sf a} or {\sf b} dependent on, i.e.\ the bit pattern associated with {\sf c} is set to the logical {\sf OR} of those associated with {\sf a} and {\sf b}. In contrast the tight option gives this result only in the unlikely event of an exact tie {\sf a}~$=$~{\sf b}. Otherwise it sets the bit pattern associated with {\sf c} either to that of {\sf a} or to that of {\sf b}, depending on whether {\sf c}~$=$~{\sf a} or {\sf c}~$=$~{\sf b} locally. Obviously, the sparsity pattern obtained with the tight option may contain more zeros than that obtained with the safe option. On the other hand, it will only be valid at points belonging to an area where the function $F$ is locally analytic and that contains the point at which the internal representation was generated. Since generating the sparsity structure using the safe version does not require any reevaluation, it may thus reduce the overall computational cost despite the fact that it produces more nonzero entries. The value of {\sf options[2]} selects the direction of bit pattern propagation. Depending on the number of independent $n$ and of dependent variables $m$ one would prefer the forward mode if $n$ is significant smaller than $m$ and would otherwise use the reverse mode. The routine {\sf jac\_pat} may use the propagation of bitpattern to determine the sparsity pattern. Therefore, a kind of ``strip-mining'' is used to cope with large matrix dimensions. If the system happens to run out of memory, one may reduce the value of the constant {\sf PQ\_STRIPMINE\_MAX} following the instructions in \verb==. The driver routine is prototyped in the header file \verb==, which is included automatically by the global header file \verb== (see \autoref{ssec:DesIH}). The determination of sparsity patterns is illustrated by the examples \verb=sparse_jacobian.cpp= and \verb=jacpatexam.cpp= contained in \verb=examples/additional_examples/sparse=. To compute the sparsity pattern of a Hessian in a row compressed form, ADOL-C provides the driver \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.3in}\= \kill % define tab position \>{\sf int hess\_pat(tag, n, x, HP, options)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf double x[n];} \> // independent variables $x_0$\\ \>{\sf unsigned int HP[][];} \> // row compressed sparsity structure\\ \>{\sf int option;} \> // control parameter \end{tabbing} where the user has to provide {\sf HP} as an $n$ dimensional array of pointers to {\sf unsigned int}s. After the function call {\sf HP} contains the sparsity pattern, where {\sf HP[j][0]} contains the number of nonzero elements in the $j$th row for $1 \le j\le n$. The components {\sf P[j][i]}, $0<${\sf i}~$\le$~{\sf P[j][0]} store the indices of these entries. For determining the sparsity pattern, ADOL-C uses the algorithm described in \cite{Wa05a}. The parameter{\sf option} determines the usage of the safe ({\sf option = 0}, default) or tight mode ({\sf option = 1}) of the computation of the sparsity pattern as described above. This driver routine is prototyped in the header file \verb==, which is included automatically by the global header file \verb== (see \autoref{ssec:DesIH}). An example employing the procedure {\sf hess\_pat} can be found in the file \verb=sparse_hessian.cpp= contained in \verb=examples/additional_examples/sparse=. % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \subsubsection*{Calculation of Seed Matrices} % To compute a compressed derivative matrix from a given sparsity pattern, one has to calculate an appropriate seed matrix that can be used as input for the derivative calculation. To facilitate the generation of seed matrices for a sparsity pattern given in row compressed form, ADOL-C provides the following two drivers, which are based on the ColPack library: \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.3in}\= \kill % define tab position \>{\sf int generate\_seed\_jac(m, n, JP, S, p)}\\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf unsigned int JP[][];} \> // row compressed sparsity structure of Jacobian\\ \>{\sf double S[n][p];} \> // seed matrix\\ \>{\sf int p;} \> // number of columns in $S$ \end{tabbing} The input variables to {\sf generate\_seed\_jac} are the number of dependent variables $m$, the number of independent variables {\sf n} and the sparsity pattern {\sf JP} of the Jacobian computed for example by {\sf jac\_pat}. First, {\sf generate\_seed\_jac} performs a distance-2 coloring of the bipartite graph defined by the sparsity pattern {\sf JP} as described in \cite{GeMaPo05}. The number of colors needed for the coloring determines the number of columns {\sf p} in the seed matrix. Subsequently, {\sf generate\_seed\_jac} allocates the memory needed by {\sf S} and initializes {\sf S} according to the graph coloring. The coloring algorithm that is applied in {\sf generate\_seed\_jac} is used also by the driver {\sf sparse\_jac} described earlier. \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.3in}\= \kill % define tab position \>{\sf int generate\_seed\_hess(n, HP, S, p)}\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf unsigned int HP[][];} \> // row compressed sparsity structure of Jacobian\\ \>{\sf double S[n][p];} \> // seed matrix\\ \>{\sf int p;} \> // number of columns in $S$ \end{tabbing} The input variables to {\sf generate\_seed\_hess} are the number of independents $n$ and the sparsity pattern {\sf HP} of the Hessian computed for example by {\sf hess\_pat}. First, {\sf generate\_seed\_hess} performs an appropriate coloring of the adjacency graph defined by the sparsity pattern {\sf HP}: An acyclic coloring in the case of an indirect recovery of the Hessian from its compressed representation and a star coloring in the case of a direct recovery. Subsequently, {\sf generate\_seed\_hess} allocates the memory needed by {\sf S} and initializes {\sf S} according to the graph coloring. The coloring algorithm applied in {\sf generate\_seed\_hess} is used also by the driver {\sf sparse\_hess} described earlier. The specific set of criteria used to define a seed matrix $S$ depends on whether the sparse derivative matrix to be computed is a Jacobian (nonsymmetric) or a Hessian (symmetric). It also depends on whether the entries of the derivative matrix are to be recovered from the compressed representation \emph{directly} (without requiring any further arithmetic) or \emph{indirectly} (for example, by solving for unknowns via successive substitutions). Appropriate recovery routines are provided by ColPack and used in the drivers {\sf sparse\_jac} and {\sf sparse\_hess} described in the previous subsection. Examples with a detailed analysis of the employed drivers for the exploitation of sparsity can be found in the papers \cite{GePoTaWa06} and \cite{GePoWa08}. These driver routines are prototyped in \verb==, which is included automatically by the global header file \verb== (see \autoref{ssec:DesIH}). An example code illustrating the usage of {\sf generate\_seed\_jac} and {\sf generate\_seed\_hess} can be found in the file \verb=sparse_jac_hess_exam.cpp= contained in \verb=examples/additional_examples/sparse=. % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \subsection{Higher Derivative Tensors} \label{higherOrderDeriv} % Many applications in scientific computing need second- and higher-order derivatives. Often, one does not require full derivative tensors but only the derivatives in certain directions $s_i \in \R^{n}$. Suppose a collection of $p$ directions $s_i \in \R^{n}$ is given, which form a matrix \[ S\; =\; \left [ s_1, s_2,\ldots, s_p \right ]\; \in \; \R^{n \times p}. \] One possible choice is $S = I_n$ with $p = n$, which leads to full tensors being evaluated. ADOL-C provides the function {\sf tensor\_eval} to calculate the derivative tensors \begin{eqnarray} \label{eq:tensor} \left. \nabla_{\mbox{$\scriptstyle \!\!S$}}^{k} F(x_0) \; = \; \frac{\partial^k}{\partial z^k} F(x_0+Sz) \right |_{z=0} \in \R^{p^k}\quad \mbox{for} \quad k = 0,\ldots,d \end{eqnarray} simultaneously. The function {\sf tensor\_eval} has the following calling sequence and parameters: % \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf void tensor\_eval(tag,m,n,d,p,x,tensor,S)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$ \\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf int d;} \> // highest derivative degree $d$\\ \>{\sf int p;} \> // number of directions $p$\\ \>{\sf double x[n];} \> // values of independent variables $x_0$\\ \>{\sf double tensor[m][size];}\> // result as defined in \eqref{eq:tensor} in compressed form\\ \>{\sf double S[n][p];} \> // seed matrix $S$ \end{tabbing} % Using the symmetry of the tensors defined by \eqref{eq:tensor}, the memory requirement can be reduced enormously. The collection of tensors up to order $d$ comprises $\binom{p+d}{d}$ distinct elements. Hence, the second dimension of {\sf tensor} must be greater or equal to $\binom{p+d}{d}$. To compute the derivatives, {\sf tensor\_eval} propagates internally univariate Taylor series along $\binom{n+d-1}{d}$ directions. Then the desired values are interpolated. This approach is described in \cite{Griewank97}. The access of individual entries in symmetric tensors of higher order is a little tricky. We always store the derivative values in the two dimensional array {\sf tensor} and provide two different ways of accessing them. The leading dimension of the tensor array ranges over the component index $i$ of the function $F$, i.e., $F_{i+1}$ for $i = 0,\ldots,m-1$. The sub-arrays pointed to by {\sf tensor[i]} have identical structure for all $i$. Each of them represents the symmetric tensors up to order $d$ of the scalar function $F_{i+1}$ in $p$ variables. % The $\binom{p+d}{d}$ mixed partial derivatives in each of the $m$ tensors are linearly ordered according to the tetrahedral scheme described by Knuth \cite{Knuth73}. In the familiar quadratic case $d=2$ the derivative with respect to $z_j$ and $z_k$ with $z$ as in \eqref{eq:tensor} and $j \leq k$ is stored at {\sf tensor[i][l]} with $l = k*(k+1)/2+j$. At $j = 0 = k$ and hence $l = 0$ we find the function value $F_{i+1}$ itself and the gradient $\nabla F_{i+1}= \partial F_{i+1}/\partial x_k $ is stored at $l=k(k+1)/2$ with $j=0$ for $k=1,\ldots,p$. For general $d$ we combine the variable indices to a multi-index $j = (j_1,j_2,\ldots,j_d)$, where $j_k$ indicates differentiation with respect to variable $x_{j_k}$ with $j_k \in \{0,1,\ldots,p\}$. The value $j_k=0$ indicates no differentiation so that all lower derivatives are also contained in the same data structure as described above for the quadratic case. The location of the partial derivative specified by $j$ is computed by the function % \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int address(d,$\,$j)} \\ \>{\sf int d;} \> // highest derivative degree $d$ \\ \>{\sf int j[d];} \> // multi-index $j$ \end{tabbing} % and it may thus be referenced as {\sf tensor[i][address(d,$\,$j)]}. Notice that the address computation does depend on the degree $d$ but not on the number of directions $p$, which could theoretically be enlarged without the need to reallocate the original tensor. Also, the components of $j$ need to be non-increasing. % To some C programmers it may appear more natural to access tensor entries by successive dereferencing in the form {\sf tensorentry[i][$\,$j1$\,$][$\,$j2$\,$]$\ldots$[$\,$jd$\,$]}. We have also provided this mode, albeit with the restriction that the indices $j_1,j_2,\ldots,j_d$ are non-increasing. In the second order case this means that the Hessian entries must be specified in or below the diagonal. If this restriction is violated the values are almost certain to be wrong and array bounds may be violated. We emphasize that subscripting is not overloaded but that {\sf tensorentry} is a conventional and thus moderately efficient C pointer structure. Such a pointer structure can be allocated and set up completely by the function % \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf void** tensorsetup(m,p,d,tensor)} \\ \>{\sf int m;} \> // number of dependent variables $n$ \\ \>{\sf int p;} \> // number of directions $p$\\ \>{\sf int d;} \> // highest derivative degree $d$\\ \>{\sf double tensor[m][size];}\> // pointer to two dimensional array \end{tabbing} % Here, {\sf tensor} is the array of $m$ pointers pointing to arrays of {\sf size} $\geq \binom{p+d}{d}$ allocated by the user before. During the execution of {\sf tensorsetup}, $d-1$ layers of pointers are set up so that the return value allows the direct dereferencing of individual tensor elements. For example, suppose some active section involving $m \geq 5$ dependents and $n \geq 2$ independents has been executed and taped. We may select $p=2$, $d=3$ and initialize the $n\times 2$ seed matrix $S$ with two columns $s_1$ and $s_2$. Then we are able to execute the code segment \begin{tabbing} \hspace{0.5in}\={\sf double**** tensorentry = (double****) tensorsetup(m,p,d,tensor);} \\ \>{\sf tensor\_eval(tag,m,n,d,p,x,tensor,S);} \end{tabbing} This way, we evaluated all tensors defined in \eqref{eq:tensor} up to degree 3 in both directions $s_1$ and $s_2$ at some argument $x$. To allow the access of tensor entries by dereferencing the pointer structure {\sf tensorentry} has been created. Now, the value of the mixed partial \[ \left. \frac{\partial ^ 3 F_5(x+s_1 z_1+s_2 z_2)}{\partial z_1^2 \partial z_2} \right |_{z_1=0=z_2} \] can be recovered as \begin{center} {\sf tensorentry[4][2][1][1]} \hspace{0.2in} or \hspace{0.2in} {\sf tensor[4][address(d,$\,$j)]}, \end{center} where the integer array {\sf j} may equal (1,1,2), (1,2,1) or (2,1,1). Analogously, the entry \begin{center} {\sf tensorentry[2][1][0][0]} \hspace{0.2in} or \hspace{0.2in} {\sf tensor[2][address(d,$\,$j)]} \end{center} with {\sf j} = (1,0,0) contains the first derivative of the third dependent variable $F_3$ with respect to the first differentiation parameter $z_1$. Note, that the pointer structure {\sf tensorentry} has to be set up only once. Changing the values of the array {\sf tensor}, e.g.~by a further call of {\sf tensor\_eval}, directly effects the values accessed by {\sf tensorentry}. % When no more derivative evaluations are desired the pointer structure {\sf tensorentry} can be deallocated by a call to the function % \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int freetensor(m,p,d, (double ****) tensorentry)}\\ \>{\sf int m;} \> // number of dependent variables $m$ \\ \>{\sf int p;} \> // number of independent variables $p$\\ \>{\sf int d;} \> // highest derivative degree $d$\\ \>{\sf double*** tensorentry[m];} \> // return value of {\sf tensorsetup} \end{tabbing} % that does not deallocate the array {\sf tensor}. The drivers provided for efficient calculation of higher order derivatives are prototyped in the header file \verb==, which is included by the global header file \verb== automatically (see \autoref{ssec:DesIH}). Example codes using the above procedures can be found in the files \verb=taylorexam.C= and \verb=accessexam.C= contained in the subdirectory \verb=examples/additional_examples/taylor=. % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \subsection{Derivatives of Implicit and Inverse Functions} \label{implicitInverse} % Frequently, one needs derivatives of variables $y \in \R^{m}$ that are implicitly defined as functions of some variables $x \in \R^{n-m}$ by an algebraic system of equations \[ G(z) \; = \; 0 \in \R^m \quad {\rm with} \quad z = (y, x) \in \R^n . \] Naturally, the $n$ arguments of $G$ need not be partitioned in this regular fashion and we wish to provide flexibility for a convenient selection of the $n-m$ {\em truly} independent variables. Let $P \in \R^{(n-m)\times n}$ be a $0-1$ matrix that picks out these variables so that it is a column permutation of the matrix $[0,I_{n-m}] \in \R^{(n-m)\times n}$. Then the nonlinear system \[ G(z) \; = \; 0, \quad P z = x, \] has a regular Jacobian, wherever the implicit function theorem yields $y$ as a function of $x$. Hence, we may also write \begin{equation} \label{eq:inv_tensor} F(z) = \left(\begin{array}{c} G(z) \\ P z \end{array} \right)\; \equiv \; \left(\begin{array}{c} 0 \\ P z \end{array} \right)\; \equiv \; S\, x, \end{equation} where $S = [0,I_p]^{T} \in \R^{n \times p}$ with $p=n-m$. Now, we have rewritten the original implicit functional relation between $x$ and $y$ as an inverse relation $F(z) = Sx$. In practice, we may implement the projection $P$ simply by marking $n-m$ of the independents also dependent. Given any $ F : \R^n \mapsto \R^n $ that is locally invertible and an arbitrary seed matrix $S \in \R^{n \times p}$ we may evaluate all derivatives of $z \in \R^n$ with respect to $x \in \R^p$ by calling the following routine: % \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf void inverse\_tensor\_eval(tag,n,d,p,z,tensor,S)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int n;} \> // number of variables $n$\\ \>{\sf int d;} \> // highest derivative degree $d$\\ \>{\sf int p;} \> // number of directions $p$\\ \>{\sf double z[n];} \> // values of independent variables $z$\\ \>{\sf double tensor[n][size];}\> // partials of $z$ with respect to $x$\\ \>{\sf double S[n][p];} \> // seed matrix $S$ \end{tabbing} % The results obtained in {\sf tensor} are exactly the same as if we had called {\sf tensor\_eval} with {\sf tag} pointing to a tape for the evaluation of the inverse function $z=F^{-1}(y)$ for which naturally $n=m$. Note that the columns of $S$ belong to the domain of that function. Individual derivative components can be accessed in tensor exactly as in the explicit case described above. It must be understood that {\sf inverse\_tensor\_eval} actually computes the derivatives of $z$ with respect to $x$ that is defined by the equation $F(z)=F(z_0)+S \, x$. In other words the base point at which the inverse function is differentiated is given by $F(z_0)$. The routine has no capability for inverting $F$ itself as solving systems of nonlinear equations $F(z)=0$ in the first place is not just a differentiation task. However, the routine {\sf jac\_solv} described in \autoref{optdrivers} may certainly be very useful for that purpose. As an example consider the following two nonlinear expressions \begin{eqnarray*} G_1(z_1,z_2,z_3,z_4) & = & z_1^2+z_2^2-z_3^2 \\ G_2(z_1,z_2,z_3,z_4) & = & \cos(z_4) - z_1/z_3 \enspace . \end{eqnarray*} The equations $G(z)=0$ describe the relation between the Cartesian coordinates $(z_1,z_2)$ and the polar coordinates $(z_3,z_4)$ in the plane. Now, suppose we are interested in the derivatives of the second Cartesian $y_1=z_2$ and the second (angular) polar coordinate $y_2=z_4$ with respect to the other two variables $x_1=z_1$ and $x_2=z_3$. Then the active section could look simply like % \begin{tabbing} \hspace{1.5in}\={\sf for (j=1; j $<$ 5;$\,$j++)}\hspace{0.15in} \= {\sf z[j] \boldmath $\ll=$ \unboldmath zp[j];}\\ \>{\sf g[1] = z[1]*z[1]+z[2]*z[2]-z[3]*z[3]; }\\ \>{\sf g[2] = cos(z[4]) - z[1]/z[3]; }\\ \>{\sf g[1] \boldmath $\gg=$ \unboldmath gp[1];} \> {\sf g[2] \boldmath $\gg=$ \unboldmath gp[2];}\\ \>{\sf z[1] \boldmath $\gg=$ \unboldmath zd[1];} \> {\sf z[3] \boldmath $\gg=$ \unboldmath zd[2];} \end{tabbing} % where {\sf zd[1]} and {\sf zd[2]} are dummy arguments. In the last line the two independent variables {\sf z[1]} and {\sf z[3]} are made simultaneously dependent thus generating a square system that can be inverted (at most arguments). The corresponding projection and seed matrix are \begin{eqnarray*} P \;=\; \left( \begin{array}{cccc} 1 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 \end{array}\right) \quad \mbox{and} \quad S^T \; = \; \left( \begin{array}{cccc} 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{array}\right) \enspace . \end{eqnarray*} Provided the vector {\sf zp} is consistent in that its Cartesian and polar components describe the same point in the plane the resulting tuple {\sf gp} must vanish. The call to {\sf inverse\_tensor\_eval} with $n=4$, $p=2$ and $d$ as desired will yield the implicit derivatives, provided {\sf tensor} has been allocated appropriately of course and $S$ has the value given above. % The example is untypical in that the implicit function could also be obtained explicitly by symbolic mani\-pu\-lations. It is typical in that the subset of $z$ components that are to be considered as truly independent can be selected and altered with next to no effort at all. The presented drivers are prototyped in the header file \verb==. As indicated before this header is included by the global header file \verb== automatically (see \autoref{ssec:DesIH}). The example programs \verb=inversexam.cpp=, \verb=coordinates.cpp= and \verb=trigger.cpp= in the directory \verb=examples/additional_examples/taylor= show the application of the procedures described here. % % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \section{Basic Drivers for the Forward and Reverse Mode} \label{forw_rev_ad} % In this section, we present tailored drivers for different variants of the forward mode and the reverse mode, respectively. For a better understanding, we start with a short description of the mathematical background. Provided no arithmetic exception occurs, no comparison including {\sf fmax} or {\sf fmin} yields a tie, {\sf fabs} does not yield zero, and all special functions were evaluated in the interior of their domains, the functional relation between the input variables $x$ and the output variables $y$ denoted by $y=F(x)$ is in fact analytic. In other words, we can compute arbitrarily high derivatives of the vector function $F : I\!\!R^n \mapsto I\!\!R^m$ defined by the active section. We find it most convenient to describe and compute derivatives in terms of univariate Taylor expansions, which are truncated after the highest derivative degree $d$ that is desired by the user. Let \begin{equation} \label{eq:x_of_t} x(t) \; \equiv \; \sum_{j=0}^dx_jt^j \; : \; I\!\!R \; \mapsto \; I\!\!R^n \end{equation} denote any vector polynomial in the scalar variable $t \in I\!\!R$. In other words, $x(t)$ describes a path in $I\!\!R^n$ parameterized by $t$. The Taylor coefficient vectors \[ x_j \; = \; \frac{1}{j!} \left . \frac{\partial ^j}{\partial t^j} x(t) \right |_{t=0} \] are simply the scaled derivatives of $x(t)$ at the parameter origin $t=0$. The first two vectors $x_1,x_2 \in I\!\!R^n$ can be visualized as tangent and curvature at the base point $x_0$, respectively. Provided that $F$ is $d$ times continuously differentiable, it follows from the chain rule that the image path \begin{equation} \label{eq:rela} y(t) \; \equiv \; F(x(t)) \; : \; I\!\!R \;\mapsto \;I\!\!R^m \end{equation} is also smooth and has $(d+1)$ Taylor coefficient vectors $y_j \in I\!\!R^m$ at $t=0$, so that \begin{equation} \label{eq:series} y(t) \; = \; \sum_{j=0}^d y_jt^j + O(t^{d+1}). \end{equation} Also as a consequence of the chain rule, one can observe that each $y_j$ is uniquely and smoothly determined by the coefficient vectors $x_i$ with $i \leq j$. In particular we have \begin{align} \label{eq:y_0y_1} y_0 & = F(x_0) \nonumber \\ y_1 & = F'(x_0) x_1 \nonumber\\ y_2 & = F'(x_0) x_2 + \frac{1}{2}F''(x_0)x_1 x_1 \\ y_3 & = F'(x_0) x_3 + F''(x_0)x_1 x_2 + \frac{1}{6}F'''(x_0)x_1 x_1 x_1\nonumber\\ & \ldots\nonumber \end{align} In writing down the last equations we have already departed from the usual matrix-vector notation. It is well known that the number of terms that occur in these ``symbolic'' expressions for the $y_j$ in terms of the first $j$ derivative tensors of $F$ and the ``input'' coefficients $x_i$ with $i\leq j$ grows very rapidly with $j$. Fortunately, this exponential growth does not occur in automatic differentiation, where the many terms are somehow implicitly combined so that storage and operations count grow only quadratically in the bound $d$ on $j$. Provided $F$ is analytic, this property is inherited by the functions \[ y_j = y_j (x_0,x_1, \ldots ,x_j) \in {I\!\!R}^m , \] and their derivatives satisfy the identities \begin{equation} \label{eq:identity} \frac{\partial y_j}{\partial x_i} = \frac{\partial y_{j-i}} {\partial x_0} = A_{j-i}(x_0,x_1, \ldots ,x_{j-i}) \end{equation} as established in \cite{Chri91a}. This yields in particular \begin{align*} \frac{\partial y_0}{\partial x_0} = \frac{\partial y_1}{\partial x_1} = \frac{\partial y_2}{\partial x_2} = \frac{\partial y_3}{\partial x_3} = A_0 & = F'(x_0) \\ \frac{\partial y_1}{\partial x_0} = \frac{\partial y_2}{\partial x_1} = \frac{\partial y_3}{\partial x_2} = A_1 & = F''(x_0) x_1 \\ \frac{\partial y_2}{\partial x_0} = \frac{\partial y_3}{\partial x_1} = A_2 & = F''(x_0) x_2 + \frac{1}{2}F'''(x_0)x_1 x_1 \\ \frac{\partial y_3}{\partial x_0} = A_3 & = F''(x_0) x_3 + F'''(x_0)x_1 x_2 + \frac{1}{6}F^{(4)}(x_0)x_1 x_1 x_1 \\ & \ldots \end{align*} The $m \times n$ matrices $A_k, k=0,\ldots,d$, are actually the Taylor coefficients of the Jacobian path $F^\prime(x(t))$, a fact that is of interest primarily in the context of ordinary differential equations and differential algebraic equations. Given the tape of an active section and the coefficients $x_j$, the resulting $y_j$ and their derivatives $A_j$ can be evaluated by appropriate calls to the ADOL-C forward mode implementations and the ADOL-C reverse mode implementations. The scalar versions of the forward mode propagate just one truncated Taylor series from the $(x_j)_{j\leq d}$ to the $(y_j)_{j\leq d}$. The vector versions of the forward mode propagate families of $p\geq 1$ such truncated Taylor series in order to reduce the relative cost of the overhead incurred in the tape interpretation. In detail, ADOL-C provides \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int zos\_forward(tag,m,n,keep,x,y)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf int keep;} \> // flag for reverse mode preparation\\ \>{\sf double x[n];} \> // independent vector $x=x_0$\\ \>{\sf double y[m];} \> // dependent vector $y=F(x_0)$ \end{tabbing} for the {\bf z}ero-{\bf o}rder {\bf s}calar forward mode. This driver computes $y=F(x)$ with $0\leq\text{\sf keep}\leq 1$. The integer flag {\sf keep} plays a similar role as in the call to {\sf trace\_on}: It determines if {\sf zos\_forward} writes the first Taylor coefficients of all intermediate quantities into a buffered temporary file, i.e., the value stack, in preparation for a subsequent reverse mode evaluation. The value {\sf keep} $=1$ prepares for {\sf fos\_reverse} or {\sf fov\_reverse} as exlained below. To compute first-order derivatives, one has \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int fos\_forward(tag,m,n,keep,x0,x1,y0,y1)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf int keep;} \> // flag for reverse mode preparation\\ \>{\sf double x0[n];} \> // independent vector $x_0$\\ \>{\sf double x1[n];} \> // tangent vector $x_1$\\ \>{\sf double y0[m];} \> // dependent vector $y_0=F(x_0)$\\ \>{\sf double y1[m];} \> // first derivative $y_1=F'(x_0)x_1$ \end{tabbing} for the {\bf f}irst-{\bf o}rder {\bf s}calar forward mode. Here, one has $0\leq\text{\sf keep}\leq 2$, where \begin{align*} \text{\sf keep} = \left\{\begin{array}{cl} 1 & \text{prepares for {\sf fos\_reverse} or {\sf fov\_reverse}} \\ 2 & \text{prepares for {\sf hos\_reverse} or {\sf hov\_reverse}} \end{array}\right. \end{align*} as exlained below. For the {\bf f}irst-{\bf o}rder {\bf v}ector forward mode, ADOL-C provides \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int fov\_forward(tag,m,n,p,x0,X,y0,Y)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf int p;} \> // number of directions\\ \>{\sf double x0[n];} \> // independent vector $x_0$\\ \>{\sf double X[n][p];} \> // tangent matrix $X$\\ \>{\sf double y0[m];} \> // dependent vector $y_0=F(x_0)$\\ \>{\sf double Y[m][p];} \> // first derivative matrix $Y=F'(x)X$ \end{tabbing} For the computation of higher derivative, the driver \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int hos\_forward(tag,m,n,d,keep,x0,X,y0,Y)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf int d;} \> // highest derivative degree $d$\\ \>{\sf int keep;} \> // flag for reverse mode preparation\\ \>{\sf double x0[n];} \> // independent vector $x_0$\\ \>{\sf double X[n][d];} \> // tangent matrix $X$\\ \>{\sf double y0[m];} \> // dependent vector $y_0=F(x_0)$\\ \>{\sf double Y[m][d];} \> // derivative matrix $Y$ \end{tabbing} implementing the {\bf h}igher-{\bf o}rder {\bf s}calar forward mode. The rows of the matrix $X$ must correspond to the independent variables in the order of their initialization by the \boldmath $\ll=$ \unboldmath operator. The columns of $X = \{x_j\}_{j=1\ldots d}$ represent Taylor coefficient vectors as in \eqref{eq:x_of_t}. The rows of the matrix $Y$ must correspond to the dependent variables in the order of their selection by the \boldmath $\gg=$ \unboldmath operator. The columns of $Y = \{y_j\}_{j=1\ldots d}$ represent Taylor coefficient vectors as in \eqref{eq:series}, i.e., {\sf hos\_forward} computes the values $y_0=F(x_0)$, $y_1=F'(x_0)x_1$, \ldots, where $X=[x_1,x_2,\ldots,x_d]$ and $Y=[y_1,y_2,\ldots,y_d]$. Furthermore, one has $0\leq\text{\sf keep}\leq d+1$, with \begin{align*} \text{\sf keep} \left\{\begin{array}{cl} = 1 & \text{prepares for {\sf fos\_reverse} or {\sf fov\_reverse}} \\ > 1 & \text{prepares for {\sf hos\_reverse} or {\sf hov\_reverse}} \end{array}\right. \end{align*} Once more, there is also a vector version given by \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int hov\_forward(tag,m,n,d,p,x0,X,y0,Y)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf int d;} \> // highest derivative degree $d$\\ \>{\sf int p;} \> // number of directions $p$\\ \>{\sf double x0[n];} \> // independent vector $x_0$\\ \>{\sf double X[n][p][d];} \> // tangent matrix $X$\\ \>{\sf double y0[m];} \> // dependent vector $y_0=F(x_0)$\\ \>{\sf double Y[m][p][d];} \> // derivative matrix $Y$ \end{tabbing} for the {\bf h}igher-{\bf o}rder {\bf v}ector forward mode that computes $y_0=F(x_0)$, $Y_1=F'(x_0)X_1$, \ldots, where $X=[X_1,X_2,\ldots,X_d]$ and $Y=[Y_1,Y_2,\ldots,Y_d]$. There are also overloaded versions providing a general {\sf forward}-call. Details of the appropriate calling sequences are given in \autoref{forw_rev}. Once, the required information is generated due to a forward mode evaluation with an approriate value of the parameter {\sf keep}, one may use the following implementation variants of the reverse mode. To compute first-order derivatives one can use \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int fos\_reverse(tag,m,n,u,z)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf double u[m];} \> // weight vector $u$\\ \>{\sf double z[n];} \> // resulting adjoint value $z^T=u^T F'(x)$ \end{tabbing} as {\bf f}irst-{\bf o}rder {\bf s}calar reverse mode implementation that computes the product $z^T=u^T F'(x)$ after calling {\sf zos\_forward}, {\sf fos\_forward}, or {\sf hos\_forward} with {\sf keep}=1. The corresponding {\bf f}irst-{\bf o}rder {\bf v}ector reverse mode driver is given by \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int fov\_reverse(tag,m,n,q,U,Z)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf int q;} \> // number of weight vectors $q$\\ \>{\sf double U[q][m];} \> // weight matrix $U$\\ \>{\sf double Z[q][n];} \> // resulting adjoint $Z=U F'(x)$ \end{tabbing} that can be used after calling {\sf zos\_forward}, {\sf fos\_forward}, or {\sf hos\_forward} with {\sf keep}=1. To compute higher-order derivatives, ADOL-C provides \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int hos\_reverse(tag,m,n,d,u,Z)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf int d;} \> // highest derivative degree $d$\\ \>{\sf double u[m];} \> // weight vector $u$\\ \>{\sf double Z[n][d+1];} \> // resulting adjoints \end{tabbing} as {\bf h}igher-{\bf o}rder {\bf s}calar reverse mode implementation yielding the adjoints $z_0^T=u^T F'(x_0)=u^T A_0$, $z_1^T=u^T F''(x_0)x_1=u^T A_1$, \ldots, where $Z=[z_0,z_1,\ldots,z_d]$ after calling {\sf fos\_forward} or {\sf hos\_forward} with {\sf keep} $=d+1>1$. The vector version is given by \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int hov\_reverse(tag,m,n,d,q,U,Z,nz)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf int d;} \> // highest derivative degree $d$\\ \>{\sf double U[q][m];} \> // weight vector $u$\\ \>{\sf double Z[q][n][d+1];} \> // resulting adjoints\\ \>{\sf short int nz[q][n];} \> // nonzero pattern of {\sf Z} \end{tabbing} as {\bf h}igher-{\bf o}rder {\bf v}ector reverse mode driver to compute the adjoints $Z_0=U F'(x_0)=U A_0$, $Z_1=U F''(x_0)x_1=U A_1$, \ldots, where $Z=[Z_0,Z_1,\ldots,Z_d]$ after calling {\sf fos\_forward} or {\sf hos\_forward} with {\sf keep} $=d+1>1$. After the function call, the last argument of {\sf hov\_reverse} contains information about the sparsity pattern, i.e. each {\sf nz[i][j]} has a value that characterizes the functional relation between the $i$-th component of $UF^\prime(x)$ and the $j$-th independent value $x_j$ as: \begin{center} \begin{tabular}{ll} 0 & trivial \\ 1 & linear \end{tabular} \hspace*{4ex} \begin{tabular}{ll} 2 & polynomial\\ 3 & rational \end{tabular} \hspace*{4ex} \begin{tabular}{ll} 4 & transcendental\\ 5 & non-smooth \end{tabular} \end{center} Here, ``trivial'' means that there is no dependence at all and ``linear'' means that the partial derivative is a constant that does not dependent on other variables either. ``Non-smooth'' means that one of the functions on the path between $x_i$ and $y_j$ was evaluated at a point where it is not differentiable. All positive labels $1, 2, 3, 4, 5$ are pessimistic in that the actual functional relation may in fact be simpler, for example due to exact cancellations. There are also overloaded versions providing a general {\sf reverse}-call. Details of the appropriate calling sequences are given in the following \autoref{forw_rev}. % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \section{Overloaded Forward and Reverse Calls} \label{forw_rev} % In this section, the several versions of the {\sf forward} and {\sf reverse} routines, which utilize the overloading capabilities of C++, are described in detail. With exception of the bit pattern versions all interfaces are prototyped in the header file \verb==, where also some more specialized {\sf forward} and {\sf reverse} routines are explained. Furthermore, \mbox{ADOL-C} provides C and Fortran-callable versions prototyped in the same header file. The bit pattern versions of {\sf forward} and {\sf reverse} introduced in the \autoref{ProBit} are prototyped in the header file \verb==, which will be included by the header file \verb== automatically. % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \subsection{The Scalar Case} % \label{ScaCas} % Given any correct tape, one may call from within the generating program, or subsequently during another run, the following procedure: % \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int forward(tag,m,n,d,keep,X,Y)} \\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf int d;} \> // highest derivative degree $d$\\ \>{\sf int keep;} \> // flag for reverse sweep \\ \>{\sf double X[n][d+1];} \> // Taylor coefficients $X$ of independent variables \\ \>{\sf double Y[m][d+1];} \> // Taylor coefficients $Y$ as in \eqref{eq:series} \end{tabbing} % The rows of the matrix $X$ must correspond to the independent variables in the order of their initialization by the \boldmath $\ll=$ \unboldmath operator. The columns of $X = \{x_j\}_{j=0\ldots d}$ represent Taylor coefficient vectors as in \eqref{eq:x_of_t}. The rows of the matrix $Y$ must correspond to the dependent variables in the order of their selection by the \boldmath $\gg=$ \unboldmath operator. The columns of $Y = \{y_j\}_{j=0\ldots d}$ represent Taylor coefficient vectors as in \eqref{eq:series}. Thus the first column of $Y$ contains the function value $F(x)$ itself, the next column represents the first Taylor coefficient vector of $F$, and the last column the $d$-th Taylor coefficient vector. The integer flag {\sf keep} determines how many Taylor coefficients of all intermediate quantities are written into the value stack as explained in \autoref{forw_rev_ad}. If {\sf keep} is omitted, it defaults to 0. The given {\sf tag} value is used by {\sf forward} to determine the name of the file on which the tape was written. If the tape file does not exist, {\sf forward} assumes that the relevant tape is still in core and reads from the buffers. After the execution of an active section with \mbox{{\sf keep} = 1} or a call to {\sf forward} with any {\sf keep} $\leq$ $d+1$, one may call the function {\sf reverse} with \mbox{{\sf d} = {\sf keep} $-$ 1} and the same tape identifier {\sf tag}. When $u$ is a vector and $Z$ an $n\times (d+1)$ matrix {\sf reverse} is executed in the scalar mode by the calling sequence % \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int reverse(tag,m,n,d,u,Z)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf int d;} \> // highest derivative degree $d$\\ \>{\sf double u[m];} \> // weighting vector $u$\\ \>{\sf double Z[n][d+1];} \> // resulting adjoints $Z$ \end{tabbing} to compute the adjoints $z_0^T=u^T F'(x_0)=u^T A_0$, $z_1^T=u^T F''(x_0)x_1=u^T A_1$, \ldots, where $Z=[z_0,z_1,\ldots,z_d]$. % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \subsection{The Vector Case} % \label{vecCas} % When $U$ is a matrix {\sf reverse} is executed in the vector mode by the following calling sequence % \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int reverse(tag,m,n,d,q,U,Z,nz)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf int d;} \> // highest derivative degree $d$\\ \>{\sf int q;} \> // number of weight vectors $q$\\ \>{\sf double U[q][m];} \> // weight matrix $U$\\ \>{\sf double Z[q][n][d+1];} \> // resulting adjoints \\ \>{\sf short nz[q][n];} \> // nonzero pattern of {\sf Z} \end{tabbing} % to compute the adjoints $Z_0=U F'(x_0)=U A_0$, $Z_1=U F''(x_0)x_1=U A_1$, \ldots, where $Z=[Z_0,Z_1,\ldots,Z_d]$. When the arguments {\sf p} and {\sf U} are omitted, they default to $m$ and the identity matrix of order $m$, respectively. Through the optional argument {\sf nz} of {\sf reverse} one can compute information about the sparsity pattern of $Z$ as described in detail in the previous \autoref{forw_rev_ad}. The return values of {\sf reverse} calls can be interpreted according to \autoref{retvalues}, but negative return values are not valid, since the corresponding forward sweep would have stopped without completing the necessary taylor file. The return value of {\sf reverse} may be higher than that of the preceding {\sf forward} call because some operations that were evaluated at a critical argument during the forward sweep were found not to impact the dependents during the reverse sweep. In both scalar and vector mode, the degree $d$ must agree with {\sf keep}~$-$~1 for the most recent call to {\sf forward}, or it must be equal to zero if {\sf reverse} directly follows the taping of an active section. Otherwise, {\sf reverse} will return control with a suitable error message. In order to avoid possible confusion, the first four arguments must always be present in the calling sequence. However, if $m$ or $d$ attain their trivial values 1 and 0, respectively, then corresponding dimensions of the arrays {\sf X}, {\sf Y}, {\sf u}, {\sf U}, or {\sf Z} can be omitted, thus eliminating one level of indirection. For example, we may call {\sf reverse(tag,1,n,0,1.0,g)} after declaring {\sf double g[n]} to calculate a gradient of a scalar-valued function. Sometimes it may be useful to perform a forward sweep for families of Taylor series with the same leading term. This vector version of {\sf forward} can be called in the form % \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int forward(tag,m,n,d,p,x0,X,y0,Y)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf int d;} \> // highest derivative degree $d$\\ \>{\sf int p;} \> // number of Taylor series $p$\\ \>{\sf double x0[n];} \> // values of independent variables $x_0$\\ \>{\sf double X[n][p][d];} \> // Taylor coefficients $X$ of independent variables\\ \>{\sf double y0[m];} \> // values of dependent variables $y_0$\\ \>{\sf double Y[m][p][d];} \> // Taylor coefficients $Y$ of dependent variables \end{tabbing} % where {\sf X} and {\sf Y} hold the Taylor coefficients of first and higher degree and {\sf x0}, {\sf y0} the common Taylor coefficients of degree 0. There is no option to keep the values of active variables that are going out of scope or that are overwritten. Therefore this function cannot prepare a subsequent reverse sweep. The return integer serves as a flag to indicate quadratures or altered comparisons as described above in \autoref{reuse_tape}. Since the calculation of Jacobians is probably the most important automatic differentia\-tion task, we have provided a specialization of vector {\sf forward} to the case where $d = 1$. This version can be called in the form % \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int forward(tag,m,n,p,x,X,y,Y)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf int p;} \> // number of partial derivatives $p$ \\ \>{\sf double x[n];} \> // values of independent variables $x_0$\\ \>{\sf double X[n][p];} \> // seed derivatives of independent variables $X$\\ \>{\sf double y[m];} \> // values of dependent variables $y_0$\\ \>{\sf double Y[m][p];} \> // first derivatives of dependent variables $Y$ \end{tabbing} % When this routine is called with {\sf p} = {\sf n} and {\sf X} the identity matrix, the resulting {\sf Y} is simply the Jacobian $F^\prime(x_0)$. In general, one obtains the $m\times p$ matrix $Y=F^\prime(x_0)\,X $ for the chosen initialization of $X$. In a workstation environment a value of $p$ somewhere between $10$ and $50$ appears to be fairly optimal. For smaller $p$ the interpretive overhead is not appropriately amortized, and for larger $p$ the $p$-fold increase in storage causes too many page faults. Therefore, large Jacobians that cannot be compressed via column coloring as could be done for example using the driver {\sf sparse\_jac} should be ``strip-mined'' in the sense that the above first-order-vector version of {\sf forward} is called repeatedly with the successive \mbox{$n \times p$} matrices $X$ forming a partition of the identity matrix of order $n$. % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \subsection{Dependence Analysis} % \label{ProBit} % The sparsity pattern of Jacobians is often needed to set up data structures for their storage and factorization or to allow their economical evaluation by compression \cite{BeKh96}. Compared to the evaluation of the full Jacobian $F'(x_0)$ in real arithmetic computing the Boolean matrix $\tilde{P}\in\left\{0,1\right\}^{m\times n}$ representing its sparsity pattern in the obvious way requires a little less run-time and certainly a lot less memory. The entry $\tilde{P}_{ji}$ in the $j$-th row and $i$-th column of $\tilde{P}$ should be $1 = true$ exactly when there is a data dependence between the $i$-th independent variable $x_{i}$ and the $j$-th dependent variable $y_{j}$. Just like for real arguments one would wish to compute matrix-vector and vector-matrix products of the form $\tilde{P}\tilde{v}$ or $\tilde{u}^{T}\tilde{P}$ by appropriate {\sf forward} and {\sf reverse} routines where $\tilde{v}\in\{0,1\}^{n}$ and $\tilde{u}\in\{0,1\}^{m}$. Here, multiplication corresponds to logical {\sf AND} and addition to logical {\sf OR}, so that algebra is performed in a semi-ring. For practical reasons it is assumed that $s=8*${\sf sizeof}$(${\sf unsigned long int}$)$ such Boolean vectors $\tilde{v}$ and $\tilde{u}$ are combined to integer vectors $v\in\N^{n}$ and $u\in\N^{m}$ whose components can be interpreted as bit patterns. Moreover $p$ or $q$ such integer vectors may be combined column-wise or row-wise to integer matrices $X\in\N^{n \times p}$ and $U\in\N^{q \times m}$, which naturally correspond to Boolean matrices $\tilde{X}\in\{0,1\}^{n\times\left(sp\right)}$ and $\tilde{U}\in\{0,1\}^{\left(sq\right)\times m}$. The provided bit pattern versions of {\sf forward} and {\sf reverse} allow to compute integer matrices $Y\in\N^{m \times p}$ and $Z\in\N^{q \times m}$ corresponding to \begin{equation} \label{eq:int_forrev} \tilde{Y} = \tilde{P}\tilde{X} \qquad \mbox{and} \qquad \tilde{Z} = \tilde{U}\tilde{P} \, , \end{equation} respectively, with $\tilde{Y}\in\{0,1\}^{m\times\left(sp\right)}$ and $\tilde{U}\in\{0,1\}^{\left(sq\right)\times n}$. In general, the application of the bit pattern versions of {\sf forward} or {\sf reverse} can be interpreted as propagating dependences between variables forward or backward, therefore both the propagated integer matrices and the corresponding Boolean matrices are called {\em dependence structures}. The bit pattern {\sf forward} routine % \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int forward(tag,m,n,p,x,X,y,Y,mode)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf int p;} \> // number of integers propagated $p$\\ \>{\sf double x[n];} \> // values of independent variables $x_0$\\ \>{\sf unsigned long int X[n][p];} \> // dependence structure $X$ \\ \>{\sf double y[m];} \> // values of dependent variables $y_0$\\ \>{\sf unsigned long int Y[m][p];} \> // dependence structure $Y$ according to \eqref{eq:int_forrev}\\ \>{\sf char mode;} \> // 0 : safe mode (default), 1 : tight mode \end{tabbing} % can be used to obtain the dependence structure $Y$ for a given dependence structure $X$. The dependence structures are represented as arrays of {\sf unsigned long int} the entries of which are interpreted as bit patterns as described above. For example, for $n=3$ the identity matrix $I_3$ should be passed with $p=1$ as the $3 \times 1$ array \begin{eqnarray*} {\sf X} \; = \; \left( \begin{array}{r} {\sf 1}0000000 \: 00000000 \: 00000000 \: 00000000_2 \\ 0{\sf 1}000000 \: 00000000 \: 00000000 \: 00000000_2 \\ 00{\sf 1}00000 \: 00000000 \: 00000000 \: 00000000_2 \end{array} \right) \end{eqnarray*} in the 4-byte long integer format. The parameter {\sf mode} determines the mode of dependence analysis as explained already in \autoref{sparse}. A call to the corresponding bit pattern {\sf reverse} routine % \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int reverse(tag,m,n,q,U,Z,mode)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf int q;} \> // number of integers propagated q\\ \>{\sf unsigned long int U[q][m];} \> // dependence structure $U$ \\ \>{\sf unsigned long int Z[q][n];} \> // dependence structure $Z$ according to \eqref{eq:int_forrev}\\ \>{\sf char mode;} \> // 0 : safe mode (default), 1 : tight mode \end{tabbing} % yields the dependence structure $Z$ for a given dependence structure $U$. To determine the whole sparsity pattern $\tilde{P}$ of the Jacobian $F'(x)$ as an integer matrix $P$ one may call {\sf forward} or {\sf reverse} with $p \ge n/s$ or $q \ge m/s$, respectively. For this purpose the corresponding dependence structure $X$ or $U$ must be defined to represent the identity matrix of the respective dimension. Due to the fact that always a multiple of $s$ Boolean vectors are propagated there may be superfluous vectors, which can be set to zero. The return values of the bit pattern {\sf forward} and {\sf reverse} routines correspond to those described in \autoref{retvalues}. One can control the storage growth by the factor $p$ using ``strip-mining'' for the calls of {\sf forward} or {\sf reverse} with successive groups of columns or respectively rows at a time, i.e.~partitioning $X$ or $U$ appropriately as described for the computation of Jacobians in \autoref{vecCas}. % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ % \section{Advanced algorithmic differentiation in ADOL-C} \label{adv_ad} % \subsection{Differentiating external functions} % Ideally, AD is applied to a given computation as a whole. This is not always possible because parts of the computation may be coded in a different programming language or may a call to an external library. In the former case one may want to differentiate the parts in question with a different AD tool or provide hand written derivatives. To integrate these In practice, however, sophisticated projects usually evolve over a long period of time. Within this process, a heterogeneous code base for the project develops, which may include the incorporation of external solutions, changes in programming paradigms or even of programming languages. Equally heterogeneous, the computation of derivative values appears. Hence, different \mbox{AD-tools} may be combined with hand-derived codes based on the same or different programming languages. ADOL-C supports such settings by the concept of externally differentiated functions, that is, a function not differentiated by ADOL-C itself. The required derivatives have to be provided by the user. For this purpose, it is required that the externally differentiated function (for example named {\sf\em euler\_step} ) has the following signature. \smallskip \noindent \hspace*{2cm}{\sf int euler\_step(int n, double *x, int m, double *y);} \medskip \noindent Note that the formal paraemters in the signature have {\sf double} type, that is, they are not active as in the original program before the ADOL-C type change. The externally differentiated function has to be {\em registered}\footnote{we record the function pointer} using an \mbox{ADOL-C} method as follows. \smallskip \noindent \hspace*{2cm}{\sf ext\_diff\_fct *edf = reg\_ext\_fct(euler\_step);}. \smallskip \noindent This returns a pointer to an {\sf ext\_diff\_fct} instance specific to the registered function. Then, the user has to supply the function pointers for the call back methods (for example here {\sf zos\_for\_euler\_step} and {\sf fos\_rev\_euler\_step}) the user implemented to compute the derivatives as follows. \begin{tabbing} \hspace*{2cm}\= {\sf edf-$>$zos\_forward = {\em zos\_for\_euler\_step};}\\ \> {\sf // function pointer for computing Zero-Order-Scalar (=zos)}\\ \> {\sf // forward information}\\ % \> {\sf edf-$>$dp\_x = xp;}\\ % \> {\sf edf-$>$dp\_y = yp;}\\ % \> {\sf // double arrays for arguments and results}\\ \> {\sf edf-$>$fos\_reverse = fos\_rev\_euler\_step;} \\ \> {\sf // function pointer for computing First-Order-Scalar (=fos)}\\ \> {\sf reverse information} \end{tabbing} To facilitate the switch between active and passive versions of the parameters {\sf x} and {\sf y} one has to provide (allocate) both variants. I.e. if the call to {\sf euler\_step} was originally \noindent \hspace*{2cm}{\sf rc=euler\_step(n, sOld, m, sNew);} \medskip then the ADOL-C typechange for the calling context will turn {\sf sOld} and {\sf sNew} in {\sf adouble} pointers. To trigger the appropriate action for the derivative computation (i.e. creating an external differentiation entry on the trace) the original call to the externally differentiated function must be substituted by \medskip \noindent \hspace*{2cm}{\sf rc=call\_ext\_fct(edf, n, sOldPassive, sOld, m, sNewPassive, sNew);} \medskip \noindent Here, {\sf sOldPassive} and {\sf sNewPassive} are the passive counterparts ({\sf double} pointers allocated to length {\sf n} and {\sf m}, respectively) to the active arguments {\sf sNew} in {\sf adouble}. The usage of the external function facility is illustrated by the example \verb=ext_diff_func= contained in \verb=examples/additional_examples/ext_diff_func=. There,the external differentiated function is also a C code, but the handling as external differentiated functions also a decrease of the overall required tape size. % \subsection{Advanced algorithmic differentiation of time integration processes} % For many time-dependent applications, the corresponding simulations are based on ordinary or partial differential equations. Furthermore, frequently there are quantities that influence the result of the simulation and can be seen as control of the systems. To compute an approximation of the simulated process for a time interval $[0,T]$ and evaluated the desired target function, one applies an appropriate integration scheme given by \begin{tabbing} \hspace{5mm} \= some initializations yielding $x_0$\\ \> for $i=0,\ldots, N-1$\\ \hspace{10mm}\= $x_{i+1} = F(x_i,u_i,t_i)$\\ \hspace{5mm} \= evaluation of the target function \end{tabbing} where $x_i\in {\bf R}^n$ denotes the state and $u_i\in {\bf R}^m$ the control at time $t_i$ for a given time grid $t_0,\ldots,t_N$ with $t_0=0$ and $t_N=T$. The operator $F : {\bf R}^n \times {\bf R}^m \times {\bf R} \mapsto {\bf R}^n$ defines the time step to compute the state at time $t_i$. Note that we do not assume a uniform grid. When computing derivatives of the target function with respect to the control, the consequences for the tape generation using the ``basic'' taping approach as implemented in ADOL-C so far are shown in the left part of \autoref{fig:bas_tap}. \begin{figure}[htbp] \begin{center} \hspace*{0.5cm}\includegraphics[width=5.8cm]{tapebasic}\hfill \includegraphics[width=5.8cm]{tapeadv} \hspace*{0.5cm}\ \end{center} \hspace*{0.8cm} Basic taping process \hspace*{4.3cm} Advanced taping process \caption{Different taping approaches} \label{fig:bas_tap} \end{figure} As can be seen, the iterative process is completely unrolled due to the taping process. That is, the tape contains an internal representation of each time step. Hence, the overall tape comprises a serious amount of redundant information as illustrated by the light grey rectangles in \autoref{fig:bas_tap}. To overcome the repeated storage of essentially the same information, a {\em nested taping} mechanism has been incorporated into ADOL-C as illustrated on the right-hand side of \autoref{fig:bas_tap}. This new capability allows the encapsulation of the time-stepping procedure such that only the last time step $x_{N} = F(x_{N-1},u_{N-1})$ is taped as one representative of the time steps in addition to a function pointer to the evaluation procedure $F$ of the time steps. The function pointer has to be stored for a possibly necessary retaping during the derivative calculation as explained below. Instead of storing the complete tape, only a very limited number of intermediate states are kept in memory. They serve as checkpoints, such that the required information for the backward integration is generated piecewise during the adjoint calculation. For this modified adjoint computation the optimal checkpointing schedules provided by {\bf revolve} are employed. An adapted version of the software package {\sf revolve} is part of ADOL-C and automatically integrated in the ADOL-C library. Based on {\sf revolve}, $c$ checkpoints are distributed such that computational effort is minimized for the given number of checkpoints and time steps $N$. It is important to note that the overall tape size is drastically reduced due to the advanced taping strategy. For the implementation of this nested taping we introduced a so-called ``differentiating context'' that enables \mbox{ADOL-C} to handle different internal function representations during the taping procedure and the derivative calculation. This approach allows the generation of a new tape inside the overall tape, where the coupling of the different tapes is based on the {\em external differentiated function} described above. Written under the objective of minimal user effort, the checkpointing routines of \mbox{ADOL-C} need only very limited information. The user must provide two routines as implementation of the time-stepping function $F$ with the signatures \medskip \noindent \hspace*{2cm}{\sf int time\_step\_function(int n, adouble *u);}\\ \hspace*{2cm}{\sf int time\_step\_function(int n, double *u);} \medskip \noindent where the function names can be chosen by the user as long as the names are unique.It is possible that the result vector of one time step iteration overwrites the argument vector of the same time step. Then, no copy operations are required to prepare the next time step. At first, the {\sf adouble} version of the time step function has to be {\em registered} using the \mbox{ADOL-C} function \medskip \noindent \hspace*{2cm}{\sf CP\_Context cpc(time\_step\_function);}. \medskip \noindent This function initializes the structure {\sf cpc}. Then, the user has to provide the remaining checkpointing information by the following commands: \begin{tabbing} \hspace*{2cm}\= {\sf cpc.setDoubleFct(time\_step\_function);}\\ \> {\sf // double variante of the time step function}\\ \> {\sf cpc.setNumberOfSteps(N);}\\ \> {\sf // number of time steps to perform}\\ \> {\sf cpc.setNumberOfCheckpoints(10);}\\ \> {\sf // number of checkpoint} \\ \> {\sf cpc.setDimensionXY(n);}\\ \> {\sf // dimension of input/output}\\ \> {\sf cpc.setInput(y);}\\ \> {\sf // input vector} \\ \> {\sf cpc.setOutput(y);}\\ \> {\sf // output vector }\\ \> {\sf cpc.setTapeNumber(tag\_check);}\\ \> {\sf // subtape number for checkpointing} \\ \> {\sf cpc.setAlwaysRetaping(false);}\\ \> {\sf // always retape or not ?} \end{tabbing} Subsequently, the time loop in the function evaluation can be substituted by a call of the function \medskip \noindent \hspace*{2cm}{\sf int cpc.checkpointing();} \medskip \noindent Then, ADOL-C computes derivative information using the optimal checkpointing strategy provided by {\sf revolve} internally, i.e., completely hidden from the user. The presented driver is prototyped in the header file \verb==. This header is included by the global header file \verb== automatically. An example program \verb=checkpointing.cpp= illustrates the checkpointing facilities. It can be found in the directory \verb=examples/additional_examples/checkpointing=. % % % \subsection{Advanced algorithmic differentiation of fixed point iterations} % Quite often, the state of the considered system denoted by $x\in\R^n$ depends on some design parameters denoted by $u\in\R^m$. One example for this setting forms the flow over an aircraft wing. Here, the shape of the wing that is defined by the design vector $u$ determines the flow field $x$. The desired quasi-steady state $x_*$ fulfills the fixed point equation \begin{align} \label{eq:fixedpoint} x_* = F(x_*,u) \end{align} for a given continuously differentiable function $F:\R^n\times\R^m\rightarrow\R^n$. A fixed point property of this kind is also exploited by many other applications. Assume that one can apply the iteration \begin{align} \label{eq:iteration} x_{k+1} = F(x_k,u) \end{align} to obtain a linear converging sequence $\{x_k\}$ generated for any given control $u\in\R^n$. Then the limit point $x_*\in\R^n$ fulfils the fixed point equation~\eqref{eq:fixedpoint}. Moreover, suppose that $\|\frac{dF}{dx}(x_*,u)\|<1$ holds for any pair $(x_*,u)$ satisfying equation \eqref{eq:fixedpoint}. Hence, there exists a differentiable function $\phi:\R^m \rightarrow \R^n$, such that $\phi(u) = F(\phi(u),u)$, where the state $\phi(u)$ is a fixed point of $F$ according to a control $u$. To optimize the system described by the state vector $x=\phi(u)$ with respect to the design vector $u$, derivatives of $\phi$ with respect to $u$ are of particular interest. To exploit the advanced algorithmic differentiation of such fixed point iterations ADOL-C provides the special functions {\tt fp\_iteration(...)}. It has the following interface: \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int fp\_iteration(}\={\sf sub\_tape\_num,double\_F,adouble\_F,norm,norm\_deriv,eps,eps\_deriv,}\\ \> \>{\sf N\_max,N\_max\_deriv,x\_0,u,x\_fix,dim\_x,dim\_u)}\\ \hspace{0.5in}\={\sf short int tag;} \hspace{0.9in}\= \kill % define tab position \>{\sf short int sub\_tape\_num;} \> // tape identification for sub\_tape \\ \>{\sf int *double\_F;} \> // pointer to a function that compute for $x$ and $u$ \\ \> \> // the value $y=F(x,u)$ for {\sf double} arguments\\ \>{\sf int *adouble\_F;} \> // pointer to a function that compute for $x$ and $u$ \\ \> \> // the value $y=F(x,u)$ for {\sf double} arguments\\ \>{\sf int *norm;} \> // pointer to a function that computes\\ \> \> // the norm of a vector\\ \>{\sf int *norm\_deriv;} \> // pointer to a function that computes\\ \> \> // the norm of a vector\\ \>{\sf double eps;} \> // termination criterion for fixed point iteration\\ \>{\sf double eps\_deriv;} \> // termination criterion for adjoint fixed point iteration\\ \>{\sf N\_max;} \> // maximal number of itertions for state computation\\ \>{\sf N\_max\_deriv;} \> // maximal number of itertions for adjoint computation\\ \>{\sf adouble *x\_0;} \> // inital state of fixed point iteration\\ \>{\sf adouble *u;} \> // value of $u$\\ \>{\sf adouble *x\_fic;} \> // final state of fixed point iteration\\ \>{\sf int dim\_x;} \> // dimension of $x$\\ \>{\sf int dim\_u;} \> // dimension of $u$\\ \end{tabbing} % Here {\tt sub\_tape\_num} is an ADOL-C identifier for the subtape that should be used for the fixed point iteration. {\tt double\_F} and {\tt adouble\_F} are pointers to functions, that compute for $x$ and $u$ a single iteration step $y=F(x,u)$. Thereby {\tt double\_F} uses {\tt double} arguments and {\tt adouble\_F} uses ADOL-C {\tt adouble} arguments. The parameters {\tt norm} and {\tt norm\_deriv} are pointers to functions computing the norm of a vector. The latter functions together with {\tt eps}, {\tt eps\_deriv}, {\tt N\_max}, and {\tt N\_max\_deriv} control the iterations. Thus the following loops are performed: \begin{center} \begin{tabular}{ll} do & do \\ ~~~~$k = k+1$ & ~~~~$k = k+1$ \\ ~~~~$x = y$ & ~~~~$\zeta = \xi$ \\ ~~~~$y = F(x,u)$ & ~~~ $(\xi^T,\bar u^T) = \zeta^TF'(x_*,u) + (\bar x^T, 0^T)$ \\ while $\|y-x\|\geq\varepsilon$ and $k\leq N_{max}$ \hspace*{0.5cm} & while $\|\xi -\zeta\|_{deriv}\geq\varepsilon_{deriv}$ \\ & and $k\leq N_{max,deriv}$ \end{tabular} \end{center} The vector for the initial iterate and the control is stored in {\tt x\_0} and {\tt u} respectively. The vector in which the fixed point is stored is {\tt x\_fix}. Finally {\tt dim\_x} and {\tt dim\_u} represent the dimensions $n$ and $m$ of the corresponding vectors. The presented driver is prototyped in the header file \verb==. This header is included by the global header file \verb== automatically. An example code that shows also the expected signature of the function pointers is contained in the directory \verb=examples/additional_examples/fixpoint_exam=. % \subsection{Advanced algorithmic differentiation of OpenMP parallel programs} % ADOL-C allows to compute derivatives in parallel for functions containing OpenMP parallel loops. This implies that an explicit loop-handling approach is applied. A typical situation is shown in \autoref{fig:basic_layout}, \begin{figure}[hbt] \vspace{3ex} \begin{center} \includegraphics[height=4cm]{multiplexed} \\ \begin{picture}(0,0) \put(-48,40){\vdots} \put(48,40){\vdots} \put(-48,80){\vdots} \put(48,80){\vdots} \put(-83,132){function eval.} \put(5,132){derivative calcul.} \end{picture} \end{center} \vspace{-5ex} \caption{Basic layout of mixed function and the corresponding derivation process} \label{fig:basic_layout} \end{figure} where the OpenMP-parallel loop is preceded by a serial startup calculation and followed by a serial finalization phase. Initialization of the OpenMP-parallel regions for \mbox{ADOL-C} is only a matter of adding a macro to the outermost OpenMP statement. Two macros are available that only differ in the way the global tape information is handled. Using {\tt ADOLC\_OPENMP}, this information, including the values of the augmented variables, is always transferred from the serial to the parallel region using {\it firstprivate} directives for initialization. For the special case of iterative codes where parallel regions, working on the same data structures, are called repeatedly the {\tt ADOLC\_OPENMP\_NC} macro can be used. Then, the information transfer is performed only once within the iterative process upon encounter of the first parallel region through use of the {\it threadprivate} feature of OpenMP that makes use of thread-local storage, i.e., global memory local to a thread. Due to the inserted macro, the OpenMP statement has the following structure: \begin{tabbing} \hspace*{1cm} \= {\sf \#pragma omp ... ADOLC\_OPENMP} \qquad \qquad or \\ \> {\sf \#pragma omp ... ADOLC\_OPENMP\_NC} \end{tabbing} Inside the parallel region, separate tapes may then be created. Each single thread works in its own dedicated AD-environment, and all serial facilities of \mbox{ADOL-C} are applicable as usual. The global derivatives can be computed using the tapes created in the serial and parallel parts of the function evaluation, where user interaction is required for the correct derivative concatenation of the various tapes. For the usage of the parallel facilities, the \verb=configure=-command has to be used with the option \verb?--with-openmp-flag=FLAG?, where \verb=FLAG= stands for the system dependent OpenMP flag. The parallel differentiation of a parallel program is illustrated by the example program \verb=openmp_exam.cpp= contained in \verb=examples/additional_examples/openmp_exam=. % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ % \section{Tapeless forward differentiation in ADOL-C} \label{tapeless} % Up to version 1.9.0, the development of the ADOL-C software package was based on the decision to store all data necessary for derivative computation on tapes, where large applications require the tapes to be written out to corresponding files. In almost all cases this means a considerable drawback in terms of run time due to the excessive memory accesses. Using these tapes enables ADOL-C to offer multiple functions. However, it is not necessary for all tasks of derivative computation to do that. Starting with version 1.10.0, ADOL-C now features a tapeless forward mode for computing first order derivatives in scalar mode, i.e., $\dot{y} = F'(x)\dot{x}$, and in vector mode, i.e., $\dot{Y} = F'(x)\dot{X}$. This tapeless variant coexists with the more universal tape based mode in the package. The following subsections describe the source code modifications required to use the tapeless forward mode of ADOL-C. % \subsection{Modifying the Source Code} % Let us consider the coordinate transformation from Cartesian to spherical polar coordinates given by the function $F: \mathbb{R}^3 \to \mathbb{R}^3$, $y = F(x)$, with \begin{eqnarray*} y_1 = \sqrt{x_1^2 + x_2^2 + x_3^2},\qquad y_2 = \arctan\left(\sqrt{x_1^2 + x_2^2}/x_3\right),\qquad y_3 = \arctan(x_2/x_1), \end{eqnarray*} as an example. The corresponding source code is shown in \autoref{fig:tapeless}. \begin{figure}[htb] \framebox[\textwidth]{\parbox{\textwidth}{ %\begin{center} %\begin{flushleft} \begin{tabbing} \= \kill \> {\sf \#include} {\sf $<$iostream$>$}\\ \> {\sf using namespace std;}\\ \> \\ \> {\sf int main() \{}\\ \> {\sf \rule{0.5cm}{0pt}double x[3], y[3];}\\ \> \\ \> {\sf \rule{0.5cm}{0pt}for (int i=0; i$<$3; ++i)\hspace*{3cm}// Initialize $x_i$}\\ \> {\sf \rule{1cm}{0pt}...}\\ \> \\ \> {\sf \rule{0.5cm}{0pt}y[0] = sqrt(x[0]*x[0]+x[1]*x[1]+x[2]*x[2]);}\\ \> {\sf \rule{0.5cm}{0pt}y[1] = atan(sqrt(x[0]*x[0]+x[1]*x[1])/x[2]);}\\ \> {\sf \rule{0.5cm}{0pt}y[2] = atan(x[1]/x[0]);}\\ \> \\ \> {\sf \rule{0.5cm}{0pt}cout $<<$ "y1=" $<<$ y[0] $<<$ " , y2=" $<<$ y[1] $<<$ " , y3=" $<<$ y[2] $<<$ endl;}\\ \> \\ \> {\sf \rule{0.5cm}{0pt}return 0;}\\ \> \} \end{tabbing} %\end{flushleft} %\end{center} }} \caption{Example for tapeless forward mode} \label{fig:tapeless} \end{figure} % Changes to the source code that are necessary for applying the tapeless forward ADOL-C are described in the following two subsections, where the vector mode version is described as extension of the scalar mode. % \subsubsection*{The scalar mode} % To use the tapeless forward mode, one has to include one of the header files \verb#adolc.h# or \verb#adouble.h# where the latter should be preferred since it does not include the tape based functions defined in other header files. Hence, including \verb#adouble.h# avoids mode mixtures, since \verb#adolc.h# is just a wrapper for including all public headers of the ADOL-C package and does not offer own functions. Since the two ADOL-C forward mode variants tape-based and tapeless, are prototyped in the same header file, the compiler needs to know if a tapeless version is intended. This can be done by defining a preprocessor macro named {\sf ADOLC\_TAPELESS}. Note that it is important to define this macro before the header file is included. Otherwise, the tape-based version of ADOL-C will be used. As in the tape based forward version of ADOL-C all derivative calculations are introduced by calls to overloaded operators. Therefore, similar to the tape-based version all independent, intermediate and dependent variables must be declared with type {\sf adouble}. The whole tapeless functionality provided by \verb#adolc.h# was written as complete inline intended code due to run time aspects, where the real portion of inlined code can be influenced by switches for many compilers. Likely, the whole derivative code is inlined by default. Our experiments with the tapeless mode have produced complete inlined code by using standard switches (optimization) for GNU and Intel C++ compiler. To avoid name conflicts resulting from the inlining the tapeless version has its own namespace \verb#adtl#. As a result four possibilities of using the {\sf adouble} type are available for the tapeless version: \begin{itemize} \item Defining a new type \begin{center} \begin{tabular}{l} {\sf typedef adtl::adouble adouble;}\\ ...\\ {\sf adouble tmp;} \end{tabular} \end{center} This is the preferred way. Remember, you can not write an own {\sf adouble} type/class with different meaning after doing the typedef. \item Declaring with namespace prefix \begin{center} \begin{tabular}{l} {\sf adtl::adouble tmp;} \end{tabular} \end{center} Not the most handsome and efficient way with respect to coding but without any doubt one of the safest ways. The identifier {\sf adouble} is still available for user types/classes. \item Trusting macros \begin{center} \begin{tabular}{l} {\sf \#define adouble adtl::adouble}\\ ...\\ {\sf adouble tmp;} \end{tabular} \end{center} This approach should be used with care, since standard defines are text replacements. \item Using the complete namespace \begin{center} \begin{tabular}{l} {\sf \#using namespace adtl;}\\ ...\\ {\sf adouble tmp;} \end{tabular} \end{center} A very clear approach with the disadvantage of uncovering all the hidden secrets. Name conflicts may arise! \end{itemize} After defining the variables only two things are left to do. First one needs to initialize the values of the independent variables for the function evaluation. This can be done by assigning the variables a {\sf double} value. The {\sf ad}-value is set to zero in this case. Additionally, the tapeless forward mode variant of ADOL-C offers a function named {\sf setValue} for setting the value without changing the {\sf ad}-value. To set the {\sf ad}-values of the independent variables ADOL-C offers two possibilities: \begin{itemize} \item Using the constructor \begin{center} \begin{tabular}{l} {\sf adouble x1(2,1), x2(4,0), y;} \end{tabular} \end{center} This would create three adoubles $x_1$, $x_2$ and $y$. Obviously, the latter remains uninitialized. In terms of function evaluation $x_1$ holds the value 2 and $x_2$ the value 4 whereas the derivative values are initialized to $\dot{x}_1=1$ and $\dot{x}_2=0$. \item Setting point values directly \begin{center} \begin{tabular}{l} {\sf adouble x1=2, x2=4, y;}\\ ...\\ {\sf x1.setADValue(1);}\\ {\sf x2.setADValue(0);} \end{tabular} \end{center} The same example as above but now using {\sf setADValue}-method for initializing the derivative values. \end{itemize} % The derivatives can be obtained at any time during the evaluation process by calling the {\sf getADValue}-method \begin{center} \begin{tabular}{l} {\sf adouble y;}\\ ...\\ {\sf cout $<<$ y.getADValue();} \end{tabular} \end{center} \autoref{fig:modcode} shows the resulting source code incorporating all required changes for the example given above. \begin{figure}[htb] \framebox[\textwidth]{\parbox{\textwidth}{ %\begin{center} \begin{tabbing} \hspace*{-1cm} \= \kill \> {\sf \#include $<$iostream$>$}\\ \> {\sf using namespace std;}\\ \> \\ \> {\sf \#define ADOLC\_TAPELESS}\\ \> {\sf \#include $<$adouble.h$>$}\\ \> {\sf typedef adtl::adouble adouble;}\\ \\ \> {\sf int main() \{}\\ \> {\sf \rule{0.5cm}{0pt}adouble x[3], y[3];}\\ \\ \> {\sf \rule{0.5cm}{0pt}for (int i=0; i$<$3; ++i)\hspace*{3cm}// Initialize $x_i$}\\ \> {\sf \rule{1cm}{0pt}...}\\ \\ \> {\sf \rule{0.5cm}{0pt}x[0].setADValue(1);\hspace*{3cm}// derivative of f with respect to $x_1$}\\ \> {\sf \rule{0.5cm}{0pt}y[0] = sqrt(x[0]*x[0]+x[1]*x[1]+x[2]*x[2]);}\\ \> {\sf \rule{0.5cm}{0pt}y[1] = atan(sqrt(x[0]*x[0]+x[1]*x[1])/x[2]);}\\ \> {\sf \rule{0.5cm}{0pt}y[2] = atan(x[1]/x[0]);}\\ \\ \> {\sf \rule{0.5cm}{0pt}cout $<<$ "y1=" $<<$ y[0].getValue() $<<$ " , y2=" $<<$ y[1].getValue ... ;}\\ \> {\sf \rule{0.5cm}{0pt}cout $<<$ "dy2/dx1 = " $<<$ y[1].getADValue() $<<$ endl;}\\ \> {\sf \rule{0.5cm}{0pt}return 0;}\\ \> {\sf \}} \end{tabbing} %\end{center} }} \caption{Example for tapeless scalar forward mode} \label{fig:modcode} \end{figure} % \subsubsection*{The vector mode} % In scalar mode only one direction element has to be stored per {\sf adouble} whereas a field of $p$ elements is needed in the vector mode to cover the computations for the given $p$ directions. The resulting changes to the source code are described in this section. Similar to tapeless scalar forward mode, the tapeless vector forward mode is used by defining {\sf ADOLC\_TAPELESS}. Furthermore, one has to define an additional preprocessor macro named {\sf NUMBER\_DIRECTIONS}. This macro takes the maximal number of directions to be used within the resulting vector mode. Just as {\sf ADOLC\_TAPELESS} the new macro must be defined before including the \verb## header file since it is ignored otherwise. In many situations recompiling the source code to get a new number of directions is at least undesirable. ADOL-C offers a function named {\sf setNumDir} to work around this problem partially. Calling this function, ADOL-C does not take the number of directions from the macro {\sf NUMBER\_DIRECTIONS} but from the argument of {\sf setNumDir}. A corresponding source code would contain the following lines: \begin{center} \begin{tabular}{l} {\sf \#define NUMBER\_DIRECTIONS 10}\\ ...\\ {\sf adtl::setNumDir(5);} \end{tabular} \end{center} Note that using this function does not change memory requirements that can be roughly determined by ({\sf NUMBER\_DIRECTIONS}$+1$)*(number of {\sf adouble}s). Compared to the scalar case setting and getting the derivative values, i.e. the directions, is more involved. Instead of working with single {\sf double} values, pointer to fields of {\sf double}s are used as illustrated by the following example: \begin{center} \begin{tabular}{l} {\sf \#define NUMBER\_DIRECTIONS 10}\\ ...\\ {\sf adouble x, y;}\\ {\sf double *ptr=new double[NUMBER\_DIRECTIONS];}\\ ...\\ {\sf x1=2;}\\ {\sf x1.setADValue(ptr);}\\ ...\\ {\sf ptr=y.getADValue();} \end{tabular} \end{center} Additionally, the tapeless vector forward mode of ADOL-C offers two new methods for setting/getting the derivative values. Similar to the scalar case, {\sf double} values are used but due to the vector mode the position of the desired vector element must be supplied in the argument list: \begin{center} \begin{tabular}{l} {\sf \#define NUMBER\_DIRECTIONS 10}\\ ...\\ {\sf adouble x, y;}\\ ...\\ {\sf x1=2;}\\ {\sf x1.setADValue(5,1);\hspace*{3.7cm}// set the 6th point value of x to 1.0}\\ ...\\ {\sf cout $<<$ y.getADValue(3) $<<$ endl;\hspace*{1cm}// print the 4th derivative value of y} \end{tabular} \end{center} The resulting source code containing all changes that are required is shown in \autoref{fig:modcode2} \begin{figure}[!h!t!b] \framebox[\textwidth]{\parbox{\textwidth}{ \begin{tabbing} \hspace*{-1cm} \= \kill \> {\sf \#include $<$iostream$>$}\\ \> {\sf using namespace std;}\\ \\ \> {\sf \#define ADOLC\_TAPELESS}\\ \> {\sf \#define NUMBER\_DIRECTIONS 3}\\ \> {\sf \#include $<$adouble.h$>$}\\ \> {\sf typedef adtl::adouble adouble;}\\ \\ \> {\sf ADOLC\_TAPELESS\_UNIQUE\_INTERNALS;}\\ \\ \> {\sf int main() \{}\\ \> {\sf \rule{0.5cm}{0pt}adouble x[3], y[3];}\\ \\ \> {\sf \rule{0.5cm}{0pt}for (int i=0; i$<$3; ++i) \{}\\ \> {\sf \rule{1cm}{0pt}...\hspace*{3cm}// Initialize $x_i$}\\ \> {\sf \rule{1cm}{0pt}for (int j=0; j$<$3; ++j) if (i==j) x[i].setADValue(j,1);}\\ \> {\sf \rule{0.5cm}{0pt}\}}\\ \\ \> {\sf \rule{0.5cm}{0pt}y[0] = sqrt(x[0]*x[0]+x[1]*x[1]+x[2]*x[2]);}\\ \> {\sf \rule{0.5cm}{0pt}y[1] = atan(sqrt(x[0]*x[0]+x[1]*x[1])/x[2]);}\\ \> {\sf \rule{0.5cm}{0pt}y[2] = atan(x[1]/x[0]);}\\ \\ \> {\sf \rule{0.5cm}{0pt}cout $<<$ "y1=" $<<$ y[0].getValue() $<<$ " , y2=" $<<$ y[1].getValue ... ;}\\ \> {\sf \rule{0.5cm}{0pt}cout $<<$ "jacobian : " $<<$ endl;}\\ \> {\sf \rule{0.5cm}{0pt}for (int i=0; i$<$3; ++i) \{}\\ \> {\sf \rule{1cm}{0pt}for (int j=0; j$<$3; ++j)}\\ \> {\sf \rule{1.5cm}{0pt}cout $<<$ y[i].getADValue(j) $<<$ " ";}\\ \> {\sf \rule{1cm}{0pt}cout $<<$ endl;}\\ \> {\sf \rule{0.5cm}{0pt}\}}\\ \> {\sf \rule{0.5cm}{0pt}return 0;}\\ \> {\sf \}} \end{tabbing} }} \caption{Example for tapeless vector forward mode} \label{fig:modcode2} \end{figure} % \subsection{Compiling and Linking the Source Code} % After incorporating the required changes, one has to compile the source code and link the object files to get the executable. As long as the ADOL-C header files are not included in the absolute path the compile sequence should be similar to the following example: \begin{center} \begin{tabular}{l} {\sf g++ -I/home/username/adolc\_base/include -c tapeless\_scalar.cpp} \end{tabular} \end{center} The \verb#-I# option tells the compiler where to search for the ADOL-C header files. This option can be omitted when the headers are included with absolute path or if ADOL-C is installed in a ``global'' directory. Since the tapeless forward version of ADOL-C is implemented in the header \verb#adouble.h# as complete inline intended version, the object files do not need to be linked against any external ADOL-C code or the ADOL-C library. Therefore, the example started above could be finished with the following command: \begin{center} \begin{tabular}{l} {\sf g++ -o tapeless\_scalar tapeless\_scalar.o} \end{tabular} \end{center} The mentioned source codes {\sf tapeless\_scalar.c} and {\sf tapeless\_vector.c} illustrating the use of the for tapeless scalar and vector mode can be found in the directory {\sf examples}. % \subsection{Concluding Remarks for the Tapeless Forward Mode Variant} % As many other AD methods the tapeless forward mode provided by the ADOL-C package has its own strengths and drawbacks. Please read the following section carefully to become familiar with the things that can occur: \begin{itemize} \item Advantages: \begin{itemize} \item Code speed\\ Increasing computation speed was one of the main aspects in writing the tapeless code. In many cases higher performance can be expected this way. \item Easier linking process\\ As another result from the code inlining the object code does not need to be linked against an ADOL-C library. \item Smaller overall memory requirements\\ Tapeless ADOL-C does not write tapes anymore, as the name implies. Loop ''unrolling'' can be avoided this way. Considered main memory plus disk space as overall memory requirements the tapeless version can be executed in a more efficient way. \end{itemize} \item Drawbacks: \begin{itemize} \item Main memory limitations\\ The ability to compute derivatives to a given function is bounded by the main memory plus swap size when using tapeless ADOL-C. Computation from swap should be avoided anyway as far as possible since it slows down the computing time drastically. Therefore, if the program execution is terminated without error message insufficient memory size can be the reason among other things. The memory requirements $M$ can be determined roughly as followed: \begin{itemize} \item Scalar mode: $M=$(number of {\sf adouble}s)$*2 + M_p$ \item Vector mode: $M=$(number of {\sf adouble}s)*({\sf NUMBER\_DIRECTIONS}$+1) + M_p$ \end{itemize} where the storage size of all non {\sf adouble} based variables is described by $M_p$. \item Compile time\\ As discussed in the previous sections, the tapeless forward mode of the ADOL-C package is implemented as inline intended version. Using this approach results in a higher source code size, since every operation involving at least one {\sf adouble} stands for the operation itself as well as for the corresponding derivative code after the inlining process. Therefore, the compilation time needed for the tapeless version may be higher than that of the tape based code. \item Code Size\\ A second drawback and result of the code inlining is the increase of code sizes for the binaries. The increase factor compared to the corresponding tape based program is difficult to quantify as it is task dependent. Practical results have shown that values between 1.0 and 2.0 can be expected. Factors higher than 2.0 are possible too and even values below 1.0 have been observed. \end{itemize} \end{itemize} % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \section{Installing and Using ADOL-C} \label{install} % \subsection{Generating the ADOL-C Library} \label{genlib} % The currently built system is best summarized by the ubiquitous gnu install triplet \begin{center} \verb=configure - make - make install= . \end{center} Executing this three steps from the package base directory \verb== will compile the static and the dynamic ADOL-C library with default options and install the package (libraries and headers) into the default installation directory {\tt \verb=<=\$HOME/adolc\_base\verb=>=}. Inside the install directory the subdirectory \verb=include= will contain all the installed header files that may be included by the user program, the subdirectory \verb=lib= will contain the 32-bit compiled library and the subdirectory \verb=lib64= will contain the 64-bit compiled library. Depending on the compiler only one of \verb=lib= or \verb=lib64= may be created. Before doing so the user may modify the header file \verb=usrparms.h= in order to tailor the \mbox{ADOL-C} package to the needs in the particular system environment as discussed in \autoref{Customizing}. The configure procedure which creates the necessary \verb=Makefile=s can be customized by use of some switches. Available options and their meaning can be obtained by executing \verb=./configure --help= from the package base directory. All object files and other intermediately generated files can be removed by the call \verb=make clean=. Uninstalling ADOL-C by executing \verb=make uninstall= is only reasonable after a previous called \verb=make install= and will remove all installed package files but will leave the created directories behind. The sparse drivers are included in the ADOL-C libraries if the \verb=./configure= command is executed with the option \verb=--enable-sparse=. The ColPack library available at \verb=http://www.cscapes.org/coloringpage/software.htm= is required to compute the sparse structures, and is searched for in all the default locations as well as in the subdirectory \verb==. In case the library and its headers are installed in a nonstandard path this may be specified with the \verb?--with-colpack=PATH? option. It is assumed that the library and its header files have the following directory structure: \verb?PATH/include? contains all the header files, \verb?PATH/lib? contains the 32-bit compiled library and \verb?PATH/lib64? contains the 64-bit compiled library. Depending on the compiler used to compile {\sf ADOL-C} one of these libraries will be used for linking. The option \verb=--disable-stdczero= turns off the initialization in the {\sf adouble} default constructor. This will improve efficiency but requires that there be no implicit array initialization in the code, see \autoref{WarSug}. \subsection{Compiling and Linking the Example Programs} % The installation procedure described in \autoref{genlib} also provides the \verb=Makefile=s to compile the example programs in the directories \verb=<=\texttt{\packagetar}\verb=>/ADOL-C/examples= and the additional examples in \verb=<=\texttt{\packagetar}\verb=>/ADOL-C/examples/additional_examples=. However, one has to execute the \verb=configure= command with appropriate options for the ADOL-C package to enable the compilation of examples. Available options are: \begin{center} \begin{tabular}[t]{ll} \verb=--enable-docexa=&build all examples discussed in this manual\\ &(compare \autoref{example})\\ \verb=--enable-addexa=&build all additional examples\\ &(See file \verb=README= in the various subdirectories) \end{tabular} \end{center} Just calling \verb=make= from the packages base directory generates all configured examples and the library if necessary. Compiling from subdirectory \verb=examples= or one of its subfolders is possible too. At least one kind of the ADOL-C library (static or shared) must have been built previously in that case. Hence, building the library is always the first step. For Compiling the library and the documented examples on Windows using Visual Studio please refer to the \verb== files in the \verb==, \verb== and \verb== subdirectories. % \subsection{Description of Important Header Files} \label{ssec:DesIH} % The application of the facilities of ADOL-C requires the user source code (program or module) to include appropriate header files where the desired data types and routines are prototyped. The new hierarchy of header files enables the user to take one of two possible ways to access the right interfaces. The first and easy way is recommended to beginners: As indicated in \autoref{globalHeaders} the provided {\em global} header file \verb== can be included by any user code to support all capabilities of ADOL-C depending on the particular programming language of the source. \begin{table}[h] \center \small \begin{tabular}{|p{3.6cm}|p{10.5cm}|}\hline \verb== & \begin{tabular*}{10.5cm}{cp{9.5cm}} \boldmath $\rightarrow$ \unboldmath & global header file available for easy use of ADOL-C; \\ $\bullet$ & includes all ADOL-C header files depending on whether the users source is C++ or C code. \end{tabular*} \\ \hline \verb== & \begin{tabular*}{10.5cm}{cp{9.5cm}} \boldmath $\rightarrow$ \unboldmath & user customization of ADOL-C package (see \autoref{Customizing}); \\ $\bullet$ & after a change of user options the ADOL-C library \verb=libadolc.*= has to be rebuilt (see \autoref{genlib}); \\ $\bullet$ & is included by all ADOL-C header files and thus by all user programs. \end{tabular*} \\ \hline \end{tabular} \caption{Global header files} \label{globalHeaders} \end{table} The second way is meant for the more advanced ADOL-C user: Some source code includes only those interfaces used by the particular application. The respectively needed header files are indicated throughout the manual. Existing application determined dependences between the provided ADOL-C routines are realized by automatic includes of headers in order to maintain easy use. The header files important to the user are described in the \autoref{importantHeaders1} and \autoref{importantHeaders2}. \begin{table}[h] \center \small \begin{tabular}{|p{3.8cm}|p{10.5cm}|}\hline %\multicolumn{2}{|l|}{\bf Tracing/taping}\\ \hline \verb== & \begin{tabular*}{10.5cm}{cp{9.5cm}} \boldmath $\rightarrow$ \unboldmath & provides the interface to the basic active scalar data type of ADOL-C: {\sf class adouble} (see \autoref{prepar}); % $\bullet$ & includes the header files \verb== and \verb==. \end{tabular*} \\ \hline % \verb== & %\begin{tabular*}{10.5cm}{cp{9.5cm}} % \boldmath $\rightarrow$ \unboldmath % & provides the interface to the active vector % and matrix data types of ADOL-C: {\sf class adoublev} % and {\sf class adoublem}, respectively % (see \autoref{arrays}); \\ % $\bullet$ & is included by the header \verb==. %\end{tabular*} %\\ \hline \verb== & \begin{tabular*}{10.5cm}{cp{9.5cm}} \boldmath $\rightarrow$ \unboldmath & provides functions to start/stop the tracing of active sections (see \autoref{markingActive}) as well as utilities to obtain tape statistics (see \autoref{examiningTape}); \\ $\bullet$ & is included by the header \verb==. \end{tabular*} \\ \hline \end{tabular} \caption{Important header files: tracing/taping} \label{importantHeaders1} \end{table} % \begin{table}[h] \center \small \begin{tabular}{|p{3.8cm}|p{10.5cm}|}\hline %\multicolumn{2}{|l|}{\bf Evaluation of derivatives}\\ \hline \verb== & \begin{tabular*}{10.5cm}{cp{9.5cm}} \boldmath $\rightarrow$ \unboldmath & provides interfaces to the {\sf forward} and {\sf reverse} routines as basic versions of derivative evaluation (see \autoref{forw_rev}); \\ $\bullet$ & comprises C++, C, and Fortran-callable versions; \\ $\bullet$ & includes the header \verb==; \\ $\bullet$ & is included by the header \verb==. \end{tabular*} \\ \hline \verb== & \begin{tabular*}{10.5cm}{cp{9.5cm}} \boldmath $\rightarrow$ \unboldmath & provides ``easy to use'' drivers for solving optimization problems and nonlinear equations (see \autoref{optdrivers}); \\ $\bullet$ & comprises C and Fortran-callable versions. \end{tabular*} \\ \hline \begin{minipage}{3cm} \verb== \end{minipage} & \begin{tabular*}{10.5cm}{cp{9.5cm}} \boldmath $\rightarrow$ \unboldmath & provides the ``easy to use'' sparse drivers to exploit the sparsity structure of Jacobians (see \autoref{sparse}); \\ \boldmath $\rightarrow$ \unboldmath & provides interfaces to \mbox{C++}-callable versions of {\sf forward} and {\sf reverse} routines propagating bit patterns (see \autoref{ProBit}); \\ $\bullet$ & is included by the header \verb==. \end{tabular*} \\ \hline \begin{minipage}{3cm} \verb== \end{minipage} & \begin{tabular*}{10.5cm}{cp{9.5cm}} \boldmath $\rightarrow$ \unboldmath & provides interfaces to the underlying C-callable versions of {\sf forward} and {\sf reverse} routines propagating bit patterns. \end{tabular*} \\ \hline \begin{minipage}{3cm} \verb== \end{minipage} & \begin{tabular*}{10.5cm}{cp{9.5cm}} \boldmath $\rightarrow$ \unboldmath & provides ``easy to use'' drivers for numerical solution of ordinary differential equations (see \autoref{odedrivers}); \\ $\bullet$ & comprises C++, C, and Fortran-callable versions; \\ $\bullet$ & includes the header \verb==. \end{tabular*} \\ \hline \begin{minipage}{3cm} \verb== \end{minipage} & \begin{tabular*}{10.5cm}{cp{9.5cm}} \boldmath $\rightarrow$ \unboldmath & provides ``easy to use'' drivers for evaluation of higher order derivative tensors (see \autoref{higherOrderDeriv}) and inverse/implicit function differentiation (see \autoref{implicitInverse});\\ $\bullet$ & comprises C++ and C-callable versions. \end{tabular*} \\ \hline \verb== & \begin{tabular*}{10.5cm}{cp{9.5cm}} \boldmath $\rightarrow$ \unboldmath & provides C++ and C functions for allocation of vectors, matrices and three dimensional arrays of {\sf double}s. \end{tabular*} \\ \hline \end{tabular} \caption{Important header files: evaluation of derivatives} \label{importantHeaders2} \end{table} % \subsection{Compiling and Linking C/C++ Programs} % To compile a C/C++ program or single module using ADOL-C data types and routines one has to ensure that all necessary header files according to \autoref{ssec:DesIH} are included. All modules involving {\em active} data types as {\sf adouble} %, {\bf adoublev} and {\bf adoublem} have to be compiled as C++. Modules that make use of a previously generated tape to evaluate derivatives can either be programmed in ANSI-C (while avoiding all C++ interfaces) or in C++. Depending on the chosen programming language the header files provide the right ADOL-C prototypes. For linking the resulting object codes the library \verb=libadolc.*= must be used (see \autoref{genlib}). % \subsection{Adding Quadratures as Special Functions} % \label{quadrat} % Suppose an integral \[ f(x) = \int\limits^{x}_{0} g(t) dt \] is evaluated numerically by a user-supplied function \begin{center} {\sf double myintegral(double\& x);} \end{center} Similarly, let us suppose that the integrand itself is evaluated by a user-supplied block of C code {\sf integrand}, which computes a variable with the fixed name {\sf val} from a variable with the fixed name {\sf arg}. In many cases of interest, {\sf integrand} will simply be of the form \begin{center} {\sf \{ val = expression(arg) \}}\enspace . \end{center} In general, the final assignment to {\sf val} may be preceded by several intermediate calculations, possibly involving local active variables of type {\sf adouble}, but no external or static variables of that type. However, {\sf integrand} may involve local or global variables of type {\sf double} or {\sf int}, provided they do not depend on the value of {\sf arg}. The variables {\sf arg} and {\sf val} are declared automatically; and as {\sf integrand} is a block rather than a function, {\sf integrand} should have no header line. Now the function {\sf myintegral} can be overloaded for {\sf adouble} arguments and thus included in the library of elementary functions by the following modifications: \begin{enumerate} \item At the end of the file \verb==, include the full code defining \\ {\sf double myintegral(double\& x)}, and add the line \begin{center} {\sf extend\_quad(myintegral, integrand); } \end{center} This macro is extended to the definition of {\sf adouble myintegral(adouble\& arg)}. Then remake the library \verb=libadolc.*= (see \autoref{genlib}). \item In the definition of the class {\sf ADOLC\_DLL\_EXPORT adouble} in \verb==, add the statement \begin{center} {\sf friend adouble myintegral(adouble\&)}. \end{center} \end{enumerate} In the first modification, {\sf myintegral} represents the name of the {\sf double} function, whereas {\sf integrand} represents the actual block of C code. For example, in case of the inverse hyperbolic cosine, we have {\sf myintegral} = {\sf acosh}. Then {\sf integrand} can be written as {\sf \{ val = sqrt(arg*arg-1); \}} so that the line \begin{center} {\sf extend\_quad(acosh,val = sqrt(arg*arg-1));} \end{center} can be added to the file \verb==. A mathematically equivalent but longer representation of {\sf integrand} is \begin{center} \begin{tabbing} {\sf \{ }\hspace{1.0in}\= {\sf \{ adouble} \= temp = \kill \>{\sf \{ adouble} \> {\sf temp = arg;} \\ \> \ \> {\sf temp = temp*temp; } \\ \> \ \> {\sf val = sqrt(temp-1); \}} \end{tabbing} \end{center} The code block {\sf integrand} may call on any elementary function that has already been defined in file \verb==, so that one may also introduce iterated integrals. % % \section{Example Codes} \label{example} % The following listings are all simplified versions of codes that are contained in the example subdirectory \verb=<=\texttt{\packagetar}\verb=>/ADOL-C/examples= of ADOL-C. In particular, we have left out timings, which are included in the complete codes. % \subsection{Speelpenning's Example ({\tt speelpenning.cpp})} % The first example evaluates the gradient and the Hessian of the function \[ y \; = \; f(x)\; =\; \prod_{i=0}^{n-1} x_i \] using the appropriate drivers {\sf gradient} and {\sf hessian}. \begin{verbatim} #include // use of active doubles and taping #include // use of "Easy to Use" drivers // gradient(.) and hessian(.) #include // use of taping ... void main() { int n,i,j; size_t tape_stats[STAT_SIZE]; cout << "SPEELPENNINGS PRODUCT (ADOL-C Documented Example) \n"; cout << "number of independent variables = ? \n"; cin >> n; double* xp = new double[n]; double yp = 0.0; adouble* x = new adouble[n]; adouble y = 1; for(i=0;i>= yp; delete[] x; trace_off(); tapestats(1,tape_stats); // reading of tape statistics cout<<"maxlive "<j) // lower half of hessian errh += fabs(H[i][j]-g[i]/xp[j]); } } cout << yp-1/(1.0+n) << " error in function \n"; cout << errg <<" error in gradient \n"; cout << errh <<" consistency check \n"; } // end main \end{verbatim} % \subsection{Power Example ({\tt powexam.cpp})} % The second example function evaluates the $n$-th power of a real variable $x$ in $\log_2 n$ multiplications by recursive halving of the exponent. Since there is only one independent variable, the scalar derivative can be computed by using both {\sf forward} and {\sf reverse}, and the results are subsequently compared. \begin{verbatim} #include // use of ALL ADOL-C interfaces adouble power(adouble x, int n) { adouble z=1; if (n>0) { // recursion and branches int nh =n/2; // that do not depend on z = power(x,nh); // adoubles are fine !!!! z *= z; if (2*nh != n) z *= x; return z; } // end if else { if (n==0) // the local adouble z dies return z; // as it goes out of scope. else return 1/power(x,-n); } // end else } // end power \end{verbatim} The function {\sf power} above was obtained from the original undifferentiated version by simply changing the type of all {\sf double}s including the return variable to {\sf adouble}s. The new version can now be called from within any active section, as in the following main program. \begin{verbatim} #include ... // as above int main() { int i,n,tag=1; cout <<"COMPUTATION OF N-TH POWER (ADOL-C Documented Example)\n\n"; cout<<"monomial degree=? \n"; // input the desired degree cin >> n; // allocations and initializations double* Y[1]; *Y = new double[n+2]; double* X[1]; // allocate passive variables with *X = new double[n+4]; // extra dimension for derivatives X[0][0] = 0.5; // function value = 0. coefficient X[0][1] = 1.0; // first derivative = 1. coefficient for(i=0;i>= Y[0][0]; // only one dependent adouble trace_off(); // no global adouble has died // end of active section double u[1]; // weighting vector u[0]=1; // for reverse call for(i=0;i // use of active doubles and taping #include // use of basic forward/reverse // interfaces of ADOL-C adouble** A; // A is an n x n matrix int i,n; // k <= n is the order adouble det(int k, int m) { // of the sub-matrix if (m == 0) return 1.0 ; // its column indices else { // are encoded in m adouble* pt = A[k-1]; adouble t = zero; // zero is predefined int s, p =1; if (k%2) s = 1; else s = -1; for(i=0;i= p) { if (m == p) { if (s>0) t += *pt; else t -= *pt; } else { if (s>0) t += *pt*det(k-1,m-p); // recursive call to det else t -= *pt*det(k-1,m-p); } // recursive call to det s = -s;} ++pt; p = p1;} return t; } } // end det \end{verbatim} As one can see, the overloading mechanism has no problem with pointers and looks exactly the same as the original undifferentiated function except for the change of type from {\sf double} to {\sf adouble}. If the type of the temporary {\sf t} or the pointer {\sf pt} had not been changed, a compile time error would have resulted. Now consider a corresponding calling program. \begin{verbatim} #include ... // as above int main() { int i,j, m=1,tag=1,keep=1; cout << "COMPUTATION OF DETERMINANTS (ADOL-C Documented Example)\n\n"; cout << "order of matrix = ? \n"; // select matrix size cin >> n; A = new adouble*[n]; trace_on(tag,keep); // tag=1=keep double detout=0.0, diag = 1.0; // here keep the intermediates for for(i=0;i>= detout; // actual function call printf("\n %f - %f = %f (should be 0)\n",detout,diag,detout-diag); trace_off(); double u[1]; u[0] = 1.0; double* B = new double[n*n]; reverse(tag,1,n*n,1,u,B); cout <<" \n first base? : "; for (i=0;i // use of active doubles and taping #include // use of "Easy To use" ODE drivers #include // use of ADOL-C allocation utilities void tracerhs(short int tag, double* py, double* pyprime) { adouble y[3]; // this time we left the parameters adouble yprime[3]; // passive and use the vector types trace_on(tag); for (int i=0; i<3; i++) y[i] <<= py[i]; // initialize and mark independents yprime[0] = -sin(y[2]) + 1e8*y[2]*(1-1/y[0]); yprime[1] = -10*y[0] + 3e7*y[2]*(1-y[1]); yprime[2] = -yprime[0] - yprime[1]; yprime >>= pyprime; // mark and pass dependents trace_off(tag); } // end tracerhs \end{verbatim} The Jacobian of the right-hand side has large negative eigenvalues, which make the ODE quite stiff. We have added some numerically benign transcendentals to make the differentiation more interesting. The following main program uses {\sf forode} to calculate the Taylor series defined by the ODE at the given point $y_0$ and {\sf reverse} as well as {\sf accode} to compute the Jacobians of the coefficient vectors with respect to $x_0$. \begin{verbatim} #include ....... // as above int main() { int i,j,deg; int n=3; double py[3]; double pyp[3]; cout << "MODIFIED ROBERTSON TEST PROBLEM (ADOL-C Documented Example)\n"; cout << "degree of Taylor series =?\n"; cin >> deg; double **X; X=(double**)malloc(n*sizeof(double*)); for(i=0;i // use of ALL ADOL-C interfaces %void gausselim(int n, adoublem& A, adoublev& bv) { %along i; // active integer declaration %adoublev temp(n); // active vector declaration %adouble r,rj,temps; %int j,k; %for(k=0;k=0;k--) // backsubstitution % temp[k] = (bv[k]-(A[k]*temp))/A[k][k]; %bv=temp; %} // end gausselim %\end{verbatim} %\noindent This function can be called from any program %that suitably initializes %the components of {\sf A} and {\sf bv} %as independents. The resulting tape can be %used to solve any nonsingular linear system of the same size and %to get the sensitivities of the solution with respect to the %system matrix and the right hand side. %\vspace*{-4mm} % \section*{Acknowledgements} % Parts of the ADOL-C source were developed by Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, and Olaf Vogel. We are also indebted to George Corliss, Tom Epperly, Bruce Christianson, David Gay, David Juedes, Brad Karp, Koichi Kubota, Bob Olson, Marcela Rosemblun, Dima Shiriaev, Jay Srinivasan, Chuck Tyner, Jean Utke, and Duane Yoder for helping in various ways with the development and documentation of ADOL-C. % \begin{thebibliography}{10} \bibitem{BeKh96} Christian~H. Bischof, Peyvand~M. Khademi, Ali Bouaricha and Alan Carle. \newblock {\em Efficient computation of gradients and Jacobians by dynamic exploitation of sparsity in automatic differentiation}. \newblock Optimization Methods and Software 7(1):1-39, 1996. \bibitem{Chri91a} Bruce Christianson. \newblock {\em Reverse accumulation and accurate rounding error estimates for Taylor series}. \newblock Optimization Methods and Software 1:81--94, 1992. \bibitem{GeMaPo05} Assefaw Gebremedhin, Fredrik Manne, and Alex Pothen. \newblock {\em What color is your {J}acobian? {G}raph coloring for computing derivatives}. \newblock SIAM Review 47(4):629--705, 2005. \bibitem{GePoTaWa06} Assefaw Gebremedhin, Alex Pothen, Arijit Tarafdar and Andrea Walther. {\em Efficient Computation of Sparse Hessians: An Experimental Study using ADOL-C}. Tech. Rep. (2006). To appear in INFORMS Journal on Computing. \bibitem{GePoWa08} Assefaw Gebremedhin, Alex Pothen, and Andrea Walther. {\em Exploiting Sparsity in Jacobian Computation via Coloring and Automatic Differentiation: a Case Study in a Simulated Moving Bed Process}. In Chr. Bischof et al., eds., {\em Proceedings AD 2008 conference}, LNCSE 64, pp. 327 -- 338, Springer (2008). \bibitem{GeTaMaPo07} Assefaw Gebremedhin, Arijit Tarafdar, Fredrik Manne, and Alex Pothen, {\em New Acyclic and Star Coloring Algorithms with Applications to Hessian Computation}. SIAM Journal on Scientific Computing 29(3):1042--1072, 2007. \bibitem{GrWa08} Andreas Griewank and Andrea Walther: {\em Evaluating Derivatives, Principles and Techniques of Algorithmic Differentiation. Second edition}. SIAM, 2008. \bibitem{Griewank97} Andreas Griewank, Jean Utke, and Andrea Walther. \newblock {\em Evaluating higher derivative tensors by forward propagation of univariate Taylor series}. \newblock Mathematics of Computation, 69:1117--1130, 2000. \bibitem{GrWa00} Andreas Griewank and Andrea Walther. {\em Revolve: An Implementation of Checkpointing for the Reverse or Adjoint Mode of Computational Differentiation}, ACM Transaction on Mathematical Software 26:19--45, 2000. \bibitem{HW} Ernst Hairer and Gerhard Wanner. {\it Solving Ordinary Differential Equations II.\/} Springer-Verlag, Berlin, 1991. \bibitem{Knuth73} Donald~E. Knuth. \newblock {\em The Art of Computer Programming. Second edition.} \newblock Addison-Wesley, Reading, 1973. \bibitem{Wa05a} Andrea Walther. \newblock {\em Computing Sparse Hessians with Automatic Differentiation}. \newblock Transaction on Mathematical Software, 34(1), Artikel 3 (2008). \end{thebibliography} \end{document} ADOL-C-2.4.1/ADOL-C/doc/short_ref.tex0000644000076600007660000004547511417030411015263 0ustar coincoin% Latex file containing the short reference of ADOL-C version 2.0.0 % % Copyright (C) Andrea Walther, Andreas Griewank, Andreas Kowarz, % Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel % % This file is part of ADOL-C. This software is provided as open source. % Any use, reproduction, or distribution of the software constitutes % recipient's acceptance of the terms of the accompanying license file. %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \documentclass[12pt,oneside,a4paper]{article} \usepackage{amsmath,amsthm,amssymb} \usepackage{fancyhdr} %\setlength{\hoffset}{2.0cm} \setlength{\oddsidemargin}{-0.5cm} \setlength{\evensidemargin}{-0.5cm} \setlength{\topmargin}{-0.5cm} %\setlength{\headheight}{0cm} \setlength{\headsep}{1cm} \setlength{\textwidth}{17.0cm} \setlength{\textheight}{25.0cm} %\setlength{\parindent}{0pt} %\setlength{\parskip}{2.5ex plus 0.5ex minus 0.5ex} %\renewcommand{\baselinestretch}{1.2} \pagestyle{fancy} \lhead{\sc \bf ADOL-C} \chead{} \rhead{\sc {\bf A}utomatic {\bf D}ifferentiation by {\bf O}ver{\bf L}oading in {\bf C}++} \renewcommand{\headrulewidth}{0.02cm} \renewcommand{\footrulewidth}{0.02cm} \newcommand{\R}{{ {\rm I} \kern -.225em {\rm R} }} \begin{document} %----------------------------------------------------------------------- %----------------------------------------------------------------------- \begin{center}\Large {\Huge \bf The Basic Idea}\\[2ex] \fbox{\hspace{1mm} {\bf Vector function} in {\bf C/C++}:\rule[-4mm]{0cm}{12mm}\hspace{0.4cm} $F:\R^n\rightarrow\R^m:x\mapsto y=F\!\left(x\right)$ }\\[2ex] {\Huge$\Downarrow$} Operator overloading (C++)\\[2ex] \fbox{\hspace{2mm} {\bf Internal representation} of $F$ ($\equiv$\emph{tape})\rule[-4mm]{0cm}{12mm} }\\[2ex] {\Huge$\Downarrow$}\hspace{1.5cm}Interpretation\hspace{1.5cm}{\Huge$\Downarrow$}\\[2ex] \fbox{\begin{minipage}[h]{80mm} {\bf \underline{Forward mode}} \begin{align*} x\left(t\right)& =\sum_{j=0}^{d} x_j t^j\\[1ex] & \Downarrow\\[1ex] y\left(t\right)& = \sum_{j=0}^{d} y_j t^j + O\left(t^{d+1}\right) \end{align*} {\bf $\Longrightarrow$ Directional derivatives\\[-2.2ex]} \end{minipage}} \fbox{\begin{minipage}[h]{80mm} {\bf \underline{Reverse mode}} \begin{align*} y_j & = y_j\left(x_0,x_1,\ldots,x_j\right)\\[1ex] & \Downarrow\\[1ex] \frac{\partial y_j}{\partial x_i} & = \frac{\partial y_{j-i}}{\partial x_0} \\[1ex] & = A_{j-i}\left(x_0,x_1,\ldots,x_{j-i}\right) \end{align*}\\[-0.85ex] {\bf $\Longrightarrow$ Gradients (adjoints)} \end{minipage}} \begin{minipage}[h]{160mm} \small \begin{align*} y_0 & = F\left(x_0\right) \\ y_1 & = F'\left(x_0\right) x_1 \\ y_2 & = F'\left(x_0\right) x_2 + \frac{1}{2}F''\left(x_0\right)x_1 x_1 \\ y_3 & = F'\left(x_0\right) x_3 + F''\left(x_0\right)x_1 x_2 + \frac{1}{6}F'''\left(x_0\right)x_1 x_1 x_1\\ & \ldots\\ \frac{\partial y_0}{\partial x_0} = \frac{\partial y_1}{\partial x_1} = \frac{\partial y_2}{\partial x_2} = \frac{\partial y_3}{\partial x_3} = A_0 & = F'\left(x_0\right) \\ \frac{\partial y_1}{\partial x_0} = \frac{\partial y_2}{\partial x_1} = \frac{\partial y_3}{\partial x_2} = A_1 & = F''\left(x_0\right) x_1 \\ \frac{\partial y_2}{\partial x_0} = \frac{\partial y_3}{\partial x_1} = A_2 & = F''\left(x_0\right) x_2 + \frac{1}{2}F'''\left(x_0\right)x_1 x_1 \\ \frac{\partial y_3}{\partial x_0} = A_3 & = F''\left(x_0\right) x_3 + F'''\left(x_0\right)x_1 x_2 + \frac{1}{6}F^{(4)}\left(x_0\right)x_1 x_1 x_1 \\ & \ldots \end{align*} \end{minipage} \end{center} \newpage %----------------------------------------------------------------------- %----------------------------------------------------------------------- \begin{center}\Large {\Huge \bf Application}\\[2ex] {\bf Operator overloading concept $\Rightarrow$ Code modification}\\[2ex] \fbox{\parbox{170mm}{ \begin{itemize}\setlength{\itemsep}{0cm}\setlength{\parsep}{0cm} \item Inclusion of appropriate ADOL-C headers \item Retyping of all involved variables to active data type {\tt adouble} \item Marking active section to be ``taped'' ({\tt trace\_on}/{\tt trace\_off}) \item Specification of independent and dependent variables ({\tt <<=}/{\tt >>=}) \item Specification of differentiation task(s) \item Recompilation and Linking with ADOL-C library {\tt libad.a} \end{itemize}}}\\[5ex] % \begin{minipage}[h]{160mm} \small \underline{Example:} \begin{verbatim} #include "adolc.h" // inlusion of ADOL-C headers ... adouble foo ( adouble x ) // some activated function { adouble tmp; tmp = log(x); return 3.0*tmp*tmp + 2.0; } ... int main (int argc, char* argv[]) // main program or other procedure { ... double x[2], y; adouble ax[2], ay; // declaration of active variables x[0]=0.3; x[1]=2.3; trace_on(1); // starting active section ax[0]<<=x[0]; ax[1]<<=x[1]; // marking independent variables ay=ax[0]*sin(ax[1])+ foo(ax[1]); // function evaluation ay>>=y; // marking dependend variables trace_off(); // ending active section ... double g[2]; gradient(1,2,x,g); // application of ADOL-C routine ... x[0]+=0.1; x[1]+=0.3; // application at different argument gradient(1,2,x,g); ... } \end{verbatim} \end{minipage} \end{center} \newpage %----------------------------------------------------------------------- %----------------------------------------------------------------------- \begin{center}\Large {\Huge \bf Drivers for Optimization and Nonlinear Equations (C/C++)}\\[-0.5ex] \begin{align*} \min_{x}f\left(x\right),\qquad & f:\R^n\rightarrow\R\\ F\left(x\right)=0_m, \qquad & F:\R^n\rightarrow\R^m \end{align*}\\[0.5ex] \begin{tabular}{|p{13.3cm}|p{3.3cm}|} \hline & \\[-2.0ex] {\tt function(tag,m,n,x[n],y[m])} & $F\left(x_0\right)$ \\[1.0ex] \hline& \\[-2.0ex] {\tt gradient(tag,n,x[n],g[n])} & $\nabla f\left(x_0\right)$ \\[0.5ex] {\tt hessian(tag,n,x[n],H[n][n])} & $\nabla^2 f\left(x_0\right)$ \\[1.0ex] \hline & \\[-2.0ex] {\tt jacobian(tag,m,n,x[n],J[m][n])} & $F'\left(x_0\right)$ \\[0.5ex] {\tt vec\_jac(tag,m,n,repeat?,x[n],u[m],z[n])} & $u^TF'\left(x_0\right)$ \\[0.5ex] {\tt jac\_vec(tag,m,n,x[n],v[n],z[m])} & $F'\left(x_0\right)v$ \\[1.0ex] \hline & \\[-2.0ex] {\tt hess\_vec(tag,n,x[n],v[n],z[n])} & $\nabla^2f\left(x_0\right)v$ \\[0.5ex] {\tt lagra\_hess\_vec(tag,m,n,x[n],v[n],u[m],h[n])} & $u^TF''\left(x_0\right)v$ \\[1.0ex] \hline & \\[-2.0ex] {\tt jac\_solv(tag,n,x[n],b[n],sparse?,mode?)} & $F'\left(x_0\right)w=b$ \\[1.0ex] \hline \end{tabular}\\[5ex] % \begin{minipage}[h]{160mm} \small \underline{Example:} \hspace{0.5cm} Solution of $F(x)=0$ by Newton's method \begin{verbatim} ... double x[n], r[n]; int i; ... initialize(x); // setting up the initial x ... function(ftag,n,n,x,r); // compute residuum r while (norm(r) > EPSILON) // terminate if small residuum { jac_solv(ftag,n,x,r,0,2); // compute r:=F'(x)^(-1)*r for (i=0; i 1 & \text{prepares for {\tt hos\_reverse} or {\tt hov\_reverse}} \end{array}\right.$ \end{itemize} \end{minipage}\\[2ex] % \fbox{\parbox{17.5cm}{\begin{center} {\tt hov\_forward(tag,m,n,d,p,x[n],X[n][p][d],y[m],Y[m][p][d])} \end{center}}}\\[2ex] \begin{minipage}[h]{14cm} \small \begin{itemize} \item higher-order vector forward; computes $y_0=F\left(x_0\right)$, $Y_1=F'\left(x_0\right)X_1$, \ldots, where $x=x_0$, $X=[X_1,X_2,\ldots,X_d]$ and $y=y_0$, $Y=[Y_1,Y_2,\ldots,Y_d]$ \end{itemize} \end{minipage}\\[2ex] \end{center} \newpage %----------------------------------------------------------------------- %----------------------------------------------------------------------- \begin{center}\Large {\Large \bf Reverse Mode (C/C++)}\\[2ex] % \fbox{\parbox{17.5cm}{\begin{center} {\tt fos\_reverse(tag,m,n,u[m],z[n])} \end{center}}}\\[2ex] \begin{minipage}[h]{14cm} \small \begin{itemize} \item first-order scalar reverse; computes $z^T=u^T F'\left(x\right)$ \item after calling {\tt zos\_forward}, {\tt fos\_forward}, or {\tt hos\_forward} with $\text{\tt keep}=1$ \end{itemize} \end{minipage}\\[2ex] % \fbox{\parbox{17.5cm}{\begin{center} {\tt fov\_reverse(tag,m,n,q,U[q][m],Z[q][n])} \end{center}}}\\[2ex] \begin{minipage}[h]{14cm} \small \begin{itemize} \item first-order vector reverse; computes $Z=U F'\left(x\right)$ \item after calling {\tt zos\_forward}, {\tt fos\_forward}, or {\tt hos\_forward} with $\text{\tt keep}=1$ \end{itemize} \end{minipage}\\[2ex] % % \fbox{\parbox{17.5cm}{\begin{center} {\tt hos\_reverse(tag,m,n,d,u[m],Z[n][d+1])} \end{center}}}\\[2ex] \begin{minipage}[h]{14cm} \small \begin{itemize} \item higher-order scalar reverse; computes the adjoints \mbox{$z_0^T=u^T F'\left(x_0\right)=u^T A_0$}, \mbox{$z_1^T=u^T F''\left(x_0\right)x_1=u^T A_1$}, \ldots, where $Z=[z_0,z_1,\ldots,z_d]$ \item after calling {\tt fos\_forward} or {\tt hos\_forward} with $\text{\tt keep}=d+1>1$ \end{itemize} \end{minipage}\\[2ex] % \fbox{\parbox{17.5cm}{\begin{center} {\tt hov\_reverse(tag,m,n,d,q,U[q][m],Z[q][n][d+1],nz[q][n])} \end{center}}}\\[2ex] \begin{minipage}[h]{14cm} \small \begin{itemize} \item higher-order vector reverse; computes the adjoints \mbox{$Z_0=U F'\left(x_0\right)=U A_0$}, \mbox{$Z_1=U F''\left(x_0\right)x_1=U A_1$}, \ldots, where $Z=[Z_0,Z_1,\ldots,Z_d]$ \item after calling {\tt fos\_forward} or {\tt hos\_forward} with $\text{\tt keep}=d+1>1$ \item optional nonzero pattern {\tt nz} ($\Rightarrow$ manual) \end{itemize} \end{minipage}\\[3ex] % \begin{minipage}[h]{160mm} \small \underline{Example:} \begin{verbatim} ... double x[n], y[m], **I, **J; I=myallocI2(m); // allocation of identity matrix J=myalloc2(m,n); // allocation of Jacobian matrix ... initialize(x); // setting up the argument x ... zos_forward(ftag,m,n,1,x,y); // computing the Jacobian by fos_reverse(ftag,m,n,m,I,J); // reverse mode of AD ... \end{verbatim} \end{minipage} \end{center} \newpage %----------------------------------------------------------------------- %----------------------------------------------------------------------- \begin{center}\Large {\Huge \bf Low-level Differentiation Routines}\\[3ex] {\Large \bf Forward Mode (C++ interfaces)}\\[2ex] \begin{tabular}{|p{13.6cm}|p{3.0cm}|} \hline & \\[-2.0ex] {\tt forward(tag,m,n,d,keep,X[n][d+1],Y[m][d+1])} & {\large {\tt hos}, {\tt fos}, {\tt zos}} \\[0.5ex] {\tt forward(tag,m=1,n,d,keep,X[n][d+1],Y[d+1])} & {\large {\tt hos}, {\tt fos}, {\tt zos}} \\[1.0ex] \hline& \\[-2.0ex] {\tt forward(tag,m,n,d=0,keep,x[n],y[m])} & {\large {\tt zos}} \\[0.5ex] {\tt forward(tag,m,n,keep,x[n],y[m])} & {\large {\tt zos}} \\[1.0ex] \hline& \\[-2.0ex] {\tt forward(tag,m,n,p,x[n],X[n][p],y[m],Y[m][p])} & {\large {\tt fov}} \\[1.0ex] \hline& \\[-2.0ex] {\tt forward(tag,m,n,d,p,x[n],X[n][p][d],} & {\large {\tt hov}} \\[0.5ex] \hspace{8.7cm}{\tt y[m],Y[m][p][d])} & \\[1.0ex] \hline \end{tabular}\\[4ex] % {\Large \bf Reverse Mode (C++ interfaces)}\\[2ex] \begin{tabular}{|p{15.6cm}|p{0.8cm}|} \hline & \\[-2.0ex] {\tt reverse(tag,m,n,d,u[m],Z[n][d+1])} & {\large {\tt hos}} \\[0.5ex] {\tt forward(tag,m=1,n,d,u,Z[n][d+1])} & {\large {\tt hos}} \\[1.0ex] \hline& \\[-2.0ex] {\tt reverse(tag,m,n,d=0,u[m],z[n])} & {\large {\tt fos}} \\[0.5ex] {\tt reverse(tag,m=1,n,d=0,u,z[n])} & {\large {\tt fos}} \\[1.0ex] \hline& \\[-2.0ex] {\tt reverse(tag,m,n,d,q,U[q][m],Z[q][n][d+1],nz[q][n])} & {\large {\tt hov}} \\[0.5ex] {\tt reverse(tag,m=1,n,d,q,U[q],Z[q][n][d+1],nz[q][n])} & {\large {\tt hov}} \\[0.5ex] {\tt reverse(tag,m=1,n,d,Z[m][n][d+1],nz[m][n])} ($U=I_m$) & {\large {\tt hov}} \\[0.5ex] \hline& \\[-2.0ex] {\tt reverse(tag,m,n,d=0,q,U[q][m],Z[q][n])} & {\large {\tt fov}} \\[0.5ex] {\tt reverse(tag,m,n,q,U[q][m],Z[q][n]} & {\large {\tt fov}} \\[0.5ex] {\tt reverse(tag,m=1,n,d=0,q,U[q],Z[q][n])} & {\large {\tt fov}} \\[1.0ex] \hline \end{tabular} % \end{center} \newpage %----------------------------------------------------------------------- %----------------------------------------------------------------------- \begin{center}\Large {\Huge \bf Drivers for Ordinary Differential Equations (C/C++)}\\[-0.5ex] \begin{align*} \text{{\bf ODE}:}\qquad x'\left(t\right)=y\left(t\right)=F\left(x\left(t\right)\right), \qquad x\left(0\right) = x_0 \end{align*}\\[2ex] % \fbox{\parbox{17.5cm}{\begin{center} {\tt forodec(tag,n,tau,dold,d,X[n][d+1])} \end{center}}}\\[2ex] \begin{minipage}[h]{15cm} \small \begin{itemize} \item recursive forward computation of $x_{d_{old}+1},\ldots,x_d$ from $x_0,\ldots,x_{d_{old}}$ (by $x_{i+1} = \frac{1}{1+i}y_i$) \item application with $d_{old}=0$ delivers truncated Taylor series $\sum_0^d x_j t^j$ at base point $x_0$ \end{itemize} \end{minipage}\\[2ex] % \fbox{\parbox{17.5cm}{\begin{center} {\tt hov\_reverse(tag,n,n,d-1,n,I[n][n],A[n][n][d],nz[n][n])} \end{center}}}\\[2ex] \begin{minipage}[h]{15cm} \small \begin{itemize} \item reverse computation of $A_j=\frac{\partial y_j}{\partial x_0}$, $j=0,\ldots,d$ after calling {\tt forodec} with degree $d$ \item optional nonzero pattern {\tt nz} ($\Rightarrow$ manual) \end{itemize} \end{minipage}\\[2ex] % \fbox{\parbox{17.5cm}{\begin{center} {\tt accodec(n,tau,d-1,A[n][n][d],B[n][n][d],nz[n][n])} \end{center}}}\\[2ex] \begin{minipage}[h]{15cm} \small \begin{itemize} \item accumulation of total derivatives $B_j=\frac{d x_j}{d x_0}$, $j=0,\ldots,d$ from the partial derivatives $A_j=\frac{\partial y_j}{\partial x_0}$, $j=0,\ldots,d$ after calling {\tt hov\_reverse} \item optional nonzero pattern {\tt nz} ($\Rightarrow$ manual) \end{itemize} \end{minipage}\\[4ex] % \begin{minipage}[h]{160mm} \small \underline{C++:} \hspace{0.5cm} Special C++ interfaces can be found in file {\tt SRC/DRIVERS/odedrivers.h}!\\[3ex] \underline{Example:} \begin{verbatim} ... double x[n], **I, **X, ***A, ***B; I=myallocI2(n); // allocation of identity matrix X=myalloc2(n,5); // allocation of matrix X A=myalloc3(n,n,4); B=myalloc3(n,n,4); // allocation of tensors A and B ... initialize(X); // setting up the argument x_0 ... forodec(ftag,n,1.0,0,4,X); // compute x_1,...,x_4 hov_reverse(ftag,n,n,3,n,I,A,NULL); // compute A_0,...,A_3 accodec(ftag,n,1.0,3,A,B,NULL); // accumulate B_0,...,B_3 ... \end{verbatim} \end{minipage} % \end{center} \newpage %----------------------------------------------------------------------- %----------------------------------------------------------------------- \begin{center}\Large {\bf ADOL-C provides}\\[1ex] \fbox{\parbox{170mm}{ \begin{itemize}\setlength{\itemsep}{0cm}\setlength{\parsep}{0cm} \item Low-level~differentiation~routines ({\tt forward}/{\tt reverse}) \item Easy-to-use driver routines for \begin{itemize}\setlength{\itemsep}{0cm}\setlength{\parsep}{0cm} \item the solution of optimization problems and nonlinear equations \item the integration of ordinary differential equations \item the evaluation of higher derivative tensors ($\Rightarrow$ manual) \end{itemize} \item Derivatives of implicit and inverse functions ($\Rightarrow$ manual) \item Forward and backward dependence analysis ($\Rightarrow$ manual) \end{itemize}}}\\[2ex] {\bf Recent developments}\\[1ex] \fbox{\parbox{17cm}{ \begin{itemize}\setlength{\itemsep}{0cm}\setlength{\parsep}{0cm} \item Efficient detection of Jacobian/Hessian sparsity structure \item Exploitation of Jacobian/Hessian sparsity by matrix compression \item Integration of checkpointing routines \item Exploitation of fixpoint iterations \item Differentiation of OpenMP parallel programs \end{itemize}}}\\[2ex] {\bf Future developments}\\[1ex] \fbox{\parbox{17cm}{ \begin{itemize}\setlength{\itemsep}{0cm}\setlength{\parsep}{0cm} \item Internal optimizations to reduce storage needed for reverse mode \item Recovery of structure for internal function representation \item Differentiation of MPI parallel programs \end{itemize}}}\\[2ex] {\bf Contact/Resources}\\[1ex] \fbox{\parbox{17cm}{ \begin{itemize}\setlength{\itemsep}{0cm}\setlength{\parsep}{0cm} \item E-mail: \hspace{0.6cm}{\tt adol-c@list.coin-or.org} \item WWW: \hspace{0.5cm}{\tt http://www.coin-or.org/projects/ADOL-C.xml} \end{itemize}}} \end{center} \end{document} ADOL-C-2.4.1/ADOL-C/doc/tapeadv.eps0000644000076600007660000001034411227416777014714 0ustar coincoin%!PS-Adobe-2.0 EPSF-2.0 %%Title: tapeadv.fig %%Creator: fig2dev Version 3.2 Patchlevel 5 %%CreationDate: Thu Dec 18 13:02:55 2008 %%For: awalther@localhost.localdomain (Andrea Walther) %%BoundingBox: 0 0 314 156 %Magnification: 1.0000 %%EndComments /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save newpath 0 156 moveto 0 0 lineto 314 0 lineto 314 156 lineto closepath clip newpath -27.6 185.0 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin 10 setmiterlimit 0 slj 0 slc 0.06299 0.06299 sc % % Fig objects follow % % % here starts figure with depth 50 /Times-Roman ff 317.50 scf sf 1935 720 m gs 1 -1 sc (tape generation) col0 sh gr % Polyline 0 slj 0 slc 7.500 slw n 2025 2250 m 3375 2250 l 3375 2700 l 2025 2700 l cp gs col7 s gr % Polyline gs clippath 5230 930 m 5415 930 l 5415 870 l 5230 870 l 5230 870 l 5380 900 l 5230 930 l cp eoclip n 450 900 m 5400 900 l gs 0.80 setgray ef gr gs col0 s gr gr % arrowhead n 5230 930 m 5380 900 l 5230 870 l 5260 900 l 5230 930 l cp gs 0.00 setgray ef gr col0 s % Polyline n 450 1125 m 5400 1125 l 5400 1800 l 450 1800 l cp gs col0 s gr % Polyline n 2700 2250 m 3150 2250 l 3150 2925 l 2700 2925 l cp gs 0.80 setgray ef gr gs col0 s gr % Polyline gs clippath 2534 2200 m 2700 2283 l 2726 2229 l 2561 2147 l 2561 2147 l 2682 2241 l 2534 2200 l cp eoclip n 1800 1800 m 2700 2250 l gs 0.80 setgray ef gr gs col0 s gr gr % arrowhead n 2534 2200 m 2682 2241 l 2561 2147 l 2574 2187 l 2534 2200 l cp gs 0.00 setgray ef gr col0 s % Polyline n 450 1125 m 1800 1125 l 1800 1800 l 450 1800 l cp gs 0.60 setgray ef gr gs col0 s gr % Polyline gs clippath 3911 1902 m 4076 1820 l 4050 1766 l 3884 1849 l 3884 1849 l 4032 1809 l 3911 1902 l cp eoclip n 4050 1800 m 3150 2250 l gs 0.60 setgray ef gr gs col0 s gr gr % arrowhead n 3911 1902 m 4032 1809 l 3884 1849 l 3924 1862 l 3911 1902 l cp gs 0.00 setgray ef gr col0 s % Polyline n 4050 1125 m 5400 1125 l 5400 1800 l 4050 1800 l cp gs 0.40 setgray ef gr gs col0 s gr % here ends figure; $F2psEnd rs showpage %%Trailer %EOF ADOL-C-2.4.1/ADOL-C/doc/adolc-manual.ps0000644000076600007660000406544312120123050015442 0ustar coincoin%!PS-Adobe-2.0 %%Creator: dvips(k) 5.992 Copyright 2012 Radical Eye Software %%Title: adolc-manual.dvi %%CreationDate: Wed Mar 13 17:14:06 2013 %%Pages: 71 %%PageOrder: Ascend %%BoundingBox: 0 0 612 792 %%DocumentFonts: CMBX12 CMR8 CMR12 CMR10 CMBX10 CMR6 CMR9 CMSL10 CMTT10 %%+ CMMI10 CMTI10 CMSS10 CMBSY10 CMSY10 CMMIB10 CMSY8 CMEX10 CMSS8 CMMI8 %%+ CMMI6 CMSSI10 MSBM10 CMTT12 %%DocumentPaperSizes: Letter %%EndComments %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: dvips adolc-manual.dvi %DVIPSParameters: dpi=600 %DVIPSSource: TeX output 2013.03.13:1714 %%BeginProcSet: tex.pro 0 0 %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin /FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array /BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get }B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr 1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S /BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put }if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X 1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N /dir 0 def/dyy{/dir 0 def}B/dyt{/dir 1 def}B/dty{/dir 2 def}B/dtt{/dir 3 def}B/p{dir 2 eq{-90 rotate show 90 rotate}{dir 3 eq{-90 rotate show 90 rotate}{show}ifelse}ifelse}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)(LaserWriter 16/600)]{A length product length le{A length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse} forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{ BDot}imagemask grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat {BDot}imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B /M{S p delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M} B/g{0 M}B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{ 0 S rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end %%EndProcSet %%BeginProcSet: texps.pro 0 0 %! TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0 ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{ pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type /nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[ exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if} forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def end %%EndProcSet %%BeginProcSet: special.pro 0 0 %! TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N /vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N /rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N /@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{ /hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B /@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{ /urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known {userdict/md get type/dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup length 20 add dict copy def}if end md begin /letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{ itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack} if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{ noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{ Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale }if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState save N userdict maxlength dict begin/magscale true def normalscale currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts /psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR/showpage{}N/erasepage{}N/setpagedevice{pop}N/copypage{}N/p 3 def @MacSetUp}N/doclip{psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath moveto}N/endTexFig{end psf$SavedState restore}N /@beginspecial{SDict begin/SpecialSave save N gsave normalscale currentpoint TR @SpecialDefaults count/ocount X/dcount countdictstack N} N/@setspecial{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury lineto closepath clip}if/showpage{}N/erasepage{}N /setpagedevice{pop}N/copypage{}N newpath}N/@endspecial{count ocount sub{ pop}repeat countdictstack dcount sub{end}repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N/@fedspecial{end}B/li{lineto}B /rl{rlineto}B/rc{rcurveto}B/np{/SaveX currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end %%EndProcSet %%BeginProcSet: color.pro 0 0 %! TeXDict begin/setcmykcolor where{pop}{/setcmykcolor{dup 10 eq{pop setrgbcolor}{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll }repeat setrgbcolor pop}ifelse}B}ifelse/TeXcolorcmyk{setcmykcolor}def /TeXcolorrgb{setrgbcolor}def/TeXcolorgrey{setgray}def/TeXcolorgray{ setgray}def/TeXcolorhsb{sethsbcolor}def/currentcmykcolor where{pop}{ /currentcmykcolor{currentrgbcolor 10}B}ifelse/DC{exch dup userdict exch known{pop pop}{X}ifelse}B/GreenYellow{0.15 0 0.69 0 setcmykcolor}DC /Yellow{0 0 1 0 setcmykcolor}DC/Goldenrod{0 0.10 0.84 0 setcmykcolor}DC /Dandelion{0 0.29 0.84 0 setcmykcolor}DC/Apricot{0 0.32 0.52 0 setcmykcolor}DC/Peach{0 0.50 0.70 0 setcmykcolor}DC/Melon{0 0.46 0.50 0 setcmykcolor}DC/YellowOrange{0 0.42 1 0 setcmykcolor}DC/Orange{0 0.61 0.87 0 setcmykcolor}DC/BurntOrange{0 0.51 1 0 setcmykcolor}DC /Bittersweet{0 0.75 1 0.24 setcmykcolor}DC/RedOrange{0 0.77 0.87 0 setcmykcolor}DC/Mahogany{0 0.85 0.87 0.35 setcmykcolor}DC/Maroon{0 0.87 0.68 0.32 setcmykcolor}DC/BrickRed{0 0.89 0.94 0.28 setcmykcolor}DC/Red{ 0 1 1 0 setcmykcolor}DC/OrangeRed{0 1 0.50 0 setcmykcolor}DC/RubineRed{ 0 1 0.13 0 setcmykcolor}DC/WildStrawberry{0 0.96 0.39 0 setcmykcolor}DC /Salmon{0 0.53 0.38 0 setcmykcolor}DC/CarnationPink{0 0.63 0 0 setcmykcolor}DC/Magenta{0 1 0 0 setcmykcolor}DC/VioletRed{0 0.81 0 0 setcmykcolor}DC/Rhodamine{0 0.82 0 0 setcmykcolor}DC/Mulberry{0.34 0.90 0 0.02 setcmykcolor}DC/RedViolet{0.07 0.90 0 0.34 setcmykcolor}DC /Fuchsia{0.47 0.91 0 0.08 setcmykcolor}DC/Lavender{0 0.48 0 0 setcmykcolor}DC/Thistle{0.12 0.59 0 0 setcmykcolor}DC/Orchid{0.32 0.64 0 0 setcmykcolor}DC/DarkOrchid{0.40 0.80 0.20 0 setcmykcolor}DC/Purple{ 0.45 0.86 0 0 setcmykcolor}DC/Plum{0.50 1 0 0 setcmykcolor}DC/Violet{ 0.79 0.88 0 0 setcmykcolor}DC/RoyalPurple{0.75 0.90 0 0 setcmykcolor}DC /BlueViolet{0.86 0.91 0 0.04 setcmykcolor}DC/Periwinkle{0.57 0.55 0 0 setcmykcolor}DC/CadetBlue{0.62 0.57 0.23 0 setcmykcolor}DC /CornflowerBlue{0.65 0.13 0 0 setcmykcolor}DC/MidnightBlue{0.98 0.13 0 0.43 setcmykcolor}DC/NavyBlue{0.94 0.54 0 0 setcmykcolor}DC/RoyalBlue{1 0.50 0 0 setcmykcolor}DC/Blue{1 1 0 0 setcmykcolor}DC/Cerulean{0.94 0.11 0 0 setcmykcolor}DC/Cyan{1 0 0 0 setcmykcolor}DC/ProcessBlue{0.96 0 0 0 setcmykcolor}DC/SkyBlue{0.62 0 0.12 0 setcmykcolor}DC/Turquoise{0.85 0 0.20 0 setcmykcolor}DC/TealBlue{0.86 0 0.34 0.02 setcmykcolor}DC /Aquamarine{0.82 0 0.30 0 setcmykcolor}DC/BlueGreen{0.85 0 0.33 0 setcmykcolor}DC/Emerald{1 0 0.50 0 setcmykcolor}DC/JungleGreen{0.99 0 0.52 0 setcmykcolor}DC/SeaGreen{0.69 0 0.50 0 setcmykcolor}DC/Green{1 0 1 0 setcmykcolor}DC/ForestGreen{0.91 0 0.88 0.12 setcmykcolor}DC /PineGreen{0.92 0 0.59 0.25 setcmykcolor}DC/LimeGreen{0.50 0 1 0 setcmykcolor}DC/YellowGreen{0.44 0 0.74 0 setcmykcolor}DC/SpringGreen{ 0.26 0 0.76 0 setcmykcolor}DC/OliveGreen{0.64 0 0.95 0.40 setcmykcolor} DC/RawSienna{0 0.72 1 0.45 setcmykcolor}DC/Sepia{0 0.83 1 0.70 setcmykcolor}DC/Brown{0 0.81 1 0.60 setcmykcolor}DC/Tan{0.14 0.42 0.56 0 setcmykcolor}DC/Gray{0 0 0 0.50 setcmykcolor}DC/Black{0 0 0 1 setcmykcolor}DC/White{0 0 0 0 setcmykcolor}DC end %%EndProcSet TeXDict begin @defspecial systemdict /pdfmark known{userdict /?pdfmark systemdict /exec get put}{userdict /?pdfmark systemdict /pop get put userdict /pdfmark systemdict /cleartomark get put}ifelse /DvipsToPDF{72.27 mul Resolution div} def/PDFToDvips{72.27 div Resolution mul} def/BPToDvips{72 div Resolution mul}def/BorderArrayPatch{[exch{dup dup type/integertype eq exch type/realtype eq or{BPToDvips}if}forall]}def/HyperBorder {1 PDFToDvips} def/H.V {pdf@hoff pdf@voff null} def/H.B {/Rect[pdf@llx pdf@lly pdf@urx pdf@ury]} def/H.S {currentpoint HyperBorder add /pdf@lly exch def dup DvipsToPDF 72 add /pdf@hoff exch def HyperBorder sub /pdf@llx exch def} def/H.L {2 sub dup/HyperBasePt exch def PDFToDvips /HyperBaseDvips exch def currentpoint HyperBaseDvips sub /pdf@ury exch def/pdf@urx exch def} def/H.A {H.L currentpoint exch pop vsize 72 sub exch DvipsToPDF HyperBasePt sub sub /pdf@voff exch def} def/H.R {currentpoint HyperBorder sub /pdf@ury exch def HyperBorder add /pdf@urx exch def currentpoint exch pop vsize 72 sub exch DvipsToPDF sub /pdf@voff exch def} def @fedspecial end %%BeginFont: CMTT12 %!PS-AdobeFont-1.0: CMTT12 003.002 %%Title: CMTT12 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMTT12. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMTT12 known{/CMTT12 findfont dup/UniqueID known{dup /UniqueID get 5000833 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMTT12 def /FontBBox {-1 -234 524 695 }readonly def /UniqueID 5000833 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMTT12.) readonly def /FullName (CMTT12) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch true def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 46 /period put dup 97 /a put dup 99 /c put dup 100 /d put dup 101 /e put dup 103 /g put dup 105 /i put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 115 /s put dup 116 /t put dup 119 /w put dup 120 /x put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE32340DC6F28AF40857E4451976E7 5182433CF9F333A38BD841C0D4E68BF9E012EB32A8FFB76B5816306B5EDF7C99 8B3A16D9B4BC056662E32C7CD0123DFAEB734C7532E64BBFBF5A60336E646716 EFB852C877F440D329172C71F1E5D59CE9473C26B8AEF7AD68EF0727B6EC2E0C 02CE8D8B07183838330C0284BD419CBDAE42B141D3D4BE492473F240CEED931D 46E9F999C5CB3235E2C6DAAA2C0169E1991BEAEA0D704BF49CEA3E98E8C2361A 4B60D020D325E4C2450F3BCF59223103D20DB6943DE1B57D05DA0555DF933BB0 7B42D264831116C06C79335D519461E7B0E870A6715E3D74A08D1BCF86E3BCC3 A43FC6BAD1C68BD9D4AFCC06D845FD1F1E70D7A47F0BBCAECE8396E04591E5E3 4797F646AFEEB7DB548183F0B74C9BB6BA2AA04E7F5950EC8AE97C741D4B2C5C A8E7A8DF5A36A30B5A7592D95E1DBC63EF33C92FE459792CED29E2B8B6919251 75EF62089BD7D44A6E1F9B62EC802FBE62B821DA1C3B2DDED45D27964AD29ED0 9FB7868F3A8FEADA87A8E42D52C1EB7229D7C79B60BDA263F2BDB025AE14A507 098FA274206BACFB4A0A7257D5998EE8F0FDCA79CB61DD1FC59DADD11E16BF02 ECDFD706CDA1E72054D4EB55AF7BA9F19955886BC0BD6E0E3FE3769C94AF3581 DFB2BCD67FE2892AF07E858A01280194D8DD7332B3D0A585C87FAB056C2EAA9B 5AD48D1C9F00CEF8EF0D1408DBE1C03D04B231D7B8D5D998FE0CD7EE19828EF2 F988EBF6DDBFEE00F04A4A1F4E1A55DED7EF3AACEAB5005F1962C724A017C914 2936E2E0DF26A55ACD7DD836C6035CBF07981C1BCE3615064F0540A1034C69B4 E3908E76EF8925D486DF0B4A8E1F02D8AA99585A7C31847AB9382F83880C1C21 C496AB2DF8E7BD4643B28B704B5F6B53429D3EE940A79135F5BF0396E5B46F23 42AF406C26D12BEA7A41F332AEB75DF43C15334CF4651A99F602036946B1B91D 4BB0D2E51C20216D892C8173241AC8FD15A37C3CDD8AB4FB67D8565AFA61C068 95E3D6E46D7C09BBD09428207D506AD43C693F3C3D787F6A5C39084AE45E81C9 830900DB50DAD10A17E118FB5E9680B5194716A788FF7514A1167DD1A305FBE3 FC1F39A39F5613D50934419B95A4A2FE1B6C18912CECB86726926F6B77B5C3AF F38F85F974A2D2145BE010EBB4A390B842BC222AD4A0B7FDD882668C04C51F19 13FF91E7CFA0A0F4E99A1944B272E0291BBF3F9ADFCF3F625B87377AFEBD9F11 6385726E908BAB7D1357504048C0F5B26251A1FA52F08BAE1D64B9FC32A684AE 896F3DD0AAE9624050D4DFDA25E581FB2630E8840AC5322D38B92F3E77B55CE2 91ACB8321BE53A2C7D274D63CF0C68AC833BAF4B22B26EFC197D4A893A5AE492 660D995DA9294C16BED1113CBCC18AFCB5968175EE2FB374B1AA261F22CD75F6 6E7295A254FEFC41A66EA6833A6A4EE0E75EF6B6FAF292DC5D2AFB61D5203DB5 4BAEAABAF39E9F98B45F22F2E37F337A7BA412807D539C91F3FD1AFB8E35446E DAB21346AF2FEF98F7751360B1CF9773DF4D22A358159B4D1B847C6CB96DFA5B 50A608E1795688076278504401627ACDC2FF46E28D21B53CCE01B56A7B0F0733 C07118AD5B74B4984EC478D154466F4C961C10B92CA34EFF106ECDB5189BE09A D99F93E225D13CE9B110499CE1704474ABDE45976A948C062D61BFCAC2A727A5 71CCEF3475FB360F235ED735A9DD54CC812427C8C127C7D4851509C5D64BA1D3 E1B7371330186CDFBF4CC6E06F7F4EDE286773071E2D3538EF3A83A81CD93D5F DC74E1094F1C134DF13946F56EB917147969EF83190A01C14E7931A897224262 D7F1036C4403AB6E534BEB0CFA2CABD15197319765790903C48A27B093D54A5F 81A075C12C838A1EAB0627D1EADE822720357965170D18730E22DD7E2BCC69AF A9C5C56E48E92B999F8C0A7E360C09230B4B36A863D5809D95060947C80E066F B27AB9E9F2946D419DAE3CB4524A6BB51D93415F564AE2F2FF543832B6BED4D1 9A2261831B9B2E300671587FEA36025143117BB83A291C32F8FB7ACDB167F394 C4C8430BBD1FEF4150C832642BA947A9ED9DE25B3EE962E71446AE6C07D036F4 CCDD472E3B26ACFCFAAE8C534ECFE72D837554E6A3715058C5A6F678BA810A77 48D83168A799A58D25152828A67924D6616687603654065CCC64DFAFF7F46C71 FE369C5148032EE953C93E3EFCFDC1745A4B0D02E1DC1F3F9CCD18126F3577E8 7ADE93D17777C86146471A8CD0DA43617B0C44B2B62E741FE91B1147BC7A528C 0A20F103BB1CC5D6D0121DFEB364F95955F1FCA60B20306A2E491B5425C8B18C 17DD0D312EEC13F5B3F0D7FA007B90524F2CE8FDA113400247FCA4CBAD850FE1 27A5069A99FFB2F85FB68E1F903EF5FAC2890437DEBFBA9D9E6E8A5D399700EE 29032E7A8CDE5F8D2B1B99B73FFE049385FE058311246BACCA1674B474281EAE 961CC5BA08AA6512A20FD661C95149D5E503A2B258FC9190DDB8800111FB0265 A156645C308D87759A1B81AF52876B61506B70D7BBBD41B174E6302367643864 613812EDAB0CEE0C206A9CA7275176B2D802148697719F16A13B3213310BA091 8057081F0EF2F1B5A8217F4132BC27AEF774B7A2E8AA6B6004BFE690A8948216 F788C8436C61F82449F9E0D7B07E39C16D18EB5C1A839FA1197C6DA258A69950 DC11E52BD24441F40CC4962AEAC4396B36976813C4F25BFEE05D8DD4ADCCD7EE 471332F6FA56F187CC52AECC7EB9A2BCBD7EB02C89CA4164C01F22068C9A865F 62AA72FD0D0882C820DB3884F6FF0324F8817A16FDBEB1ADADD09D1E11706789 9226DEAF569ED4A93A4CAB6C2316762DCFAA6A94ADAAAC1C611807656004EB83 8419BFE53026F68CAFFDBA768AD642C496A893C8023A4611DE4ECBE262B4724C E58D3197D2BA6C232955DA41DBE14E0C10896B3B64845A96AA7C4380B243A043 832F4CD9A16455F73032FEB40A8C6D426179BDBB0A59547E22B733855B889113 D20B2217499A50CCA993C019EB84DAE8FB96C9419A19CA40B3B4E29AAFE5F325 2611A91A9D5661FCD9DBDD8C7E2A20E6435D893568C27CCFECB5ADC0FA705FD3 C4721A5096D1C623C9E5FB49DB52F7D952BAD0A0802D065EAD230DD868779E5A 0085B841D8675E3B834EA4AC04239F68B8CBF70B6BAC2709164DDB39DC4D84A4 FF36F80BF700EA64F3EDDDEC6C21F039173A98507B058374B7F6668176A4BCB9 194D6636A1218FECE539C2E25B9CEC8C7F1B4E7FC7BC1712C4C3A8AF9DE4718E 48B12E6218383C8212D6F1C284FDAE5203729040134D3E7DA67C504B68225F99 D4DE82C816892E92DDE4CC95DDB2DCF002E0154CB869061F0859F9639EF48051 20A63E36001ED4A9B75D0296527B18DF12F892F08BBC9B30552C7836A01D6A64 286550906122B9CAB24863A18109811C8E90A7BBB3F540541B6110CBEBB8018E 208C30B29255ECBF5AB5EF1C3F9B9B8A4E33ED8CE8ECAB941BB2BBD47E35A5D4 771C947657E92CC242947A569DB58753AB336C7964B6A813AFE29BBD64BC6C0A C1A65FEAD1553F77FC44FF9B056846DB208BAD2F4C57864E63B15077F9B01470 A9AF46547C5887332ADFF1E28E1299E461716DFAC788973B0700CF59DA8EBCA0 5154C071EB65109FC3D0E5E0844E66DA63AC73CD2AC85ACD3774CA4E20525954 A4280C835E316588686B7EDB74EB2FBC6AC43AFB83A93F6DA00945D7E208952A EFA520D59CB56BBA4B47762D612041419896CD630DA2F43A90D8FD4ADDA3F0D0 F14A9065C5F2E30C13EEB34884E4F7AAA9A81767BE2CD7EB7D62BC7632C03D39 A2A66A375F01A7F283964D9824278A787F4805CD9439B4E6FBA5782C39E1201A DD0D6C46622CE3738DE55D6B7587AABEB673E52950195A15B63DE4B6FD2A83E6 1DA2901B8309B2DD5EB6179C02A64117D3B8FBA13A8FBCF1A36598AA3B2662F6 6A03FBF526EF20AD470D4E9BEA1150EF3D806EC617270F9F092B538182CABE50 C8401F3906C080E6316D8D289733D0F97DE56AD90DFA81E17257A739D0CE0CD8 0D1CF1AF75CE0A2D57F2B288F228E549D800E08D469567E4C235A52658E5D733 66FEBE980E371DDFCEF9EEBFA2CA4948E235C2CE537749F2E3E91AA2CF4E18A8 786E50E3FA61B827C764AC54E7BE320687CAAF0DF83D82DFCEAF3F6BEE277C63 72172A98F2BB8A65EAE57F6AA12005A4CE8AFF42EB1A3D25EEB606156F493A81 388AEAB31B5C4AA8D5911B8394E2BF334DE80DBD34ADAE1D8932A038C982BB98 A6F1C92F1FCEF8DC194C0C348A2929BFEC8D1BBAA3902948648A458BEAF28947 C1F26D0932CA6FEC7E5E651B65337AD929B23EC529BAFBECF6974CFD812198F4 CA0071089EA5E9EA24A595E3F373E5631701668E8B3BD1D95CE4452F1D103B19 56283A4870FFE6A84284F5AFC30F091E61FC2EE6DF51A16BD81B0382D8D48F2E 855BABA5C4F97873B3F226BDDD1F516327B5B3E19B439FBED785E96B2A852FD8 196EA27E1D0D31CA22E358367786A2C5A853EA67DB3946E9F132CC72A887DFC0 97BB9A4519C868DF65256222C69167BA7A9446FA950AE21D7214A6339F76BF20 4A65FEFB79AFF37D4AAEB9FDF036B131D75C6F05D9214C5DE58FF311F3E2A0E5 0ABC1CE1A91B68E89877CF66976B40D72FC6013F028A378E5EA1DD8AED310C61 5D62FA22D38E3EE34254EA4BB406BA5E944E8AA6F8B9B3A0F66CB285E8B37C1E 2CAC2EDB015BA8EF2650BA1EEB529B2427403307B7804DCC6790C15701C3D1EA 5E5B2FDB7EFA0C9B0166E0AEBE8B42E6D649FED3B2211561C45C4B7BCC00B082 50DA0B1FABFF9BD1604B37E92078FC4EF6D2C51229804C91676F2072359BFFA6 FD2A622BA8B76FDD8598F019F4F2E500DE55DA2F061A5807ABD7565915835ADA 9DE6490BA8F011824289619CE22D110217709B58007F35BB000E5FE5C963FE3E 6E199DA28FCE8D798DEA4AD755283CEBF87650DF0FB36DC1A7D58B4AFE0D6BF9 6F6672B2AF3605CE51492E8C4E25370A1A513416EF77AAA8CEFF 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMSY10 %!PS-AdobeFont-1.0: CMSY10 003.002 %%Title: CMSY10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSY10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSY10 known{/CMSY10 findfont dup/UniqueID known{dup /UniqueID get 5096651 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSY10 def /FontBBox {-29 -960 1116 775 }readonly def /UniqueID 5096651 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSY10.) readonly def /FullName (CMSY10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /minus put dup 1 /periodcentered put dup 2 /multiply put dup 3 /asteriskmath put dup 6 /plusminus put dup 15 /bullet put dup 17 /equivalence put dup 20 /lessequal put dup 21 /greaterequal put dup 33 /arrowright put dup 50 /element put dup 55 /mapsto put dup 102 /braceleft put dup 103 /braceright put dup 106 /bar put dup 107 /bardbl put dup 114 /nabla put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CD06DFE1BE899059C588357426D7A0 7B684C079A47D271426064AD18CB9750D8A986D1D67C1B2AEEF8CE785CC19C81 DE96489F740045C5E342F02DA1C9F9F3C167651E646F1A67CF379789E311EF91 511D0F605B045B279357D6FC8537C233E7AEE6A4FDBE73E75A39EB206D20A6F6 1021961B748D419EBEEB028B592124E174CA595C108E12725B9875544955CFFD 028B698EF742BC8C19F979E35B8E99CADDDDC89CC6C59733F2A24BC3AF36AD86 1319147A4A219ECB92D0D9F6228B51A97C29547000FCC8A581BE543D73F1FED4 3D08C53693138003C01E1D216B185179E1856E2A05AA6C66AABB68B7E4409021 91AA9D8E4C5FBBDA55F1BB6BC679EABA06BE9795DB920A6343CE934B04D75DF2 E0C30B8FD2E475FE0D66D4AA65821864C7DD6AC9939A04094EEA832EAD33DB7A 11EE8D595FB0E543D0E80D31D584B97879B3C7B4A85CC6358A41342D70AD0B97 C14123421FE8A7D131FB0D03900B392FDA0ABAFC25E946D2251F150EC595E857 D17AE424DB76B431366086F377B2A0EEFD3909E3FA35E51886FC318989C1EF20 B6F5990F1D39C22127F0A47BC8461F3AFDF87D9BDA4B6C1D1CFD7513F1E3C3D3 93BEF764AA832316343F9FE869A720E4AA87AE76FA87A833BBC5892DE05B867F 10FA225E233BCFA9BB51F46A6DF22ADCEACC01C3CD1F54C9AEFA25E92EFAC00D 7E2BA427C25483BA42A199F4D2E43DFCE79A7156F7417ACF78E41FCA91E6C9EF B933450D851B73A6AB6AEA7EE4C710CB5C14270D1674FA334686653793FCB31B 491E870D3C2BC654D2C1DE463EC9BA29D7371AA1078800EF93D3F66263A2EBBB F5723697BF7448BD0D2E301544BECF497FD475B85DFEF52AF4F8F8BE445CABE6 019318806D10C5952157FF8F8286C1EE701545C8F60EFA854EAE66835A2046A6 915D395F1E0366EFE0C0391583FE001FF16D82A2E2DA5F57754A2C6F69306E36 356ECF8EFC3F1188AD6FCD2427E0580C97A5B69B4E0E09B85EEDE142F5ADD2F0 5DE51D6DB72B127412A0D57106C19CA493048A4F815129ABE767D51715B1515D 9C21067CB5BC88741B7298C83EAE36A866DFA87D8981F179B1C31292F56BBB64 3C430779468AAF07C8A8B4934E1E775FE3F35186BD1FA6EE3689C1C750678AF1 FBF9B23195A124C5C991FE670AC0C86FD39D2B07B9A319E74EFD498B45820252 720ECDF7294F7B0B137CEB86D33BFCEB8606985A3260FD669E461C8BE94216C5 D434FD8854F44EE66E5A289A9F9E32BC36AF645D53F96652602BAED418C8D726 BD04A1B4617551FE4DEF54083D414F7DCE004E6BB2DC9C2EF7CE232B254BA2C5 7DCBD36C2072ED46FF711F121A701E2284BF1B718B3164382B8F453D68FA0377 DFE106503B8401D4DB87F5402A3AC9A442FA060B0610A9524D530C7157C26B56 AC970FCC1D5655FFFFA39246E6420CF97D08ADFB7B05822679BD40C638DDF0E7 A97BFE8918B611A145AC965C203F1428812F9D340AF499B3A915B22BE798594E 0F520109FC81E452180AE45B170FF999C5FC2761C6CECD8742A5A6FC97F16743 AD4EFCC6572A6D3F3E4E330C5CB2FF6FEA48A5B64DD3DBE943BD9918D4A18E18 CBCF598AEFBB6AB3CD2CBC9BFD6099272F6543F3E532E0E21E614BD2880B1023 0AC234CB705827BF016DB84E00E8C255FDEFA0101A842929540B7B4AA8A089BD 5EFF05B72356B6BC3727817823B5CDBB1B963103000D7F2A4E2A1472FC3E614B 5CBCB6D6D784023173DEFEBFA8F9ED87EC1A0A9EE98CA59CFC964CF943DC683F E9E00DA718C4425A705A69D99988EC6F152525C790912C2E46A2381A569424AB 54DF4798BC2D7E7A361E7991641D4B756CE2A7FF4A2848927092C59C2C4B8809 E13AB84FB6B111E680D7FB9F2FFC2C5C66B0B501E4447C2E46C10E2F6124476F A140C404CFE2DC9E0199BF61E035CEB481D438139A9630934E541D261FFD2906 4CAD99E20655FA746AFB81EDBB5601F5FD6B1D6832A01D585E2C55053F6A7378 4DAACCAC7608DBDADAAE732D66B3E7F87E79756337C1A961E53A4651BE7C77F4 038B89C87F650C54A2A90EB7F1D525BB353F33318551EE8D84A6A83C718EA5A4 B2AC0F7306B1E095819B87015A90CA3ED739B09061782C28CDB36BA4BD5E5308 5CBB70414E4112193DAC4A1FA30996327230D1E021F3CD8115E12D239D93FFDC B645910EB29E40D830E7BAF2DB255FD7C4E776557BB38157917D993EAC245837 A3B515147043574157B8342D829C7228CCEA843ABC89D1785A9672A5923FC4CD 2F3FF27E6FCACF84E2D3136CA2C0FD3EF1EE7354CD04C38B5FB874553646ED2D CEDF7E362EADD04B18051F20A8FB0DE18E152385B9D05F98A3A7EF177824E246 455ABE69E2F700EB78185CCFC07E3B4C6FA301112528D977367D30D0D5D59EDE FAEB706DDC970A9E296236C725B2B55B09B9C336B8E23CBA5FB8692D56F33B03 16294E5FC7FAA42E96395A57CE51CA8DDD77442F142E2E576B778373FB31C81C 16840BB422CA827E30A81829648BDF1CA36700EA32AD888D097C1FE0A05B2D9F 483AEE40269DF09AF0D1AD3DF80C45DDC59C2A03FBB661C79B87853737C6D352 67626B657321B16198DBD6DB98A092F17878AE4698121E1006E53D6F9B0A3BE2 3FB68828EF854A0CDBAA68B37ABCA6AD4A3D809AAF0BAB1697A81FE59C98C472 1E33CD70A75A22C249DD11D76C2575ED3370A25892A16D2FD569CDA70C130770 93F493C7D47D6F9A5424A7A542BAD726BFC3AB225DCEBBE6AC4BE006F8C7C0EA 051424B08305BF2D951AB2986AAFEA04E078CA79B399585BFF0F1ADCED02E15B 8765EB6BF6A8E4D0901EFF2C3AA104924EAD9637A35D877E0C51A3C37DA78CD4 8643C8CE6DCDDE3F116A6C2390F948E5371BEB5AD2E87B41C5F01FB5C196C436 6E256A88D082E3F46E4EFFBF605B2EFF1E9D9AD5EE4DDC323A137CD9451EDEE0 06F7D82898D71FAF2362C0FCF1F726F97F820305B7CE20728CA08C63575083A7 84BA28B7DE2B916432475510E274C12FFD1660A717F51DACFDF0A102D85224E0 D6DB607BB72569ABB8A7BC6A10354CBBC01732EFE35B72062DF269CB25EA3DE6 DC603B04C90C5912D2C38D7A5ACDCDD3F6F116D884F0D8C528F69D5D47BA20DB 0A9E585C7D8CC3C324FE8A1DF150279F7E8FB43BDB720E624E5E9918032C02CD 8020636AE5C38DA2484B7F4B34163E0D0A561B43B80E97746DC05C871AB620EC C5D47101ECED4A7E25F291184BEF8B80024AA7BB456C1B83A907652B331DEA34 754226C39C6889EBEEFDAD081E01EF8FE47751987667836FDE4C8BB8A3FD4406 1E643B4EA37BD370734D1A2DB17C2F4B74B4ED75098B433601F75A88C9A37A05 CCB157EF6E32023BFA33973F3E655A4D58289136996FCFA61EEABD70791B6523 1FF5DE71AB8A17038923118A5EED8D59C4C58D246FFA9BB26472346B40C8741F 153D19CAFF20DD2A86C6DB89154A630FB1761929FC3F0448EE2F089C1C953E02 905BA8DE75D101A982A611056C4B237596C10951DD98BAB838B742D3CF7DE718 617DB72E5268583223E37E029D1C8FD3F1D21690151F76B76C52C725CA135CA2 8666553E863CE188BFC9B99AF56AC2DB5BFEBEB12FB563D00244EB89E478657A 98AF2E1223C1ABC25A4500E8119B86EB3C26B8A2F3505A3E5610F89B7C34E278 53FA0A54A7F46D84A35EFEC36AE660A9E3C37EE3864106702DE5AF6C45ABF64B 888A4A51323138CE77DB935576FE6B4824B6942DF80625098CE1B5B32B234F1D 052A9D6039697118A9D793793775D8729D8574A2E74D7109C7B7E23BC5E2E87A CA8E019203952A4892544E1AD3D4EDD22971611358AB230E9A2ABDF00A288501 A01B67C42B33F6B78C39562DB50F4663B922D9BE0D8A150311AE44B83C1F129F 07337323E9A23211EE58E16043E127C6F9574019179F5635648A011266677B56 B5D0201A4E1470B952A1579B57AB2329CD4C615395023C653F784D36B5EE3672 10D191F29EA508CE84763CA4CE7C2C5229E38E241255A5CABCD6C7CBAED901A2 CA53B5E24111921CDDF83578D33D463D70EDACA0E470D8F592303FB6BFD68B4D 3F3BE2D7C5EC8BBF10C90111A33E205F2649B56E8443F6FAA6C721C66575AE12 D4C40F1F46CF9E9DA675AB5D5840D938780CD9E4AD6736ECBEB6A4397613586F 849B51048AC5F9405E03E14540A5E5582F61CDCDB57EDDF95A8C6705F433EE16 648F098C03DED8A2AD94AE3DE202D629B9422ABB031318D48F2C85F9DBFA17BE 84708AA3B6C9F81F4508F7A5CB7B6646AB8722ECF817877B77D473F577556DAA 2BA0ABACFCF5DEA7498C47328E873019A956FBB250FD9D8885D21D368FA70CBD 2709D2DA44EE7A9869963EAB48789541906DE49FAE785ECE1F18A22C7E7ED204 9768896B78E9EB7A2BD6EEC1B26083940656ECD689D92942CC8AF05CBF82AED0 B45A7DF4DD7AA6526FB597322560B9ED3087A65B5EEF1371C328A021411BFE3B D9B5088B2F1AAE381FFED52D2D1E02CD0DA78683E3B06171CBE94BE9760005D7 135893D7CC2DB097F6AC664D9594CF1C650F84DA80D2EDE04802DBA33CE3DAFE EB7A37E8AEFA4FDA6252FF21E8673DD98E67124D5DBC7BACF361E57077B71939 C1D1FB923E4E35C075CD1BCBE0E80DAEA1320D55B43EAB45D9B26C366B278782 7519FDC482D98839BF0DF2E7C3A56A1C1A3FC0E57A75CA414F6536C1FE8EB7A0 4ADFEE3BEDA0F53BE8CF5F64230784A797133E8CD46BCCB3BF38BCE38A73CCE2 9E073ADE792F7128231DDD1F63E6156ADB2609C200837C2E8A2D93D2A7BC9171 050C709A71E44E32B1B03C92EB5CF1D3BAB1C38E027DC4ED9AED633D98CD7486 3F773ACF8AE332631CF2ABE6D606607593FE862ADE31803964E3F4DC3CE3A271 C76BDD95C87CDB3B87BC26FC7A16D567EEC62E6FF0D471B4853DB8A94D4CACF8 843824F818083F10E88D52FC4253E8203292CB40F1414AE7E51DD7347007C342 CD70E8E9F2D2A13D71213B841DDEAAB208AD9EA644591C15DEB084165F9DF24B B91D3BBEEC2E34E38EF16A0C3F00700A7BDCBBFED2EC0D09601AD6538288DB50 3478B051B5E16B604A0341FE621A58718D960D699D3FAD284310DCF54EB13175 19A75A539EE98E804AEA24689D3540F0F12951A3C01FACCE9A7BAF4D0DAFA946 FF65A4D2A4C39969607272C6886F44E90ABE27CA3A1F12A29D9B32E60E8E34F0 17C5FE43D0E69A99A922D98909B2BBCD145E59A5E7F5426B3988F73B09A525F6 8BD4915663C1301323180E760BE81CB874B020FDA3AE63340E4261E4F3E4949B CC0966BDC4426190BE9F5D77F76A72AD925662E5FE1CEF9CCAB68F0BD33DA003 F11EB91AC4502FBD6AE48DA0F9D07C35B96B103E379B8A83A05FE728F1716194 1F650F75BEBADB2E3810388F3E2DC7B19F1BA9E32925F2FD9F19F4E8701F3E4E 4069125D7C401144740691E7A460021A47B1E27997FC1DDABEC5BD0EE0B20194 2D579C7D6727AA124083242BDA46D8E116E2751C5F298851A62B60AEBE82A929 9B9F2492BA35690D1EFD16215B8EF14E7A3803B93C28FA41D971B05B6AF3B593 E74AD1E68A5FCE12A86E63B78BFEA87D3949FD164F12277A4688BE96356791CB 8671C49365608F3EDECC109321AF92B4C29CAF073DA3A7D73E913D0D83FAC5EB BD884D4C686056404DAAAD6F82F94F803FA1FB0DD8908D1DF08FB87A8BB83027 04DE0CBB1C6FEB6B517FBD7CF065120079E608CE41893C2BC96A347826CCDFD5 C69E161217F2127A59F1A6F22037641613F191F22D5B4CDCBCC2EE5615623404 ABA7BE6C5FE475481615B2AC1A2412E54688DD21E44CC9AF5F16E634AFCA389C 4D740B7B51BB141BFAD1080E7C726C1606A28ED492E6BDE9F800EFACD1513909 84E98CEB6A0B7A2A6F3E1D1DCC3B2552795E0932673E59ECC56DDD37A1D52BA6 C3F0E905978AB568941A163F4CE3AAB5C5B16F86016EC47BA6F3F7AAAA77C3B6 09C8C3ABDB6D514A76ECD37C37AA88B5860630B3406B494F7725975596F84777 D9CF48686EC9C5DBCC1D78513F591C7C10AB9D153B3D41426B7BF668B0D04503 56BCB686258462C1DC61095724B9F3312316262FD7C1AEC6E54DE7E5A7BD8EFF 035299B8FD8A4A7B0F51404F4A760F4D8B4C0FB7A32FA4B2383AB6E9C78FDEDB FE6A5788D38A6701B123630C2A6D820A684166FBBC83DB17069494FBD411B333 CB37E2491C5BD035A33867A6D3A3D420CC31ACF43AA07182CAAE67E40EC63663 B678F71D4C6E0EC3A0AAF904CD3AA66E0DE5E3CDE049E94249B39A1C06E3CE9A F974B2484BB2CDA14282B9511E505B3C89F9C802218AE40D1A7541335C5736DD CD565D4B9F4CC78F3A393737EDB4FBD0DA299E21CCFEBA5478EEF013F0552A8B 0BB11FF46CCDB784E8BDCF730A16363E66572049E42C695886EAB42A9AD9094C B635DF4B5B9BD9B9AE8455DFA3EEFC77653190F9A8B1E93B7281C2A21EA7DDA9 33484745BDF7E3DD63C7AC66C286C9A5A698A5E4D7A91710B7FF943FB23609B6 4B442F83CB795788FAB5E9CF3F75D5487DA26170E4561C7941C910B088C3B86D F844B0F340CF82786A3FCF347048463EBD2006281A816627065DDA6CD4D3AC5E 2024BC96C7D896381BBB567951E7A1F29D4E95351298B000D29E5F3D0448CB5A CFDAE1BADE9403B90371C3A07D208948AFA022A69C519434B6813086ADF518D5 88E0B92072A44BA1B3EBB630A13B7AB90992E85B6D67361C8D96F3E0D826FF37 17B67E4B1EB7BADFD98D7F4FD17BECE740ADF13C141EBF0A91CB105DABB32FE0 55086D56A0D358841D15FD349E6B95512E4EDF4C430216FF85C2ABE995E4B40A A6044CC8820AD885C07E052B3F91C2E9A1D163BFFD210F7BE95B923E2500DB50 2075106DB541C267BD450B25B670CE80BCD068D4DBFF2D82634175B61FBD3BC3 406131F44C7D6F18D375D1F2270829DDF29DC14DBB58A30AC193245D18DE91F8 AB88AB548D8138605BB5A50073295534E314366E26665AE70482B890E4101D6B 60E4F3B37ABCA1346DAAE8FDB8DD9C832EFF3E73BA470E2BACE7B8515CB43388 C27AF99FF9322175CF8D4947E6B3846AFF5163E972156847F58A66660EC8A3A6 5FB47C9F637B4CBB4C73B6A080B0CF6FD1E9665E92032540570FFCC747C67C50 822811AADC404BC7ECD1673E8AA6C3A2F1D82F39430B58C29145E2F1B679C46E 94EDC711883F1E4EA84117A54757E8895A40401A26E1437B39A2F65CAADD6E02 D71FA8AF7453668DC613F326A3344F74AD7AC67569AF399385500ABDA5EDD3BA 343CC5EDD4B558467626850E752B9959FEF1454E53E7A3DCBC2255AD8F6AB4FE 894455118A61C58840CB68A925ACCAD75CEACE863D806916228F0614191A1CD5 DC9BAE256018615AA3725834519449B0A88B4F396654E74099C007930ADB1327 DD119BF799FE3B0B223E1EDA04FE2DA7A1C879143E1C33B6C6344F4BA033AD6F 8E88C33DEF1977796B454BAB2494C930F492A518E8198C708A75FFEF8C49C324 A718AB59B889DED521229E741FFE53F98EBE88B0405AD523254FD3FA4BBE96DA DA1C27C1C979A0DD4E61C3B1F4C4DE01E42F1C4435EECFC02D97994BC8AF5270 E7CB1458D76ED0229C5FFB4A23B8716018F9050970895D51722CDE8F2EA3D947 DFF374D84915D5C5D16463A6FFCD079D1ED416C4347BF831FF0C4ADFB61295DC 4D5785BB0852BF472CFC97EC174491CAF961AB90629F055E75DAA6D9898E8653 5BCF379816CAE46FEA62E7BE8E9B953466E51828172C4DBD0E1BBAD1CE28B5B1 02B3E36403BE80B49A47446A6677FCED438F01D60EB10F478C89528FA337D0D8 88D3FC123C076507ACDAF783A9A6E24ED73BF24B6E0F11C13E532DE5F70B1491 307A6D9A2F2BA5099C8A07762E70BDAA74BA5E2BAB260C1352107EB8A96523D9 4BA3082B99772D585329AB8645C3BBD11D72BA01F95CCF11C6DEBFDAAF7F5C4D 795F99DAE6A8D59462D759001BBEBB59AB0C322EFE02904D82B424649C2FA593 0E23281DECC5AA908E54244566055D418602EEDBE78843300158908F77C0AC75 9562065826D34C38C598D8626BFED7CB672F132E065E2C27932F709935988376 94901EBAEAEC410E2B36575A71EBB8954C3A90EEC264E6115950FC91D0D54999 323D8B4FF8129A8EEC3900A00CCB026E6943BE105BF5F504AB332FC17E568681 F423D1125A596766BE58ADC658888DB39BA74F67CE0E26C392220832FB036E93 7587E96684BFB78BD035F54AF71B2408241AAF548F996AD440155624B3EDDC79 2102EE58E1E27EAA0675F1F13297A4CAF514CB319E58D424A820B8F48984987C 4424C28F44FC1608E4E7A45F6643546C6A2D6949DD91466C76EFD7BDD088087D 333F158BC042459F777F734BB4736D30D47D9BC340BD58222BBB01ECADEB4158 A5FBAA142A16B0E03E8E36F32966249B7FE8213FA28310A79B0754079E048CB3 74CA849AA6CF97AB43E499E9EDB70C2524B5AC493800BD7DAD29CAFC7CF773EC 435F824A955CACD859F203FB8C7CF73782193CA9075123BA82B8830FB08DB2C3 D7D8BEF5A4D04CD6C0A3C1455CD0FA453CB168C0F6F12BD4453824A1ED57CB36 EC8753C52F1CA0067640E1A1F630AD4BD3B4D5D6876632001687735358662EF0 733984AC4BB2C414858F6A2FCAA977CD2F0E04926F86E9E642A15E04530C0C7E C64A6DA9F498103947BCF69C481F4069692D32CF2C29E4FDAF8D9A26A327A6BF 92EDEF9295E5417B1EC089EA7690389C4E0F5BF496292172EFF72958F2C394BE A6587DD4B7479EE72186676ABD7D82E1A5B3954D38891CA3BCCD1094CC05E4B2 1316D5A6BBE6DD1BC3D3B7A1ECFC649A61855DE36AC7ECFE6BA8C893F54CAEBC C95227693A9E40C8C6DB6F89DB9D27DA0844DB221FD4CBC073143F9D6BC1DB45 9C1C938EC6CF4CFCD36A6C99AE3CAD168650C27C982A8D7817ADE18D39C478A1 AF118F3C17220FE0D401A95D7580C5A518E995EBA63BD993F6796712C577A8AF D6D753120C5A34383F7C9FD71129B627259A4951336C0AF4CF1F27E0950A302E 0D575486DC15F041C601ADDAAF87B78E22D6F9430F8F4561D32BE1804B4F873A 3AD1E64800EE8E51B7765BEA0A6491313D14CA076DA214EC17F8D20F1CBDAB4A E1ADBE4673D1B98979FA87C062D436C53C0ACE85392AE6886CAB1E7034CF1340 61B3ECCFF01F8F86D2F2CBA396873F95DBA0C9BD05A34023E2477C623CCC1CE2 5F9C85A051546B5ABDA3AE37FF6F907C0CE52CB85E112C8FC839478A4EE66F29 281D50CC3B31E72B31257B6A08001301D083753323D1BB87288DC9035ADDAC86 B25211340D922772F8B5B527FCC2E65B5EFBB13E6B10B9526E35E444A20AC59B AAB1D8DCB2B603A436AF3C433FBABC9C6C8810BFE5252A77D909E1A275307920 29BE8AFA7A2C349ACB97B50C37F92AAF9FCFF04E57558D03EA6B04EC0D4143A1 A5711CFF7F08B4154CC5477D3C4AE2DDDCF312D199F84FA1C437A466DC288858 45E1A78870CD697BC3062E007FAAA5BC12B42F6F2EF33BAAE38D1ABAEF418ED7 5CF5A90D09B0AE054CD40FF05CD2F08E88B0BC11392463BCFBF786103D228618 CBB5A8BF303DA76B6B0FAD849414C3F0E97A3C6DF82C1085DB33AD875D3E44CD 5F3E6B8A1239774871CFB84F4590AC46051032581DBB2693EB993AFAA0AE1B67 B8595FECF69CFCB6C36925F742F11A24EF5269D157D56DB512A098E85AB5BC0F 5812D595696C7EAC386165819C19126180A8F5A4B7DC95D69AFD920A5D523020 20F4E4C3E03599056EB479FE6C5F63481F5F3B11840480223265F33CA2F04F27 7587A6C39B08805634F186F4CC8F965C49DDBB1203504453C1CC30B9491B0B6F AA71303583562D7016DB5E345F055640CBC2FE117873740E71B7A4AE75391346 6616C32F9CDC31D5F15BBEBFCD3979BB7D3AC9C91D4A770AFEDC422E90D1D292 942E3F5772DAB843A3AE2175F1CEC0DBC62D731BED1A8689877B2447BC32788B A76C6D48271B433BB00077FB3B487B362A7A1619C380FBE72551243BB61481CE 3785FFDC7EA5D66A61B277B7B4BBEB1663913D7BF3593C0B523A303A96DC2EBD 6D5E9A158C4818E798154CC67D66DB1B3041B13A105DF8C4CAF768E83D066300 4D9B71E7AAA272556120436AC272B69FF7955B62D3DC3508A05DA99755F65616 48597C02F0CCCFEF3D25C30E40147A1F75F686EC75F3C2BC2BC3F78EAC21383D A050DD755415DE74A079B2EE6AB8979FCE3D7D1D2B45F4FEB7B2B91F6DBFFA5C 9F1524AAC05678653E7A2A210E2E848E9A8778B4E07497DA38D8A36F386F1F14 62DA7535FAB4FC43D05E69F1C2BAE86BF1C614D4FBE3C234FD2B3361187CA8C7 3D008047A0CAA0EFCD7BFBD646DF4FB0AFC4D66C09E49E0CE2D6BD2FE41BDDB9 959A9855B997487C9DF9B3999D3D8C7FAFDBB4BBB1944EB52296E85EE184D7F9 6F15C45FB68D61FC0853E196F26F5C739360A472032022A715FEBC21E584DE2A 800112E0FDD23FE33694B13505567B9DA483EE5F4BEE45CD1CCE5A6271C7FC7C 85E5AE4688BC143DC0B0F5F43DB160A0C97D63F37E5F41AFA36C2B8DB609D39B 72418DA087A9542D67B9534FEE1B8871CA8EBAE7C95B16515D6B72E3DE38F43E 56D54537523106D7519AAB1DD0ED396B39D3C781D06D4AB5B584490221690717 2B6CE52DFCF82F1A059EBE7C4EF3FF7C3FE74E802DA1C26720AF9CD3B229C2F8 A7E3F7BF46DBA403A107336E3125A4FA0462D58581A799E648B32523AE771277 C617D32D68894050557077A91AFFE84B4B54E1253798D28F3B6A55F8D1698B40 7967B963D12E37002FDDA0014C1A9FDB49D267AE7916DB88F5E59FF9E1DA5082 40708A7CCCD26CC328E03F8A3E145C3376CFF553278CEDA29BB6774CAEA0CF32 B89A2E0CF997874BC3C645E1AF8B8DC43A4007A44DE48CCC903EF605898309C7 C32E5C96698923F59E20994F5732006EC2114744F0A0A571226AB4B2ECF8C01A 243369A593F891EA27173B23B256993FD524708F175CAAD7EE258670B3191FF2 B7FC8BF352C35D21D17639F54BE403832CB8BF239CEE0A6B4BFB943768F74A00 38B9688040358BBF32405A6CC422148FAA7EC82AB98C301186FAB3AA85060627 637876EA2C2B7EE750D3037C782979CD2E2E1ABA62C26A3E8BCE99C03DE316B0 A68EC14DBD57695F5C752D6FFA9D017FDFEC3C53DFCB75D86E7B3125AD122883 9A780093E78850F85A1570A25673C97ABBC175E1F1F63B9025A1C74779D1105B 45056A76F369E228ED3E5AD5BB9AB40D070E14251E8479D097799CC78C31613A 1A1617B831D26B81C19018552B95D7777A79D14DB11C5CB62DE777E5EFA6281A 6FFDB9C39D47D7C4368B4B9E0467DE04FAFE1A573D3B534B6EB54D596F0132E6 628C29CB3A6E31A558AF4022FC8840FADDC4 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMBSY10 %!PS-AdobeFont-1.0: CMBSY10 003.002 %%Title: CMBSY10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMBSY10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMBSY10 known{/CMBSY10 findfont dup/UniqueID known{dup /UniqueID get 5096657 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMBSY10 def /FontBBox {-26 -940 1332 825 }readonly def /UniqueID 5096657 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMBSY10.) readonly def /FullName (CMBSY10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Bold) readonly def /ItalicAngle -14.035 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /minus put dup 28 /lessmuch put dup 29 /greatermuch put dup 33 /arrowright put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23E7F1981C8F40F1F993AFEE2 6663A9C974837528B6ECA4C771A5AA1D8EEBDC8D8F230940E0B28324CF6175C5 13ABF95F5AB967FBE9A70E9E31EE0802E3DA88A164DFF2168BB7EA3A7FE5B39C EC363A72004964927B96D0263CF494776902D1DFA75E191E349EACEA2BF18F99 91F89CCAA0F0FD5CD2AAAC6EC2D24886CE7F292101BA85D6DF77EE64DCADA35B 5AE8AB39F88D42A124BA0A01A9FB6EE1CB0AB7116539B049F6897D9ED299EADD 537CE884AD6CC6F4E8AD57A6537C391E499820D54B4C5ADE9DFA7CDF70E80971 ACF82446C2BF347F37B3DB0275E90D3A93B2656DEEECC3DBD94BB29A9A10831D 20C75C68766D26284478A5EFBA38D2A9959FDFDA137F6B5110499BCC7EAFF996 E8DFC89BF2D8AD9E201EC10F4D88FCD66BB255616E26D330E2D01F6E9C042E3C 95374CAFA75F85775FBA913F648DBBDB16B0B9D62AB99880E42CFDDEBC0AC2CC 2D639A9939A2A86DF0A658791063AE2558F18FFEB2591B3135A7AF156933A837 3010ECB98263C9BA09FC92E8FDEBBBD5D32DF1C51F6FF00011B3E140F2829438 45500A0BD86905E54A755044217D769973789E1BD6E12F1978470D204BD5482D 0A77202D32291F70E746BEACA76CD32202CBD57B08C85E137F6C7BCBA00D5488 1EB0CD5AE282D7F502D5982DA0E5AC1C74EA1F7FC9E52320B66C7A3D301BF53D ADCEDF4544D7699EED80E0D902A27A9822C218432F64D603C3232D43A0C87F24 DCC51C9675CBFCEFE645B1621930FB3F98C7C334AA07CC79CC83A9B57AF6C3B5 C93D88ADDF291551897E4EC9C84D1B0AF2A4D502F23BD7735E93F39A69D2A6D5 8EEFD17FF5E01CE0F7CFDE75514F6E3F95F514D3E6F26444D889C4A281960151 3348BA94446086FED942ABD4ACBAE6AA7C1505D0BC3693A548C47F021A98BB4E 980E6EC4EFAEEEFFA0470F211F401D2A36C02F7DE86038336D51D8A37697280E FA0BED096A6722616573A104D7DA05F92F91A5A06B0BF90C512BEE37713B3705 8D4FAC7F82FAABF0DF318B71CE7F6EC0DC653C0C34149D3404EB4EFAB3A48CAE A2897AF05D4739613ACEAED6686775298C22445C7BB2237F182C18D510C36D2C 6463360A7DC14BB92666F2EA374E6E214B2E1A017CBF0E9A09E57D2AEBF6030F 22736461C4EF4D42490565E33258C012F44566E1EDA3122BCC11717D787C1DCB 813A52990A8EE6F7D55259891FFE54CC88CD17B802ED59F9DB82DB76E604EBB5 811655E1E4EA63DA8ADDDFA4FE73D029FE3FB444D97C335D4FDBB75CE5E415BB 55810A673A2871287C760C036153D42C1F8ABFE84B2F146E547F526A29ACB9F6 C8410C6A407B7FE801C4A0ACD90C872BA790A05174FD6390DE7CD00321CC3263 1F367C03359A3B99D934942718E5C7AECF0C5DE79DC5FE2A72C4C0D28F825986 B86B04C0CE65155256E22450810280020D6AE77B26AE0726B21B35782DCBD4F9 228F1B25CFCB0D684F88A41A5F28B97D06C89EA651C6950FFCCA7DFD239DCE7F 0D33A1D94BAA633FF8BA71583845A10CF9C2B1501B34FEA60BD85DCDF3EC60D1 0F902927A06EB13FACFB2DAAB4F4D982FDC97B3CFC66933EE781ADB8E291B933 A77749B9090686AD1F7F3D50B506D66C2B802EB5D44F9BDFAF39BB0DF19F2154 B681C58C65946E060BF62C8DE8E675048BB5CF44BA00AA46E7D31DF76FBE3D9B 0203650A69A157A02C584A2285506B4D4E82BDE9ED53251C9F17B2370008CBA3 6A75D3E1F3ED813FE539F30F47438FABB041498DD26D4FF92B196F37FC3D5A6F 3685B4EB5DE1244D71612B9606975BE8F01318D0A4BC11CC2CC5F987584C31B4 1D044DBB63E19A372C262362AAC74DCC106BA3C1A550835A7E941F64BE66D844 4EED098BC76CA1EFDA2ECBED53B9C8BD4006D54C7632E9DCFFDED29A966B16F7 EE2A6CDE7860E7A8EDC433146666D5EB32706AA39ADD4B1C437CBDFC45E842B6 EC5270AB9A27E2406AA3576B416D98DC00F0E26F80442701FC9CA33919D49CC3 F4C1DD4CFE9555AEDE578017E6AC1C70F9139724895EE0FC33B4D8D953CE8815 D74522F8DDDE40B5CE3D4A5AF4AF3B088F3B6257B5A45262A3CEB57FA8AC30CE 8797590FF418AD3A70BF9AF86DD803AFC54FB8479E70E3871E9260DF1DE867EE DCFFF387C24459AF4E75CA253E79E7E1E1731D779D84AD19E4DFBA9BF723C117 8F8E57EEAA2B95D724A655C148148D825ED632CED3F6F116D884F0D8DF3CDC0A B4DC36330AAD8585A4621C569A355A2266E22A68DADB1A9DCB62202BC12E5001 DD294669199E3263FD6FFF7C3741B8A58BEB0C20F7B4474151F5397C71610CDB 83E473B9D20A72B97F4997CFA6B88D06EA84FBFF57D5F619AAA673FC009783F7 19A262171E4905FD0EC3A7A74518C45C6732DF7BA8C0954876B9AC8AFE58609C ED1C0AD322A9DE1A56EEBA1E37E3FF0117BFF0D64C75F1F33EFC898543B441F9 6738C7F0B6A472E4C0A625CB46DCA876650C6A79C97013C8359A8672F0E26EC8 FC09B106D1787C92DDC0CAE81B2E82B33FFB755895940AFAA5D52ABD6D19AC30 232B61BDFC06FA517BB2BE5707F404614AF720B918353C6BF2CB8269ECD05FB0 0E2C574A191A260BBB6CFDD1AD5502FC9A6CFDE8E792D53B8E3E21956C685AB2 BA5966C0F3EB320F5D58DCE088F08DEFAA740F2B1BBDDC25524DB4EE35039AD4 C0A352240CC30769723A3F316E5B584DF5C848E63FE412DE0B0D77947E4C3166 3C6A846B4BCE9937A277919F800E3D6EEA112A8795CC7BE90E3541315C723BAF 657E2B7DC0CBDD9EFEA314D471896E8C7436D21402329D9B03C23227728EC3EF 1DB8B8F8CFAA508EC7DC7D6A832FFB65950EFACAF9338BA66304502988E1A6BE A8536196DD74E852E25E534833107F9EF48F2DCBA19775B1CA26F7FB4FFA3413 75930799EED87725F8C7D1B4B6C2436C4896187ED894042891D829AD227BCFEB BE1B66E26AC4ED27F134BE3DC1B0ECE42CC85E1DBB4A329E3DC5A24FF1E440C6 BDA63CAF3A4C3D10793306D1F05551F34BA5301F54BA9BC9DAE583B63A881161 B3B94A748288D7E12CEA01DED91BBDF714EE060521B08A8D60E5B3AC1D88705B FA509208296F41FBE987EFAD10DC56B07C9F9F6F04AB3800A7592EAC565E0B11 4FDE0724A0047D87D9D1844B83E136CF83C85497BA683B1816AFF7058448C29F F0682CDB58EBF0D34934B4182A6737D546AFC46C59C0568A18EF77D810384ED6 83B4506173313939D36C0D8746ACC0598D3AE26C0011A729A1B2C09D87B69631 BBAC5ABF5550B41EA682C5B4236D50B27E32C025D125E83CC29B5A5FA2BD3136 44EE2831EF9CCA6BDEF824D90A21F3469195538C90E7AAE8D6555146D7942A99 0C42BDEAFC111848E0A6C13DDC57BB0F835F8318131837843FB6A1AC331E881A EF72171581008E0FCE9A55130A5C3FEA9D1F37FACC97F618F6F7454F56DE9D5A 7253AB242C2FA5BF3C2455DD98D21D8095A160AD2911193D5966B9506EB4C3E6 E50A07D4F496A6BDC13CF3BE724C401622DFC61F6DD475C39CD2FEF75699BF28 BB90E193425992AA8B7A450C58F8A7FEFC7CCD28E4E4F57B456C72EDF6682F92 90B0A8318C12FD0217A2D71C0062CC65708DD051487AF8FC707CC452AF4F25E5 EA75F2BED899C966EC7B4EEA8034F15F1A67562984343A5E5CA5F45BA341B848 F1CA442AE3E6E334F4CE114682AC75AD69F3734AA741A14E10786E0C91188689 E08A372C956C99922730540DCC4BEF927D2979DE1EF562C82988BE92AEF5E44A C2BFD2D133ACDF2CB3ADA52138D1BFBAFC0B37FEE219549D5000B5EE67A7A6DF 3F51E507A66D27E46A90124A95AD04C92605847818F36EC49014E6C68190EC88 F0D2543250E1E4C511CC9401B9FC9B13EE5FAFD92BD3D6487A4920149B3F8551 5615F97ED41AFA7944FD6B45913D46B6108E2993E9A30ADC07618DCB65888045 CA6CCF99EA1BB18A13BC24E3E6787EE8C3C8D568E1CCA938D0221FB77C9180F7 C00D63B362CDFEBC665D3C38F70937411701505606277E6FBF7808DE6FE0DFD0 E554AD42693CC5BBD5B6389DCA7EA68D67B38904158BEC5423545C19E0C81A34 8EBF5147B79876A84AC3D0A4D1AE373723B1A6177757D1D2D52E58D6EDAB3C54 E4B4073DF4937D0CBDC2F7CF6CC6D3BF9154315E3F63BA123ADE18B8915C8765 670F8AF5A38DABA191C13038A054154FC34FCB179957036B4E13C75DD68CAD95 2C8099471118F55FD6410E1D2DD31DD3FADB4CD9826FABAE131F227566DC65BF 218AF5C00B3FEF3BB06C05438D73DE938607DF658AA258582C140E5F323C6300 D265964ED3D5AF3C584AE7DDC4C7C6A08128E44499C6674B5539D64CD8A7EA5B F28CEEDDB9CC188FF50C6FE9DCA874AE0050D70077C57B7244191E5D05FFD879 24B6F9AD29267499D2905DCAC5DB67B68828C5A9A9F77ACE493A864D22F607CA BED0E9370928D9291F27B92037082E9CB7A9B6ADBF4D1E78F718699B0044924C 566BD16FC63DC2EABD8B57E8A90E65ABD6974107B6D9B3081CA47B122A984B87 3B46CE68DAAA56C4AFD42D5B1571D915D24B37050BF852125DD05BCE57097C42 A5C80E741E0B78116E74110DD0DB975CA505EA0520FBB638BFD81D6391C93B3E FD15023D2ACCE8CFFC4880EB579B16D9EE06F7E9AB2101EDD90ABC95612BA11F 7183FB49AA6D12C2AFA977825F90F2C3EFE48A15DEA7C3EF1F353B0CD7D8290C F5C13A3B49712519B43FBDE68831F78092AEF9B693F4EF692318C3B5EEE0D386 37F005B14A06B02CF8BD7FCB2754BFE26AF95D4F53DB5482F87632D04B55FBE4 0A5DBFE3B16C59FF330CFD18F2E57399A0C5C2E59A022221BD6D7BBD47479633 24258241C5353E9A7034B3E80FD9DEE30542C6F3828D241D2DCF02D05572D765 CE047E39E15F97815A0229B48D47003D007C038A701B426F2E3C802694CE942C 04674B0BE07B47695635E22603A32CB5B865288667E552CF096584C8D3862EC8 F03A973E2521CE26D43692E077AF754B6D88DEF4201269FC6D8794F1C0656285 0D4361E39969FA0693C7974538AC20904A1E453E40AC1540BC50CAA7C7505CE5 61C6DE07021BB243916D46EB2371FE0F399DCE8D40EF3AC639E163D73DBE59B3 9D1017DB135FC74DE810CD31C8295FBC3A6D4F36EF40D7B9FEF70122809FC499 87C1912649A977C94128560DEAD116F044FB138FD90C7EF1857EB25BFD694089 D60132A499D84ACCF0F0017D200FBE0354AFBFFCBD14F6F6B363C1108A05D0BF D4F214B8F0EE49C06B20E05F116FD4A142F936E2740ADEB7CC2E4C291926B066 C8F1017272042E5A7DAFF4C7275364754F99ADFA14F8377D41BCFA9587CD3896 46359AE0771230E0CB26818EA69AFE994E438B8BF71263EA0009469DBA246AA0 EF1C0C02C0786628DEEDC78059F97363E03E873E51C2A05C425748806ED13BA7 7100488F436820DEC363DABEB2F958E5B358E771B25F7B32B80C6E9E67DCB6C1 DE96E0EF6ADFED291228CF2E291B38501CC5377C78487AC3D53C1283C81BE59B 87F2C053C551628E29EB7FCDC9B38C8C295BF79A73BA852BFB4768022F19F4BB AF0D753BB151A02E889F9BC3CA803CE35C796879C75EFE5BFA0F69D3BF25ADE2 D4876CBDD76D870794F6182A6D0BD20744FFD00A0E88AE2FABAEC05AD8B20989 EF38B1EE71A79C80DEEF573D7243787D710D1C4FBF9D7993F0E4900DA616AAE1 189AC104C048CDF3E1C34E3302F8244D2F27ACE762898C0814A6584C444D3B4F 249F08A7812ADD85C3C2F9A96E473BE9E2A22067537220ACF7BAACA4CC005DC4 F802046BBABB2E5D0B4B6C4D45A7012912993D9A93181711962F5C593421732B 1B17C5255E0201E7B07722B275CA3759427E1A8A62EEF25652B0C2EB60394D67 5FE7CE796275345A29840F9F3A1A345CE0D4988F6F83FC66522A41E2682D0698 5145104D457FD4FC10FD1DBBEDCBB0DAD9D2A87128C6BBE4CA9E456FA72DC703 80FB474F8137F48D5BE09158ECB322D11AF532C2CB27328E077B0010A72FE439 C52DED6E0858634C558E0BECC26456BCCF0D12965418650D0214522F37BD6A66 F63E92A064A30E4D15948CE14C28311DFA579FABC642FE75E3B0DD584A4F5732 4F5FBA18AE12FBD20B654F98F8618FDD25F42AC897F9B6DFFCAE4DB7BF3FCD84 17593F384793F25C752B95939654014E202A9B7C21B0DCEE1B95DD653694B752 E7411A62397B71B9D0436A4B854353CBD2E52CE87B78A47A1132B98E818289F9 35A6FF0120957DBADA7277779E846C0EC537E9429FE7121B58DD423EF73876FC C20BC33A7B0926A4B2147E19C4455E61052575C2356ED0B34DEC0A0E9AD99DD8 113FAC67594203F8D0430C3E05D913A10DDD0A35188DA48BF79F4DAA2B19E099 1A67FE98621425B7AC2C56054B241A02EDD5ECD11A866F1860D6BE46C8997B35 7C2AEDB0035F82D94FBF48CFF7157B2874A92CAC0FE685F1062F8BF32807ABC8 A11411FB3024A165749A18F2A6B70D7FCE13E0EE7AA3E6E48E68D835B6A66232 EE3DA36DB906BA94134A59F53F4EFF4782B3B7F9E80CE94E356A0E9ACE11DC31 9852F9C280A369072CC2784A98B60B53BA73139F1BC786B7DBF62AFE72C8EF64 1F82CDA5D7F337734509CFE6B783156973A1FF02C07EAAAE06A07CA57FC70010 DCFB7CE05214DFF8D7A09AE329D8E030E5DED1F4148C2DEA719489D77774EE4C 3EAB71B8FCF8367A10927368DF465A4CE8F389829DCA75651DC6B19D0F8BA3A1 DAF8C0B05593ED1A1DB7AAFC0BCCDA1343D71602627E233C30B23F7FC9CF0D5B B460A365C760C2FFB4E1D9F57E0B34E2510B5D0E097915D4BADF85F47DC7F494 7CE354972CE758B722416B636C056361E0CF130A54C6DD30FB81AABEA1CB087F 42300CE35E132DA10070464A16034E67AB05F7ED2EEC9F0758F9E0ABDAE2B705 85A861523B1372CC8FC03CB1A1F6B6DA1D65958175DAEB133892BC804EAA6CAD 24EAE1044D2BFBCEA0F6EED8894CE73539947678F01518EE021061A1A3889CD9 FEBA798C324FC1E8B3A7049CAB9DEFF757C5D021C3E35B4970A8426551E50D57 21891518DF3AC30577D0A92A58236DFAD603D454C627491CECF9B6ED2B7D80B0 B57C50978E5EDDDC7E692FECF444E20470FAA606F25FC03E530E49115803EECB 321631D27801BF5965DD14F27161C8A6A717A2C6E3F4981766FE687166ABF4B5 FC4702CCC77A0459926CD934B73EC2F1DF68623214E5AB44C8238DAFB65F4EFE 5CFFFF6DE5463CABCA2F80FAFC70BFE5BF44E3290B49B22B26FBB8684A55391C E360A4E00107FF99F7932692E18CBDC98E0D1E8BDC17E25DDB3D509828B84FFD AB9AAD81FA94AB80A0EEA8656219FBD42B797558BA77BDC92ED6AD6EF95BEC65 8A90EF090A7B6CED016F31BE8BBC162BDB5BA9BC8633805116C2FA35D00CDA68 145F18F1CCE9EF7877E48FA94C6E355CD62A18E5FA65F129DA02DEEA576F5408 BFFB787A0886352F140BEE54DB652847983EC4C496D624605130D5720A1447A8 0953A5DA2523D7BF455388D404BCCE6CF761EE2F7982EE377F7EBD25E6974A69 095B123C4AA01E293E324F34A7B36AA58764F42F6E42D82C460F5522E99569AF 06A708F7CEAC19F00039DD3660C7E94D13D9E8F3BF9FAC0F7BEDD9169DC97C19 C16EF276BF1DAAEDE320A054F6F5B934877073FDB50BCA209FFBE3A3489261A0 678B9658F8649182BA4DD7D16E5DC259E3F508317D2B1B27D50B5F8E93AE8BF9 453BBE8FD563B463842187A9B2C04618D40E0CFDD1B23AA85A32326493DCF0F7 022C4E8DFBF1D77A634F74977E6CD6D3B3E036DC6EF898745860CC48E55E6259 06298C05A8B0094D7548BD0A4FEBCD4ED01809E0CFB48BDF9A3C2A6E03DA735F 5DEF39A01E9C18183C34B5BC870C06862DAB8EFE4893B9AF7EC84F69B0C95D4F B1273EA2B4C4C59B2FCEB1291C549BC9ABD6241D2D9C19F55CBC8D3BECEB718B 49F2297D416D2A3401DAAE7510A9D0ABFCC711F604B29E7601EF35FB6F71300B B918983BAD18079A8C1C34FCFA63CE7142DD70875A523E378F7CBBFA3387FE25 CFEF435292714A8F491E2D0E400496D5E85EA99AA922FAA53D9D03C54706B5EE C50FECF8939B041A8223FBBC9371D1D672EB3B04BA0C2D2B533ECF1EF2168513 008BB3CDCE8EE707017EADE0AB1944BDDAE1FB609F621928A3A51EEF53268490 8FC3EB793647EEAB531A76DEDF92FCA9AF51CF0C4DF238FC6DEE80DF3654981C AADA75574B2BDED25079396928F948E31B89CEA0D44B1E9FD3E9E8CFBC3572EB 75304F9A5C8286AC95FD505FFFCE931B60115BAF0D060B8CCB23F49CCC825175 CE2A3ED37719230061EED83F7858FA73ABB05BD003F42980FFC7D49BE88A3AC1 357834C33171533EAC38A2303969F4228CBCB5C3134C59FAE8DB8EFA707B43D3 EBA7D9183C5C6D73B1F74794F79A77A6779090AF0FFE0D3B0B72D091E55A9B84 DB541D8D299C5C5F56DD69E7635073B64DC8D76431B25774F7345DE39A3F1936 FF1DEF5402DC8B512036A986387D8E96689E912149A342974F55952915E73526 5413B1CB62F544C3791E2FE62B0384FFE65725DEE581FAFD1F33A85B6169D479 4B1D73940EF19353EADC57AD57642E6BCAFCBF85D00F5DA548080A33F5289EFF 0E1449019182C7C6A1D52CFA76989AF5F3A6713E67E7C08467C617E31DFA524A 30DB6978E480D5A156E3EF0EEA375E66905D49892B70588D75FBF5229ADABAFB D771DC292FCDA019EC65DFBCE76D7590ABFEA5BD633181D694F8A1F7EA92932F D6EA731BF0241EEAC306DB1C2695D6DAFCD4F28DF3EEA1A39343618A5A822B0B CDB03FDEA6BBF79910583873ED6993A2B631360664A35CE2BF47D21F6A7D4E95 C2B48DAF3C087A889420CA64CC1B060E260782BEF6721F80ED7632008080C78C 427E8E051B99E95D205AD9D339BC29504830F03AEA815ED1812E2D15E5335915 D4058A952BE760F64560F50B146EC0F3B3FFB1F9D7B2A92B393C1329F91FF6E0 5E273B5DB89549315DD15AD9D8500D2132EAF983EC746E9CD69B8EEA34F54482 F30DA3AF073C9DED0369646F6B36693E9A3C0BE490EB3E80036CB39365B733D8 759590CB8309079CDE3686D31928C870512F628D998E53AF47E4E541A01B9E89 2454B0E292178FA07A6772E96B5D7284B8EC383230069214BEBFEED880C0B57E C099D813172E3F553757B8ECD536AF7A652BCF0541218D571C3EB1A0503604B1 8FA624CFCB41C4AC208246C197114FDF5F688F5AF40DFDEF78BD5B80F9D79C8F 744F224DA5E87AC97EEC6E8B4CA921C1AAFC0EC3E24C38BF6D64E9C25DEDB62A 581199E65B1D8E5F59136D8FED9BEF89C391CA6409D12E90D1BBBB4BD84130D8 16DB1255CB254A4208C2E2C56EA5C8F822C591411144CE72E06B401A96140E70 8EB3654A3C66EDFFFA17A94FFFE3D9F9FDC50062627895DEECB32E5BAD12A1D1 1EE312E986835692E95913D53D235A93B70CD71ACB0EFB065D71ADE0573B012E A2371452E23091C65D76AAB3B0B47746F1D774D00F1B54515F06E60CB81420DE 1D91BA212A683F92A5534030BEB136E2DED01B58B8684AA0C7C98A674045257B F43591473F853FE3A2A43B7CC317DC7BA5D46639668C6CD6A238DC736A95C247 199D4BD4160575F2CD0EACFBBA826D65727B80673D6BA889F511DDC232DA306F 6F29C43472FDCC1CB26D7B4D25626628C929D871183722A407F733D30FA3D8DA E1D6A93402DABCF8609A44D8EC3699796B3279E13584565CB7FBA5DBE8374F7E 918DC7FC542ED9B1FF9CD954782571A626E3D929F48B5A3DC8585D0E05BCB51C 0527DE69F25D2F0BBD1DAC377C191953C2A71DBA3D4CE7D41ED8CE9D807A30EF 3934E76ACABD113E5207338596CE8A2C0453849D263D829A69E2B42AED8BFC25 80F3B2A2A8D84796AFD59F24BB95AFA47B4E9F707C6A0E127A7C8ABDF641EC33 988AEA67532EA54264268C8B533DFCF4305560DE27B747738DEB5042E4F2DE14 5E3ADDF01F441FB953C76D5B35F2172C2D1F3B2B646E36169A81A05C1D3F56AF DCC73887169596E18937905E67C507B30B2A2218F6A2E3024344970D2509DA0E 2D1214C9FA0C1DCD350A45F8F8357AD91D0BB121D5C24886C5DBB08EC560056C 03F79212824F512E50FACF0D9F1BB63276A1BA4B12241E56B33A3FE1C885400F 1C00274A2BA3822993A905C673C4BE6B27AE1BEAD8DC1F7D948B36807BEA8959 639BAFBEB368D75F44277C58C6782FC9BCD1C2604E0DBD202E6464262E353AA7 8099D4011B944E8107209640A63DDA2D853D45909298E74B3712372EDCFE2BE9 3D2C9A1471E2390290C2DC14B8771935BC344D9BE36B95473424F098575C0399 B7471FB409D8F0A5DEBAF481CDDAB4A2541096B1240EDC18A0A9E339BDD3BD76 41F1C08464513F362DE2001EA0379435EC3EF27EDD8496D8D9E1C4161FE569A9 48A72B672FD613C776E54F784263D550B08EB76389F4ECB922EDF185892B51E8 523F033BB639A33ED829A54643BC10D950E4E021D1FDB9F63BA438229E4A7CFE 99FD537EF90387D892B0683C3869D063588B2E1907702C666659A1182F675FAB BAA79D33704A0F5D888F0DFB95EAAB983F5D66C32D71AEB9C37A0948BAF29DB7 71069155EAFDAAAC79EFA95C90202A1B9D4118794C56A405BA024ADCDBD7B4FE A45EF769C5CA8E9D02F6E1DD01D4A9747251F7B54E79C2 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMTT10 %!PS-AdobeFont-1.0: CMTT10 003.002 %%Title: CMTT10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMTT10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMTT10 known{/CMTT10 findfont dup/UniqueID known{dup /UniqueID get 5000832 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMTT10 def /FontBBox {-4 -233 537 696 }readonly def /UniqueID 5000832 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMTT10.) readonly def /FullName (CMTT10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch true def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 33 /exclam put dup 34 /quotedbl put dup 35 /numbersign put dup 36 /dollar put dup 37 /percent put dup 40 /parenleft put dup 41 /parenright put dup 42 /asterisk put dup 43 /plus put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 58 /colon put dup 59 /semicolon put dup 60 /less put dup 61 /equal put dup 62 /greater put dup 63 /question put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 87 /W put dup 88 /X put dup 89 /Y put dup 90 /Z put dup 91 /bracketleft put dup 92 /backslash put dup 93 /bracketright put dup 95 /underscore put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put dup 123 /braceleft put dup 125 /braceright put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794DDF2E5ECEBA191DB82B3 7A69521B0C4D40495B5D9CE7A3AF33D17EE69979B82B715BAD8A5904C5DE0260 6C15950CCF6E188A0CDF841EB68E5A2F88253E382140F87C87E55C9EA93B8C89 14A36CDF630D6BE7CD36DBDCE22B21778E8648B97B7EC6742EB5114BDF0454B0 0EA7B1FE236C84C0E5308C871F67B973892890557AA12E00B2C20C71F516C397 3F3BBD14A1D0149CA064391056E45E9470FC7F6F556ABC82653B3C8049AB5CF4 BA83C8F2158C236B2FFD4208846013BAF4165E8BB8D334C8FF2E8D74AF5DAB2F D44788869B08399421AAA900ECC6A2D594641C121660D4B5F512938994C18DD0 FCD9B008F68F0351D21ED735B2740CB1E0C1CCD25EB548C35B844601D98828DB 556F71D07E081A593FF12DAF83676492A0FFE16E95717A07082B43A966C1EE8F 8A59E1255E1705C43A23CF29A5E4A6547C93F1680A870EE7BAD8CF74D838CD5E F806911D8FE4262ED8E7F5BC58B92C9C6D74F8AD45FBB021EC7E97393018B9DB B1B84E7B243ADB05ADD3F1DB3692ADC5D47FEC7DF93080669E63281F1576B673 125EDF08016664BE73364F65389F7C3B66623AD1754ECBEF9E5CE6948D933787 A5674279ACB2EBECD3B4E6361419AB32028A27670C9F3E18B746A10B00AF6D77 4EC00E3BE521C02A99AE5BAA98F793EB1228952BE67934B91472E01AF7B816BC 56D7F19F631A1927846D800C107B1E9CBFF9D2DD513B4A8CE2E0DFD77B1ED178 E43FA7052765E9FAF89989D490D8FEF6C536EC0D4AE27A74F474B98DA9E6B92F 15E063DB260571979A5DE2423920CE1F59F56EB11E00E3BB9D466A8263E1E385 2014BEFDA8D1EA3EDA04BE32AEE6CD15C5C010A1DF7F705A2C0C18E87C8DCCE9 05D9163181CBA56C0FAC8C06A2990554C8E759D076B01BBEADE3B5FB8B551390 6C8E4A2A1C6E7D9C708614626F3770C0AB7DD2027469C77975C27576065862AD 04E5E50CEBE907E3E991FA0C627302C0E207B4D5992BEBAB5853AD1C0D271728 C76F40A79392ACCA7358F948AC65DC823CFDA59E1FF69CEBB6B7EC3CF21669E4 70D999508F9C49E2D9F8818CA53C977D93E15FBBBAF75B1E84F0BA62BCC4BAFA 4EEC82D804C8A8C0210F3E5E258BB1F6921AF02BA9861BAD5C3D5FC8CEFABA8A A607E547B802096F7AEB09FBA99C83C9A494B94408DD607CA6561A6E6660C473 62CF8D35F31D052F6C6C8138A8E1430CBA7EA6973D6D510C1A06B3FBD79D9364 240C1A00272DA44B89A9FE8D5BF36DC1B5EBB4A78ADBE9C5EDB485F093D9517D 69E1AC9A8E6C9D7C324E3797CFEAD9A18E82E03F69B2CED7D5DDCD1A218BF2E2 ED2293AE999FE2A4B5213A10083EE0407BCF8007670B8C737EAB30311C868D84 121149ACB4A27F3ED6C0C181C98AAAF51B105F264B5672D7F745131ABAB5BEA4 0C9B43C0DD9116D6DC61F90BE72018F290D26D5E9D341055CAF09C9F45333CDB D45B7954271767F638EEC499F7B53C2CC5774EA7A7F024C4CABFB93D9CB1856A 0C671A4ECA7C62EA5242648A84E7F3AFB9547A0AFC29593CFCE6D8B873A78157 D337CABD291431C0A2CE1F37E0CD7340567AC206FF98E4B5A6410F70F750451C 550EFB54AA259A1B236CA9CB730D2CEF125EC65D959441F7CC9768F777B44844 CC9842A307C72B740680ACBBF6AA35FA7A94825069BF7696ED81A371A9E5475A 9D997F2DFAD339AADF797F7E03E654234455AC3D17702A420EE0A597BA31BDE4 FEB8DBA7C61D311CC90441A620164DC22DC2D373973EF84CC553453AB1B3337F 7B39983B8DFFB3A9425F119B45C1CD37A76F905777B3154CA6200792F1759D06 E017890F4041A385F2238E3C48B6C8EE6F5258463FDBFF7AC762F6C4363926D6 50F004D473B7B7F73CA686B559C2885F1AA761653C727A77D73431E9D110E76A 2E55C68CD50F43997C9B2FC4710F8C8540909829E215678E63BB8363C4B8AF05 9986102BB36580D9CA95CD216B7C321822CB41B2E0422CD077F3B55E0246FDB2 44D5976F67296B5B0BE4B06F6E43535C21164E6C5089C3E9BA2D6B30888C57DE 49DC8D9D46C0D5EDC47ACF2C03B72DE3B69512508539019B759280BABEA12BC9 385308A0395C4CD33182A10A5A229743379C2075D82D8BFCE4A66E1AA087A091 8F5372684FA5037D1B92D50CD9CB4F50AD4F8EE7D51F1C9E63C721CB5B9BD011 6F0A8DD4FDCD2B008F223A1036D90F0F3B252487DE7898F9AFBB3A9D9CD49E0C EF4ADAD5155A98D2125ED5A3D3907F67301649519419F33CD942E8DDEAC1BDA0 E90C431B198F646766A8FA9F8D1561B57E126EF604838C0C1966655CF31FB7EB C8CCC434FC1C96046D38203E1791EC824A3D7AED85C029288D4608CA7668A2BE 484C99639F121845B22EEFCE0A3B808261921AA042AE19E641769E91277BEC29 4594082CCB3058F90FAC4A700A8A827ACA00FCF574ABC8EB7DBCECD97F2B22C0 0AA19E8739B81AF8C6F621D69B8E6F29BAE233FBA655A0AF5BDFD7F5C6B9167C 6BC7AB693D45EF2AD999F5DA3CEFA39BA48A17EE6D9F2C4DAB91AE3F0044DC3F 5D5506CE4675AA928B0092D6F173644F91295216D8BBB14CDDE0AD524A4D545C 1B5E284A3BF0396664081CFB4F186A84A0D24D61E82F4767C1E55A0642720CF3 909FA1AB8EAB78030B59BEA067DEDBD2F1D0340E790AB2777DB18248521934A8 BB38A58B7F633DEA4291B0D5D13E9A882C974697CC6D3B49E030C94EA29B5506 CC29C44D01B4751B453A46A9F6BF3BF135AE87A4CE232AF57B66578310DE41E0 2A6AC422117F1963C4D7CC306BD25A6E724E51921779F22F029733122E23E2F0 CB340008813ABB104380C80A492B3FC6D0BB07CB8D8409E9576891EF6E5C9D08 EB8320DFA31BAFFBD336D0C2BBC3D3B2D30368B9860768FC080D30569C7F7811 0EBEDA2962476113625EEB555490B8CE4C5F99D74ED10F738C61854CFF8B41C6 9402E56BE8856144A1A05D0B05F4CB7EF728B2F4F5A439F18C3B68CEFA41E59A D8308ADC92EC1289DC84CF48D2CDEFF509A145BF945E1E00D552D329EBD2A7C4 21D58082CC8FA790E981F4AC8EAB99950678FD3A7DA3DF13778681B208DD71A0 7C3CBD0664B37C9EDC6B601D79A2C51FB54DAEE849F93209793849104E722D3F 52DFAF7047EEEDDFE744787A5801E4AC2C3D58EC5DDC15FCEE03990C53B0C57A FC54F125A04C8E4A0ADAA725808C587E7DAFB9F784FA2875689979D316DC22BD AA36B306A1ABCF907B63C6476737B746099973CAEA8C1E2C5C41F27E0F7DE8D7 F0D942E34E92F43FE902653D4D2EBB6F3B9F7928B1550A82AF234D45D028F429 067652BD3D391BF423AE72B9CB1E8D91E898161BE3A7849D456A861A2046711E E934DC59442AE7D81661CE8EF727D8D7DDC0270E937E40F896AEAE6171661431 C1025C53172F9D366834BA0054FBFD84503FBAE328B6FDEA180F8EA35B1DA937 5CC3B8F00C206908C2FFFFA6A7AC6915D15EA44BDCF29E2BFCFD4A849535F19B 0D307C696BE8205C7D84B9C77F02EF27D911056EDBB4080E4D3ED72788666CAD CD91B0ECE27A177DB23320A7FA9C31408B4D02D2A4B1CC6DDE1A6CAC3D8EC1EC 2226EC98E51046D1EC26FA20EE62D24747D83CF4941DCE5CCEEC0DBE387149CD E05B19FFCAFC0D117F9A3E60DCD4C815228D98EF95EB559AD0ACC0D50FFDF714 56C3C812EA5ADBB013BBD956A7C4CC0ED7D3E25D5C9AF5E626F18297F75D4957 F5B0B33379114B903FE98BCF35C3FF76FEE1D9AEB711F2962276531F7380EE3F E368720E0292A170A15C5539B1FC7BB954EE2624B504CB8C805B8D31AC38307F 0513606F09211AE64DAC447693B2A0AD15E9A64C34F5A911ECD0ABCA90E9791D 67C6BD202B0858EF96E7722305B8AC02B01AB1706CC6AE875A8DDD15EE349046 EAA65005E7866B506EDFB7A5A2AFD5C9E9DCC821A79EE9C1EA2C7BBA32A40BC7 CEC26DB1AC473C8C3960ACEC581B37D6569E8C8C42950BAB7930B65E1570E3F8 9A7FA719F1DCFDA45A3BF2AAB32C9A93BA3552608A61C623DE59BCB346E87EF5 9CF025A87803161221C5C1C6F6B3403712C76E9D755C7BD68D7F2DC03C14CDF0 C1BBED1D648B905B4B17037B7263C1EA7A7F06FAAC4E09E08483A8D714C19861 327CD9C32DDF850302DD6DDE24912D00C22ECDF3CDFB18FA831A41A7488EC203 F564CFE30D506F0829A96D35A7E09C3DCD107D589B627A15B55C5D6649126BEC 60B88C55ECCBB4E680265D9EAB4CE22965D3B1AF759B01ACB0D0E6C92B6B4EFD A81E6A648708979487FC591CF09631310D46891423F4EC159A73E30D8DD147A4 B0EACF6D45D18CD16CEB8176F03ABCB41F2234747B9733C8FAF34AE5D43D3BA5 0CE0FACFC9B087F84FB6C68678BC6E76022B1526D6E5B3A48EC1A110BD75F45F 1C4DC6D39F254976453F57DF873B7D635C80C42026DE020E5BAFE0DA0D54D1E1 DC634D2621BA184347E5252F645A6A1DB7657C48124186F0E4C644077457C24D 55753C651A9A7B6349867641464B515B821349C795A645420508673B93750D0C 7A3B33EB1F09782033742AE8F3A23FC02284E6C03818FADD1731361542E3FA3E 75B8D52B668C3E18A4AE967D0FC3157083D952AFB8144D549E69EAAC51C279C5 E5D88A0D9D53013DFFB4352A1598FF84DCDE6FA32FC377306B9B92C0F96EE149 8CD55E7B2445B86CCA7A547FA732D52D59025129FD8C6333AC0DF4F0CFF6287E F2036D5DBBB3B91B92F12FEBE0B61A313A4DB5A9CF0BB3DDB781A56FEBFFACCB 8CB9D1D3DBDBC4CB6AAE6769E470582403CB920630221B68BCB625CD4605FA8F D3D5B7A1A28D15E44B38E92E906C138E72C15B86F64C38E23BF0440052A8C914 54397F49DBED99D0AF7CEA3B0A05FF37C2D7EAE1412567E6776333237C31E3C0 49949EC8BFD6E0F6446CE2D4DCD2C1524A288818CC5D159BF8463A847AE4A2B9 CC8C58F822804B81B13BF4F2DEB6229C4F51F093075581791D02C36A13B855A0 34900AA7CD4F1A797652656FE3A8425A38F421C4CC0ACA1CDD44FA6B31219276 1CDE1CD63D6A58CE705CB56CCA1260F9B86E989019071563A9B4C274A87558CA 6EF1660D574EDA276801F0057740E2C3B80D253D697736484D892CE1AB128B8A DECD69712F5E70E895FBAA927E8194D792A04AB6CE205E04E38A433BBB793FB4 E8BBC4279D58A223C6673D909D6AFECD246E66A52F4CB35E5931D24C828489BD 4ECAF621A220D8ECF702BEB01C4FC7510197D3F6D15321EC87175ADBA6434ECD 2B5A306E91375CAD22CD94301763E4A8B981472890422C5488FCD523C9CB17DC ED22FBF12D5F7525D0D6BCFE8CE85B0DFB1D6F989C267FFBA0A996D309E4A934 3DB54A9D29C88B9D55D7300DA3D46419256C5A07A2A529A8DE8BD1727281F5FE 97033D861E0531B14E811378EC1AF1CC7EE9BA2B07D935843D3053F673979F8C FAFD59D555B56CE338F606747238B22BD62C42BB7238FEA335678D474A643570 A9E7B4970E8C541CE9DBC7BF70ED7BA33639D6744A18379455029E934C95E2EF 639C4848CE9A0879B51649FAB023A71782444B451F92A34CB8A124270CCF86D4 D18EEF5C1D2B2A29012613851C49F50702D63BACF95EE2AB4D72B375E0A62615 E0991E130A67ECBA9E05329B740708F1CB148724C3A6E5E3AEC1F88EBCA398D2 1CA8827C977D72734310233176D1AE26C55CF2CEACA62223315C28FCF6305C7E A22414D4739A059F552F1F9372CCCA5FED4F9AC987942848EB498900269511F3 F408CBEA0659B954F5F1B18AE4FB270213646F9B28AE4439D2BA2D3E0AAAA780 5E530E4EFC8A060EB979E12191044509DA0C14397AFF949E12DC970658D5EAF5 4EA963F5BC1407A32F3837CA6A24B7F3D60EB8E6222B702E25ED903F9D21AE50 664A095009BDEAF4B78DAF94E5A55D48366CABF07791A1684B2F54EA69070844 4F031AF8DF416C2D3679F8BA038B0DC9DD0400CA6B34667BCBBC07E62C1668A8 35A8C57C9048A7227E672E89681B54D662079A189A9E96A3CA96D8DD10189B04 1DA49BA2729F1CA585B1BD5C467295285D52E47CA904235A1A3E48EFAE9EB6F6 01374125CE89D53C276858668CF45D2F092DDCAA52418E0BB94C2B8266B4D88A 5D911507BB1DDA3D8F6E7C14A91CA11AE799EC42E993098E18CADA70BD2A1D82 2C39326C6E3F9E84CD9758B9AE43D79BF99E6A0CD713E95B3D9B7DB90D127DE0 DAFEBF850CAAACBD860B5DEF2082F1ADA64B44B193C4A1417BE221FDCA36456C BE5934C8CE3ED55AE3A11697C2D682B7D0F72D48976451D205783BE25DBD2507 39C14FFB4BB828DFD187104F38A7F11D5F0698C11E8C1D4F107CACE573FDC4B1 C56FDAE47024D6FD16A2FEABB434CA320300FC4B6C1B6CA08F76C60B7C08A665 99F404DBA8A2A1EB18EF6750E4EC186E31561A3F080BA6562967546715859481 7BA782940F5C5D06626D6F6A412CA7C13820EC7C1DF23E15E5829F698CF617BE D940523E4EE4ADECEC48C24297DBAD528BA1DCE7AC335A1D15D55415B108EFC8 6D45030D27B3EA63B2B4CD771DBE66AE0218ABB1153D4B7482289D1313CEF184 5C960B1E3C3C953912CC6F4521D1E15636C1545EEE457EFB87B88C9E43CC2F38 6BC4BC96969F4FF28ABB06F4454C01CEF1B6DC538F1E832FC1666D977E5A881B F72F1B4C7DD4BE167A5535F1163A0706F9A0B26400178DF8A128FB5EBE6A7B81 E478AD183EC06622B591337B9F1872AAEA356F4FC67EE767B34CB5A4D90702D9 39FB846947F4096FB3DCF16EC81455164783BA0B5D723060DAFF411B68307E81 7BEA1D9A47A5AA3D648E618C83C60F060029E6EC4D46B045FA7415BAB2AD0AA5 ED9C729C24136F6AF61E6409C0B5CA760B16225641E268A68CFB8260BBEAFC77 6626EBD97195E77CAB425CFB0096D805D9EE699E41680D095AE9FA10122A7882 2F00F495C9EB2102DF0D3E61833BC0A2E468C5CF7AB430FDB7C0BE3DF2C0D230 1580BAA25D65F599378D873165482A1FBB224AEA89C6BCCFBDBA42AE1C5DCF41 06969F585CD3B737D1388D6359F5468D88FCD2279BDB270F6A858FB7D2ABDEFE 5EE8FB79FA437F8F50237B92C307B73B0DCB808D07A9C3255CB9B3B17039CE5A 288103D05D132863FB522A02CEE3839EF9AF7F07D99732F0B8B384745369FB3E 7901166478F4A16076A1504C5E98D17408494E270BBF4470ED12B4332422679F 759F1D93984D7E506D16950DB6C2682FE1379EFFA6F6C95DD71F6E55BE3EF6AF E0CB25388EEB436E6527806FC75484133F6E561DEB979D5C1FFEFDAF2A6D964E 03BAE0BD593C2992AD84569C81050F7A793C5263E50C2F50B98C4CC703EAE17A 6AEDAACE312DAFAF5278D125B6EFC5587484F61DAFF46B87B7C9B1EEDECA4859 314A9A9E2248467DE1E54D90DD671660B9040B3E0DD982260822177EFD757266 74A16C83A7FB168016A320D3DF3BD7726F1F4EC90EE5DFE810C96B099FD4368D 906AE4699049EFD37E8EF058D4B97BF71106445AADD4FC6E90615A0066823A36 673B8DE32322BBE861AE251226B4385AB28702831270DBD25D666FBB0AD7B96E A44E891EA1EAF0F87013AFC982E33D67A28E96E0C9CB99B9E4192536830D9901 931A8CAFA41289633B20BA3BD7AA3414B6DA8D57CCF2FBE39920CC06361F075B CC40335DB9A0071CFF77F6B7BB47F3100DBDC9C4A58C2B81EC99E8E966AF3390 E3FBCC28BA1D79961C8A1584266454DF772FBA99664D74D4A89FC82FFEDFCFE1 4C9E4A04291E803D142E37E7ACA66AB279378F2F192FFB2B5BBAD18B95F03136 2CB594A3D6D3F8576B90A6C4DAD6D6C8EE07AF682F925F01D0B26CBA347C03BE F3B0585CF4539FDC66915E22117078CC94D621F31DCB3E021998A5D6EE94CA4B E214D07517283D56973D8E4367392BF6C1150DEBF459D141AE0941C1C8C5CFBE E735D796E365A1B0F60BB4CF2801EAFE4889EE5F338D3C4885368281B3C95CCE 251C28A90D318A8A0384439B38D63B94757252062EA44E88509FDD2E75FAAB71 7329622828B2785C1A8B26351BC74237A6BF99216652ACBD4CCF54CFC8AC72A6 46342F1E32D4318E7E27C7B2DAC943B3E72C472FC6F1DDA8684AA922516A672C E969C047E318B5E3B1270C1BEB1C4071A15BC81B29B268C679B41FC5E381BE33 DD95F0D68118CBB60C521E5CB2BA46A10E50E9238163713290DF6DD8A594210F B5200157C0F02340FDD61392BE9B0D9C46C1A0C4A3AB05918672D6D6020D3A88 8C18A08AFA6BBD8A513A3C06A29A0FE923ADB6F9996F3516967E5066FAEDE5F2 8317AA4F40CE23799373B747829904DF9040ACBB8C3F1F444865AAEA85F7B91A C0DFED8DFC14579771303207BE44379760DFA62661A505B9D7EE626DDF66EC81 DAB29ED969A22B385AA46773CFDEA40371B01D28A4713820D615BA8AE4E63D53 09E361BCFDFC60A29D8900A5570DCC154CB3B3B4C114A198A8AC748A436DA85C A0B7C26E6872AAA76CD3E50A9DFB413BC19EA844F79489880C120B5EEE3FAB3E 8E69689DF8AB95889BB3FCB88DB5553252CD8F6A76E622BA62907353425D855A A2225AF9855F7FECE560A28F1819655CA1B88E1EA0D64F3BF02C62D0497A8F45 0B102F89D7429C99663336E2DFA0AB68D12BB1C155658822947A2038D350F86F A32836B68FB7078FAE07C07ED488B6EF06D5CBF919831D0A982AB1C0D4999123 FFBEAC65B6998158F01376993BE0BEFFF76907B58BFEC47E3B56BC839E4D8C98 0DB119518F8915D1A6BBB918BD5558F69C9F1850B2F22C6239EC18490F137C07 4D7C9C058457FF0757E1E1B9D9BA4B060E1F94F3955700C92CB435D3CC0690B1 AAE543C4BB721B91E3B18B10A96E8ABB5CFD28CA18CD9013BC80F1304F376693 092414F780B84AC4426BB987BAB12917E875CE90FA8C1FAA9A0ED29053C0BC98 37D2E51B24B22D4EBDDBEC18889D30DC75DDC5CA281DEDE1D0202C456E917DA6 35EEFA010F66C23FE9CD51D3CD318F065A9D1579E8C73A784355C51AA841167E 16BD3F94B49CC123DB9B934AD53A8B906FCC084BC8DB2420B3E3A28D735C5CC9 EDA9057F44BE1B4E6148EB1BD98D5E3532E70E13657B72403B7113E091902C83 68DFCF1AB2546A75D92490BFBD98006F556A8A17204A290A562AF46CE779A777 F5C352BA0DDD6C54A36A49D7613E652A3C193AEE4A7BB4E6AF8867696AEFF716 7D12F372090179CC4FCE6D741D1858EF35C7225EB657589FA42ED5CCACFF30A1 135626FFCB8DEC1F62D5655A2941F1E48A71B8CF8BCF06114D9A5A4BE0615A84 6AE285146BF0217DE1C0DAA7792ACC69CA8BD1321563424C158EDDB75FBE395E 4C458D0F3C2F56C6D7B86A9EF1CB111C64D322222318542435994E636A9CA902 8631860ECC1EE9D29DFA6285D190314EDEE61F171B62E764A95D332C25D5B0C5 00862C4530A0AD9A4267B80E836C032BEADE20C001B5D797F1641754620432B2 66A48D9DC5076A5647A8717926FF533AD4C43573F57CE1711A3DFBC851B33180 13072D6BCF97775922C0450B28BC43E1C713FD1E8EA959AEFAD61DAA53033F9C D4ACDAD318A82BC7FBEC9EA7853CBA4A7DA5DF215475F5192C05A884542E408B 7D69109110D649A3F9C47B9CF29D8D5EB5C3AC0DD3FD1B2CD5F5F474DAF42236 8976ACBAF5037EC11F9F79E172832F39783AE2C447F5915E05693165CA38869A 7EB73370C794A6D42B82E32D8BBF1504785D8EAAAFEA34B626723F894AE365FE FC46D9018ACF34CF9BA5D7A93848CB388660DF4FC881B1B21EC5E2B3B3FD9771 81B7D93B7F3FC685091B5D95E4EC7E279F1F1A14D5AF5E6D826E97FC91A0A25F 4787CC36EFDC155035C98A727AB19F22C1575F132B32E829D10EA96E9E829652 F04C160CA0742BF5887D633411CA2297E29ABFD3800F61CE35DB545B3EEA755F CC82AB381FEB0FAD37B9DBBC40F6BB6B0BEA8202AD6E876931CB6E1541925E05 0CF6DF9E4F4512359AC977BACA8EE7F72E226767EF41EBFCE302F4CD994EC08C F08A883287C458642AACCABC766F5862B7DAC4CAC1DF3F07DF4404161F8C5058 DA20F5AE483F9C7CA35B39296D48E85D5B989522C95B86E7819E24BA236F13C3 B53CEF5FA897BB4B1B8BFF2815EA730FED64195A91418D7AC2E422331DDAFAC4 8E79006D139E762E83D1FAF55AAD62247659AB6414905BF4E955F0EE44F2805A 95A1A3948F3C1624B5F9AFB3AC7F6591690FFEB4B0BE0BA82E6A9895C58A97DE C9CFCD8E818A9F89B3DF4AF5A0D88586E1AFDBB2DD1A1A289CC9216E57579B5D EBE4443993EE94A4B4817DDD5D1778ACFDFEE1FAFE9CD0A8B8E587B3CD1F01A0 271DA66ABD7DC025FE220347F9D7D0242DEB7DC1BA1AF124665C5356EE9E295A 34D30CE02F15E45F1353E057BCA77E68900465D114CAFF8FDE2C887702F30792 0087B3437AF3972C820FACA78A9D16064B9AAAF9939A298FB39CD63B35324E7E 36B6B8B26622B93D6F979E29B4FCE68B369DD8FC3601FF75B5163FED61FE8658 F7DFE02EAA94EC4D06941A0F4C6C2FB302CD059BF7D7804181BAA5479CD054D7 4D97F7BA2CBF80FB4E719710BF2DF8DB67AA01D4EE1AD1ECA291696631017979 602FD973E1A67424B5CF48327FBA64DC13A0826193FE43287CBC3305AE9296C5 30FD504D95C934350CAA3B6D148135A883BF18DF35BA2EC4624567516095C077 5E3E1DDD3029FCE2CF0251EE1BBF17B73F2022B997F022EDD98243D4723E072E 30FDB1A4F1B28E6CF318B496AC77604316D67EB50DB3BDC0B3A663581A4A5653 3DDACF528A60F9A3BE803E66C040A9272A53548760D548D7F19E7F97A02DBD81 1945409BCFA6BAA9C4A3A1CE79EFB1977C07604B899D0465B5E8A0D8BE0F0D8E DE5E0BEC4084F9EC5DC7295715237BE87A2FCF27267BE953C1FA5A97C2F5189B A69836D76D228AB453597E80B7D3FD49E1D18B87EB02347F0F0C127E378C5435 A6A19936FA8F451AECC7A5628B94371723320CE6AEC174491423DD543BFE6C98 EE208170434495B115923D1A93573169717486F260DC00520E9A44F5D24B33B7 B93AE58B853C1D8724EADAB1EA2DE9F263ED17229A6B78E6AC615258471CFAE9 DC0DD36CD3DC23584D72A9CF61A0D0DFC1AD84C36F10F320CE3CBCA79FBFCFD9 1BA7641053958664D8380145DD666732C8658FB02DA52997D43ADB39C20C06E1 BB9A4DAF0258C3FF8AFA94D0599804171721546D8D1223091A7E23DCDFCCF614 FA99D9420C0490382491141AF633D74922F3A4B488051745C3D8975E53BB775A 92FE86FACF2CA284546CA39C778480970331DC45159998A4AA4E2F3441C28531 8F95711B6E9CEFC525FC5597F3618B927DBEF7758BEFE3A812007A3A44F5EF9C 87BE8D496757A16AE4CE138D473DCBFDA8573C3464A8EC52640C1895F123951A 9C2B670435925882E0DAEDB1F3B2000F2F771A6424687866ED11B2CE62D3E940 64FDA6E36340BBF8AE8E79C861931C6F593F813838DC1B2DF54B0052E542DD4A 40B6A712B45CF0F57426C0271A032165B66FDD5E99FFCA79B81A1FA2A5765BE3 A28C9C9DC581B83D472CB331DC85871BC7C97F13107B6133DD699F367D03DB34 C8C430A913A4210C7376EB5F5E1587637A19A409B2137D733A0D3E880220A8BF 635734DCAF249D6EF9D0C1A2A95FE32C0AD35D0ED8A945EA254A59AEE1411016 5ECF8350E0648BE4E926170D63BF14FB742FC59EC6138B20F07185F488F3F3F6 9609CBE816049836CA7CE54E9A58288D50811DB18D78A1CB4BE04FEC62A13374 9174458AFE461803ED5EB5B1A1CBC159E66BD54347B0C4EF702F597C1A8AD998 DFE56708B476A943E1A19856A0BF7E10D4DCEAB5CEAF3D689CB10EC78A756780 7BA01730029F2B2FF42340AE1622BE6C91D038295363ED30C449A857247EE8AD EFF6C0DD8DC43B7B9267C49BA7A5B56D88ED2365F3C6EDBD0AA0F5C65B879B6C 1C1EADB8B8457C574915075728A0B190B4315E9195647BA809790F59111E09F6 FB25C2A92C24307854645A03C3BF0FB0B9F9B2B895904C05E9C1CAFA7B4D515A 87AD71416763A7F37631D05928799ECAE5E04F2EA0AE41F753E9BD0F42EDE281 CAB450938B3E654218EED646C875D1F627C6382336A40F6FA2EA0C4A429F6A18 C25C1EB83AE1CB6C0A45533586A489479D1D77AB04E422AFDCECD7C9B493644E 434C407536953D0D51C912BE7CBA6259C8048083524CF3C775EB589E7FC232AB 4FE5A0AE59660E9F2BF17B07D35037F70F6C1FC93C964FE63F1D27AC31E5010F EDAB3A5C475077A85D9C3801CE3738DBE4290948BF77508C6044790A99DBAF03 A29D06152B22B13C267E5EEB8BA5C9B51ACD9CCC2956259C0F628E5BE5D1A69C 6CCB12C5F8F7744D7FC626925E9E6731F887E22FF4E5B0EEADB280697F6C1FD5 AB367A429F2C244DA57CE5FC55C80AF4A6E93BCDA08E1EBF1DF2E20C50AD7986 69460487B1E66D6584DCF5392CBF4F83EBEC70BDBD5D1FF9A1CAD2BC6E8128A3 BDF4B3407F062045DB7E2B0C81D167BAFB3FD33B63AD2F7DB66B774BC3BBCA0A 2F6521214DCC7376A046B9DFA125DDFB7C4E7FE5FE4E51969C5487F1C16FFF62 92FBE1EAEDE98EB37E9A3016D92B6763AA0DEB25783F4F7239C2F831285A2A34 4219C0B4624CB09E308BD7DA8CC1C90006C7C9CBF779DBE5D053DAB569D3A9A6 881D77B09A26548ACB8A36BB77159F1EB3996876FA76982EF8D51AE02FDFA314 715C31B79FEB19FFDCC508A0B8C8DBE7E0DD6869519ACD24671C4FE55D013751 FD3A5399045F731B7A614E53D6E49E53993B111CC0319C06AE10103E971886E1 8036CDF9DD52305B1A347E7D86DAC6FB910E762B4E4E43FB2C46D86195D9EDC4 037AABF18512C8B7013B34EDCF9D5E0D828456141ADBA35B8D11B3EFB48159CE E70CBA5AA1253DBBCEA38C70B01372ACB0EC9D2E38B14D6DBD52B5595B333A06 20F8A5B418EF4605759C423AE7A5EFAD724193D2648C7555A645558CB7862187 A65DD8903192E39785BCC93770164CA6996ADB6AC8E4760CB28FA0138ECD7079 5A16AF54F9432895BE2EBFD6CE28362B1284072BAC701650C4F99A56D65F6A40 81B5AD105D677D052536AE538232C139663874FAD9C4E71D437F0AC397DFBD20 8F2441470E4470FCA6D40941D84A834E4315CAC1A2C9AD94F96E5F5CE690A3B6 308552B6008223B363686AD4AC233DB7DBA91AA632748570E2242F1DB4B2028F 48F9B8CB1F594225DC43EF9B69AEB0D22208B298400C3ABF09C8B4906C88B556 AA7A2B261F856A098344600B12F477C6E6ED4CDFCE0FC7C98181DABDA3A0DE56 EA23D1E996F7DCF7FDF2BCAC99EC1D5156E113F38C9C31383AED6EB35DCF5985 DB4B8EB762BDA276FC8092996781604729ACD38A3F77356A3A7B4613E4EBF9D2 CD58DB2F0FB1EB0F952847F338123ECB20D8712F31371750ED13EA2EA1B8738B 6205DAADB8A66380503FBE6610FD3B3B45191392A4F59B1B596AB018CCC436C8 171DF44976BB7B50C5DC4F076EEE81285FBB3C313484A9390D8715C34888B07F CB018EA1A8BBEBB537E08D5CACDA6EC74AE0938FD496B155D8999539C56BE837 6675F6AD572EB53FEC9DA5975C90AAECF8FD95E2650CC84217060F689EF715F8 20B4BBFDD51AABF190C34416B2FCA388D4B60CA8E102E7A02EB446DF07630F55 0335FF03C013D8B8FED11367A693F823D6FC8C92209889BA12614B142B4FFC60 C012458AB67E9C684E8CE27B95FFB5352DE999D149EB7516F9280B713C727907 C67EF28DD9B18CA6E72D0AC6AFB40EDAA2C6A6BB80E57664100952590766552E 8952CDDF084BBE46906EA6A32F193168989DFFF0F8E575100CE605B83CA32A54 AF4632A1B67AF11F67EF792A2562084BEC755570BFC7E1496EAC12644313FA4C 66A840304BF4204906410A3E0706D80C68D68492B4DAD2285539EC9589788E22 175BF51C9FFE9D37F6248AF7F23A2C893EF458F09713504B3E71F3F13267F83A 73F836ADD486706C8D2FD61056267F291779961C8A158426642CA561EEE2EB26 142FFD2EE9C6BC0D4341AF8E73DD78678A47B1AF99A1837186B6C380C769C2CD 33D92ECBFC92A17BB1D8CF249F6BB50F7239528525F94D2D2A4D015B15F245D1 9BF40577F464DA52F2873F1DEA0C20806FB82E75B885F5FF8A7726DEE9D938BA 83FD26E3EB3CFC4B3FEA9ADB01B03A38234CACCDA851E0C09ADD49FF06ED1AE0 3E241C8A71FD23060D44EDE78A0A33E49EF418D8622E13D91D456D2B0F4DE565 58647054A89A19FF0CE9AAE08677E259808ED3E2BBFE2CF2D1CB517E8151F2BE 2431DEBE63447FAA8865703D8E15A2BE9DD908694FB849D443A46EDB03994485 1D675AD7120A2EA032282768E96CFE22D022D98DDD5269E773AE0A66A5F24551 B05625247D4EF940C6E9845DA6F818E9C779F4C2216F48587A773ED69170D8C6 57965108E67776AC3744F4DEE74C7CB559E79A06A0277924232C777E5719E3D4 26BAA7ECB8C54316E842676A57CFF196C49ECB7BD886095B3A2504AF8D8B09C0 179CBDC716FABFDE9CD02827561D39C8FC37A7B54061A4F1826B12F454941C24 F888603D8BBE888720E3D7A05DABDD361B2A4788B3B6ACB46A11E053A0ECEFC2 D2E76DDF55ED9FC97058834DFEEBF5BC5C3079EE3C20E1398CEFB6D25BF78D71 811D6F4CBF4F0055712F2FA8F640316BA0F951C60DA65F11B2BD200F308C5F5F 7B4A59100FA738C3825520014AF8B74A16AB7F06C8AF223283811687D07A554C BCDE49EC933BD989F2F1646D6D71AD1D971823AAB4DBBB7520B9EB369FFFA413 8B5CA9F452E68BB320E6345BBA213B3DF67CF518904D5889E061793F7757DE08 7256F2B1EB744CE93FD453CDAA6CB033D843FEED880C86DCB2D95999446093AA 9E9B6863DF68607C585D77092A18D1B887A307677841E276442A79F8CD40AF4C 88547188E84D41BABC4211FF4B27D732CFC28FC54F3E3A20D7CA67BA15FDDA50 AC7D849B2F99AFA1D396C618B85F1D9A1D0655E4AA575F52A20912D6D273EB6C 5E74C8B14ADC2A9A0DB69D4C454CF4545246D4782475C0EE917ED0A09AC94117 244A49A6B43586C86B2A7B1CB5F5D672D776CDA4A9CA7032B34C5F65443AA7F0 E1001FA33ED4451E7D855C885B015428C40C39F8AA4C28470DA47193A64976CD 6D1032164D6B4732AEC8BF479FD6E9D212E4A2CD9038641CEFF40FD0C2C610FB 8FDA379F581BC66450FDAB70CB4B63731B4BE0EE665C9A7CA8000DA68BADFFC7 655D225A95D2F5CCCA9391AB1DEBC144F43501777E2D7A8FF001F3B7488DD249 C91C5DFF695671892552007011BC1ACA20008DB0610AF864322CDFF063533BEC 228C2C6FE15465724E3EFE80C954732A01CA8C9B7EECF6CE22478FF00C24BAB0 B08C3C145DEEDFABCB494C488BA5EE9C98F011E7B14C6567762F38233340D1F7 5F058A4977C171B73F6D371254226CF4255F48E637ABE5E517DB3D3C578C86CD BB60944045CE72A945A2B366746C317FC935F52FC8C8CFC838DAC4E9C78C65C4 41330A856E96AE77BECB099B11C31DD9769C6FFF5E20EB0B281B291D2A6EAF25 B44775CA89CD90C5DAC46F8BCECE44EE7C1216FD7C77A1D1F7C08B36D1B0F782 B6394427D9BD60B4D56BA077E30A3B2FE5D8E03AC2B8F96448CDE2D8A605AC81 87236BFECC74DAD0DFEF443BC59B2EE68515CAE2DCCFBB0BC69EA16A762D431C 123BD125FDF07E7FD0B75AA4665A18DA585CCC5CFA2484D2EB5C2B9C8FA6C536 D97CA380A77CCFBB713BF7808AD8DF8077B7D6AEC0C85F7D57F70A0878F29055 3450645B1F4612B809F2141B492F8EFDB14909DB7F862661EF8C3CA88BB03970 E14C3677AEB670E927DED57C90FE59D6DF22B997F022EDD9C489D2CCFC1F1041 F73B692E6CEE5C6DA41FF2414FC57681293ED88A78DBCDC4B749472935A05C32 0FC691763219F2AC09F44822D6768221C1C6F6FB2E430F85FB95B1F92BED7ED8 1F56BD64A729AC0E4850E134FA6E0C089B93A204FF3C8339CF69EB0F6812C472 AEF355000CA3CA310A3C8C234B6717E66D9C95F1107A29F8A79340647A72B67C F209387EF9C662A5B078701962D5C0A9E901F9C6BE3D0C11988525E5E3BD8E49 CD1F15569C4B8C667FE9908F3162B511D3CD91324054C78CA95A0F36CB0DD367 27B0F5A90B25E1B5E1FFE39489AA9E74E517F8EAA8F98ADF1599016CE428362E 66413F3BD1F0FF6A1A18F3BA9CDE3B51E3784372E0576C2BE760DF2BD79A58E0 755E1000CED0807CD5288838E8ED7C19EBA6CB27A5EEF3040C19DC22281C32AC C98A4E261CE177349BB2302A98F0BC6054EB6D98F0401D2545E938B58EE36329 CE9C19809E5E7136E148BC161BFE945EE087255FD5F30C6F2065FEE0C00C85AA 22F872664C438D6C50CBEB05D96B7B7B0E03FB2E74B054B5F7277ECBF7D564C0 26D2C80C6526E85F752AB42291B5EC47994976D3A571B4B7C393EBFD6CE8283F E21BB9C8B25A98A520DFD73DA84322E4FAFEB702684C0E05B85F7F7BA8D2493D 21C9221FDDED42239327DC4F790E1DFA2EB9AEE981BB1E134AB6899105E493CA 03616BD8E061C33A0C8BA1B1BF225A2EB85D8A28BCCB50BD7616EB54C472E031 2EBA3C49F0FFB9687E4977311E2DA41CED042A98A4359A95AE5DE0C0B31396F6 8DB7F6B75BE157755B10016BCE567F8A123A47B51AED0901234985B067D0ADBF 4754AE3929983BA6491E1084ED7FD81506146497B5EE6DC2537125EC405DFE1F 470F8756D929A0E5F04FBBA8650A83179B5374602CD461D886AF60F2B28BE3F0 61FC5427E1FA21302AC43D3A5F01063C826C5B68EEF90B5C612404E63C27DBD9 535261AFDF882925DDC62006FF2CF3B70714CBFB721C74C594BA3C3FDD1AF9DD 38DB562AC06496EB4BCE166A0E4EE6272EC14BB37E65FF097E753D449D3E967C 6337FCCF7F7E0D1382A3841BA99A2EE169832F2903CE7F288B119F4A56F4A8D1 DB76ECDDB88B68EF3C0522E18012B4FC0BDC73708B0EBEBA894D8AC00EADCAFD FF6C1B8CCC70A9E1B42B0B6C3BF92AD99DD68452ECA60CBD5293795A4CCDF93A 844611D437FEA7AF8F7B0555048F20DF52E552AEEF077C79F1FB0B0FAD16EE84 1CE00D6615045EE55C36B38A7CFDF48E391D74BDA0BF1155F883C947A0338DA0 4CAE7668F1671F5DE0D86CA6999BD6FA277FA9B73C11E91BFE2370D494878326 61AD345CD274DA54FD57A5DF70B82ADC6475D8E33F27B0908F62F268E96EB6DC E08ABBA27C6DCBC78572473BA8267B043DD1A3090F294741F8EB55DE9F2F3325 F7CAF87D7FB7CA4B8D15A36FD41C0BD74095EACEB653B6D84C4BC13B03A41FD0 FD7AA655C3CA2D77C3D8AE56F938C0FFDB51687275FB39781BACD048354C3120 88A0BC6C90EDA5016C37F79BE81E530C68D56660AADB244CC17623A918251F4B 9D7BAC6D1CFE53977F47C000A3B38CFF2483426A6F60A2AB5BA8C72B021754E2 FF102EB47FF4F72E00C16ABA32DB7EC7E2CDAC71F91A921CBF82062BCD9CC00A 9D20754B28A0B9C0B3C008F1EDE8DDD620010CB3A734DF2000FED0A6E402B20B 0DAC7B19DBA69F8235CE39C31CB656A63EDC502DDE43E1CEF9D9B67CB2B032C6 A910DD16D15DF7165F9C9DEFD957821EF2B5CC02C38AF430F1BAA7C51D33BB1D 17D7687DD14D33F29AE2BEFB419AFEDCD976D4E5506717C9B782654C28E60874 C726AE53707C8958824C165DB117A40A6021133EF582F31F83E5D3E7C42048C0 8F5CDE7D41A9CFD02AEE1C16D7B778FA82FCBDE19141B66A8C8B7E9CA56DBA7E B72B3B13F9A12F6F6A4C4ADC9F33B857C2FDD3D97847B3FC50AAFFB1EB73DC2F AF0DAAF6E9F1706DF4BB60B5779E2ABFFC4E353908B426BEC93123EFD7F64622 B85DB62FAA0FCDD2D30CE473BF0BBD64C0A8AD194B9DAEE69D70D010C7AF00C5 2718EA825C6D5290BCA39850708EE9F7F35D286972A4D648117DA31DC383B819 1324A01B6F2346D97B1FC2485CCC5008011F0373DB4257AE64B9BB1D5BF09283 5FFFEF815D207004712F26A05E118339BF84779613B5EDC2C76D20E2A3FA2403 3A5F64CCB9E13954A1FB9984D29903DDCF113DA2B3867FFC95245BD9DF8B0937 E7D0D78CE4825A09CE774F9BCE47EC723248EE280A2B40B32F6B2DD2CD36D695 8B2156677C485FF7D48E2C2A793A6ABFEB23291FB6F730F39A0B66827EA72C2C 264B5702D049C563FB0A178CA8C7EDFE4864281A47D16C8D244FE8B78BE9CCE0 9F618E280898DC8E71C155013D78A6B1D9A0B28A25A1A740A44D47D27338D6EF FA295EC4A15E4A7B654C8AACD179511AD62ED750C2D045B2CB0343A55B421C83 454EDAE8B87A5A4912D1E57EE4F02B0C216F88F384B20CC02F68C200BB3C1B73 C7EFAEF7CF295171975E689374D2B59C31838B718CCECBD9AC1256E9F567F68B A0133B68CBFDF3339DF9FE22C2FBA6876B598CE36D5ABB7172E970A6A9D73AFD 6FB8F264771A722080E3B86F3564C7F3A85E1DF2CAC9308B094E377D1D29266C 1C08F486806B8B1AD23527E2926161F7FEC4B47A98D0FCB17AB83974E2C42705 F2C0A9C27CF8369516F0494770FC6CE5269CE48488FE598253014E3314DFB39B C9DC599E9F13CB82254A47F3C12EABE846EFC6F368D9B7F758A13DC551ABDD64 7AEC1C3FE8E061CB3B93493877C45B45EDDD8DADC73192B7E355583780B9DE5A B8F81C75228B6B63E543C1B5BF29C5A3B4D332280D617F53CEFF6A4D080E8FEF B94BDCA9B06F6ED0D79AEE99597C808BC20F2D0CDAE5C9A9C953272F098D7494 84C8568433FE2973B8E1D9CBD42695A061F39C868FF7DE02BE09F288B3BFC04D B395A039D18B4DF662CEB43F9E3A3BB3CED91F0894107AF9444CE37A999DC0BE 9F60596ADD2B3E0AD734F2C0CC906EDC40EB897FF6443553F436D62DB8330EA2 7E09397BFD60AB34C8167EB0832627D497B5A362EA3179E0D48E39F51D6AA915 84314C96439143EC5534C8EA167547951377825414CACAEA02E58C6D5F4C40B2 BB98659D36E2E5F8F2CB313AFDD91715C959B5093A4AFC08CCA899A0528D169D 3CE8C597EC0CC1BED430C3CD824949D4DFD6F226A1A4AF6899EA7FC9F910524E EE46F1E1F6171665CE8F02D6D5BAF011A8CFC8A228B3C85759FEBBF061453916 658036C3BFA62359554BE87BACA13403B6DF9C94BD745EE47BF70D243D195402 B9E621523FD4433248BD42F39E7C6A56EDD09B44CD337ADCC61726201C7178AE 00EE98C7BED9CD3D1500B5234CD90C020F3AB311B0C9B3F603CB1D43978B1B06 663C4F59B467977F46A465086C8FEC8A6CE86C86AF97285AE838FB6E15E34ADE DD6CED8448D4C8523CD8CFF35978B84AADFA10D028EC600DCEB88E7315E4C8D0 B96545BDDEDAE7B34997FEEFF2C2E4C5D96958E6AC28C9DE073AB097B6F5224A F9DF84BE10B72EC9DE0BBF13057DADC6A060AD26C76EE95810934DEC042D5443 4BC5911C05B743F4B64CDE4313875C4DF913C837165C765630069AABC91751C2 641F50F2D7DD38B49910FF6B2D14700B69B4759E96D5784D36A9233250A05D59 E1E9989D0A2986DDCFBD210BE5ACE43B9321D01CC5AA49C9FF01ECE08F073928 A428191E6C0721296CAC0A812065778B4664ABC80E0C8A2730E4037EB06E26C1 43DBB981AD67918432E956A7252060D2603E7BCF802B5CA66D4842E329AC58A6 7759F5A565DEDD417FE572971A8EAA8E4D670F2732D6CAA7FABBA8D150C84727 ECC69EEDFBAD7C08ADC9D018582AB3BAC71F49718861FA2371440BEB998F245E 7A90021F008996051284B50A401BA6CD078427292AA190BAB9326EEF9F4820DE FE8030D6FFA4E464175770C9040CD5649B1174004F101D1FE237D3F6EA1B36B0 B8C0E29549E7BEBE83FDCD9251E95CD6BB4C6B5EC20D07705A68BA2032BDB86B 5B5405C293FD6A0486468441A90AD79E114EAD790598C435AACAF52B481E3419 BF7C5AD6BDF40651285F2836D8BB6573DE2440AB76209E2D59FD8AB797205D86 BC62976FEBC711BF0A1EE62918E624BB05E17A5023643F92E7FEAFF7D1211CBA 1F2418278B9A2F9467CE3116F0A08E5E2FF6FC82439B6472476789AA8500FD85 99D7AA0B43FCA275F5FAF444F975162C00CD529B3FAEB2ABA0FB0C4C18AA02BA 5E0EAD4071D8BF61C28E5D56378F1D007554D464306A44A40C80FA87483E9688 595E17F3009F2BE9A2D05C43C336DE25745B56D7A3A39173B8388DFF556C7556 490D5D11C0363A72E6B6A1721A164A983D0420EA3E5F863273056E8E0AB309ED AA8A3A84E4153E2E588603273DC4A544ABEDCB80E219FB2678363BD536B5F742 F6CF33EED2AE03CD09DE6DC6825E9EC8E52A4EBA7CEA25A58689161A29B8DF9D A9F7B5712FD3A01D0988AC3F10666BEA4600B76A7406D97A10B56FCF85020DA9 CE03CEC7A8A3EC9145E9D71554EB28B9CFAC3B750A5974468FC38A2610A9461D 477D042C0CD0F03938E772BAC7A403ECE8283B24A4F747DCD2D2AA0616F371A9 7B584DC6F4E8FA4B3B905ADF91A65E8594D6A6C93F937FB3F791F812B8CBC402 57A04C90C385DFFE69A9CD6442A0B1815E6FC38CA9FE0271641C3532CE80B2D0 95EAD98B2AFA3A6D88A4F08F6C4D715C97DBBC80BCD6193334AAA50B56D05D84 5BCA66A488D4E2CDEA747160963F7D14D5760E5C831D120E265B9346278D81B9 F47F9B51EAA6DCE40A3D828E9660B6BAE461F55701FC51A8FBE7B0C26C48E439 7D45B255724418E4B3A322438A8B8F23C732B05C39B6A5AA6CD4EAC3DC18BF95 CAB3A59BCE2B83F4C11AE8F266372262CAA65BDEE9DF466AD26DB88FA51F06B7 7488E7C35D33D7FCE298BB8E7CE8296C2723C184D173B5E2E739E17D6F0FA2C1 46A040FB472931D6307CFDE3CC2629A11FDD3AED017A91F08ADA8A0DD8B86513 B7E8AE4B2F448C3C90709693952628C2D8AAF2F307DA4BDEB7AA4354AC6B637A 4FB4FBAF2B5D71139AF0C6B9EC113CD9FFDD6CDC470CDB00FE7D075EADA7B360 F7758D2488CB02306914D7D7F1D54056D7E082051E857FD9BC95EB52D9336096 C917F1F985C9ED50887B8461CEA108F81F3A71310DA9411A3EF5350C1214C4DB A5AA499E1B3C37274211594D6E691D5E94291E21D2B6EA85D23D240E48144B52 F314F08BB2CFD163376B2480D8426F5867AB466E8C4A5D8020092BDBCA0C0E74 82C1F8A0334E660384F9EB6B293F7B12FD0669849A1B6298BED88D5E3FEC10BA 1DC49BFA3E8E05C872DCA72F971FDC88ED8244FB184F403495C02378B3DF22FC 06F93813804DDD9A3436BCEA172EFA4B5699E64118DEEA0E895D3E6EAF276B00 F6A240F218FCD65F7263A47FC7B5436E7FFD5EEBCF9D7043A65A73BAFB22C7B5 DB94361D0DF8A3CD6390F8027137D6329F718977999B0A79AF994CD90DE9F922 87CF69815C95D752022299CA421C236A26FCDB7ED8AB3DDB83251DFEBB92573D 8C166444EF064B56E56833D4B120C9B83B6016DCEE2D6B28CB437058FC602C06 4D085C670B5EFBDE62C0D31C6799BBE30D41FD4433FD54B0DA6F5587ED802D1E D8DF4A290C05CF269C9845907DA964E388D8F312C1A75A14CC5A404D1B809C68 79255B0CA85E8412B14091858487FBE196369217FDCAF7D33D903B4854F36D3F 247587B5B9B36B626CCBF6143409CC42D33222DEBBCFDFBBEC6AC55F6D9E8ECB A8606DFBA0DD26B8C9021222B868999CE2F51E89F1C4887C3BC84B14DDBE31F0 8177419BF9BA31A3893A26576A07EF7F264394DC5B33D80CA43D6BDF9165DDC2 FF53945CA32B03D67A81EF22081B7E03C47ADFB157FEF18E5BE7011442399238 25419B2218AAC6C2BBE2EBB8F80AC9C7C3C672E798655916451B2C226E17D90F 532DA76F31527748ACBC8DEC2BCACC2232F32D9FA9989B66ACD9053364DAE427 72B6EA70CF42F9C4C039F8EA5B8F77EB3164F48CA8B48CEECAF47A480D911279 4AA8E5BE91CF6C6A196F5A5F5C05D222CA6B94426F09E4B36508BF64F45EC760 5F7A788A4B621262B773B1BD3338BE89DF8FB8C95B9DD19434BCA8A1A28A6940 E53C17C9340334FE5C5F0898B8B340FC7E19AF405FD7437A8C7C8E254ABAB905 182612B229493B35F6193AA8F71421D4C15E8EBDC7A5F4E12DF57741F057DB51 ED4094421DE57C87B455A25DA8779DBD7929EB43EEC08D0160D3AD10A04F5B72 0FCDA7C709DD024B591138005DD126260AA280E055934C10105058CED6A5F733 BDCE802D6B6C1AD90604D411340F68181E0E9060E3B5D40C6306693FE71BAD83 E7DEA3872EAAF6BEC6ECA459BE13E32A5EB2AB66D23FBB68D4BB64E2F30E9854 DA4A744CD2D840AF2C28BF414091FF2B40D2874DB272F3F7055D6C5FB831D981 67DE1CEBC8C0E2E9D21265D1D1D9FAEE73CF396CD85AD7C1B5D189A50FA15163 AF96DD0B28805540AB7B4F685F53DAE42569C2113AAE930AA08703AD816D36EA 6EC30EAAAA3811FB12F1CFAB4FBE395CAA0EEE86ACF51DCF622F91F9B82D8815 D2A7A49FFA546C5B9DCF3A2BD3CAF7E4B891262F796B282512D98CB31DBD6A88 7E54B4F8202CB741DB8E25D5D2479B99648A23088BF2C3BDD29E36E323C511AC F00150277C7F83A643C57D06A3CCADD2F047ED5C3EE92128A28F6657C76F77B6 F33DF2753146E390ACA2DF3B42F2B380A602F68D0786EAA4785E318F4A89088A 37AD64B1CE4489933C77FA0434B93444BA4192047FDEADB3F7DC551D41A5E26F FEF9CD7BF806B273AB5D41B32A7A0110492FB382E5FE128F001A51FFF721A7BB ED2B9751D9121ADBDEBED32FD5B7367406EA2C67683EEACA286E7E3F23FD5A59 9295B531FC4DBA01FABB04146C67285CE0D9E35CFF8351AE16A593E02845E76E A0F5D35E9D55B84F16FA092F53055F6D890488C3EF1573F2BC815461E340F93C E71498F0E828F1E9E7B2844F22F3F9A2D07993EB12ECCB91876C42DE8CB736FC 0C3CA4F347ED3392D8AA1768B781F331E19D090C8C4674F0D251708BC8F7CF06 DA67DB71B380CB43A19766E238DB5626A37259F20E8EA45DFB0AF5198083632B 168E2A5ADABC7FFC6D8DA9507C8F5A9D492B6F14AD93AA9180F3ED8DC264EC98 59D292119AD7A1A3754B761598C986B4F2EB33BAEFF63BBEC231E29E256BCBEF 041496EF7F0E68362AAC6D3F91E86140008E366A02AD194E29C385AF30CA794A 2B632705C00012AC0E5AD4F6864D2532BD5E8EEFD697F0DFEAADE2DEDE2ECFE7 AD3F1D1D7E86876DD24DF3DDDE54422FD40AB53AD489A9DD83CBEB0E89DBEA6B 0BAC0D481B6A375D76BBDB043C8C37CD4DE3DC43DB345F38CDF809F1496549ED 5BB28BC41C3F79E8FB2355B2AC19AF9B6B9412A6F8037AAC248F052091D065D5 80DCDCE0F5EECD9FA798AC581DC1F040BAF2F683F421F206AD77FCE918378B99 09C36C7E44DDFC19C691EA3DAAC5EF37A63E55CB96C5D792E2DD4D42BF435B43 A1F1BD0F5D9E62F0B2763E6DE49ADA08D589105776B77977B6BC38FB7750933E B3D269A0A54D028B02F4FAC403BDE3C6A0D7DF22F07262400C2C11A744CC989D 84F9CFDD7C9CDE2C272955CD9E1374C86A1C8843A8BF20FAEFB2A8F81FB8C824 2025D54BF5C559355ADA803AA637D274ADE1DCA6BA967800B0914B4FAC849018 A3C1FB6168A548684674CBF00666598AFA510034B0724DCC9D4E699AC525F9DF C0932F2E52FFDB34F10A7F0F2D35B5988F4058DFF3D680180509624B6E5FDA87 7D6C9F052D6C66D3FA200510161AF4A739F470C73C4465591868463BD531F9B4 CD2E8F525FCEB71CBB7A61287A365D26FCCF6D02B521C3D3A3DB73F984FCE86E 0CC7524361E331BB6FB8421608F8CBFD9A24050F292307642A007AAA21D5B629 4F2A0C3175542B5E5C1722819A4B6A01A6120178966D768E317C26CA9C541DE7 3A567F7B8B5D6F8ED4C3A17643EE3E3359529E41959816B66A3B8BDAE8830D9F 363E52DB112F8F2B34674BA03D1903132A904F120CD4B5A46F8417973527CBA7 EE5D6807C27289951F51205F2128DA0C027EB684F2FF8E7A85EEEB19861B74CC C7AA0F96C8D7D2AF91C822BBD137D72E68CD9221AD98ACC4CEC681F21FD920AA 597D76559A15510E760C2EFE05F95065E144BD971318E56E01A80ECF36C30F76 ADEB8E3D38E680A673953D31A6EBFC61E5C6519D6AB0EDC99CC2D9799112B45E 4A40549BD941E2983E3C57DEA71F822860E65EB94FC3DD79A73AC3FC8FC959F3 F832EECA24858607A099708D4FF00FEFE2EC6E948A17AA2AA31CABCEB411C9CC AA583B1DE82772640E83D00DED78426BB3145ADD20B1DC331EB14E6434656458 B4B61E7457F429AD3178507EE6EF317C3942BAFD1C4226F2CAD86EBBC72A5521 D9CB8F1C2FE6B538C572D109A5AA5F5725F6067A13BDE07742D50C1B81634153 EB024CCDBCA1029B225D4CAA49528B9517BDF927F743E861E0990D2B62267259 C06B0E6DACF4DD91E977173568D54E0077F0F1ABBEE1326922B7E2E62824CE3F A7BE508B3F82089D89E947CE6FE95628B59E8B7985DD6606B0AA01DAE1568BB1 692D7878A39B30656F40EFDFB50BC9626BD0B72AE9E1B59CDC4AB4CB48C38144 7FD7E123968A707B05EE03CB1946E7D9917EA4BC21E8C87E15B44A55CA9244FD E9D90BA835D0C3ECAFD42C3D59F13C8CE72936FA46AA5CBD3DD8792EEDFB17BC BC2FCA4220432674EF0E0FF360FFDEBA4ED9AE7C49831364AE9E2F5730394D2D 8C98066B8CBC4A90A7601261F5CBF9991B13CC76E5C5F0CDBB3B504039610097 625168753B027FB99496E7447C4B5776ACE299E9C01CAD5E384F38458EA8CE88 C5C4C76DAF0E1816B076E8F76A696DF4676E077B6787F1C3CCA5C6A39483DD75 83FE4BC0A3A3A6F73519403AD8F437A1EDD801BA3AC3FB2E5AF83B965B64F12C 7B4A5C6AFA1E30D3FFAD6BF3E1651AE3C0DE63DA5D041B75BDE1D7E5AB9E3164 F56F6079BC710337192F05BE8AC8E9295EC9A687FE4B3928A8026718496F96EF 67F31D1A55A36E8AE7EF8D215F44ECCB7D621876EFAF8EAE58FC7836A9C32F84 54950A8EF9236A7B1A28E73FA6505BDC14500E9EEC8098041C9B740F187051FD B38F92FF877BC95CA3D34FBFA3B140E599CA8D8BC8A99812DD4C4B9A7C8B1EB3 86A2737E6C77A61233D28756F1B7D6BBBE6141D47D9718ADF3C9D001392DF8A1 F357019AFA6E408B0483CC15D424F3C44987B76CB9A9DD562BD8BA262914D57E 8EE2B679052515B4300D6A0C4DE15DC45025DABF171445357B38E52F09F41F78 6E7407DA7909357DFB4C6FB6EBF7024154782C42E7A4CCC9C1E0CA132CA09C0D 28DDB81CDB2E27CD5F52026E06A889462C53607E688553809636146787809D25 954111B9C2A3F4B0A2C6C4E4C8EDA7F93A09664BEA492636516C51DB9D0C5420 705C1265EAB975BC58511F754EFBDEB0A003B742624D95D51F798548CDE0C980 467B3875010E5542A389EAB33F076CD829EFCB3701DD5D3C0FE58547AAE6EA89 9085A05A6FE435F6BA56592053AD7C611B4E6A436C21F4993B983E079E2F6870 111B9F777940D7CA75D4B199AB83516C4911F1FC523D13C5B2D5FB489F773E53 7BD5DE181564E288E9250FDF2E5DF97AA304F09F4A8410AF9BBACD91B7406864 B262C95E2FEBB35773DB093392D5CF81540CE4991995DC681C81C92E4FE35B1E 2B5EEF06081F3323F6F55C712C769163C5E59F150058CEB7F9E635302E1285D3 3AB7470089F928CC305AF0A8D355F64F58128653CA922A8AF2494A6DEB3E0120 BA206A16504B1CCC22A39D35347F51D62E6FD29B52A1FBA0E54F0A3AE59F748E 5196251D74EE1703F19B19AC8E16E99827B3CB62BDB448CADAC52CF5B170F70A 332DFF0F5D90134F3059BBD7FFBC891006AFAA1666E438E04D5C83D666108B89 7ED7AC11F47D7AF159087BECD91067ECA7A3D724C5941B47E34F108E82402F13 BE37A766F5AA06D1979D5F0C24B436F6AEC450D5951BBDEC1DACEB6733C91265 D7147A2C856BA7B502768969B7278E598CB5C169ED3200E044E7626730C14EC0 E17B8B74E64A9C23584FEF1F6A1D5A93EBE8392E7AA052D52F8FB7690832F900 8715B845362E3478DBB642735A70BE10DEDA954B5B4A496475C490D07854EE2B 809E2DBC70B4C0DA22EF763DF88FA035CA9FD41A29FF03855C3CAB38F6F8A5F2 C2464F9601128162BE1C8E7678A057C4FF73A370AF41E9D0445B72987D7107C2 045E6B6E6BB1F5585E5C41ADC7044A746D923B5E617517C4C847D67D4CEDC899 705D9A28D66AF5990BC0082C558B97D82955676C3F98B724497C64766A3E4559 B5FBCED45414AD2285052D3FA11F757316CBF92D5E5C42A5583CFC69DD4F1CCE A1C17A3EC8FDE81B629D17329ED8FD05912CB31F4A55B0E66760A0C4630ECE0B 9C5C12A1CEBA00388A68140A04DFEAC23AF92C771BA3330BB56DA6CF610E6595 1B7046BA14EA4C858694730EE7A9F3EC308D9897BAF9ECE13824F9E72198CEED 06DC8DFAADB7305AB49E8F0EF629C19E9260000D4A0F8D85C1131CB118BE3DC7 5CA7061C5A7E5D168A876C9911600C9981BE8BECF9CA51ACA80A7053111B39A9 998780C75219D5EFA8898FBC7FFC01092CB66BAC4A5845B7F0F845F955AE84FA 9226B29789F8B9B0EBBAFC44B8964086500F560B429048448248734032B0DA38 0584542CAB1A226FE4E3E4EF0D4BF8DC55033D1400523E8576B11C3324801498 DB9CBF5B647EE09A5BD6E70C3908AA0ACCDBDE5866BEEE6BBD5A233DF3E5EB2C ABD117CF1FDB85AC24005F544CBDEBD355881DB1CA3BD082854F2581B474D50E E8D20A6D8CE5C0C860BE2FD4919CC56628AB5963CD45C7A3481E7FF1AAE04A83 51A9A050893DB15BBE8C3A46ECCB609AF8237C1E116BD673E1F45B121E0C773C A10A3407C9498925C334E76813D35F01F1513B005DED70725CBF2FDED25BEAF1 D616CE0CFA65A41C4EE845E7644EF193137FBBB11F448D1E8794979A6FEF6D0F B33B91F34D56DF7C21D7CDAC9912CF7ABBCF1455E1C42F8AF4DD1FDBB5971B08 45C67F79014ADBF822CAC23ED10AD44728EDD9BB6C5BB4CF6BBADCB8B93FD2E3 6CA8D62B5D217312BD5CAF49A344E4CACAAA35EED24719057CD9945846920002 715FF14EE57170ABF8998B19876072D5388F5AED70CB065C1CBD91311B9CC314 E8FD42DFA91F912C9FD1F2C1FC932BCBB188E3FBB1BBCA9689563BE3BABE6B15 CDCF2DFD6B5D00EC0BD51191AED17C82B7360E396445CF47159098912F39DC5E 16C7DE4D27E66989C2EC4B97287DBFEF5BAF7B59752AA3B862D537C93576A903 E0D0153747F5C5650E408F22F26554212CFECD54F6119DBB 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: MSBM10 %!PS-AdobeFont-1.0: MSBM10 003.002 %%Title: MSBM10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name MSBM10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/MSBM10 known{/MSBM10 findfont dup/UniqueID known{dup /UniqueID get 5031982 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /MSBM10 def /FontBBox {-55 -420 2343 920 }readonly def /UniqueID 5031982 def /PaintType 0 def /FontInfo 7 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name MSBM10.) readonly def /FullName (MSBM10) readonly def /FamilyName (Euler) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 82 /R put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE32340DC6F28AF40857E4451976E7 5182433CF9F333A38BD841C0D4E68BF9E012EB32A8FFB76B5816306B5EDF7C99 8B3A16D9B4BC056662E32C7CD0123DFAEB734C7532E64BBFBF5A60336E646716 EFB852C877F440D329172C71F1E5D59CE9473C26B8AEF7AD68EF0727B6EC2E0C 02CE8D8B07183838330C0284BD419CBDAE42B141D3D4BE492473F240CEED931D 46E9F999C5CB3235E2C6DAAA2C0169E1991BEAEA0D704BF49CEA3E98E8C2361A 4B60D020D325E4C2450F3BCF59223103D20DB6943E919FB4E3240FEEED78EE63 0677FAF39AB2543D18C08A2B98B97451CD42CB7893DA8601CC0F45A65BEAFC64 EF72554395DA801CF2E9E3B03F65F1BD98F8C5F8EA06D7457842303C1A817E7D 69821807328AF426B9DDBC188A79A66FBB9E6193B4A3EDFE3136C6574B9C4C94 E2CBA4FE7997F949BB2DAC0D329C2AD8E4095BD18A037AC9F77B794FC389E5CD 56CC4C0B74D64FB0D02C92B88942C18B6DA84D4CF482DAF3A01E80BE483AC6ED AE98F5F3E49BC762EF6BA937D528E751D9588B0A1E82EF0A5998150EC3854472 5A91EB983915BC1D6E2C3E615E0267B39D6937ECE0EC16162FE76676E5B69F3C BC1AD934BECA284B89F0613B70876247D768BCD246883CFF4D819D6265302730 7E4BE6B2FFE7E91CCB8C6D2AFACDB4C5DB9688153E1D6B2DE136BF7068418A4F 2D1C0CA301B1B97290B46EE14B8286A81E709980F67382A5132F01B2D44DCFF0 9753E776AEAE2141D580E64C82598DAA6DA4057FFA9D02C3B77AE15A50AB457F 3FA5A10A3C986B22F8E154C1E564A55D3BE4487677613DCF793F7E1B57C9A925 BC57746C25FE567719A9EAA9CC44F1D0FF8F92C03132B205F57E3AFE9FB66632 D3FB3EF5BDFB9848030527FE759A5273CB81DBA2719611355F43E34F8FD7D0EC 9BE47685A2D122C9B60198A430C5F5E3F972376F0FF4BA52BAFF64095F7ABCBA 022622692231FF87514FD912B80C07A0EDCEECFA629E2734B5EFE2604E8DCB24 32A4C691DB4CCCF19EF897A9F4EA5B2B5AFCDF87AC06B93669F3007C1295E016 FF0A99324B80E37020B1080E80949525B3278DF111ABEA48E7182B6F4DE2DC90 B8D31A953343D5DB78B1F2CC6CE631EC7E3D0041A823DF2A4702AAC0F0A2F018 E5ADCD42EF2EC8AFF6F4705D30042BE7B6F866C14AEA1CEE04DFF82BF14931B8 D297C38E6DA6E587C23EF0864F69BB0DBC9C1EFBBB97B92BADC336A4AFAC6A91 0A6B158DC42E975CB5D8D2054CEF367FB112456AF50684C41F80B1E7ACAEA853 B843CABA76BDE9582090299F423519EE3AF8F83AE7F7828B314B6E36E9127419 F274E9FBF5622C5E48D7E95664D6C0C1006661038CF2C93BEF1DE34A163A2C86 693A13F4D0F052D2E183F36401F0C29862BC1B36A086524F76C7EE2C6D436A23 7009F146F1756DCADD3F70C51FDCE610E30C0F4AC538A2703423A07976ACA74C 25F4CFD6A92969E206375FB0C672E45948B0E832F2BE688EC22FEEB3E06BBC3A 272F73081A30830AE4214F2F029918FCA40BAEBED6299EDBECA01E08F27E5627 F53BC56F4AE7CE2D6273B27323AB829E2D51672A4990E3AEE84331583A99DA4E 63610AF8F10C50FE6196E3F4C1E4FC9BA6BE0ABDC81A0A7BF6A5792A97BD0A7E 7BBD31C3FDC01D734550843C8D84C6CC0B492CD1A6CCD57428F03A863E959C77 457D401028FD00FFA9BC422FD09D8B8A70446A61CB256A2FA0B59A2646D9C5FE 961894DB8B315C52008B4416AC35439E010BF90E43A05FCB2FBE8E62385E220E 588B7FE5509F1BB71150E159D01D24EE28008D4213227FE9BCAA34364B1039F6 BC142AAB19C8E9B15F0113781DF9C9B3BC145955552A901AEBA588D39D7E87F1 CAF27D315E168807021B0CD1B2CE13B611A7B5FC28DEB4 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMSSI10 %!PS-AdobeFont-1.0: CMSSI10 003.002 %%Title: CMSSI10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSSI10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSSI10 known{/CMSSI10 findfont dup/UniqueID known{dup /UniqueID get 5000810 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSSI10 def /FontBBox {-97 -250 1077 759 }readonly def /UniqueID 5000810 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSSI10.) readonly def /FullName (CMSSI10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -12 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 101 /e put dup 102 /f put dup 108 /l put dup 111 /o put dup 112 /p put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 122 /z put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2919BE7E94DF619E5D4CC604 78288A019B254A5A0A8E2D5ED465C9DB3CFEF0F444DA2A7DB2022495EA1B3FF8 BA3E769C503BAC77336BAAEFA8F7B4BCF9BD63253ABE621C7C696DDD22E0EDDE ABDE1706338BB5F604B4F42356E2A96751B8EAF1112A1BE30B618E7F7BAA96CC A264B5EA7138FD007E2CBE19B1F008AE13B47252D2956A06299FB28035624C39 08E9E5A4BC08DADE08861DB9940F6F0FA67E97E9A73C9F41525E865D0BF68F8B 6D48D1595EB69B3FF78F5F4B18470370BA219A010F9B5EA904289205DF20C7EC 91A2B866BA05251BD3D00FE5229CE2D2F220B6E25DA5B3C0EAC68979BB312E2C 532264814FF214CBD46C8B9C8E45878C9E28FF334C5CC7DF9D378EA5A37986DF 0450E2D5645371B8C577C28A008AB7A702E89FF337A17D05AFB0FDC55856AB3D FFF997FF51AAD70FED81A5D307FFBE26E862070E361DDF6D162934B7852D2FC2 F3FE611F218E28CE0B964BE311E59D8729C7C0FC2B2D5781F73C87D64E6388D1 D7798FE70E74E76368174F5E055FB8CDA3809536768B0E6028826436C7E6454E 895EB7E435FF8AA342BDAD46A2C7BE5FEC83B8AD16F2C773F55F58870E70F2D4 FFCA12D89B06A706CC204383C0238C17EFD01E0118FA4CB77681CB7260BBACE8 30C8E7B16669700F884F234C36EE9694841EDD4FE5644949AA28AE2745FACFDC CFEF1590F99B0DE494BB0851205DF4E7F2EB88CFF794DFA7958F6EC9197021DC D4C3590B2729779345143AF6C349CBD2F17AEDDDC23AA8F0998C27170C44FE2F 163C1E2FC314C6CE27D6CB497C3A12F6D10B92D699E1578C23B5D9A907EEA297 4BF7D5C4ADFACA310E61EBE5655745FDCC48B661CC2D3EC016A87632AE410B69 C2B98B87D3F46491EE8611E31CE17843B05C05924FA42FBAD7687003C14599DB 08D72670855271EA55082BBF6AC146D452C1531338138D9AAC7E4D2F0CA1FDAD 11E4CB830A9F38A83999F6F0ED15D12FA631B8604D4E3018E625C8BABD8E1075 93F5E17CAD3CADA2210088E71C02CC6654DB4E12F8C2B6B7EADE37E52FAD3FD5 83E45B62FC9B573A6068EF3B43856CD4B6C3E096BA93728B05AEE2BB96C60AEF 58214FD24DEFA63E3FA299289B211A57E4B0CE9EB58414FB78E20151BCED3F4A 9AE6B1D7ED559B3B619385AA8496D6F56D2B353E4B1BCCFA0A50247E283B1540 4300E1119F710664ED5DECAAE9087B8C0CBA63F3FA09F217757B8448D13648BD D16FEAB50D245C198EDF27C8628CC7BD02385EEB04AF8F4C76308BEF4D640C8D 6F2FDA7BED98F1498CEB1226F009BFAF6425265EC0D13FCACF4909B7495F4211 BA32B04A3B0BCBAC89D6A9088C47C47B4BAC36FB59D9B5D73B2E9E926A9DD183 1AE00AC58E9485379FC6DA119EEA3F6E478F22B60A464F192B2F43379407D4A8 795073B4309C27D8E945468055493D0204B4A57C39CFDC951A04E0288775FCFB DE3993852671BE697999C9831A33CADEA75B369C179EB8A807CFEEA5CD97BC55 1B0EE49DCC4B6BF4137124123626A5C91603B01B4E0AC759526C129F6AC5BE74 B77B4E431B596E29C17BCCD1CE8279E9C00DF7557AB25770FC9B02762D7EF141 84FFB4730BB8451A485F784A34647741D9B8D2127D158283E01B38BDC39BFA8D EAE249871ADB347827989E11FAC23F76C2389F8E883B01FFD1EA4968B44D1B1D 760A1FC8F79B50385D8327D6A6381923BE9A2FB8AB0CC6ACAAF5C7701C8F7BDC 81424F63D2CB312235AADD050FC4B71448EE02B7B25C82B6BFB070261919DC1E 32F5E6DD4C38691581D472C254BAF83D7F568016B5AFAEC895187E88AA4D05C8 FEBB3AEBC348AAB84907BC4D85C1F888ECAA5ED2714598384D7369F5FBA0B92B ACA0B6BCD2D22F9F10B27FBF11A8AF204794CED402A3597D2D469A99CE64BF1C 9242867251B8EFEC0001A1ED0F470A4346BCD9DA22C005A079EE1DE3E33970FE 56620C318D2FD3DD9DFBB773B4FEA7FEECEA9FA1923AD4B2F49DAFEF48E1C529 DBE9EC77299E02DEA39C7B91F9E4F6D68EB224F4555F53E66CD00326CCB5FBAE 70243CDD407BE63DF7BB85E70A99F8B58BEC1562C290D8E50666E1E4EAA484DD 487C567B7BBFEED34A65A6407E3D8925E3C667AF40DB0EFBAE2C07EBE60A83DD C1A02842861C994C4D314A87986CC94EE74DD4E29AA9E70F393CF956D3BE586B AC618055571DE00541BA60D022DB49CB62C13FFCB3932DFBFD2D52C8F0C72F1E 9337D95767E376B80AB35264405CC5C385ED6DC9F95535E00C5252DE66961AFC BC7C83ABFCFD5E0A055E37E7D261A19039D47EE792CA30EA673F80C48C0EEB20 DB21686ABD169A45DB94E35FF086C9946F51409E9E0836041081B04F861838C1 87157DB76A983928BB4122798551318EEB70A32C11A412FD56B7805BDA93AFCD B11D35FE799224AE30C3BD09D971AC651D06184FCE45D898D09685009DA35EC9 CAB63751F8241297562AE2FEB577AB074D36381B0E5FC0DD5572E3A3079B166F 56C42FBE6147FBDC7EC2ECF6380A70F87D1E44CFD02A70BB3AF4BD9D350C7B21 5DDFD4FE288F0D9EB2FF4C24612FA759B41D0854C04163DC973570B974BAD7B7 BF766AD59D543E808E8F56F831472ECFEECFA7BEA74CBCCB025AB04079AE0838 75852BDC83E1D723824761459DA6A8920A27282043C38BDDB43157A70D552072 400E84CED5FDFDA0F09DF94431956F304F6E92F3DE5F99874F995B467E2038A3 B9C787E650C4A31B2FEFF078BCAC93ACA5816F5DC3FCE322C9DDB15E34856182 BA15F2D56FF4E91573BD2D8B34767974BE928F10EDB3525C2B259F320DF99B88 87801826F2B6AAB2C178270B27730496C44CC83C8036EE6D7D33D6D4C0D871A3 62B7BBC8D8A4E86AEB2CAE76CC7B091B7DF5516EEF043C7D2727FE569B2E28FF F6BCC6FD3696A85CF5ED26571BFD346494CD6C0974BDE257EDD4A2C53C70FA89 C81F9D32F5CCBAB39A7C00A1BE116FA1254F291AD26C1DE4CBA27BC03C5E5561 8E960A7169F86C0DF884419ECAC607FA82B00CE0B41F7696B2C384582AF6A986 5A9FF800D3A1F4B6C2524F1A4300B9FCDAE2C2050B9882BE4F512FF539FA6BE4 C9577484EB323E7BFA5BDF628875A3634214B14947F7C16541CCE359F72A0E27 C0DB4CCD1653693F7D0BA68D02D5A61AB516173E794BBE4C2C3F34ED9C33BE3C 4A9E20A687498DA1DF7BCB1F6C595B90A5730A10070A54180318A1BD01844585 E78C6EA28EEACCDCB49F1CAF1D21EE97B1DF74523291FCE2ABFE2C000E8F061A 7CAEA494183B9261307CEAC6CD13B362130AE56A651DFACBBE7A6F6747CB61BF F94BF393769F2A1BD493E1E6502A3507416984FE0F7E509D901A106B857E2448 7284E7ECC2D316EC1C54EE4FD7DC9972DE33B46356E414C92CF8DF9E472F7FE6 7404362C8DFF6BE223B8886503A83A83348F7E9F88726CE068C904D45496494C 641E4443D9474344508ABACF3FF3424383D79A8BDFE6E9D9138E660EB3FFCDCF 8F4E01B24B3070E8B480064D946D0D200F4468EDDF7BDE9D3DAFF03B6D8165F4 0CCB584D542D40DC72554A7597A19EFF3BD72B8520EA71A51048F15E2CA53F3B C3432278CC19751B38AEB52534BE6CD9BBD489444D313F8C78C2C252AB25AE6A 5EC7D05F3FC21202C4B30A7FF9E1BDC6AE3F6B39B1E09F65E95292FBB1915D20 44D7212A60408FC0F5A2E957BCEBE93DDDAD35D05D23F7E58A3602FB3FC1D431 754A3A21F181C437437D7A22C402DC82275DE903E256979985B6E794B459FEFB 393317FE573DAA5416AC52AED36AE9E79040097E2BAF6A0C6CB68C346E4EB059 5E8A6AA1C751CA4A4094257C39ED48FE4414BE73B4E0BF6394FAC05CEEFD1C3A F5F5233CEB4625752057789ADF113E1E2F77F5B471A0AAA761AEB46CF37C2360 E701B0DCAE13D4583D8DA516BE2E264230DEEE5053AED15368B6CD81DB761A49 9987A07FC48E1EC246D04D80D86B32F7A093AA23B769B0DBC554EE48DA202C28 55847E3D36D80B7C8E779DFE6EAFE3EB35811A1EF80DC639195D5810D90B4DB9 6BABF8F4468AD92939567DEB43BB00CADB46964B73AE13ECC82C3A57A63A23A9 92A46206C70B027CE34FB81E6919828462F8C2166AEBE9663259CE5D4CD8084A 8BA479CDB203F1B0C3579B3E0B8B8E7AA616D798970A11423C391C25EAD95351 A46A856512518A92C7693B42BE92C2E375047E9DF8620B624AF8DCF2836FB1BA 801C822472AAF5AAA719038D3B53D0AE481753F2EC689394CFF9A911C42BE535 C5B4A187712D487C63A0C8607D67D1DBD0EE766B526184768A93416366B2CCF6 364F2D24B44021D0935CAEA289B120A613378399B53E2B50C11F67B7DC4BB1E5 861D745B7FA3C7906AD591765884FA7D746A19EF86C30309DE0F43D4747EA290 8E3C68BAF4D5F4C0C4E08DCA301E46AE3A0141A58074BA2EBBAD8B3F326C240E ABE33FA5AC689444E7E04B78C29E49D3A128567D08E712C5EC42EC1BD3D95E19 5A7337B8AB2AA410EF1C0EB31D5766575340016CE477CBA3478FB68A98362C60 18CDC9BA410A545AB339B2AAA2934222DA734F6A1AED9942B43B18BAF77FB63A 71059FA66EE04B76730B499FA022A52139BEFF9CA6CE3F9855C7706E3F804F6D D622A6929D049F921079DF979F31828C31A73CA0238C0D2F11BE2FD68F2228EF BDE9837348C10E9F08477F754F6343A39736386912D6BC865BE30D1862BACA23 0DF2061049CDF9F894D73A549C10E7BE7790043F9A642E4676F9DE2B934A7F8A 7B0917DDF3255E6FE122D88DBD80252D0C1C8047A13F835E3FCFBFC0AA1D92CD F1CAB8D1C673EBDC5601B84615F513E4D9FE1F8CBF2337C9FFCDDAC85B6922E0 0BCB0DEF0FA647E6828DED2F5B20F227AF3A792C0C63AD888D7AF39B10171FB1 A24840EDC55158FF3D8513C89F666A2DECB4AA4A1D46503919A4CFD911977DAE 4779F23271C23BDF14F4EF8352D9C66A7C24100C28CAD7BCD89E6E344EEE173F CF8BD462E1C67F06D73A9085A2AD1EA3DFCD19EB5FE217406771B80C8A3EE798 A4CBFAB9AA93672B8FC9D02014F7076FBB477A777867C6A6AF2E6FFE3CBF3917 1E4F68BCED22EC345F87A92480F4568006BAC16A2DAB940CB9F3462D254614B7 78ECD86F7C3B3A7DAF06DA2D790F353D9254133C38D668C38082D0CC1BDC226B 4A7EBB1460735A5CB04BCA4D71995483CDDC9EA7D3E070C00D5EA6DD4AB539E7 E5C8E436656C99F30B3B464E5BA6CF7025E098C1FDED8B76260ACF62D1A08DB1 F126517B05C47376D20C999565399B06CC686A817B226101AEE3644A706F3767 372117607576BC2B9AD2637DD13C76F9CF2A356F1B9101496868EA8875C94C3B D181936A02D5387D1C3C285F2DBEEA25457F6A74FF7E00449FA41878776C0DF7 C58FE07009574AE6B457F3BDE448E71CD04AC7E3C22E0CC8AF56B8B5611C4014 3CC20A39A5FA3D9F6A5599495BA0457109823CE71BAC2B7057AF826DC623213E A6738E640DAECF08E69FE365741CFF8858337131B53A0AF9E49C3655F62E367E DE824A37A5DA853E1DD5970EC07D3594A59DA1AA85D4FFE3E9E7745FA7FC7F2F AFD4B9405C7907F383A5149D4DEACA083B457151CDCE3BA5F0C350945E8B92A1 635239241B8FAF7704E3013EE5D21F421254F23194B537C36F8B673E70073189 8B2DE6C30159232A2D054AB8254A450759ACE9C0B94DE035D9D6E5024E8AB56B 644A5C3EF00A5B2EAC0F89C5FE8D7DEB9BC817EF1F87C2BBD956AFE4DD4B50C3 A3BA4931A32827E612DC3059E97069D3894234BAC0E9AA1DB7B7EEE7F97C648E 0B7E7012CA4977258733C72CE466A2EBA8F2B391BDB7652BC07C2343FC8A4B5F 7C6B926D1B751BFFC6FCFDFAB9CBFF6D630CFC8BF374DF4DFB4B0845237E1E0A E2D044324B4F05C8C96970451C9348E8AA6F1153EAC8BA1C57FFA09B3A181CF1 3EACE89F204BDBA7884FF6F90D1D0CB578DE1CDE56F526AB11F9DEC4FC09642C A68C8F1DD2EFC7BB301279F474967B1B10DD7FBA6B09B95E7B4D34F66CAAE07B F792BFE7755882FC790961FAD109A7C35258021DE25BB14410828F9122E01428 D72EDC917C835553A30FBCAE5D067266A205DDD3AF3A4734371426968A7BF7C7 9F48A5D91B596D765E15356F388E74D100B2243D230BFB33147BBCB298320930 000670CB15B7EE9C787EC751621851C3BD5EA6E70FDE66C9834189A9B0D796C4 1FA4179D594B7E8A39987A3DB806F337945A02DDD2B33D43F1E39FD20F41CA25 BA3B5ECD3B32F961F4A98BE40604BF61732690F3C8B247C6E381AED4F277788E 223F8EBECE8CBA7F48801118966E39D4EEEE3F04B254A87EB21C2E4B00F15AE6 F1E2E59DA6353A45BD0A5BF4B822D86E0E7237809C1F0129B83BA2DF82D5D54A 522697FD78DC73D8A75DC6BEE09FC523E5DDEA837BEDD90DEFCF214640DFD4E5 477FD73B86A08885AC44CEE72F0E27AA63A901F2DCC7C42EC261EDD9699A278B 507ABA7BE7101057297C6A3D67C37D61CA4015E7A46C30202617F3585D719309 7DFF48AF4FBDFC7DD9F66E9549B8B800DDFB2D8AD69B3C6D2C3410E982559191 93498926825E6A96A2CB12F8FD15F858AA28E4F9A9D1457D7B9AB16D9B9D4D45 8FD6853853DF5851C529D134CBE17C6B99A8286519535CC1368407909A5B3CF3 C75B4F86A40BD2EAB1918F03D93A283EB119A8F63E346E7502F0CFD12369B2B0 09A2AD610FD210E8CBAEF4C0498B0E53BF4EE1A00B0C067C113F88E5E000E6F4 FACE37B09D72B4242CD320E4F72F5E123E5578ACC48F604124A0A45559E1DCD9 B58D9EE14F3BC6B4452B9236F6A3CAD7FB7E7D5C949DF2875CE44537DBA8B1D4 C7ECEB76F55EA06D56209E0BAC984AD37A459B6C45B4D7F8B84CA66BF274F1D8 02BF247751733715BDCAFBD55854B0F436BCC787F66B44784838F56AA29F83B7 7D46F0D88835E45159413BEDFEC525BDEDE44291003D313CD2268E240C2388DC 37380A430557D988332DF505B16CE488AF68C8F8626B7EA790121D6ACB87D94C 83418919E0CAF58E41A3E036DF13D13C6B107500902A747CD7D7BF12235A766C 00539129C31EA3E738733C4E443698673AAF4E9588AFAFBD00577721011A12BA D556591A82E2739AC4234917DD7A850C05F595BD87E0F7719D42DCBD9D724C85 520006A9069E1CB2557D2F97D7A0C54AB564DC62759F793D60A4760854AFB05B AE445CB9131D0C14B6A6ADFE12DB225684D8254EFD295E7542031CCADC4B27E4 F579C84F35DC502F17DAD24C1775F15F505888F0C3E0FD42357ED07FB5076E78 E862016F7E5835CD5BAF87CECAC4BC92375B426E9512928E748E0328947B1844 E251F3A6E99BAA5B97045D1ACA798296D0CCEC2044E59F32075BB7CB7C636BDE 755916CB59C802761A99B211EEB550EF9BC14AADC70818D0053993C9F299B3D5 AB1427B463A4D76459385F036A95770A8157D225FB75B2C92CA39D1AE7411AD7 19AB8DEAABDE9A2F7530B474CC7119E4335AE12A9CE84BA7FA92AD46D6A7AD54 A676EF1B2B0F3A73E6FB24B20F9702ED522DB7BC30DD2212ED63C88128ED1FA3 7B05D70B0BD95BC58F1330343EAD91AED48EB4252314C356CAD761C6B0E20076 1F6203EAFA1A7AB2695ECF4ACCAF7DB3F3762CCE1D21245CB3494F42C776D948 2C85A47B93DC4DFE03595BBFD7769DCE023332930D0E1BFDCF3E3D93AADB4C33 EEF1BB68183AFC55CBC7A21F225F83C4666B166E5BCDC33EFFFD392924E57ECB 5A258A29105CEF516B3A2F5A8284AA2FA9187C32D91D47628C148C488F11D9AE F8DBAB34EE26443381C8DB3FA8E810C504360FCB236B33EA5BA6233B2973A1A4 A64AC628602CEBD691C1F29AFDAEBF577CAB1185982139A3D4C7B3E39DAAA822 520BF7452B70B68B474BC73761F6F345A52A51B2031A263B812A7915652F417A 765C3398327589E5F35EDB4D783B6EE91ACFA9FDE43E4E692B8EDAB13CF5AC05 D11A33F2D53EE263F3F73F954505CBC76B9127245B79FB2A1CF6C4772F9880FA 7CA6FFB24BD76E7DB11F404DD53ECB657670FE8F4D2882D04621B8D963D63CA8 564DFB9E69E5B1B671559DD62A2EF10D9F50291C6F02D63B56C5E325F2F0A80C 6ECE94CA37CEF1389D0FE311091F0DD6C57D339F26C19EE6B9BC086EF91F3AB8 63F37B7ED3B19BBC746D3764A5A0AF2482150AB38BE6373C2846B569B8F8A6C5 6B23D4B3A45CFFA19FE9B78F182950CDF87DA3D8772E3DAAE93D2719C618F98E 8DC4FA6B758A3ABC828CB8E5290A59644D2B75977F5D19BCA3373816F0CF7170 861AB334B42D36E054D8C3ED2D028535BEABFD239F7061B38004A3F68ECF09C0 08304F436319D720E3C79EDB1B821CDA126BCDE8747A51DED21DE73DFB47CEF9 720EA3646C5A6941EECAE424F58D771229C2A3A446AA438412F0C0F5398757C2 13318B15A7B71D14E406F78879D68124D753746451A455077D64B52C86D362DC B48035DF9946B27271E66E62F5D741F10C8812F2915C0D5F6A5EEC859638D941 68CCEBECD8D1DAE255BCFFE47DB9D55D390C18F0A4589E52C6512432384DEA0C B2CBF1C8FCF630C3FDC8B381993132C09C93021E48C27711E7D3B01D5D350745 ED4AEB7B7D1050239035266747295516D1023A6D4DB0B6EA9AF3F018A704F85C 6FD786D147AF35DD9D35C1A7275150D82CEE420B04C7E0B51D7DBECABB91B166 742DBC1F976351D4CCD68E20A0CB76007C1EAC8BACF29D8AD309C8B3744D64AD 5BB8A26DACAC976CC61244AFA1A096033D21CF5F4AD85177013854B10911B6AB 62D9CF8DA8B3F32069362D005D2F34AA91A8944B49F2F53BD35A5F4B098B7423 0156B0DBF8E33E4B4F17E6231F44E9E103398895BE1E35B98C5EB89FE02713AA 41FB8FE44233E4E54C8C02F1D1C4C72CAE7B31F7068DB481918CD38114C299AF 666522E2249BA2D9EE7F53BEA04E4E1C75001AE9954BA5350C67B21D5B982DB9 8B12C58E08A7FC8A1D168E2EB23034CF10392ECF1B22C892FB7DC582BAFB20BA BF702CF12536897E49F3EB4321998E2FACF497B0C7D08FD421BA8C79CD8F6875 C9267A1226B352A8A1B9B2D0CA44289581E63F86203892CDEE915E4E61BC6582 3D51D593EC011ADDEA8CB02D60D33C87DB8C72012E29C4159E7E3C96A902A93B 3D127F34DB222508BC420651C7108628BF373C3D21495BE381FF9A92832CD72E FE624B5E8FF8666AA85D41FCD19DA86D47FF663B0C4CB2FE12404933695EA0B4 040A7BE8445E32900368274BC4DD2BAA7B8498B12BD0729C790332B323DA07BB 5A9DAF21681EE037B675940DC47271D12BD4C59F0ECF1DB867906497245FBA51 7F495408BF8F4F921787D61074108628B9B8DA88B005D7E0C21B8755AEB6ACA5 086B23BF864B16B4C3F30B892E92C0A1800E4FEED2E6B4CF13C2D33AFBCC1949 EF381C9E54F7E336E0252237606D4CBC6F8B88DF66886CBB44E57E179EAA6791 8E7EBF2A4B87E32D41B4809EEB04519B9B341A2DE8AEF3D4BE47918479BAC58F 8B11F1B160B7D9E3026990144059965492588059E3429DE55C375DD7C35F518C 3DEAA3D441F2AA9FAED45489BBB59FC206E67558AD2AEE12FB9A072D538A0375 47836005B156951121C37C77D65766097B986974BAF687C2F7814CFA0897F64B EAFE81E0 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMMI6 %!PS-AdobeFont-1.0: CMMI6 003.002 %%Title: CMMI6 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMMI6. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI6 known{/CMMI6 findfont dup/UniqueID known{dup /UniqueID get 5087381 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI6 def /FontBBox {11 -250 1241 750 }readonly def /UniqueID 5087381 def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMMI6.) readonly def /FullName (CMMI6) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 107 /k put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFB83E8A2A6085DA11 61B1632328B94B21D3CBF2E7752D441A2C9A03F6681FDAB37C4B67D5857720F7 0C4BCEE266586738012A2237A85FCD0425DA7E8E8632543F5BD5D50F9DBAAE69 9E053AECA6027559DE42F7291EB381D866F1293107553809861D43508C6F2341 5E4FCC431AF4A9B3660386AE63E877DCF5E513D0D5702B98D58B34897FEE163A 75CD6F5A2196F91CE5060CA5E72F9C5F79D18F242EEE58135BFAB02D5CA430B6 D1B9A376849751A45E52577B1810C4F0C7F6C8196071D5B08FDB731C5384CCBF 03B460347E0CAC959E4A12620B6C2ED62E06A241D1637F418B5599A7FF3C1390 7AF66A00F7C31B4EDF249C56C268EC9D546CD0489DA51B734C8292CE7B3D9E30 71448C85ACC64FA99B2DEA91AA4CBCBBB9DE20833700AF96395DEEDA3FEB7D6E D6E3BE4A62CBFA18BD0471C14F3A2FD025C88E8166A9830C5B5B94624A3D6482 D1A1D83805D0EDAC1C79EA858A523D9FA3356DF42BC01886E77F6AA6B04E4E3F AD107D861FC626F0A439BC3F125D48649E5101BF79C71507FDACACBBB4C4335B C41A5C15ADF1DF69E1D68C3EB9BE30BDD5385F81D26EC8F2F206C1C7032B9EB7 0392BBCA23B4693686AF8D2E1ACB2FBEE81D75667CD1DDB906BC5B675660ABA4 E63429F16623F20B6A040E4942107CCA26CF6C1F52DEED9EC7EB15BE4F18F2E3 9ABDEEAAEA9AC41E9F20C37C54B33F609F5835AE5A1EC9D674DC50FAFF6D3511 2198195590F62B3B8A6FC8C3431BB8895A2F910F0361062DE32CDA9A7F41E761 B09BD8545CAA2D7124B5688B54705AA52E4716E36C0303FEAD38E0510B3CB496 6C30B115C37E02043D47B4ED796C671E30360800EC13F0F0FF3E0DBF5A642396 EB0F39A9DAF0974678EA1D041F08BD73867065DA91B044EF2AB15FAA6546031E 189936C1FD302BCFBE55EAF369DBA4895DD0996BF7292762551A86C8A3604E9A 8AD29E38BF6FD40172051EBE7C694249F3378ED0139D37EEA3ADB66F3A80A1D9 9C3655F054CACE93BA4AD42DC78A03F42455ED1BD5C122F234F21ACEB8FEFF9E 3BFE0DB2DA6D368478299ED63912A234ADB1DCCF1E519AD20772B71F8522B5DB 24E9658BDC1333D76F07F63D81F7A51D12C445ABF698092A24E5E5C36A52206C 0C41F7DCA529BB0A4D146DB6B4B341459FC17FFA357CA5F93DBCF30B61374613 4846D619423BCAC59B7EB40C14C70ABD985754A0094C98350D01FE9FA371B0F4 38884690DC7700C49236EF68BD6E806E8937AD8B77648F552C0C907007465A76 1475BDD3FBE1CF69C706E703226471C249A3448F81C240ADBE4B5474216D0235 6B0816BB6935A2704E851E20C002F85B653BB0700915B358DDC168ED3FAE3D91 8280A5CA5C2708D622B03DC47A70E5FFCAD5A7C8D9AD563857BBEF92A3BDB588 8B5B55CC9B960F20CA4AEB598DA8488004DEDBC9671488011E836D9D8B6251BF 256D08E6F1808E9D498449DF1F18E48B310D561D4DD3146C2BA64D960E66447F 6DA8B07194E3BFAF662C00737BB7222B55A5CC206A1C46F252ACF93D2063BABE 2BAB874C01AEC438D3F86AE37C9D7FCE4077F5B5785E12C1E0B685134CE2E8A2 2E4DCDDAED2D53D13014E428FAAE22447763D4693E82600F850CA4A49E1ADC5D C8DFC16E97B9F6164095CF7F31373B591F815621F45DFF77BFBF89EF60C9F50F 0C2FBBA4EA9602E197B9447FAB6AB57B19B1C801DAB66BF7D263F6572B9EEF88 E06744C1FE197B8EAA71E1EB67716B7CAB30C859A2D1B2DB95ECED02B83FBA32 E62F97EE4403FADEC936CC8DAA161F7B509B2723BA2B735572A80D7D087E6395 6A9D34D5963E3C6E37F307C66D1CE551D2F055BFCC7360FBE93ACAFDE2B1A849 37FD373F62BB23C1A2E3DF61C9452A8C995B03D44D6210A968C6293B4A3BE662 C7B0B59E6EF6D53FD293B2C290436B0C448E7D15A63533DE321643E53C85EF8B 060C434E46A736EA617EA00D185323460E77B95C49070B035194A2E7693C3B15 104ED7F56FCADABE49F27F9A576B354C574B5BAFFFC57FE9AF02FBD87B8874A1 24C53826659BEB1EC50446AC26EF3A95877ED3D81D33A8BC1BF7473FB9C11ABA 0F27B38EEBDF77D3D3EA63AE6022DB0D4F1125DF274B86EF0A4A263E108D6044 7A885F5E87362293A53F457CBA6C911D23653DA7CE4BB7D4FF4481AB97C0DD81 C13515F0E3BF8A7E8DE2CE69B25BA9C185D9BF31A65DD290B0D4FDF40B61E2D9 AF92BC6468B3F5AB5D5B88710C489ACC69198D697055B39AB3DE8B3733825C5E 6E763E2698574381A01352A7042A36EA96D17DD2EEEAFF04ABF7BF7D877B0FC7 B6BA51BA994D431F472B6EC4B4C327399576470A1773BCBAC61CDBF0F95DA6A5 0BE5239B7E9CD39E1E4D27EF6695D1FB56D4CA2C2370509547D6D01273CBE6E0 66A696C35D2D0282CB8C85D7B1C51453A0AD0BC80E1D183D11AA78879643D9D9 A3D0B2BD8EE3EDF29483CC5871426232A20CB058EEBDAAED85378B163425C270 B0F7BB46B7D1B89CF84E6A06791195FB17F11F34A2548FE424DE10E376B39A2F DD9B0BA2F2FDF3ED4AACBD0D60E67C0749D6DCBDE6E79041398DF3FC8D9B6CFC 693B870683CC425C52705902DFD324E157C9829F25B14A057AA92AFA17F156FB 0BA949698EAA0657B03D9538288D887959EF24A427EE7EDE47F304A1A6A715FA 2966273831B5B3A9C11021C153E67A73FA606FE3233C3DB217404C6AED6A4C59 DD4C2A98B31AF5604D8DE8354448B4CEC66022E756B0056CD32E9B002ADC712C 0545C2C16D9457E271D98A4ED7DDE01BBD1856F5C3DA28794D2C7951FE2FE6D9 18643CEEC41CA4A3464D3D3A102653CD6EAADA59CDD44918523B8811C2ECCABA AC0D188F5E07B37AFD56006B10B32EDD179F4DA693EEBF4DF5425D996585F21C 8780A4D23D24FB0618C12DE65CAD42A0138E28A100257978EDCAD168C55C6F07 78A067F0299890356C2A184820A554FB07448395ECE36C45211757552E288ED3 7DFE46CB92EB2070442AFC85864A45000C4854D728096AD3D4C552EFC26DB6B9 C340358451B50AF9F1B35C2E32D495DE85B5848D78940270DEFC07A14D960730 878B5B55916FB40FD805116C9C2AC8C6D4645DA67A978F1C6FE705EC188DBF7B FE7AD6769F2EEC4A9B05306D5BCD6EC3A240D6A29ED07D1D82E697DC8CC391AA 015DB6BCD1DA5C9A5A7BE3C5936681215E859E9837027D108A54F42AB24E38C2 4A7D8CF3264AE049D4B1AF48BBC564BCC88AF19D37DD81CCC431D0C554DF29A6 94ABDF8126EE4FE1DFB78559B9BF36FAFEC9791049C865694F9E2FFB7A308FEB EF0195FAA6BFE7A081B65C5125623903828372F117EE17E588B2FA26DC9AE37D 9A6F0043C019624D3D87AFDB4B90C46AEA78919CEF5D7ACEE316F30EA0229742 55E02E0E2533CAD78CE9BD6E0260A695D776ABA229D89CF9BEA92CE0397821A8 830A557021B3B90CE0B07A4B34C24337FA3FA4A3728B6E013BA01071CA7FA667 6FFB4BA3A28B5D5614ACD4E80E00938C2589CC6CF885A260AF7589240BF8987B 20A19FDAC73FAEEDD93EBCB3D46F735214164AFAF1A7828FE96E2BF7CE1EA46E FC1FC4527A0ADF2B81CA51E3D96F3E786511AF00FDDD9764CD3178362CF9DEE5 F05D100EC21A301F40FEFC3EF05AFEC140A9466AE68FCFD6CAC1A143BAF2B7BF D0DF808F0CF87FE2399CD9D2DD424227CA7D4073ED002CD555FBE8057A797B60 313D18ECDD779FA7289D4E7BF82D95A7535CE3F0F4164AF239AC666653736654 C13E436B526EC5A1DC97E1D85C4EB563C7061AE1E81F0B38BC45B17C15FDB0DA E5F6332721A925D4DD5A97BFF3E3F11D4F4F43BAE4E73A294D314527397F03CE AFD12DDF9D07DAD8D6C8EFAFC2F52E20FBF62026810C0C31A1EF71FBD612654D C68B7A24112F0ABDD20EFF3DADBE447AF9CE568F873ACE72B63283CB26B89BED 4B3315F26084453B1EB0877065A76E7B704B27F93DBEB365574A78E92FDB4B82 D6ED91A1728F571FC9CAB636A6E81D0C1C4F5E3F6F4574B6EED48BB61EFDDC80 1831E2AB9327B37881F0CA5D5265575F210BF4BCD8653B4193F74E3FF65028F9 2968B8127C68CA2919DDF529EC882EE99901146CA629A07B4DC59E7868DBE083 6E546C5769655EF6628FE2EA78AC891D130108192053D5056A7BD06C09592AF9 6310B3586A2609DB94CB0079550358F5547B9FBB2B77917A327EFE3F972C7263 54076627B4DD74638C3105FB25DA246484799D5326EE80503F18672B893289CB 1FFF8D3F662FB33E93025D86803551A8A1DE363D1534BFA3EF968871B19FB189 DAD841C177E2AC98B6B69A78048221C5EBBBB86511939D3A9963B3BF021185AB 0B26CA7D0A779DC2F7693C7E48286BD60EE46615E31B93FB0E6992AE20C792A4 72AD6FFAD6682D0F606807D7AE63A6280B5967FAB889DCDF0F76347CE302FAED A59E1B1AB785D9D0ED695A0D05DD3DF0EF0B275AFCF9EC7031E1357E99A3DB85 B4D137567875F7580E2BEC96B08C97ECB40876000B610E0BFE81E7884C9BBAE6 6BE9C2C612475396BC10EC7FFBD1118A7971FE1971DFD0CB677ECA65DD837B5E C7D36FE9F20A15A941F1E77C11093C902DF5B7639580B9C0E4AAD13518E1901C 1162FA095F301848770C6C618E371A0AC3463D0D94221EFCC0884B21300194B5 97E03BCD5C4878CEBF352EDD1D2173B56C9B6A08BF3F33419DF226E1633CC5CA A88A57AA85E21657569916E9B4B79E51B5535A57B2D6FA3EED1D0AA32DC0165B 12F8F5A681040B456D8DF175AD6053A2954F327F4EB4CD453A056FB1701242C2 59755058640C62632C764E002CE928E6B908BB137C28630A3CDBC7C34CF2B643 FFAFF20E345A86F31756C78A8EE2B9B1C5DAB2C863B29A44190770FD90BC6AED 0C25942BBD6A370C21650947B49AC8EB6825BE65DEFAFDDA32007754DFE0273F B995B8986E505F95E58A3F8873545DDA6F3FFAADE992F3FF7B2DAB76D663280E CF2BA18BC8871A7C361AA3600B192948CB918FEB0F2900AF2BCF169576828325 449CBF0C7AEDC299FCBB061F491469B9ED1D56771A03F9F202550E17FDB15B51 4772B2F06E6AABA4027D13E8730999532DB2475630D2F8EB98242E36F5B45A94 2D8083014B63A806BB9A01906143482C614B5CFBE8C5354A3F2438B2160F6DC0 81AFCEB201EC67F66DC5808C907A3C6CB664F444D24095D9A11D4978A7B57037 87C67552FD59F5713D0FE03462F9A1A323BB3EFF0AAD61B1792CB109CA9AE4D4 D7F7FBD3FB91258DCFFB4634669FA13E03C0AF699165311CBF37D24378022787 87D1320ECF878F859149B2F994E700A32CB7253297AC58753E4583A08A1F83D5 CBFF10F2D26D71CDB20E1C69A666E9C4D23BB0E6BF1097FBBB204EB736E61FF0 C3FDE1986938F8099694B9F998B3C735770FF21F73B1A6B750498BFD21184F11 5E6AF0F1FBB08EAD436C4AADE1E6B815F5E58988C113B4B2335A340798BFB201 40586D0BCD6AF5A08CE9AA042910197F47D98CBB4411A6D435A46F46B3964F85 032D7F8D880732276A8FD24DA772F642F06C9F3EB4C9090AE4A3AAE67D8768A1 7B2A57E15B7FC626450372F40E3EE28D8D997CCC8CC89C644461D1110740407E F6D884A0503E05AF830994AD0CEEA924D935749F6EE9F2DD65A58ECD59229918 A303C90E19E9C411FAF24AD5E9B786178F8182692CDD508A4755123B4A594AF1 A8E7287456C1CE2CA485CF4CF9DEE5238AA7328DA204816F98B7EF49EDB30875 3CF8C48E0465BFFA8F2A1CFB6A8F165B63CC80F54C669D02BFD9A0EA0FDE2B40 D69F0101AE4D2C10185AB10953019FE7D373BF40C2F6D4E36693F118866D1267 12BA7987ED4313E8635DA02A4FC1F7815105F8EDFE8004A8801CC1AFA8D123FD 1768A6C39E838BD489C6BEFFD3BDF650DF48D5F8D99DD5A2E8AD235F2CAE8BC9 C13AE9B214CF3FBFAC7BDFA54CB6E675273330608BD35600775FFB2A96FF648E DF55A78B43CF54CABC0DA8D574CC5C5C62E9D658EC62035EA5028767749E48D5 658212BD39C7E76ED0C6F3E0A1D138A0DB8BE574987AF1E43070F1F12C560009 F48993FAC935EB56A5793BA13C28293601D268B4880F9BC33D553FF3B6A7900D 37900BD3B4B558C84BBAB09B4BC2B14D32E49596DA090E586E28D560903B9744 7D014EF2A6AC4F711A025DBBC841F1C1C93BA1F8327DFE33C803A0993050D590 C7AE262261DB7D04B9DD91F89927161A69E14BB2A48D29578410E312A4793101 B6CD65B298988AB798F45B76E1F58BE24DB207C7E07014E17525B436D41FDB28 D1072CBEB526E17C72DDA00ECDD06394940DEE8BD02CD3C81BFD12BE0568A459 0F53010A0655942C932905FEE87183CE357887E2ED286DC1E89F2F401CDDDFA9 B418F218D4115043892882C09F2E3749D4671E75AB1AD01C78F59FE3F54276D2 A91512C21C68180CCC0E147E834002D7799FF393842CE88BEA714672E1952C9F 7CEF2FD0115B0E292079909A7775769341A7888CE6063537ACFF225B4F396972 41BF46C599D278906F3BCFF81DF941BF5888DE8A53CB0A2D71610CDCDCC1760A 7844F89FCBB892AEA853CF5D967648995559EFE852C95D2EFDA2CF063500F88D 2C83B615618831267BD8F5438DC53C6433CE7347E9C55E103B450EBED6229219 20E979C00B0B9D86345FC3A8EA2B049B7E148A7AA1C859AFE93381DA74CA578F 8FAAB28175D5B57F6A74F9869B2F530009E953913C6925D0045CB2E817A17742 3C5B7574E9BF3BA7B769C161C2496EA2D346B4E19E434120FE92A0ED3F4A9ACC A8BFE55F04D17DF035D01FC0B06182D8C27B6D32F36551B9AA56D61FB6A34254 D0DF918C6716D8D05B973C8BAD5AD52C06EF3C6503D4E0F7F791511C79AE74E4 4B707612149D583C5D96E534CB45F1E7CA5B23642B1BDBC881FD8E4F66CCEE96 7CC0509B5CFB0B3596682A81E682DAF6AE58F605FD7A1F414F62572298AD8491 B76D0A23B4AC731FB8E7682F506B5CC02F7029827FFD866EF4DBF56E07E7743A D42CE65B38EBDEA193CE5B172E87DC88452C3DE192E363EB9DBEC4EC65F53002 BE9E94180F73B53CE1E8EE9333DC86DF5FB2561FA1F9B2511962CBEFACA739CC 38A286651CEFBF451FF6568CFFBA8AA68555181147C1CDBA18C4F5C77BA8548D 2B1BA37E05EAF7F69879C3ECBD02783028CB1A8649842EB71023F89CEB36CEEF A9B04E9ECB0577536B88ECE7C1D81B0D6D5A478F8E92DF83D194759437088D7B E93C6AFD0CC6D568E60E2F1265A6613F97A6C4068C8EEBA70F6CC4E88A80F65D EA7B498395390A74BA57221B86611D3EE5DC4632F139CA8A15E5B9D2DC97088D 7CC65197CD93F4803BE4246394F40EDC2CB4904BC273C597F13C8DC680245A3F F1AF2D7BCE5D69E9CFC81E5E9F46927C5F55C719AFDB2CB1AF2E4D55B0E3ACA8 6BBBCF253CCFF8F02B8542F296CED0EB8A06A88549DC959E22C3D6C48F310452 22B32C44B046A61A4F7F8AED613DCD3C464DB2280D56E517CFD16DC32C83EACC D3E936D2F3A883B265444D818393E30EE3AA59E6FA73DDC421F5A0FC8442F89D CCE98189ECADC080F1973E14012C2B87F6A8289D7E1B8958E2220FA1C68EF82D 01A2B3516F320EE84950A6A54963ECD6F606EB5693F6A0BC74CE2B5AEF26AFE6 7BF5D5357C3D53CFF50F60599F2165B6E742A331B47F46D977FC721867EC9CE3 7E9BFA2149C9E3A47AF0D0EDBF29C1E6D92BFBBEB52F816EFDBA9CFF83AC072C 5FD264F8F24CD5A1C0F68399FF4B29FD77C4A54D8296523413DCE938ABBAEACF 072AE89B1CAE513DF9810B85613549445F8E854424603C5A41EDBB163CB453EB 25FA6960DDBCEDCA3A40AE675BF9E906EE15862CE3847C4DB16C18B379ADA7B2 C46159EA36A73A9592378791167DE6DBD618581A5BD9BA565D3965A5A32F4B47 B53A70AA9A98BCF352321C225D9CA14CCE64814B804BB23CAC8E1B5BD7DB72BF F01C1B13442C0A645A8A8D4230EED98A5CF40214B2DD4C95227493CA5EC5834D DEE5493890F0DE9554C9B005EDFB0773E3FD22679A6710D45D9F324006E5C61B ED6F94803BD2ECF318079AFD3E687B29AD61CA19DE0935ACB1CD108F10528767 59831CF20C11CBB6FB48AE3C9565AA8549B18F08A8EDD15A891157A596D87BEA 4C269F4B1D2BA2F04379E875EE85882933D81DC3ED3D667447AFEBF2BBA55AD7 83B5D1C45281AD79CE6B949152680D4A66C4EA9DD69A706682ABB9B04FD05CD7 4318723571D8A589B644671A35BE3256AD63572F9E4D96D56E4B679DD5C12BAA BE865BE9C2C1249BDC2DF2BE736CFEC0244FA3B264A9094B9E2E2AB756A24D2E 9B638E 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMMI8 %!PS-AdobeFont-1.0: CMMI8 003.002 %%Title: CMMI8 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMMI8. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI8 known{/CMMI8 findfont dup/UniqueID known{dup /UniqueID get 5087383 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI8 def /FontBBox {-24 -250 1110 750 }readonly def /UniqueID 5087383 def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMMI8.) readonly def /FullName (CMMI8) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 58 /period put dup 59 /comma put dup 60 /less put dup 70 /F put dup 78 /N put dup 83 /S put dup 84 /T put dup 97 /a put dup 100 /d put dup 101 /e put dup 105 /i put dup 106 /j put dup 107 /k put dup 109 /m put dup 110 /n put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 118 /v put dup 120 /x put dup 122 /z put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBA9B440A6DD72BF8 97084C906B05FAD969086ED21AF0AA1471613182B26117D7494DD9F9270EF3ED 8DA4D957225F75D060237B6DAAD5A0AE3E702B3D1C437835B93B8AF1F9E7D966 E739CF3AD5E256F90286A34069E5BB4122F94F18F3485658D0D25B938522A879 8215A417CA2CBD20F71C5C5FCDE21EEA7BB27876D93BA667868A419287FE59BC F538980597DBBA743DBBDBEBC61E3286DA7977833DC8BFC5E52FF5DF5EFD9A92 D070EB769E31E760A50FDE012DC0057835E8B9B046FCC83F1A0C40326AFB4E3A 0CC3BFA35FCC64E32854F32EB7DF10A19F95830136BBB8139DE1663B7FD790CE 464EA431AC109FCA0E03F3E0D355FAE20AC8774D6B1CE233C27680C77DDA7356 560A27C75993E8C980CD1E3B0683F7E8A05119B3AD567DAB4851B66E418687B7 F9B21B3BEF607918D5973421B68E65DFD8B6C8DFDCF1CAFE2637D365148EBCE3 FA4CC00052A2A522205EA3AE3461CEE02042E1A3F11467CB6C8C849B200CCE3D 0BC188EC7B934CBBC0AE2BF5DEA228181DBF0F774119F313516E7D97FF532621 9278F856C166CA6547504F34991D588A0631A5CD06363F3FEE9FA0772C783447 ECD0A200929CB58EBFB6B72008E4082B5D14AA560C24915B9463A92F38237886 C35CBB2D4DD6D0CA8C1D4EC46093041C6181C2F6586EE3E7D4E647A107B6DB23 DAD9AB5A0C2905455FE58075EFF6B48597078BFCCDD84812B98986F34987CE49 7EFB19814F2A58B0233A59331F6F8EB66401F04EE7B1ECAD9BC90A2BCEBE213D DDDB1F75C83609ED6A669A0CED58B2E269E76ECF73616D94F13CF827C9BF354A E82202988DCFE856786B8AE569AFF3105B55C72C58D310FFC0E10B2ABAC8DB06 40D5F72E54770E9DED1AF4616008595B8481E3D9AF4191CC9A5BFD9DDD01C9F1 FE7165D21E488DB40879E863D470CB31CA06E5B5F1F8C3CCE04B697CEB0F3557 ECAA358D2EC2B370519CE06138FA702314BA01F1F33881825EAE1230098BB3C9 59666983275CA4E8D9DB34979F86535577E79393A72F84B0F768FE8C92692907 15E9FE9894E98A0EBEA490CBC8C7E5A9F3E43B24C2C5A4BCD71DAAD3CC0B8B82 AC13933543E295C163F61C9FD18371CB514493F90BF7FB460C029B8DD2E2BF05 FD66B451DF277864DE1EE42100BF29E01A50258C2758F3EDE211BB3457B8243C 20BE72983FD6FA2581C5A953D94381E32E80D6D6095F2E93A5455C101BA71E8C E560D4694E4C167EFA25FB1E9D214AEA745CE34CAA5468FAEF8F6BDB6C6BE8F4 3D58836C26A2392E4C4DECE284A90DDB3858A16D6135FED655A600929DE71605 6CA32F6851A2A6F71A9DF3D5D657593BB729CBCA2F4B059365B7263DC08AB211 9C547096E6427F6AA53CB2EB87DF0AFE2ABCDBD15D7EF228D3396413B83C6B4A 79E41F9BA55A2688F62A10472675E5658F151F9FD6634EC94EC0682C17448024 CC1633077C07A93E4DA8749D974FB8F4332B5DECF97D749C10DB60D4C90ACBFA E65AE928C88BAE19234690EEABDB30BEDCEF2660D7464D5071058C30C572A2BC 7DEE5384BD7614A4BEC4C84E18CF7EC81C810256E8CE6520466C033E2A36D3D3 5D6074B3857415011D8D9D49A474D994571CDBB89AF92BEA879BEBAF67663F5C 17ACAE809C2231EDD0A76641BA52FA7B19A2798D54A4A9B62C42F9905851229F 2CEE0191C8AA5AC12BB0CE9E5E3E862683AB57DBB4AAD6AC0FA8BA4F408D41E0 755F72B82B7C18EC6B13995BF7AFD66AF4BA0EA7523DA8B75EE751744EBA9CA4 4E8BC1FB37734503A5B24FB9F2C2D07A47CFC477F02413D55BD7DC180B0344E8 50248801FA6BE26C97F397797F5F9DF762967E7CD92CCB8B2E587C92177619A4 BF8046CBC72C6E69DC78B8CB6B7381A290080EF59F5B9F29C1167B261C932E9D 010D2D14BB425D157F22BC0305770AECC5BC80000F8CCFB9930255A68F299ED9 D3B5B83A2CC00E3305EB281E1A7054734661B175C6CA0AF168790985F173DF03 A8693B677BAFE23C3CF833FF6463B136FC370E4F0C29E322DBEF637F62C33CD9 B0A8338FD67EC628E3BF2FCBF7CF0347D5CBA1DBE6DE878DD670176B85F69EF2 3C5CCA1BD2B8A385F113EF1CE522F5A6AE053B9C1E39408C9459DE3E7FE2C4ED 77F026B0081BB80D40185458139C16333EA27F43EF1204BFBF80BC5301B2A3AD B10F7EFBB4F5B7E04DA1167F68BB6D4049440B0F57385FF0A95E72760C6A12F8 1335BB31CB74081FBAA319180DC00113CF50CC5A41D2E751E055DA1429CD75BB 0060C21CED634FDA106C49A12B356129D010E29F2919301AA7F80222AF3905ED 672FF85C9897A70241E8DDB9A53034B6BB44E140D9E739848E7A782F24B98AC8 00DA09EBE4532787E5CF3ED815705F659D8E52DC2C2D4949374A3BF192BEEB99 1D9A90A4F3250BF8A1FD40D91F5B34AF2CC561FD02FED712500B24330D87DA9E 4AA46B6E34BCB40B1F73A1DDE07E002B9478E9651D2BF85E67585B6ED812BE03 A594874A235B1C1840C4BF4BA6D863583D8C12DB49EF7F8CC24DCBB6B21FBCA9 378F3E2DC406291AB324571F76E0805DF8826090F0E8B50599CA58D124653D16 16C782B01C91A6F3DA6346482E3163D28D95EA49866360147296838A3FD0CC53 920F91D895F839CB61FFD2FBA296CA4C6304EEE579782AE5FD33D0FA652BA7E2 CEC7C01DD0D3E0D56E6177EE5F609A396F7FC8EADABB465DBA7F384E215C4DCB E64F807A50A461545107F9C3F7D7CC7D33E6EBD6D9228B1DCBFEF160703E6129 0DCED8D45DD54E2A36E698A616E7906A50901E453BDB2A363EB77144E9EA6F2B 6BD927495EB0EBA5755165707CCFBF8759CE5856881117C7F3EF6D494EDDA7EF E499BCA56C86467AC573DA9C2724FCC74BEB331E736FB093DCB67DAD42296655 415D110F2729BD1D55E5C9CCE2E724116F45FB2E66AE0F790258851A5C808762 68B8A110BD326F8D3EC45004E7CC08DA42F6CB80A6B6E7C286F139534A275BCD 2F812993DD9C9A1AEB5E7E4BDB4805DFF3A7030263AB060C9B74F0C25C5B9005 965284884450CC2815DF28D5F9B0496DC7A3AA85E1E42741E1538797175C28D9 FD904699C771FB066397FFDEE8E8DD1ABBDF67E6BFEF95BB700A7C1BA91354C5 42EC3864F6E19B379E79A1CC3C786C0DA146C6B0B8E507ED58DBB1F12F613A98 0E1F8967991427A22ED323901C4B83336CD343212131E8B59C2F5D232702ACC5 7891BFD4EBA5D0FA35AEF9F3520CA82D121BF6885BBDAF15248A9E4649ADB94D 0735CC4D14E1D7275427D00C8E709579612F7F74DB6FC218C10C278CC63E2AE2 37EC996B10C0229D687F0DB5E38A8C4DAFB3DD8A9E7ED37186FEFC97790A1EA6 636A88FA9FB4D282234BAAD301A1F3AD33F252C5EEC49410562FC52809CEC466 A0F6D148E9AF19D6DA2337C8283FBFF6005C37AAEB0B7F7217A8DC6F949B9984 72DEF163E4D5ECE4288404448C96A7FF0AC76F732D50AD63A1D286C9180E80E7 C218B1F48E3034FCABA6BF262CEECC284AC29E9F3CA1CFC1639A681ED66C1FBA 666F073D45C84A286E05FF809D4764FE819B6A330E73695CCF2F448B4D4EB4B3 F63E94EC289807A2F9A1159CF328C002B467B19D6E9454CCE36FC19E0A214190 B251818DD456EF658B0398E275514B72D9C1DA5F806EABCF1DD56BC025D69FC8 A0C2FAAC1892B64D2AF79EA2F57F103CA623E440307600D50E783FAA998EBD40 51D23A0CEFF8D8649B48B982DC38D613F882DCCAE5F51233A641B3CFD783F830 D984F116DEA3ED8F0D3369AE629A006BAD4523F8E3C7C6B39A6C972508B67AE9 32613F28CCFFC4BBC86CF31A0C25C786554F7A1F3DE97F5CFD1A941F775067A4 784385E2D02EE1FF886701B1E87D966D3F500E15591A5012E645837FE2DBE3E6 A3D375C6CA0ADBF96B33EC3FCFFFD888D7344B31D40427B8A8BED0FEC6FBE038 1FB5F0714C4B5A0E607E215B5B7F76ACF0FEAA4C9790EB7E13C0E3933B7C63FE 5B934EA34F4B741C3667BF1735C685CECA63507E6FB9EB06AA010311F12AC1AB 4CE3FE8D1EA1EDB3C700BEBA516FC71D740B1CA1A60D4578003973CC3EE21DB1 58FB1CF7E2EAEB2A4A6C742EBC3575EE6378531C6EFA6E6986E68B8E25CEEA67 A59623FC1ED2ADDA9D72DBA627D179E47DC7F5551E07EA4D54ADB6CC8109D340 7279F288E552EFD79C17DA3431E53EED66D16F24BF86468C2FE7EFF421560500 12FB048D6CE2F370BE4E560F8B4AA12362ACFEBC839351C1D5100C625B14CFDC 747B66082D4AD5474A63EA0054E9C3E6295AF6B133348487B0471395857F4B73 4BF8337DCE2FE2E1A4EAD7E7BEDC822BDDCE42B79B308C11897C98E3ADE253CD 09CEEEC0CB1DB66AB072E36E1E04911F40B535B0FD85982C21B8A587D65C38D2 DBC5A07A0A26DFFF7460F10781069490AC1B611CF7312A14B4AA6005A4582C5D 336BCC30EB47749193BE8D457A43F54204B070DF5AC2057B6437E23705C7FE8F 7BB150560F7044BE3E48EFDDA539FEEFB0D2A7856CD4E405FCE0F5EB190D91AE 578E2EDEB9ECA218573BB1A8EF116043A27DD17A4047BCCC7C5F3C563A910778 45ABCA32C7347E6180ACC86F9D665FF025DD8AF514FC3724B5C3510F3C37E0AC 5101D1667C6ED4E8F37F06CC2BDF66CB5A9FB7C52CAD26344FD1557571336A1E 1E340EBA149B4EB99016D1A411FB874914AAB2A415CE3F5FDFBBF5AFD7959B9F CB127BDC68D2A2F3F07FF3D4FF32046C0371CD2E68A6471E46B08413FC3C7A80 A107EEE57979DB387B2206D2810DB310B7232B2DAA385256C8A58964B512003F A0C24ED21809E2576229627278118107B9C32345C1EE8C0CFB452CA362379369 31320DEB5371037AFAD093B61E8AC7A6DCF7D49C7F8EC32DC0ECEAFD7E892810 039570D2956289B15E078C2545911BF535F72F7DAC619BBDEEFA855BBAA81704 18F7D351B0936357085A32157AD8E27438A58B2397D69264E748B0B8D01B33F4 D04DC59326A7DED39E247A1C1A1AE49382BDBDE9478A1CB48F88BDF14A268B40 A40B9FBFC4C87FD3DF1EB2464C3C14E36CA41E09EE0A9B75FEB0769F9ECEB1BA EBF73B818427FACDBC33BB95B9654F31C59A766E931C698A8608F15290FCDBD3 5C535D9036A19CB7B55BF54E96F9B2206DC71624E2E55FE632FDFDEC8757AEA3 1D83D190ABED5E7A7AAE2F41FCEBC7C18626BF58F9E9F02FBAE0C8AA85E9DB21 A3D8907522DCBAE4923C6A2A09FD2F08FE32215C544AB577B337D929E625E704 E041C2381AFCFEA37F3133B6CA20093EFD457C772E428325E56C9CBCC447EF9A 05A8C3F28017DD4FFACC51B38E4896C5044266EAB4EB7C13FE855E790DCF8A17 B61B1D30DD866BC57397EF6297C4891451FD6A5C6AD6D7446F58F56A68650908 224D9F4C31C6906FD29BB51DC947465B808438E6260325752808963C808A4AAD 60422ADD62CAF315F6AE92FACEC55D5B682089AC0BC051CE1E2C06A3874736CF 0DB5F7C8F178479E4F11665402781D80397C75456F5CDF0A4F382A19EC6AD64F 71A9275264800E178F212269154DD8352167C57EBC0A38BE794AAD1601C8E541 7E1AB8E969A76E1EB4092644958FEA2AD29635E70C4DFE2EB0D9B3E1644FAAD9 B27AD5466EFAC724718962B62E7B8C32F412B69DFFEB792587D571FB5C591D95 4CD441662CD1B07595E245FA537FA9EB5A20A97E5C9251EED22C9961B48B25ED 85BB7524F635F9CBA3714C6D60A6BF920C45A64F4C366C1F9D22F53084997C9A EFE2D79FBE3347111F5093E271DB7E3770B35D253DAF93653F6A23FA145AD775 AF11E188EA0428137D9A14542E3EDA6F7B2E5AA86C9F3D3649A85ED2F020C696 01A339FE6D7E42BC548C8F92A4E3809C67A986C99418772403D16D0E8662595A 1F37563671D6DA0F36CAC99DAA8FEA215DF7D45E61314915A30A22FCA86A50D5 2FF2EF08E240F9FAC030D92BDFBE40F1972DF413E6B452024CD11792BFDAA2D7 C82716528AD4B3D637BB43E748336DCC86A952BE96F1EA423E31340FCACDC1EB 02EE932F58734AF3A5B2279361B63F1D824EE3BA9F4D2EC7B33A300A1CE8CA43 24616444176DB8099D85AC68329B1F85E4B5B16F3B396FE2AE7774F3065D0203 AA140DC128D6F935C44733EF585F89E8639A2096A225A2E5E49D447D8AF9FD44 CF6C1BAD5C5E5262AECC5543EC8199B00B72BE32A0F110F64A1D0D5CCEF38FD1 155D6198E9A343702F8ECF5052333272CAC2FE016681E12745CBE14E1065EFD5 407DA3686080989F6F6D650A9F1EB3A813B070C30C0D3B4A1E9C206E2E4DFD51 D8DCBE9AECF956640A2E79F1B4FD0EB8E0449AE1B8FFEBC43275743B4D7F6605 0673B61EB3189E74F51F3780A91E6A5C6464C8CF7D563D9958D46F39B1A12087 6BBD4898BA9ABA468AE1F24115891FD3CBC2195F75958E26DF8BF1B93F7B521A C12112237AB23A8E5A7B7D0DC4C53692B35F3CD813EB463C0BD3A6486B0476C6 3B36DA71FE512E5745D097FD4AF5D056E434DEE2AF926B2EE79F7FC4FEFD4130 BB4B4BE01E5C720325A4884507CB51CBA4FFB615B78A4182444F0ECBE4161A58 E86FE1DA2E39C2BECBCF1F1D7B9B776A26078FC252128FA8108CB83F673CFD37 CCDA493234FB93E1550EF8D2DC049ED95B00A8A57834B024B277D3DF062E748C B61F183F2D72AD075474F8165528CE75E4F40B38B0FAAE45751C1907F8D31619 E88EAB02EEED415F3EE3BC5BECC6AF565D34E0BA2958FF337A2B06012DD1858E C53DE52C108BD5AAB76C882198C72CDCC958D68EA8FD26F76F04EC1A08B2AC3F A6D0E8724D2656555DBC0C8C42A3E22ACA7E1BC8E9F897D9AB692E0FB9EC32EC 59E31CCA4516A3C3BFD5411BAC3DEDCE374D48681CE7D67DEAB93F5B5C5290AC FEB29C5EA2C98095692873D36C7DA24847B66F31E4CA4C7AE5C79D7CE4F0532B 78620582E3731A2A6533A03E7155B33E7CD142FE79F72721862EDB24959B9783 F834CB616FFCB2A23497BA6D99AE34DC459A2F7B3E4DA2B54BED118ADCD92178 66C40F4E60F6E1327D5DBCA645A2A7C770807E6D7E47E1265C753F8793BD2D1E BDCD749CC24D4AF9315A93F01180A0F9A7F420DA1B87664DA5FD967131273271 9DCC45C3D57EB9B8AF14771E8E751D88B98D2FFDC72F5011D402EC34FD010ACF D3B0660304725191D64FEE106253FCB3470F1A16EB7B45C1489D3534BF94F740 C2781DAFA5E8A9E7B25A85BD7935DF3ADDE08C960E283D8FC3976FDB4085DBB4 B6B35FB239C28C785B18BE4FC98F3A5F410F562DB5FCA04E8074E4E790F4265E F88117B3D0833AFAE6E8B8A71D7731BA6F14FD6F217EDA3F8CC687A494FC3914 B84FDC37C8C335AB1E7E0BEC7FB6B7A595C50CF8F0080C8D461BCB8B579A5155 F963B6587873FA31C3A6572740C63EFBE58A2EBB723B7517D2A243F6CB08A038 54F4DF0F6692022B2EE8C6F6B73735ED3166BAC58D9216A06EA6FC7B63B20031 D0F0F99D83D9030B413C2360DD2C553E34BD67851B743C3FDA676AD63C5BD759 9131358C6BCDF05FCC048F4EBB9005899ACDD8E9EC9BB8C5A08E83485047D263 0ED69B4D1869A38068FDA03524022A1D32FA2AE0BF7785FCA8F089152A57EB8D 5467C28AD44E890380CEA0B0E0CD0F6427F2C3BC1A5257BF03D902BE94A449C5 EB8F33DD607BB4E0A1A7A24431E1DC2F03596EB2039CC1A9D524E10B374E34A6 4DFE6694F9E158DD6678BCB0B56BFF435FC4F5EC442E14391B45178DDA235B7A 07AB6EA76230B60456344BDB08C929F9453553452C97E016C26C11B68186024C D1AF6C638EF54E26AA88856FAF1FA9A0DC5A9EFB7130EE72EB3313510EDB1DF4 8D8E512036A986387D8E96689E912149A342974F559E7CA4621E84351914EACF 7810F41CC0BDCAD6165182C7040F052C34D073FFEE489549EFEF83111310B3E5 F67EA5449D3D81DF1FFD64AE0F1A760922FC629FDCC6AB0DA66CC29665BE386A 4DC43CFEF3C5904356B7B2EC0AF36BB4FF6A994C8158790674A8EFF54A36B7AD 8C8B833C1D1FDFEBD7D39122BA602A67ECD2EDE9D35C2628EF1FE34B2CDDE154 2247242DB2541C5FD49EB8348536B83A67E718DF66A627D7C7622F22B5D3A3FA 5149B224F82B72E4F2A1B22BD6FA7018B45A404E66E2C6B96476A39E5D330AB2 ED04E2A7FE38D3A88B439E804F390F4B7893506CB00CA5B21F103C6090BD81FD 8B24C085EF70FDEC026B1ACB30F93F58698AB2A4E7319B1F5250B6815E30CBEA 4DA1D2608C5293C750B4DCFE4783F5A3DB1C8CDFE6772B2543B9F803DE5A2537 2F24B57B0D576B9B04024BBED9CC49652ABAA568B3ECBB45DE5A55261419794F 3121F66A2722AF63B0E2FCE3F582CF8512DE75BBF2FF619B6945496C8D5B8713 1E6E549A516572C096410605B9168EC2EB8AE6A59C436D4E3F87D7F0593D4698 8DB70C59DA2DD496211FD2E985582464B12EDE500F390BAE0C8D665673C1CE11 4FD02F0F22B93C7AD94B69E2D1D3863576B49A86142227CFE6CA091EB11F2C18 27FAE3756F6430707EC1B268632477FD9934DB83B3CB214E4D7A2C0EE9969B2E 842F7977E781D7BD1737B8404821A35C8E879E89655BA4F811F26C9D3BCDBE8D 99F12625ED52B6B5531BD06DC86FCABD136456F3781836CD09B28AEBF4462039 9A967F87ABA1B5B8A1761A8EC299F45D5F36D9C92AF9F0FE54114529F09370A8 38ABCB81353AFBFD8A884C534DB9803AC0B8710FF30D27F7D05D944AAE5D878F 7AF85236135E5F752C45AC3AA89122057067E0AEA4D6646E9BFD1396CBF4FD1B 0E5D61CD420CC6E3AE9FD0D0F0FF8CC2686E020FACCCF08CE450538F4F3DA706 13DDA95871B96BFA185DCAFC5034F75C6771E88D8B1A76F84FBE1CCC790CCECA F9CDB1FEA187D5A262ECE189A631F5077F876AE595CAAB209AF7CF8599735533 14D87D306C718E0D4F2EADA04706594FEB059A2C99A000FC3090D458C4A02F8E A586874383F2E9CF5B5571A0AAF0B3867EDE0A050E4482E48D80701102EB16EA C95697C18AE656DDE4F3CB52B5D3BE8800D372C62A9219FD7F3C475B6D84FBFC CC4A97014B325EE68DB4154BA44D458E9D028E9B4D096CDED038E788EF387322 72AF049C080B6B325238DF5A5BD1B75079085D3BA3BFF2C2F585FE1256C5C642 846D9E7F4A0DE751CE509BAE6B4E59FFD94143446D045C0770319FEBBFDD9950 8E76C31D80887E2C35A81C4E125A3D3530A173C58A5B86F205E5568694195A91 E38BF77965C54B426DC2E1FFC038B6C38546DC5132A2B9E4F5D5F09B4EBC8DB0 B34DADBE7FBF144ADC52996845C086A1CD63206BD27F93BFBDF6752C3635CF9D 0C52B0BB48B46B88F4DBA757C522650BB391F25231AE9D56D35B888B3ADBC27E 5A307812B4B9425C60B3BBA0C62F3742A7F11832788EC5A4022C1A9DB36B25BA E1B38F719928116BAABFD69108AD124D32A21A84827EECC851F7696057D02E77 698E389874A57C90074E90CD37A1FC727947048887085526AF0A01107F3CD88B 7EE4C33535BF9DA456564BA8953437E7BC379C9B436F20A0C63CAF987C7A396C 20EC44BC4E5A754066DEB757471A71BBCDB66A775175A5C4376030F87F4CE379 926F9A9D14F12287BDBB2E07DBF308D2002D696A9D0CBCC167A91A743AF41F09 E5CB66CAB72907C8E9189BCB880A1CC8EA8DA4A1CDF803F687472382F25F3A35 BED61CFF1DCDBDE3288B76132143891CC5E7A7D27BE198C4F428617BADEEDB76 55F855735B2ACA65563EF6F087D03FB6E8B52A3A23FA40F0935C049B7D1A551C F80543B8AF7B01B8A69594798F3C2A7D847A09A2851C7137792686534A25BF63 4F42271AAE8AC3648A62890A4BEDEAA7A805BC89398864BF38526EC2CF523E35 1FC96FC8970A30EFC982F47F4BDD428CB10CC9CC89BC204CCF200BB630F862BD C9C036B84635ADD0E1B537708B7C5439D3A6101AD9FEC54A723C18F1B2D89B99 34848A970E2C5BE4850771DEDBBA1E8E99BE46E171743BB0CE9183DE0A255C11 5FF9C07363182E25883188517EB0289A41A956DF9753490348D5B98550AFA9C7 1315DECC17986609B4C031A6758D971582469BB1F55D6367BDE3FCF08313D79C 9EB67FF664E8AC4040F9DEF02EA473E360A6FD176B3703B2ECAC93899A3CB9C5 9513AF3BD57247C3553E52F3124CD922AE843A8CE359377AE487F80B2C90B129 FFB57DE84117E4CA84F242662B9520314CD8BB37BF16014A184437C7C9FA7129 E009A9BD9CBC1F322A3952DA26863619C2C2C9B4E4E7C1F9DAAF7B3583BA4A9A BE867D94E5FB55BBEC0915F6468D164E1E22B174D486C9E784AC41C789576737 958BBE130EA91AB2825B262C55F87A0324326B6014274DB7DE2EDFC5AB91A6A9 52B758FB9F027DEE102E9941D77D0D0CF59A17AEF6A02564C647EE7880AE6CBE 24DF7F0C816B5960376417D581996E25E20D3DA37FC97F87398BD1EAAA6BEA0D 58A25391809630D221EC128DEEA1B1C6D01C360CBBE92862923F310FE403DDFB 29A33A5319799F9E10951822F7E0E9F3415384ACF99108AA77089D68FC036E10 A637348043352BC6A01C9B945C006984EC46CD33EE7B581CD83EA5240171B5A4 09BE783C42CC734357F67F1A9ED80F7A7A8FA5C4816742D1629BFF42182C3CAD 2B639EFC8AB0D9970F8C2E5BB8325CA6A5E3CEFB34809231FDEA58E118C78C06 DFE022C2C2F06C8607DFE52FDC8E95EF6E4731DB941023571A09D84C20290954 8316B5558249529325A12E7CFDCE9D2824729786138D617221909475926D93CF 1AA9057281B3E465E59817433A4A9F9F19049ADF85C44999C58218104C0BB152 8F843D4B6FC87D5CD72FF7E65CCE0F902FEBB42118AE2BAFBA7BCB3065D38471 84A3BD46019AFF0FF487078BCA27B9EB6E533962C27805C7BC3681BF01958785 BB3741133CC142E43974E9902E185DF8F3DA3BBC08F7F1E00306681230477996 B4161DC5A7777D48352FD758830213A9D9829608EA2CDC8156A108D40B8F5E88 5354F83214C5E25208857B9603A84F1195CD60F375DB7551ED76B595C1D67BB6 01F4A665830476C51D51E3306067A4C4036B93EFAA6E41D2D8FD396CA0147695 83420A73159CC9158620FE0DD4CD64D35754827BD7B9A1C03C93618E7FEF1FA9 7770C9B575A93645E09D86C376852747E0305EE860284F53C0CB294D993E9A78 BB0A622FDBC80C69133049EC15A00556A279921ED8C8BB5E7B2EAA0BA24E25A8 B6C3C7FB7C97D8937F55A96C8D37D660E1B880A504CAC623BB15E34642BC6D9C 6876056B9A27783EA824B2D86D29657023B0C721DAF78FAAB9098CE413D0130B D49B440DEFE8EB5E4369795180768995C4E009028547EFE636FBC827999FF9ED 06F41389A08ACFABB9E2535C40D3002537359AA2441935E2D5E7893C5CA6E849 84305BB288B2B12B3DD933BD02A807166C12DE7D11C5654E204931D10C216089 2DB41B587EB88AB857C7A822B2840BEFBBE64123FE0A67B38C694661460BC8C5 DE377B63953C664FD17699DFB4AA3043874444A0778F2377E9A31584723D63E9 AAB68BE6D6076014543409990926623336A571811685A19B3EA2D11A378E4205 351C2E85207D0E3BB1D44565588DC50D41926E5BDEB37BA735BF7216ED6472A7 942D8D7A7B0ADCE8756ACD4A3E263431AD934FF3B8FD42C4D7BEDB4ECD047355 B83A169B9DC50CDB8A7B35801FDB5D687CD55892B748A6B803A94D179FA3CE09 E789EDA6551570DFFC0B7D3A67C56315DB2F75E5CF254D3D6AC0700C41B1055C 768BB7A40E411F13EF03D72F9322F45B719C7AA965B7AECA44FD572AAE72EEB6 EB772B0C63D8851E601DB66142D49307720872507B28D21348909663D3FF0A88 86D73E436A64070DABA70F4DE1850A668174CDABD01FD1E9D23ECAF864130404 01E81FD0C2C45CEA9C01C5ECB0EABD0E28A5FBC16257BA4E470C04789933CF5F D7AB9AD7B4951A56703953659DC25ED3FE35C390FBAB592D96D2CE8BEAE97F66 15B764518F1464247042940AF91996EECF20FA6C343EB3A92F3999F9E211DA7B 972CB6C5ED692C621667D8DF79057F2C4B3167E091652081AE25E57B7A7B990C 33CFC61E204ED7C86F580988AC01EED7E9BE948E7B40AE1852BF88A7F1BE7E6B 52D19FDD5BE5216C44FF915B9A863300CD800B353CA49D97D52B19E57E559E48 F5C4BF39ED2BC08B20A7757E93CEB7B9C9025F7B34DC732BB0F7B12AF06BBEAE 2D48A965972067FD3B4D87AE9321836B750E5A118955D4AA8D0186604FA03EDA E57A99306E1A676364FB933C88B0E48A23F259DA6427B0EFA35E63C89A7F66D7 1ED94E6A269BDB80A42C76D50FA9AD7E7C76D73B8523D242905EC37C9ADC49BC F5A6B63124231EF6FD0E1132C9AFCF2E5F655282E3701ED435BCC2E5DA98FD53 98F7F71B7E64D47CF317526396C637A28DF1FABFFEC4C8B05B2BA1907F1E936B 3CA4FFC2DA7290C38840F80E7C8945B953E00E5FEB7047BCC9361C75BA6E8353 634A5972AA66DD10EA43B277D6377BCB152F07548D4E37C0845AB2C327F9FB6D F5295F11AA23513C6E66D523C41E56E1A14704630FC34CCD4767355C6EB30D38 D43ADA1C52755C434486BCF6714E4371FBCA7CDB7EA0BCE2B9790A2D23F83F1F 032C60557840A177D33E94799C789BA65D2B8A83950FF5BC4085AE9DC4CC294C 462768A665151CFEF7CA05D687394B050EE09AC0C86498A4DD2525E53CAE1A44 677623F19E26FF46C945EFAED3007B96F80A4D00122DB29A9E2C4283BB053CC4 6C34AB9EA9E8BAE8CA32BE06CE8259EE8FF24518261FA35C62A522D533CBC4B7 345A0348ADB7A27D611397372F537F51D5A3976FAEEBE24CE8CBC66D51C52252 A0642D9EF06B021F85A111013FA3F3A73A81BD19BE87CA5BC8BF34CCF432C13B 80265FAF6FEAC978A58A19153E829387DFE1A72057D997750F576E4C07FEB7CD C461101C88DB6EEE4DE90BA869D53BEED65D2FFAF506C210428D126E6F54319C 6DC8ED46C66FB8EE42118E027AF5D5D1AB4E9E1FC51938B69CF347A4A1FAFF8D C5F57D3E02AE397F5E98BC61809FB2EC49118222E6CCA39958307AF7A500654C A1405046C76E57B29703A599DCF6B3B31E2C586389503D916607624AF7B66DF0 6EFA456986F268ADBEE685362C4444957AF9CD0C9B0EDF311C173715F0DF467A 9D118416AE4EADDED6A2E04D145AD83EAAD597C081A12198677043872BA6B45F 243EABC450C1034F7F9F5271306C00B3E39C65E2E1946B077443A609F58726C9 105BBDFB65F3F89493B6A526BF8105FEE2A817791311D660A8A1294A361E3CBC 59F968620C90E0B2255CA22EF41A002A56B0498BE10DD7A12CB9FE3954CF4155 4CEC51B2DEBB95F2B7FD0058EABFC0063FF3AEE8D8B385478A1D69FAD07450AD 00108DFE8B85DC1C5C6F5AD8626196FFB9027BA6D955922BBFFC1CC14884E9A3 341AA80D1B055609D58EEAA3724CCC50F5B354DE5CBDC1AAF808D040AEE758F9 844CCCCB19CAFC37E0532C40E1EC6E248BB8EDF0C69B34BAFDB70E9A421B12BB D4D1247839FB170C7ED29DF9F8ABDE7C5D5735059A0623A49748EA9CD1E3B6DF E0B817F33A04FB7DCED1EA729FBBF3D9609A6548AB73FD348F87069193900154 51F7A4D8F2FFA2CF8307AECE16E182DDEECB49B4941D9808A51011D21FDE302A E5C85EA95268689933C59746AABCC48DF580E931394519FC64217263D1E2BBD0 37331B5299D5A108259358BA868C8F0536AB06EEDD3C9D7AFBCF9155AD6A296E B51560F2AA2E22E0EAA8CAECD5A5CE64878D22BF05681CE0C6C51360D989F6D6 8876CB92CB08CD8DA62984A5608CA04F64F7666ED87148654E0ACDC347D04FA6 953CB7D75CD41B30B8D9C95B74AD8F12B3D42EFD554EF6ACAF514468C718DC0F 14EC2861F04EFB3F27D549BE8DE8F10DF3CEDF409415B47804E87B691F581733 965745F073BFCFA5FFE011A1CE803B9E2282904AA4A38C1DA70CF566D8205219 34218DE48913577CF34A91C13320EFBBAEA3F3751B8FA3794A00C3DBFFD7D672 734E59A230EDCE01614979146C2404E3F38E58BF07BC4FC9EF15A977AE29B87E 06EB6E81837E1DF1B44123CDB11EBBE058E02F02B812290BC36581F6B1C342D4 76178CCCF3B0E665751AA4E6EAB2F27E8889656D5D8AD883039693407086E2BD F996A145A3C8E685B3C1A160F011FE501CCEF94E93BA2988A0FCFEDE61BBF80A 7AE13BEC55A74A678F91E06F0FAC89CF9E395DBA055903E6D01BEB3DF846E701 C92381F7138A197F6849202D7DDC23268A33BA20964C0A0842D7E4FD9239BF9A 0CE234DB0ACC3B5CD6A36AFFEDC2D8435FD208A9D50C99694FE3218F4501C8D5 FD119D0603DE779C98F1DB59B7E06247332698E09BBDDF11D79E3B49F103EC50 9D21E29ADF598FFAB685C0CF4972BB90A454B8441EB35F9C1C4981A5591FC857 F9787366318C58C758E0BCD8EC50F1EA29065DC75C003C61DD1AD5BE403E8A66 44488EF6323AC6B4E43008FFB4D4FBE8281582C13230970442AB9DB24446065D 6D43115D5AFF7431E8FC2E65071D1D2C47201E3A017F176415F834E1FEED4F35 27B68F8507595291F2685774 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMSS10 %!PS-AdobeFont-1.0: CMSS10 003.002 %%Title: CMSS10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSS10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSS10 known{/CMSS10 findfont dup/UniqueID known{dup /UniqueID get 5000803 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSS10 def /FontBBox {-61 -250 999 759 }readonly def /UniqueID 5000803 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSS10.) readonly def /FullName (CMSS10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 11 /ff put dup 12 /fi put dup 13 /fl put dup 34 /quotedblright put dup 35 /numbersign put dup 38 /ampersand put dup 40 /parenleft put dup 41 /parenright put dup 42 /asterisk put dup 43 /plus put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 58 /colon put dup 59 /semicolon put dup 61 /equal put dup 63 /question put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 74 /J put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 81 /Q put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 88 /X put dup 89 /Y put dup 90 /Z put dup 91 /bracketleft put dup 93 /bracketright put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CD06DFE1BE899059C588357426D7A0 7B684C079A47D271426064AD18CB9750D8A986D1D67C1B2AEEF8CE785CC19C81 DE96489F740045C5E342F02DA1C9F9F3C167651E646F1A67CF379789E311EF91 511D0F605B045B279357D6FC8537C233E7AEE6A4FDBE73E75A39EB206D20A6F6 1021961B748D419EBEEB028B592124E174CA595C108E12725B9875544955CFFD 028B698EF742BC8C19F979E35B8E99CADDDDC89CC6C59733F2A24BC3AF36AD86 1319147A4A219ECB92D0D9F6228B51A97C295470093CA270C4488BB4EB864B48 63941B9739638D2E6F3CC778582B46AEB4E466D89D1C211225274356A4BC90F3 274C6AA56E200249B7D0949A3FD4185DCB3E5286910EFD7CA72D5D8E8052C96F 388D12094B87D3705CE64459558CF024667C0FE96CBB32B0BC9E51037D7BD62B E4B05FF99384E71D78441A79B0B1DBA1CAE02434A9FAE46596FB86B873B1670D AE0BAF516445A0DDC127F8FF3ADA0B10EC30A9CC1F7E9248828B5E8AB46C3FE4 154B80A54128A08777F5F9B8C519C7E3B632B3476F007FA156E9F39FBE57638B 4214CD2BA79BA9DDA0F4C073AED814ABCCC2F7906C57A872C00E67FF03AC1200 29DAB92376422FA21C67CA98BCEB8C431CA2D3EDDC16972F84BF6DB2F705BAB5 CAB39C82D139FB1304B9E7BF1F6FF447596081D5690B1519E468D6BE49C329C5 C9C809023EDEB9DCE4A6D52A8049E0CC134E8B41BFC6558CFCAD3D9D2773EA16 131567AE6231B3235869767A1E7C1FA6C8D6FC1B276CBB1CAD14D376188C9682 302836A9290E587D4225EB8BB1DBA2C4580A81FACFDA197174FE948CE757C575 F23070FD84DE121955D7D9307BF986C5E739FFFB6CB76822C341FBD9FC2E3378 AC9332B40C07D5B8745D74E30F1D719EAFAEDBF5FBC40D0546F69A66072D8A49 28D2CC2E76B9B1EFD191E0BC7510C2C8761BD92EFCFDAC263342A01398A56D18 121A591FF5CD4AD8B25699A7897E60BA940336BC17B9EC9F97C2464D031F958A A3548D0C97C50C580B6EEFD0FE8330EE2BB0D2E7FD1DAE33448953544A4B1C5D 8EB57798D0ED4B22909FEA78ECDBC4D8A124DA05B9999242D68681017285A0C7 69041C1F79442279FBE328733EA0A6694D68BA89739FDB9297BE0CF1808C07F7 BBF6F1538DFE084EC8C0EC24D883F6CC08A51DFEA23EE920F44BA55FFF58E960 C7BEE551FCD2D5814DE7E3F835608073C2CB80EC57100CFD484C837881674E92 B217F4D11165427DACCC29C129005874C05CDE5FBB2D912368EA2B98C45AEDD8 8A0D2493F60EF36809C8C6EBBC7856F6656E8D398BCB29DAACD4F7D4300A0B01 161CEF51195D2C58DDFBCAFC1C03F49304ADF02789889826F1E20BCC14827565 F2A45CA57DCC61B52E33638A0C6C5A59B145E82B82571DF1806EC40FC0E8634E A34A791B1325571E19F3AC2EF6FE68A14B0ABEF7EBE0EDA3942E85E5AE967A14 0C5AEBFF2A36DCA8866700CB7082D2ABE470864C44AEE1F6D180D511304C8674 D02FAB12A7079ABF96E1CA3CDF9D75532123E87663B1D524265AEF63EB5C2169 B67A651A101E1C7EDB008D3DB06DB1FC1A81B41B291D6C4A58FB57989FFCA434 DA84B3914D1D80B17AA3A55A70BBC06C49DD5F7DDD03FEB0055088558FA192A5 261477899857CF598DB740E82D035E84CF17B33048CFED2DCBEBC2B75CCAEBEA B6C5AA1C6978FBB36ED98D9047028360ED430A0AA69AC85A8F83825EA649E1B2 64B260197B06A24A1DD969CEEEE136FB046D713D0630B246BD41CA285F076038 F7F8431913BB9A3E70311844D4C22AA446E3CA217A9DFD75A898997130269B29 AD4AB7D9662856E677FB2DAED7078639CF31C6E6637C74DE2B5D0ACB88BD61F3 CE3C5D56D3D4B3EC1ACB33EACBE05E53A133EBFE93CE6A0CBC8F24BDC5B31BBF 5B3E55D6B40B1CED389076014667E28BBBD60145A06BDECEE8011A2C6F06D091 73767A8045CEF2A110B614149FEE783A2351FB2938A9F73CA406538EAD82ACC5 A3DFD3DE00221E1B4EA977AF8C89661357FF7D2F1FCEAD6CFC9D6AD81F95100D EA1F328249AD84AE849220E6593D45015B4D7C9527F3063E9F6DB6E572092A1F 1F460696227D5F0FA5A5484B1F0D8B4A35066451663BE448D924DBBFD388B6D6 D7CFC87C9E75B7CF79A4C9207E29E0BAAAD7FDF529B860F7731EA978E335334C 13CB2F0A4250F5957B44CAA0674AE8356F586A24FD137103973B9A1FC31090C7 C84DC5D380404BCDF3FE20C6F74FFDD8BD1DE845E99DC6FE09931F003834ECC8 08C5D962070B6C44F901A787CCEF048A2C584A2285506B4D4E82B1BF130E2220 B6C8B3240A4CBBCE16AD3676B23A50B75F82CD88D1B8F21D30A12716426112B3 23DFDE5A348DC9DCCCE5BB5DB5433A5AC125DE1229FFAAE0D8319B2929986EEA 56A93BA1FBDBE617F30852A3DC8C712DF674169C6D656F75E252187A085B2788 2467CC4DB08D48EE6A98C61BC55E6EFB1938FAA718802B7587B94C8F1477E9BB DCF6E02B5E67FE3AD9D87C321CD9BC0CCD36B9C4BC601E6BD552EAB8E1C940CE 3A22F3C2501C3C939CB4F17CE97566F0A04602D2A22A05CECDF4A49CAFD6332D 5870E1F31AAA5F86867F71610CDB83E473B9D20BA00D8986D7148E0EED03865D 9622864B52B09D12E0C5FCDD023D29D5AB1CACFA92B6FC14FC84E95F407861D5 2BEE3301AF399FD7ED04DFDE6679A345A282E7FC08D47E3FC8969D3B00ACD7B7 F8769647D6D4F4106340EF739583374D023C2702C48FAC1B643B5897D2D7DBCB 73257712A0FDEEEB98A021D218CDDEBBA34687E23C4828D7F96D1ADDFAED7EA5 B279322E6D55FB486AD8F3A8E7B2C67915564FE56F0C9277A06B29C47FB7D007 11AFDDB3FC1B173B4E449CC6B198041CCA0624D81B4840FE5B63BE72157AC6E7 03E5E95D2E2CE2E40BCE8044A8F2AA45F855484A891B9F0F8F70188AC66A8DEE F4D656CBE216E6D9AC33BA8DD0685D480833E1226784469A221D9FA3CA600AC7 5574B5226649A9C48CCB43339942FC9010F86BAA2D181AEB487A92A96BF2EDF1 60F3B93FDFF4137A25A8AEC5ADF8613019CDB103DC4367EF3D8AEB4FED0E6BF7 622AE0CD3CAA0321D26CA4280CFB60D08D9560AB8AA5698231171B881BE9A27F BDCF3162134126212C523738D221AA05E31CEE73D9D40F73C450B6AE2C1E70D5 C37162BDF55943069923A290A6C720042566E55A21CD81C460818883AB016C16 8FCCD1255A66977DC1C110261D7642199D466DD3D2493A2D47694F842241C474 1752B00DA03E69CD16A8A14BEB8A431A315D19A39BA978E46EB1189089FEF647 F9DBB58AAE6B3FBD475E4DCAD241A051DD100ABE81D40ADF18A4C50F53BF749F D6F7C8E02A5665B4AD18DDAE79096DD447F8BD32C68F9F97F05E0071D9E9AFEE 257B96D48ABD9920418E17C8F027E9E975E4A08DFB1988E7104CBBC1CAF356EA 7750AA7110BE116AF1BA69A94776E4356573B38472A8A1292C63701543B0F315 611A0E0595B30424A1137478BA6F990AC7C3AB4DB69E75C222B617F373C521D4 246E954E9857AF59D1E6C36412B643733CF5E1C90389EF0E5E0DA55D3AD12E97 E7630C315F72A03CAF22E0ACE3AAAFC1D496CF4E5ABC49C2DD5E264BE7EB2698 AFF36089B5DD2C53DB1C1FCFBE1E89D41A95DDD278CEB29DC85FD1DB8B83CAB1 EB37C531E9BB8466ED6B8B60258D3C355626CDA43A32834DC89DFB11E5FC6D68 0F78CFA871113DB81A1690250A6F842ADA15734CB6DF7C6ACED6D8D586BC4E1A 94EF3052FB0F8B9454390B882CBB6E135AF1F9C777AC362C2A758C3A98117120 73C6E2FAFB580716D4B2889A4331CC658AAE996245685B973D9C184541385680 AEC2956107DAB00230FB39BE98D3CA898D917E5F2088F26CBA4F8B5B115B6443 8753331233B10852702FC26D9DD4C990C13CE4D0DCEA23D62A826A4B4FD16070 5F3638C0A50A3373A33FCAA6F3644975AFD0560EE5F2D1CDF08820373468E4FE 6679A229D6955CFDF7ACAA92A87E6D8571AD18CF59F84F88A674B2946FF20A28 B9798EAA22442415EB46B9498DDC0F4BA6ADD347AB43E9293CAABEAE80127378 129D5DC69F6DFFBDAFA5D65580239E8EDF6833D0DE6DF75F0FD090A83CE0974B AC947BABBD1B1C7194DDAEA37B0CAB477ABF9433FCE0243C8D308409427D1DCB 8EE4FC36C7E5CEE104904B520B3F6E677A5B92F694BDBC2C799991667E0EC14C B95EAE7DE1854BF4542F05B4AF401CF67FC3E46EA5A0DC362F3CF177B1796DA6 753AA803E724D1721DDD1BCB0C12CE0859E172D2A370C3697286F80D9E138AFD A0EE016805F847BD30D11D8B891E54C77AB51A7CABF76BB14B06153C7F811FE4 93FC4B7CF161051A458EDF767DF94F487DB939A2740B4242BFEE234F75084DDE 207E84533004B933D43C712F0C71DA4A00FFD6D721EBC93AFDC4200E3B8DE433 3ED3E1DB799BAA27548ADC853AFF5D9D6BD92D644E3CF394789C99D9DC054A26 7770AF5DC5BD6563929AE11BE341F036584DD573D3F43D9D975201EF77BEEF80 D1EEDD1D4AD5D4D4DAF6D5B9D4C1736CB111D6FC74C236779C0ADA430323A825 09EA8D0CB1772220AF28B93098BDB36913159208D1B2D7ED45808BF7B686419C 5C0E3DAB5BC9830FDF3B494D624EE8068BF6F5212BD69EF466B9A213047BD105 B848F056DC544A8CE66C546B1A4DCB4BA29CF0EB4DCD9C2452F22172AFF33B29 E97E12D8F0D312B03BD9E5377BF0C81D884F1E79DB66E8144F106DFD2579AD26 C693C5B68F3AC46BF0D6281032D4D4BAEB2243151AB1AC0BDA2ACDDD4D590C90 F29B335DF8F57DC593DCC081FB56924028E3161AC4865B49D1B0F63F5EE866D9 7A71171C09B09A44B0E32F03494D9EA63F3C89F5E772BE25A6557F119299E989 99BA041694ED805AA4F3BBDF00D88171C9D43A9085A287A36A1F0F9386F2A98A 96815CA51F06E1CDF20B757983C5FDF4003F5438232159F325C6335B734FD982 1423BA77D0EFD044381AFBD0704E3DE95D23A70E2428E9AA355A9A8A25C6C74B 48488C14DEC93A766E112D74C83576ED355F17A809E8D3F9C65C4E3E14EF484F 4658DFB57597E2A4461D8044E95844391C1275D63F282B37888C842A5151937A 45007547263D70195ACC018A373D498B88C5A028BC66ED96A343EEE74D61EEB3 D9472B6A549CEB8699F4B35154A0E2ED22867E4F9E4A76311EB2C9F9078FBA81 838EA49C2966BA64C165434DA3093206B70186BE80600B891D9979F730FDC794 5DD6D8B2090CC67A634B719F441092A10C447A86ADB78DAE45823ECED5FCEADA ECA52E363D913D9EFC0ED98A5A1F823DDA3350EE27F09C14E4C7298CC0FB6200 DEBC640C68C82D70AFB7A7BA668F1D7948686206884736CD03D9F6E6CF9702BF E3C932CEF3CE07FBBFCEC0476EA6E8D5D4C5C6450C8FB236B89BB82D51886240 5BA7462F50A88F69228DCBDF26B7250E90B3DF8E94ACA1CADD9EFB5C73EF9DD5 46052314D445CC92512BA231F79A09A2F0D91976B160B8C9BA055DA4AAC1300D 491193EC66A6DE12BE01EEEDBC3A2291DA1F27AB76596A236B75E19FC5F1FB6A DA1AD835CA08B6CD03B97B4CA1BFCBDD2500BB09F1A1B0438E4A759370EFA318 F062BA9F3D352572CE232E6FBADDAA5363807D0DC5320B807FE5485C8CB09B6B 0BED9F5B1300FF370252DEBAC9DB25CE2EC494E8EEA45FC6604B3C104E81B287 EDD49F3D7430EC9176A16B4FCEC5DF68DCC11ADF90BD5337E2E4B59BEFAC8298 E5ED2C7FC5928635420FB1955251932713236DCE28012C86F63D12AF1DB634D0 0B8CB8992B8723548177BD6822A808FF221A9E38B0DCCBC1F3430A9BAEDA89CD ACEBBDD8CCA5E17F1CC37E35A01E058BAAAB6BE7124314DA19962BADB74EE73D 8FB13FF6AFB6FFF97926CA045B62B98BAA753AB0FC78B881D3FAFF9EE2FE918C 8EDBEF87637F1530E3E13AC090FF81F4136E08D5F3734327E643CDF621278741 A17AEBC56E21217888A6C8B5ED4269731910E7E25693CFBDD4EB4A32698F2447 4C45D73E810B627D8719E4E34D8FF378F9B68BFB149AC67B3B1E55F20D097FC1 AF74D46F5A3923C63DFEBFCA210F6B257F5FF3F2AC34CE41C15C9977634E473C 2235295C05C3DF6B3009C7854BF11CC87471CBE085793AF9C5D05C5479B9E780 14A5A6F3F6DDE5A18243DA15732CCF26ADE40C566DBC3C62B71D46DE87A12C6A 647CAC923254E2E74AF882DBD5C9E108A9160393C5CD12566AF7C824EFEAC56E 6F05B92C73A76824C5ED1735BCBAC61B98D509250C854CF1500C212F574D18D6 4426B8510FE9785B814A70E75C9234D42483E736D0689D3561E8EE5650F33A36 D50127589401D267BA6442E8616E2CDB1F6691D3FC4A2A377E5E154972E890DD 60CB463E9EA9A6EA61087DF452FA5646F69BE879337EAA0F5DA4438FF0365627 4E3B16851C2F08E976FDA27AF451CCEFED00376FC3D6E0C160F0BC19544DE289 BECEEF9A067FD71D54DA3A4F73F06E2F522BA07551296214DDA47B1BBB1212E0 1100ACB5F65FD30C655A3402C83058F8ECFE48FA60B6A3DC86C4996414130194 6676EC7F37454023AB53E9D9EE60249ABF6953E76DCE3123DD268BBD492412BE 65D7C3E5A5E483C381182A8F19B506F0AF6DCD55532B89852D1D96021B22E9DF D9D072BD7DD4450577E658B433A84F92752B260AFA2EC4A118747CBFE36AB7D7 6D5DD96A119AA1BDD0FDCBC3AFDAE5FF72713EB46759A06CD09B5CFABCDAB0E9 85599506AC07AA525978AB157496163AAB387F079EC9FA1F9E91B9C2FBCDC9EC 7027D77016760539AC03F1C1DB242D28D6EE946C42DD2262D82ED48C3A839853 BA977046F0EF373AFF884AC3112D2FB319421C3165DFA5710BFB9AB9595A10F4 9D05704B9E22137CF27F4B2DA9CEF6D8801D5F792969B2E58FB539B8038DF440 6DE20C0313A7BCD16F279290AD6859B0E657CC3041C7928CAE35B9D3A681F2A3 2D40F8EDAF1127E754276556C95E1282514B6EB6E43FF4F0FAFF28C715E3F39A 374415B62C1F5F8E31E006D6ABC736057910A3729AC60360CEE1B2C8D9F77336 39CAC45329A372205FD551B9E9EA5082411207473D9D90E76136AA70180172E6 AF6EF3EF6B38B1906B904BE9BD5251EF067738840C28877659B649C6C4CA328F 1BEF8A9CEC2CB062702F58CC0B8D2D097FBC278F9FD894E10ACE1DEC4530CBF8 E4E467B6DB9C596DF0C3D43E6AD70F30B733EEE692C2EBD68756D0C16E1F00B6 AD011B5DA073A769B53C2DA2E7C9B7ADC6F551BF4DF4C39C66443692C3DC62CD B1E094013F364D04BE2FBFCD1C7B2836180E9022E0434421FFA4317A50096684 CF0B8740EF680F27F4A84AAF2AA92C64883BAF57BDC60C6467A8D4E09E6316FF 9BE73053045E5F3586DA3BD1298DC15D751913FB1E72EF80047F6B33591B97D3 DFAD34EB224D64EF60F5B4ACC6EB42E1BE0CB2812FF2F3C264AD2E44F5EBA441 670CA0A60E73176ACDC4E42E74F8F489C73481EB5D46A61FDA1C0FF9F8844DBD 99CECAFE2A72833E4522981FA13713AAFAF8F121E60FAA6F379B2C8874CFF23B 8FECE70654E5855E525A403700A96CF7F8111BF2B58386E29640D82F1DD86900 E0E203F3ED554209CBDA2A61A5641D4B39D98C5C43D4575648D06BB82B6C4D4A F043EC61B17C208CE8B4F43A7BCBBE588A3D13A183D79A47404223037FCFA4F1 DD237344E589F161BB9BBF3FAD2E28749350DB9A74C09E894BBCA85B82E704E2 99788B24642A7D0F0FD96601CF1AE4819EBECAB89824A0DC1C03BA4B546ED36E DABC8D49CFAA53D2A9A5DD6B3431E364C99ED0323513476CDCEE49BC413E50BF 51EB93563DC03B62F84C5F96ED713F288D109C79179AEC41424822772032035A 40E84014F5BF40948F05E8562C99266B9E54AECEF94765BC79375C69A0385023 A014B8705931C9A419C8F2B72C3F7054CD6487E75ED2E852BC19302D02C671FE 3892C7AF2A90D6F29771AF31FA95258B6F3434228B377F5FB494E28B5F0393C8 9DEA5E5726B81B7983D241BF7F78928EF8D8528C8F6DB7B307D720243DF00E84 A37A7B2C720348F83ACEFFA78929F4CFB5CCCCB2A074C78B92C8573750B91386 CECD4A1243D1B002B45B933534C0B4C51DDC50BE37BB6E42B8FFD25C9B6A4A80 0FDD3858D50F2166A9067E52D8B453FAE2DED99D96EF9523BD348F2C93DB66CD B17BE44AE1E2031C3CB01E713C3B3CD4361048D12E21C486C25269C5BAF6F1D4 88A0C86DD17FBE4BF01A7ACD72008DA3EEB0BBE3611F26BD3145C75C837157BB 4F71361A279F53E8F1650875D2C78BAFD6B2FE27B6D4E5AC2018D482EC1B6B5D 77B4E31498CAC80323F512CC04F1ED6421BDD6E2223145BB57CB87C67462CE46 FB1F601245917A88EF37239AE1E09507AFC7D83CE85563A9EBECED817C38D906 A5548034E79403CA78C9E4BD474269F936D2A331B19D0EFE83937474321B7E4C 63295997DD487BC4B2C0BFA6459AEDB6C7A96847EF66B919660191C5125D607F 8F24410F04C89AAD7EBA3A4F70D34C114ED071FD33CD22FA7701FC1C066F741D 1858EF35C722DEA4F0B30901535E76145C7854E58622CCBB3CC1853E0ED72CDB 595B9AF0F378DA0572C934637F05E79A68DCCF4D6EC463980D154AF8C6EDAE3C 196B7E2B3B71BC36808604D00F7FB7A93AA3CC0F0ABDE3670369593A3874F62F 6E7E4DB1E45CCA127AB0DFB1FFD40D2783984EAD45C84F6C4592ED4A04D16F51 90AF1C364E28FE69BD3CB2A872158200E0F11A691BB465F2C7729E92FFD6F087 B15C5B0F5D1745124AB52183F51F955AF7ECAA386A17E88C8A99B66D10E0E371 7014D584EDF9075FDDB142774C14E780B16B0486B6BB97816406961A751F7452 4BD8535C19DE0441768240B206F65C58D0BA1CBF3988695646044F4AC244A306 2829B91008A97F5343F6AB8FA66A0DA567E8DABBDB1EDAE11B7B0A020A13242C 3343DD3B89ADA259982AD4C895797C467281C708145CEB8C97807EDE627302CB 09D5D522C5E9DBC5C537A2A85024E6DF06AAD4A6100EEBFC164353A1D1A6B57E 3625397DCFDEC3EF32DAD1F4690A3F8B311684ED06F06C1AF4650DD5F3CE59CC C48FD5405F8E04B9DFAB52C1B5EAD20B8E787C3BB4BA90F390270D98A28C46C3 6F8928FF0DF7E64D9FAFA5B914DBD157F39039F765C8E6BC119C842949969B99 84C1E2EA9B765CF0F2287083C8E6F6C0F0B3C86BF51B9B56288BD00075575BE1 F876F2B55249E2D0F63D30DC09B2B66543DE00ED69C1FA678373CE05DEF0F443 7B02587563DB48AF032BDE5CA804E3B6E112750954D4BF73301BE6CE7E35EAEF E3F23FC9BA735AD2DEEB4BA98E25CCC288360D66CB9502429170034183A73B1E 371D87F5D826657E13B50B8389824B03459AF310929A8F2AF24B5F524FFF93BC 410D44A219C8E922DD30F7F90CB8F7E8D6CB8D7844F1D87C7E8BE617551BF160 0C07180DCAA172FE9E3BC603AFCA9297E6639BADE5726148A8F8FBD9D19F4882 946B09B95FD05C3495CCE1DCACBB0128709AEDDED2DB96B59E2F549A772EA75D 1B1338F838C3808130F33E5619212243A6A110F2CBD45A2BADB32E7ED515168E EBD6596A4D09B9753D728834960C402F5ED6C2DCBC742C4B309C1CB4E4B21698 8AD7FABE808A48B5C29A1A6EA290AF17E88FE4C6EE0022F3999DCFEFE393F19C 22FB150CA7CFF8C08F35671CE4FDBA47ABAAF1A6DF18CDE58E7009F0FF3E431B 52F9DE6AFBC576F2AA85A1244A237B81D6DC934BD969F0A67634B2E764CDFC83 592739AF703325BFBF119FA6BDE15C510FB30CA1BE57BB3DAB41646793E4A186 1954731039C401F03F340EC6B9AECD69ED640A764BF002CCD341708DC379EA08 4ACB8DE490D3B19D63E6CEFEC3BDF5F8D848B23B293772EA9E58535C5EA420F4 D9752193E0F81761A775C811312DE26FC539BD8CB1000B91F651C9611B944E33 7B00F04EC2D82B1AAD03CA5A7E0B679C0D5FE02EDD7817D035B7C06EA16033E6 D4DE4D038EC1F60DB3C87A32C1318FC25747D9EDE1D2EBB518C9EDACD3239ED3 F10B1836E66AD44F45515B0D470F6B86A86B608531AD0A7836C97CA7205EDF38 545DEE347948F4825842431DE0046A43F2600A286628FE70E074DCC3894003BA 0DD8EDEF8B9E601BC08D149D884F6DCF3EC6985AD47A2F219C1CE89BF46556E6 2D4CA35EAFEC26072FF26E75BC00819ADA2F416D9C9959399F0765BC0BC6907D FD222AF2386B11D6BEE4544DB9EE7986E83CD7319EB44FCA8BC0A91867D9BB20 34323A8EB8F27A2A44B399D094C3143FFAA29815A254D7D78BCFAF851EBF35F3 136D31CA3F5F5876C807FD8D895E7D0A9711BAEDCF4FCB99E199B1A5140AC6D2 0E07A326FFF3B07D34199523CBEFC73D404167E18DC2B3D08FE02373960E905C 897DB637C582C127A0A52FBB19B7A0C662BE690453B26C3ACF4DF2FECAC67FBA 9D821F09FB1879DC27DE7DC4299042C2E02BECAF05EC5619317DA7FAFDBEC47A BF8DE83209B46C3F1882F64D14DBAD15AF8DCE92C9E08148E6767AE3A530B8D2 3B99D0983F003464ED8E4289BF6EB2E651706F4B10F1832FEFE8E3565BF2273C CBA07EF324292EDCA513200BBDE469C017B1CE35DFCC55E4DCE11967CA60B6C0 9218E1760219488A00EA767F88211CE376D3D7592BE63910B8EE7469D964836B 7436D8B8EAF3E68BF4ACEDEB0416F44963C0E50ADBE97C99553B040835F2D803 E888C7CD2D5120D47366BE192D98D736BA90A39EA1E3B673DC2B6AB7E36A74E2 A99D62FF038773EF774A2C96D4ABC82EDC2559A2BB72424739DD57FFB95DC9FD 91A124F912BBF8B0D96905308DE00A1C5E95D14C9D5B850E7D41BAFC3516F95D F1FF9503FD76DA70F31D1ACAC845B677FAC8974BFAE55513C6C46B2ECEC51170 08706ADAF665CDC35295F140F4A6F29892B449AD8E66BE925E8CE1A62B558437 EFE2106088C3EDA2CA9075E37A768414E1DC8EB860FD568C76A44DDDB0F5E05E D6B54747E5E389B24A57DF816D192A99186BC1245BB3CAD15A3B61A2D2B0EC0D A2B18BFAA011A5677364862557791E0B2A32C205D4F9646111C84474C9B3C181 DE8B2B39A02F20B608D06FAA2A5286BBF3889F6F8F9EEEBEA73EE3D8601B3903 E125EF984225AA058AF990030E948CA33116DA677E66A34282B12742EDDFFA5E 5C4C2992DA9F1935C638E8BC0C1FD4B5ACE95006CFC56580A26127B020024CB9 816926CFDE85F63E55069FE71242A0F508B5D9DA124404EE486370A59840BB28 2640A4F3413BE14FC1E69166DFDB61BCBC0A24AFFCD606C6F85AEC3C630D18AD E0CCBADBE4F3DF664A35D84AB9618A4CA77B793A2600778E8D3F09F357A9AA8C 509ACF75844BA214F191890AE527889C71EC577E488BD1FB0A3FCD06DFF9C2D6 A813C20BB668E6E6550C43BF8E4291D88FC400180D63E99299C71C6128E00143 D972D470480D8BEB2579C4FD2D3FFD7AFA879179324D68841752A3CCF69E1575 49C086CC78124814E86036D328E1013F7B6C1D28CB26E9AD37F59724A3C0973F 2B9D7A6DE7C493D64EB52728527CAB2FE2261D60FCCA7FDD169B35A770BC319A 8E0D07E41245FB6E03DC097E41E355E222E989DAD7470F8CD03DE02D5EF89BAD 23842A683B28B4A69A9EF1E343F12B25EDD6E3349E2EF1573C9C411B9D0F8AB1 BB71A57329C678470D3E5A924B030EF451E19489B619B0D060895FD2A5165A9A 2EBC4AD908CB233E0E464BE119F0187DEEBE8CA346A649537BC6519D47DD9190 67157765C470DDBEA66B0AE3646A735D469A2233D0B57DB957DBE98A1C4F2F85 0CE5762FB387CD2487678A1544FE3AD3ED255DE18F23E8B2EFB8E2803754B164 27269A01AB5D5A332BEC00EF99DE62FAEC4B28DB369802709BE1B6F84C5333B6 AD345E48CA716F7F88006F21642BE1BC2E6B2B77CD3F8456273E9837BB495916 1F42AB0CC6327B694CE3FBC5661F54E841D625904A65A728EB72A3434D5EB7AD AF2C90563043A6C924CC6A1DEDE8D06A555B642D68D2F7A03688F4148DD4EA57 41AA09F69E002B476B2A49D2EEBE07CB3837A565DD08B14021CD660DCAD0DE90 F093EF321FFE68FC5EEAA6BD0EB5C30A1CA19351B609D77061C7E1417E6BF8D7 8238395AA5392557F4917F4C7E3227B70C09F9C44DEB37E5B6B6049C265619DB DB387248CDF5ED097457425394D74571108507F13C464CD5E942D4242CCA932F E9D9EA522A650EBBFA0FC07915C1EEF5FD038CA6674C86BA749C7CB1687ADF1C 627D7A4F736BD961E1FFD383F6948F4BF0C12ECFB595CA3F3426AD8F7561534A CC945D0A2AD7BF9460FCD7414A64AB6583F450ABD1799F859E6E77C10B39251F AE44E54093D9BD7CDBCCF5927DCD30E4B4AC2980CFDF99EFF4A51B23D4BEA657 ED7D9BC9EF964BCE48F7F717E409516762A8D8AF2C8CD5272A67B68D2FD085E0 7F8F0B66FF6A383099458B3BEF5475BE98837D2F9096EFBA48B3F8FF76403B79 B4A5B05C92687395C2CEB7BB4DA69DA8BB01C273BC5AA428218AA5308B6DF2F7 5162B4C924A76DE8A1A4CD30980691C9B108F450ABC1AC42B75BFC767E24A5AC B4A86348CDDA337C19F0669A8AC72FE52ED8A1C45C346D2DA2259FF69BD7793F 7BE723FFDD1599C8F370E70D5A0AF55C0DE35253A872A397C21A315726AB2C42 008CDCDC37D6640D71C00FA44D2E759D327CBB4BB17108BF6B61793B225A2C97 2B6C5FE0F30EB9AFB7345F2D0DEBC6FA6E3E864C1C988230EE1EDBD9D1EA87E8 391354A28034E1B2DE63EE04F9E8834827B8E406BE227048FD47B6FDD58F76F0 170E42BC5319F3A3D9A0A69F01DBD60AAE97F96AF6E8C162258B38F190C08EA4 AE8F5AA71140EA47B3BE8C61C90F206C9482B875F0B147511DCEFD826F25A6E7 CAB3DDB6F21CC6503D4F63AE8E46F4645A80A0CE43ED1805E6926DAD17684EC5 16596785F0DD9875A6AC3FB3ECD78869A64F58A3801FDBBB0D70353F6EF99DE4 645E35992657BD2016E23FD619E0F0BF9870D9BB953800B66B7586FA4303E921 654B6BBE7EB24FA5CFACE59EDA94D37D9508E628FA05A70A1A3845D6567A29AA 9D06D1CF09CEB8E1126D52145551D2CCEE09DC468AF829168B64806674153EA5 6A70E6FA23F945E52D67157A18BF4218E91535BE39C3C3C81E474FDD79949675 2E11B424BB64AEAC2511B034F61A55F2BF24DD9AC0CD336959425C6D2BB01BCE 57A15565667C32EAAD46CE63A789865510AD776A531C75E051C7CC816421326E 0245E26CC0EA2BE4C18AEDC886BB3958D50DC1159CC673D537FA89A71047F8F9 7C41539B9271B570F41318D2EB4F21CBE775A315E039199B7F03B9E40BA14D47 A93D63BBFA424A741792D6C11C36D4D36EDD7791063607E8FE2E1BC4F490FDE1 6AC999E84B27023AD458CDBE6E073C36CD45A4234E695282C1E2B3990DF6F383 04A0F0AA02507012568991AFC0C33556CF9F56E004C7FFB2DF8C78C1C7E67015 94BA882A9C33951070EE6DCF3F8D85A84D51FFB23734E78E1D3B75F0054814DC DD8792EA5541C857C2B13E55945B147309FB445982631047678177B548A74375 D3CC45295C1F073CF6B68C69AB10BE60EA2369DCE6907141921705C88E75968D 57F5CD440FE365D0EDEF9DBCFFD5D89EECB49B98FFB2157D0F3AA691C4641AD0 2FEBE9403E810AD6974ABF600D0986CAA0437C0B70EBCF2EE4DDDD288C1412B3 04E66C1609E1AD3027603FAC9BF8E2B4685C29D7AB27CC4752728D76BB73908D 893C23564A1F6ECEFF9DE4764A1F4D73C89C70B9C9882A220486C79DCC092C6A 31519D926B584507B60A9A9B0B77731F9D2714718FDDB10C3729A0C108D036C4 BA486E64E8B3A27A2152F3B404C2C99AF5B5A815B67839133D64A143E4B213DC C4490D735468462B9AADD9F8C98579DA9F9CAE2C72F7E9DD6F76A6947FAD502D 41227E7C3E2895BED5D04529834EBC0398029D683BB3D9607870EE6FFFC22381 446C5484E97701294AF545D56D3D714BFD49F6DBF0D271A952DE7704DC539067 3EBED9AF2E5D78253EF2AB023F7161066D1831C56C2DAF37F489AB5783B2901D 9C233921919188CA821FAB51B444F1358464C9F921C05D96DB693AAD60E09348 50FBE03529B4CCD77612CB36C9A49610D439AC566F2981B06FFC22E1BC52E6B8 F54D37E69AF3325715FBE3812114DF5221601FDB969320AA07FC3668DC679B3C D65D9E148F378A8044A0DFFDCE1D76E22D5FF866E653802A22A5876B3560E3EC E2813478F6B9FF54513822A58693CD01C7B26E52DD5C82EC103B532AE2C79A83 D0DB53610F64D1FBD2DB8DD2A78875672559553C867C54197FD922DEE6B7D27A 7A6F6315C06F069CB860120706EA93E034451D749839613D233CA718B49181D8 B7A384A091701161F0323FE87DD9500BC6709E3055F210A705BB68B10D897C10 1A2F37A8D1FF50846EC6CF5349FEB4EE6B18E0D4562203D636975CDF4593F32C 7547620C42431E6465BF52B4CDFB61339440318FE211C946957747E6451BD8E0 705C99078E310508A8E5478EEEC43FAE1462E921182B0BAC8AB381656D3DBFCD 844EEDD0449E35761986E5050A26F4A317614EAD483624F196B2153B26F7F68B 29BD8F4F9B5A41B5DD0938ED1D97A9D49D11BD097A9200E5077028A99C717819 1DF16DE2EC431721A2FF71A54E580A654AA08B91D6D1EFD43C45FF13AA177CFC 167D26C503DDD0C63D498EC49CEDEC233366258066DA982368B3F773186583EB A1249B722D844307786222F4F6766741FBBF95126F477E0E2D86493F9B684969 579FFE8E4EAA9316B489F4A743D6AE8A514AA9B2A71C2A2E8732C0B029889AE1 E09F5E54FD2491BC2916D30899B1FBBC6FA29DF3B280F60AD80091C43088CBF0 CF4C8E3A141F8CA382D2869FCFEF9F533E45F6256FF986AB4ECA9EECBB8EB7CF 12EA62EA65BAD84E4DFC948075A3E54C0101448A862F2E1303CFED97E62453C8 642D8B85B00DBD993376F354EB97697C2BFC559EB5EA95E1A8CC847FEDA144BB 57F75450EEEDA1EAD85AB3227328D89099B46F4A9032FC4058027149229E4A73 25B61CB2DFA35DE03CD8F43FC559C41C403FD5F52F24393EE9C4C1C9BFE97E1F 0495F4CA06D1964C93700224567125440D0FA88ED0AF005EC5D7CDCB42358CFA 6CA45B01232AA5AF7739CC707C272BB1E517585215046BAB9406903B6AA34815 BCF3AF68E3729A834E90BD0F9320230957FB6A52E7D452879F935C6C516D48A5 027F1DD71DFD2559AC71DABEBCCB487E2149D9279FE9FF99E3E0ED8DA20C0721 9A174F287E269AC11DC109E9A2DE1F40B75E7F6AA31AA7BE2E13D4E486A0AA64 C46EF42AC18F161ED07AD4E3F5EF8D52D02F8C9ED1C9D6B0EA1C251E65878735 130A60C49BACDF30C086195B4E59B7F7AED2EF91789A48ECC25407D1B841812A 02BCE6F7EAC030DB1A57EB25E6345A6B5D92BC16E6D351768F36230B2F77CD0E F371AD8838446228AE299C9352CB5E2A4D2D4ED6C6E7EB8FB434961D4F073F2E 84B94601D9DF0E1AC5EA1BE39321AE49E1AE449F970E8F3E0F5086F70D00B8F0 6097A1423A132FB1513D02D936DD526328E377265A8CBA2EA4399DABA9CBB68C 33891CDF6578CF4FFC60A931A5B7F1B374896AB5CFE10DAF0D9331E1F1CDF46F 394B752597D7CEE56AE46F1B53F99BAB63B421E93E7FAAF30112AF76897EB6DE CC5B7E2414BD9E98B413F0629F86E22394C9E3BE1244DA2BB6D087E4D4A14386 CCB51F0019DB4E440EE96705EEF85099060562F1F633097DD69BF789D8BA23D0 102B6D6CAAB1F4E3BF857EA55F04E94FFB604ACA4772FC3FF44623DB779C68B7 30D2AB68A58CF282971B5F448524480CE10181C8D6B822FF3C035BB578D1B0AA 5BA17D05985EC6711D51F40CE9F3760EB2811D7F899474D1F93CBCD99DE614A1 C6CAC0420FD87917A92CC806D2498A6D16E587F390DAF7538EACD4A65A2DB95E 7672AAB9052D0FDF75DFE6400DA799C4E9CDB9978D8CC7B0382BAAAFC27CBAB2 D08BF4CB688E5A0DE669E04F7CEBBFE7632DE688A2266D71F89CF57C6AFB258F 732B88554299E1F031CDF39C8F002108B5B234EDC7FFB75629C27ABBBE48E366 F1215FB1C1AB6C5B7809711E929F04F096A31BCF595125912F12E8DFC549F6FD 6292D292C0246614766408B961BED2F6B1B304C59B3004F139C22A03D0120D0D 771FCA26F36E5F17ECBD65593B07B6DA82D00A9ED543744F78F4B92BA1F8179D 618132CA432CAF2DD7ED1DAB89FACC53141EEDA14175071603B242FC13414838 1B3C47B19EF2E6E6DA0765E4E8F5C50E8B3AD7CAA119898EFD2472B10CEBE7EA 453C202C64E286E78B56F383EAE2094A9B604DB7876D0FD42616326DFB6C5AF4 6F5186A1B184001A6157CDF7358B429DF4BA83878A07F9FD2DE3EE6746D1F9D3 5878B2E0A60147F9F1D809866DA6022E7811B6F80412850F66340988E918C1C4 0D69D2ED84B075036DF7634B343C94C3A38610EE61B77FE66ECD16F06BA39E93 FB904C03D69282C873299ACF1D6BF8A7D9C02C51F26CC965F115D93CDC6A38E8 44A4C79C9CCF54D4D21BB5A7F550FB354945176D37CFF1F956C942F64E320A51 34C5903ED807EA3A7D588CC0172D9E04266C68F340C95C404FC526D873D2E4CD 12B348C1BC02D8F2C5CE5D9DA60A4454BE5E685CC216BCF3E16913736F1C01F0 1635F5C8D411DFECE7128FED9297B9BCDDFDA800E73E00FF34DED9238A5B8D4B 9F946FFD48B69916732BD95D674352DF2E0C33A742C2DAE93CE313040319CABE CEAEC5AEF9181F8062052C76C8960C028A4DD96AAF42D1E47253EB374B154F74 3540327819EA11085C4C0A737238C44447B430612E536C35DABFD0FFAD914807 9E20AB328E2406807F158437CC934E0F7139324B6A65F1B41A9A18EB861A9C6B 28AFCA4D87A066338FF203748B7A4F826286C8552127572A7AADC46D698C6AB7 6C4A7A1E82013B18F9BF73F9D4BE54D0518B6CCC1CB65181241C71E64BB0584D 28F6E8A019D023586CD7D16896D9297168CFC921D4FE8DFF2269C9ACC022FEBF 77158B1C577EC735F0026A938F6FD84B3055DCB910B579C7D662B797877E4E35 D559D8D685D0AD9E32F9064825C06053DDE6183B61459F5E8588AF50DF09B575 F51AFC05027AB1BB97238771A8E2AA9B7880EC034C186BF93F61163AF30AC095 10A29C2C838F076712D237EF7861D969AA1BC5FEA9C3575E00B40920BB3ECBB8 58865486AD07BA0E7E7F5FD63969A14D4FFB0AB2A3D44CE7054D5355514A5D29 B8613B9B76245993A6C6B723A3B4BF8E054C6E50F14B5AC5A5984B92B34FFB62 73EF4F5612977537847234530413F4A3F1CFDE72371911D38E778919DC8EC229 5B02340F06EC77BD5CAAFD1A819E4591C803523C76FBC9A867ECF64C1205AA85 46EDEC5D5EEAFA6949D46B2BAED6CF95D5C0F2D5F535AE93682E5B7B2D0EBD90 2D4614D864F548EB318823CE064B317EFC4BF9D851AC4E9BB5977896CE8423F9 9F02A0FDB7C9FBC784A18C5035B58E56F9BFFE616B17D79BC0C8C3A878966A95 6019A5A2CFC2EBDCA7A32A796A6DF4A8640D9164BFB12505D160874857F365D7 44CAC0DC4872F270B7A8F0E70AE91CAEDFFD451B5F60AE68490AC4A06D197F61 9843CD5CDA11A3C5011DE731B89C6C4D91796C8B436095A051149AC8F84EC6D9 9B4D46B340EB55997DB19615B2415BC08C8CC46E816EE74DEF4BA0EBFACF94DD 353E88B786F9B4AA53B5AA11818AD7A0DB2CA317B80BCE7E79BD8DF4103030F5 0D808689216C3C604F4F02C815B7EB49CFC0DAE41DCC62E8315FD938B43C3A0E 0656B3470B0F6B9A5A81FD4BA6923298A375A67D64DC4F0EDD50628AFAE6B821 588D7E98F66789E6F0FC370C9699350BB73EE50CDACE89F7058140B1CD4E2345 63A4768BF1293E42799D2AA395B7A150FB4682DD13AFD1A00480DEA1059F65D9 589FDFB20F1D97D8C5338345B312E7367631A9A36300014D5256D05AF246ADFE 06BB61F857628F33D6CC215C6FDC149815977AFBE2FC0CCAF4AC1EB2255FF2A1 22C6808632B1E03F1E4CEE72CFF3CA581E01800E6FED9E39664D0CBCA741E148 480B2FC6CFF347697AA1A900792A915649F9C97F75BBC7A222052B25C52EA6BB 0D856408BEA5B69C98839D8998384C487CCEC4DDC736092CDAB564DB1E4D5163 B15EB7FD045A9DB8AF62815C71F46E4122FEF0BE9D277B1F1AB40613DE624BBE 228E59FB67BB5B8DB16F0C24E161EE013ABE2018EFCEA7A2A296A64AED59109A 34B863AE3D03C58783F6337EC44AA13D0F421B258DD42116BCB8C54E7F3DF992 F8EBC63091158E1EF17140CF7FA3BC0B69EA2883E85F52478D8B56BF9387C733 28DBAF516D98DFE14D64893669749F89B7C8DB1DBCFC72A68F85D1B914FAFE23 B1F352AEF419CFF181538098D3DF5CE0D421327DB7BF4C6BA9C03E74E47292B0 13D1E90E4CD8FEE80A86F7B6D3BF79BD3CD8854978ED760A68ABD95C85EA064D 90510B2052313B5A5DB71BCC39443940D59D0E96C7F965B8A2935126E72E876B 04EDEC33ABAF58A263A850F35C52E7C43B59E58F5E84E1E5BCCC94BB9271514A 8B0E408096673C883D5AA148573AE0B2C86237594F6A33B4094DA04EC769BD54 93A8BC92448C901B3BD22332C1F04AEFFC8A929EFD782CAB2FB2A333AABC939C 8E01927731272D6FD2282764DDF1C9952ABBC25E1E2503866A1A4811450BB5B3 17CC37949D73F396DD56DEFE89F96D8A221BBD3DB0FB373E7773744FDC6C1BBC 9C172F870A997AF0C7953791D8C9EDA4382201A4267C7E73166B198BE12B9FF3 E4015FDD88227D9BC2ED3AAA4F12C642D0F52C54B718C4699B61C67BBC872FAC 9BC3478D44CF38DB3330BDC4F38B2FEDA71C1096F5FD4180E1AB79E285AD017B 3D3C68B113FAC6391B7031E5A2975E37177474DBC3058DABE2CC2B3437BC9737 075013D7209E843C2E7BA4F23F9497ED32FFC5C49FF20DCA5A5DA3C8723C5CAD 9BFBD8B7D290203EB09CA7211E999466F4C0115AD277588FECE3BD4042BD1D9E CB5B59C2F27DCD6EF90261B45A31423A56CF0893684A2BA010493C6D26742E16 DCC58C1A705E1AAE11023BE724E0D543A1BA02D9F7A7C06050B68AAF48FF5D65 4626D4946C5E1AB076AB6EDF98C81BC2BE38A5224B56BAE4C9989D85697EEE57 50FA5FBD224E2237CE0413A4F66EA0F1974351A4706D80D5EE20FDBFC8980CB3 356F8F6B0F0756EADFE7787278FCFA0EA92766ADC9B3E89E194C7E2AA027772C 786840D3BB4534B46491F0B138385F9A62D1266655600DA3E4400C76650DD7A8 C8FEFD1C22476B5C65C5BA4F54035AD488BB55107B7E16B3C1C259ED8ADD0311 9B16CEFD2DA744EFE7EA1EA3A27AB7F9F03F84B1D315F23D5D2C26C1315EF246 027EB455D9A78E279E7732B9D804AC287D98385CDD6F84A8075B6CA38BE4B419 5E6B104268D4EB9AEA37A0997DCB822BDBF5B344C0F1A4A49FB5163C5E135D18 B469A63D1958E380D43DEC82F402E9D6B7A448991C09656EBC0633118FC1536B E003C996106D7269F3FAD6001A66896EB4EB70CD06E3C16559E79D3707DE2E74 4DA83153729B4DE112AB0DE09447483CB3B39E31B1760865E4126B9CB7EBE273 C0696CA4085F829B9F9E0B4E9A15F40016B9910D9C4FBB3E1A2624D3645ACF24 29DD60EC26D8923374A5022338E91CB357809A1B7F3A4E0AC58493FCEBAD20E8 27DAA5C00935D0A1510E82E68C6E66553D651CA409B8D0EEBC9E61C01D4D8E0A 3487767B4A3E8A58A4CD776CCC5D4BD104308361763EE0542616BA3B1B95F4CF 0C85EB5C2E887CE408983948B6384AB771C6801B064F0C6F1D90D6B340E23F9D 2522D42976AD5B94C1DB 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMSS8 %!PS-AdobeFont-1.0: CMSS8 003.002 %%Title: CMSS8 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSS8. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSS8 known{/CMSS8 findfont dup/UniqueID known{dup /UniqueID get 5000801 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSS8 def /FontBBox {-65 -250 1062 761 }readonly def /UniqueID 5000801 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSS8.) readonly def /FullName (CMSS8) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 121 /y put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CD06DFE1BE899059C588357426D7A0 7B684C079A47D271426064AD18CB9750D8A986D1D67C1B2AEEF8CE785CC19C81 DE96489F740045C5E342F02DA1C9F9F3C167651E646F1A67CF379789E311EF91 511D0F605B045B279357D6FC8537C233E7AEE6A4FDBE73E75A39EB206D20A6F6 1021961B748D419EBEEB028B592124E174CA595C108E12725B9875544955CFFD 028B698EF742BC8C19F979E35B8E99CADDDDC89CC6C59733F2A24BC3AF36AD86 1319147A4A219ECB92D0D9F6228B51A97C295470093CA270C6258F0D99DCD775 734480114DD0CD2931DC18782C4CCB90B6906CE08BF4CAEC2D4283CD44730A2C 28919598227F98FC5524B0CC92540E349C5B190DF5F2317AE46FFB97221BDFA5 114C21D5E8FB0D1C298EDFF8836AD72A9B2AA132F52DD5D3F30427563C97CC46 D241B7024B4CD9F1E0037FFABCC88D8CCFDF3BC6EED778074F9590733CD147B2 5B68387E0F19E6A81961077BB7640A3C0E27ADD72556CF84ECD981ECCB64184C EAB8BD9B96A873D80E3E0D5B4F5925983C80EBC3A8A12FBC452582A0B37D3C42 4DFD22E9BADDCD2E69644AA271EECF366D63FCC29522FD72D6C1EFDB3597E866 61443179872395E99024F152F6D6A4FD71BF1C7383BC1CC27AFD2DE3DAEFC06B 6BA837BBEBD0BE09F6AEA31A83B1B45255DFD6FF33362AF8BCABEBB0D944B3FA B85FFBA0B370B9035460905432EE87395E518B4B670246FAFD535774467C059F DC30EA01C95EFBA4ABB41711818E23D7E69D32BD63243A6D98666BD46E234155 BD6ABC76F551C31B6CE2E52323A9DAD5C003FB116AC8A82B46ACFC45EECCCAA9 E12C2C8E3CEEFD98D49ECFB824E8677BC9CE9B682BB5A7117174E4B2A0B925EE 553713780CDF3A3A4AF1560343A8A448C0B5DCC4E11EDF5ACBBA0BA8E5B899A3 7321AA7D4B283AC9234978C2DD81813653A96F2BD129FA5F355D56C4E50310D2 0FAA8F304D8BF333F97A6CD20CA4BA7BE6DC1446759683933BB1F1617AEAD131 1C9EF2212EE7EA9B64E5ABFF45E1727EE82C00FD371BE1387987236F9BDBA4ED A966658ADF028B5DAD1F0878064221D0469BF17CB4E738258FB5D92E9D380C64 16E95BBA6A2BD9EEB1A187A7231C53BD8ABC9BAC46CA4AFA94A4920FA805F67A A0C61940F6826CC4539A6CD1F9900EDC3F720AE4FA097F1D7510746BCE2E67B6 EA2F2046613785AAB89915655408AC9D03201838BBA44F421D5F25CFD88E56E8 1CA23CBEE9C2E323DF1866D31F309C92281E514A87A9631F33B238AC6520A20A 346DD6A206C3CAF2830FE244F2AC5D894686CAD5F4BD1CC51EC0B547603BFFC4 F008FDAEBC93542A43B7C907CC85046313348CC8A017C585CC370604E40AC820 8B9D8F57A01868FDC93551DE10FA83DDA3E49E44C32118ED90FA67AB1C66B3F9 F80CF71131977ACCF4DB44CF1EC26AB363C5F95FC2523B5DFBF4D60647EB23AC 89CB971DCDAB3BA26846BA9317C051011C37468B21B159412E69DCB84A9F5876 F418908678F38880B95A4BFD3566A6EDE93AE05BBDCB3C4E240A5C0A06301896 69FCCC0B65BB269F2E10609B6446A68E2DECA905FC26D4F502CAF0EE9AB15E60 CF42CEB376D92D80A6AEE55BCAB006999BF4415815D0F5BA3B1FF9D2E60201B5 833FABE8B883847ADACF9B032721DEEE7FEBB583B89066ED9608F1EFBCDD09D4 3F3C2B7B03154676151753DFF53815F2EC1517C094B0D2CC5EC483AA93772D24 AD3B0084537B91BE1913A31C70750C6DD707761DD733F9ECA552D3F26825B2B8 3EA263488892C929DEC07E2F988B7F7657D53CFA5542CE336D35B462E5E8649E 05973AA54C0A4E63552004E3C77E5FA77F821D820B1620CC8CB3EC5B1D7BA751 16CC155DEDD4DB0FFD3009729F365670DF9472435557201D8E82341B4056D2FC 5D2F7C57599249DA2A99A522868716B076320350FA7415C3B10D77A6E1DC77EE 2D929A038DE3EB4735A4D4F5C8C340D6D293D57E83C2F379ED0EEB16AA3A2A2C ECD664E526D918A3D0A934170B6E1493843E6AAE87E850D70DE65D34AA2A36DE 8687D57A6B6B1447F9A4380CC3D4D11D54CBE762258426C46B8DE6059E6A2F31 E748549310FF4362129080CD98E70817A06422743780B86E11101BED14BB6569 D36903BA8BEBC24A478CD430801082CCF49382D6F04DE270D51CA5BAFEBD0F8D 901CDBCF10DB97E2B059C8CF7CDB45BF931203D5F8CA4622DF19682DE2BA7924 47F78908BDA23C4E21C0ACD2DA259B23648B6F233EEE830E7B82DF4371F55C30 71993EC2BCC7BD6411690B9B1621903F358450976D6B6EC6B505A593A9FB7D92 7223E2424DD5AABEFF254FBCEF934A4D51949BA0E8CD614AAA3AE6C3ED7B37BF 5324BD4998D8D5DA95E4741B753AEE580FB3913770C00277C9F609B4DF3D618F 148E0EC7A75218AD788F98D35989F3DB94413E70955EF586C0995A450BC75820 F5490EB55E5D0D21343565E1FA94FA64A74377F87E55EE0EDDC8F4286951A4EC ED6FB3B444206D89BA71A9723E41E93A9F6C80240437019F3C23DFC2491A19D5 29762876AC60A14404493D04B5537C1E6FCA67B69DC1CD859F9C956FECF4461E EC8B6CD5B5A89A8A838660A6C3F47B79ACE3B05C0AA2F17CF2DA947B893B42FF 749E2CD5E7B56823A119629931B1ECF65C51000A10412668877178F589B4DBCD 24D39F9219C46BDDD6F101C6AECFD3876056CBB858FE0C4BA2BD0B5FC26AD5BC 7FA9E295E72BEEEC721300567B6894FC48FFE5E3067C538CBB3B77E386F50D22 F8DCFDD0E335060CDFA49231D157981925F1CB36110809C12BA28D2D116116DE 01898E311FAACEE0E5402CA30B64D3D5A0CA33E417FC322F2F0BB7AD3FEE2039 56A15DD6D1E86971AD3A5A9A27F33AB62A5A3BF5660B59235398926D6BDA33BA BC43B062EEF199E4ED991518A62AC374EE21E8F1E1C954BA6D1493388F708D0C 961612444BAE019E1DC18BDE900BD7A781835580A74DC696BC512F7BBDBA2D0C ECE5D83A049F7A3286B94FC446DB5C3F33CA2CD3DDE2D0E774A579831CFDAC37 9612858EA613AE6939CED001EE662DB17642D0357B80BA0F82ED306218DA8505 A613CD622FA998EBCDFB7BC70F4E4C8F1F43241FC22FC5BB208F4B20311A98B2 73F30E4DFCEC93875CBD1ABD29ACF80585F59947F23A96D218C0CB8BDC1C49F5 70DF3D49704CBA9A23294A88A2AD61811450921B1E5C3C86435C55AF87AAF6A3 A13709082DA9C47D372A4226116342DECB14E4A4ADB7598321516DD637B64148 12AB17AC5B2EB25718856D50BFC8D64C78DA6E5C145187DB0325C30A42013A81 590E58E74094610207FC70BBF1A497395939B42A6EFCFABFD9D43221DE484753 DFE5311F1845592B4484B1CDFCC32B4E068B11A82BA189D2268D88FE63B9C6E9 20C9E40B543B5C401265D92A932476DAEADD4D3E2BD6E4DBEC0B30FA90A1924B 41D2EE9D8AF2D8CA79D15518141665B542C696C2507DD2F4D987EE5E22397FA8 FD80743186872DD67BE58103321467CF3F4B8898E66584DBB9688B9C78873CA2 9B72AD7406CDFE8B58FACA2904869FB0EF126DE299CAC08CB89F60561939D75C 2722CA57853372C14F5BCCA5C4FEBCEB0728BF9E30140E6B0D6C034195FCCC89 291CD818CF66757EAEB0AB5A9D5710988EBB052850DDE97BA0DC0B054BDF5172 2002AD6FFA44AA5D9D4EBDB6B2C04E8EF38660D9BC4C995BF37DE078C279328F 4C360B8EB337D798962CACBBDEA517A5EDFAADF0D445FBD1099837F9D689CD2C E330CF587246387EDDED64A2F4C397C1B2BFC325B39114609EF57DDCD7B93C53 811ADEFA323C59441ABC447F683B5EC43870C057463DD502E9B9DA7084C3BBFB 2FB864D26DF1BA41ACC815F2A71E96D2C6F572E1F7E4A224FE57CD605682F98B AC7BDE4B85A4C11D58981E981E9FC43B87A368BAEF78AD87B7DA0FE403AABFD1 CF414CBE75C0E9E257DADCBA035E1BF05C4E17FE92309F18633D93DF885956A9 6C27E77540F888B8336B61598CAB04F3B5A1767C1ACFE15D32A25E5B1BF51FFB CF3CFB25CEE7DC95203CC44805A935D5A9154A89FBD4E465F0E599EED4033365 0A31612F37BDAE8CC85BBC67F7E375EA68C2982FFD89284B027501184C4D2232 CE0FE4E905C4B504EAD009F047FE627C79AF9EEDD65D00A3858F88E699E5EB45 4957086CB22776AD06C317DEA41880D88F0EDCF71B4ED76BEE665B7937D5D0F0 E568C7615025172086BDBD69670EA154CC52C85CBFFE88C1A4D1AFB6624EE667 1B5BE2A31FCE8B2A4B03BC5DC57280199CC0970EBB636DDF8DF54C4A8CC8805C AD63CE866FB20C64725AE4BC9F0EB275BD83EC89F2F9CE23A084B45694D8C3E9 3F3D3C1A678690877E8B1B77ED85D4F6E03DBF1F3B1D177E330475F172E0E729 63EAD8034E6100B2A5773E2605180629972DE6BAC0A8C2F9580E9F1D2E77791F E1D33C2DBED3FAC47DDF1B74FD02583C3CFDBB2D1CC2B735C02B14B7AD3733CA 1682944ECFAD673A9AD5E80B6248FBB6E5036EA7FE5CA8C34FBCA6DBD0E76EB6 C2CB89D9815DB3C45742170DA926E03493AD86BB19A1D3FC623BDF1C920684FB 7414EF69CF39713A9495D8CB678BD4592B53C36BC6CF93505B8E32311D42532B 5661051B855F01A9B3D77AE38879853AF0FFE2448368DDFA3EF1DEB88AA055B7 91459586DD2DFEDA192306DF7143F998CC5D67C1CED313430E5CC3F9CE265747 8582102111E7AF9FB94D95B82D8E1DF01F04F2A2C22A20207B59C8976D56833F E3B79DCB727EE7537476A052E92F7C3D6A625AAED8F026F22AB59EC0F86E541F BC082D8E35234A18192862EFD232C9950B1FE0BCB91209FB540DC5729B9E36B9 94D0913A8F01FB6CB16DE85E6B89F144111B1D911DC527C24917D909F1CF501C 1AF2923EF71530F21F9BF049A56C7AB3249A420C28954E981EC464F61FA167A5 C6084661808089EE7DBD80A2D92FF4040B37B2D81A2F5A568D461BE1C62B0FD1 BF6D1063D2B5DB9CD48BB2B2AC9CEFA543E0AC5C86C462399C1E82F25A157282 D32D538029ED22CC5935E63FA076BE22D3F53B7D7CCDD344D68B4E73F87A5F2C 691FE68C981FF7CCFB124506FEF93F36F7181075D7BC6FEEC0E35AF57855BAB2 44AF021C7AD8912D884424E8BAEC68A5562B881793A1B47FD338B1EE4C0B8583 2867C78DBC2EFC8BA1431DB1C8622C99BB2C2D4D5475BFCE87B11762427867B5 7253463C6F2E1CF5F1DC1F7851F2EF6A957CAB0C0A55076C59A6FF9237917C08 5F97C2CB4B5CC903B76BE8C057018CD962EF90E1C0CCEECD52F2AE35A94C6EF2 D99DF4DA88247C920623978A1DBB81D8F171B588D617AFA8285F6147E889523F CF11EF4BE498842D3BF8E811B4B33131416658E03293AD911516D8AED556F7E8 0181391AF36D862F5F8B4588BC99585BFF0F1ADE4BF73320158DBACB2784768D D9794E2B0F2C0696E5ECE5C7A7DE78EB5CAE85EEA244D43D0280D4C87B6B93F4 803718596FBCDB61A0BFC2DC666128E56F3133B9D4F16305940B50ECF66D80BA 06C0A73C02F689314F1B4FAC22D16BB1E414C6F0A1A548AAB1364D2CD9DDFE5E C8887964D26BE84986A6B1246BC306E6343CA376F990B77BE8D68A4E54304C3F 250B2311586A1D1EAD2C0221FE1828CE8396DEDEF13E70E0AA75FFB6089DBA9E 9FC3FAB43B3633C8EE7598619A0C6FAE2F25274787348E3660D0EB7212F5CB38 032A41A54FDF14B32E721819AEEC54E8FDE3AB8F0ACEA267B01081F284B008C0 5861CEB5C236729AA17DC78E92FE1EF9F047B53A59F2D1D6A6734D0413D1A51F 75B03234F4775523A55978C73D5BF9031EE8BC6BF9E2637DAC07F5AAF2A6C41F 77620B272300A78E86F71F16EBCE2DBFEF4920BD3F16C282E0BA4C872E5F7E52 7ED2B663FE45D4A36A588D228D32E2861F26AA6FA8DDBC8110F4417D0DF29285 F06B57B1720D0D13828A4DD68D57BD530FEB9C3CF305594B70E4394BD60C82DE A64EC17661977B18199BA661C48860919CBEB56AB6C32848D51733F1E959EA35 DFFD823D92F11065C643AA69776F71163A60D4941B753BBB4A4C0C47BB1D965D 06C9BA1FDAE47926F37C0C5B591058F68FC1DF3933B2BE014F99A53A617A19CD 8BE011234D48CB7E14D31B02B1FC47C8BFBF04C4409D32CB454E8FA0EF9AF16B 8AFE9FDDC41F6A23D700D4AA922A0316A895D240C5595F21FEBA98FE0E74B762 77FCC80F4950A8C55B4A008FD381E9C0EDF4427CB324BE4ABFC790CEB53E8BBE AA90163A7BB19E2840FDA404E830F5478DD69B85C5E69573D8CDBBDFF41A8126 24A6AB66333C749C35BE314777CC222D54FF2C4C75717FB938724EEDDFC2EC1A 8DA77B5482E760B68F0A2D240332BD48803004BC157C6E8E192D512CE83D5572 D388BAE80AAF5E7240A73CDA7CFF7F8CDAA4ABE1D3BF6ECC3641B6BD1C2CC703 275D48D62A15E5A85F003E76D1EA7DB65E3476CCCF6B504514AEB1FF1263FDB9 81FBF1A1873FC287FC6B6DB11F0FB463637D4F3280EBD19976588F900B956FB4 36AAA8C1F040300CAB9C4F624B22C1D3D6414B7CAD36B5AEEC90105B5A5C2129 4CD540B9D0129813BE7E20870365F8C46FEC92DDB64D0A6C7C5B9867A4592B7C 124B1B47899CE2D1C03811AD1B8BA253B0D29DAF2B53E312827478DBA274010F C919D122DF24C1E372F7F3CA77A2C0EDCDB2635F4136EA0C202D4011346902E5 1524609DC031656660302CA36D376245A64135890C13A11C0085861792384787 D0831FA01C11F1E7B4429DDAA0B3A7EC1DC3CFEA24C34DA4BC993300F12A953E 80C8BDA360789FCB0F1AEEA7AAC310D0C3C56F43F7914C3B037DA02C31EB740F 2B1A696E0E5553656942BA567DC9C4D3CA06E45EA615B7B5674016DCFA07C0B4 285BFD9D551117A357F4BEFD58BCE60661187A5FF20D27D685B24BEEF563F0C2 B2CFA2565112F7F49023CDD405AF3E54FF994630BE678B0D6E1CED514FC93F7F 63710D289026CEE4B074253E7E0AB1DCCAB57DA7A1E2050D2B8D3D75F2AD7423 0B0A7081DB1FA44055620B0A2CAA54666C5EEE3C01540D96ACAAE98644E1D210 E0E020214550D723431813C031DC7DF0D177E82AE49798F8E0E5AE0BB8FF664E 4793F857BA380297AFB977065B7500E4C0AA1735AF4E15703C860A016F19E593 319D14C497F24ED8E42F3FFEBE976DF33D697656DC11A8A7C6A60219BF63F186 E0FFE55594B31E5C312DBCCA08E84E94E8BF57CD5F5B70EBE59F0D41DD3F6B05 F7635EA92FA9E082C80075A5A5F684160AADAD501BBFA7746327E3E606D1FAC8 EF7AE7C612371BB52FFF41A97A349D111E861A83C9C48B0145ABC3582FCE43C5 D121F0EB6F5D219E52E2BB660AA1DA5551D6B66A732628D640BF9D8BDE2BB3BA 046FBFE2E28DB31AEA2ED8F9405A39C16C3800E9B5611B460BE0F6716F2BF79C 902AD4FA3B6656E13E9DD7A785C17F28BD4D646D66058721610CD756E0D18D32 F09C740B6023DFAD45A718BBFB2E65544D4754A5DB23CC7988A3EF45CD3786F9 E100D9684549A16BC2DB736D43C293097E082A968C27F0C120C41A53E3464381 F7DCFA8B36344EDA85F53FF65BCDACCDE7EAA41A6D38C1F420F8F2E287AB0F98 A0DF7D8A6CF2E4C78D606569BFB7C51495493FACED57CF2D507DDD366247D807 28D73CBBDE2F4F666099411B1FD2CF7B93D0E9AA161024C58892285BCAA65E55 9FB37468777706D2C57A0DF6D520844B56D62CD10F2D7B02D17F97E4F87C16F3 9BA09013FBD7ED8C2DBBB432288E598241369B9DA6E3EE324290D73BDBFB5448 E9D7142036C0FE538F18E866A50DD23152E2C096E1045E7777888AF5CEFB83B1 C6FCA18A26E83D75AB66291A5A5A285DBB1B9525919564600D71A767BB03A8BC 7BF24CC3B318BBC0F40C79835DE626E99BB76C15719BFD5C15D967B84A6DC1B2 450D42BD399C5316396CB294D008771E563E5640AAA9635A1EF11001D0E20298 066B78B7F918E41FC48A6A6BAC8CD12D58CC2447D1BAC318E2717E7B5A94A4E6 462FE9017FBACA70F73952C2FB4B57406E692684CD10FADF049EA8173068CFA5 95F8BEBD313E01B345EA52562AE3847FFCBF9C5D99353819340952C7A4A509A4 906D09AF07C9DFC130B9A77DC8B15143C0A3A3C29782F102DDA751CB6517635B DF7F0B64A40FC47734823E0EC591BE2CD9D4E31D8C9CF9C379D3DC1471351BFC 4DCA8816F091506C72C83E3EF7691C7AC6D190F94D4D5F4E06C9F97FBAD23F44 A0686ABD8E7E89A5E1CEC0621A6BDC9E9B4BF822A31717ED7042DA6658002A4A C230A1CB709FD74E88452CFEAD667EEDB342AEE1E05A04EE9AADF6D7F2DF8616 E69B0A63BCE0108D5CCA7813A44AFC5235F345AD90B4AB83D75A33E6DDC00DA1 F0E77DF6CAA67AB8D1B1D40116BF5FC89FBD8DB8EEA1BE3954AC80BF34E63E8C 4FA62945 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMEX10 %!PS-AdobeFont-1.0: CMEX10 003.002 %%Title: CMEX10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMEX10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMEX10 known{/CMEX10 findfont dup/UniqueID known{dup /UniqueID get 5092766 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMEX10 def /FontBBox {-24 -2960 1454 772 }readonly def /UniqueID 5092766 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMEX10.) readonly def /FullName (CMEX10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /parenleftbig put dup 1 /parenrightbig put dup 12 /vextendsingle put dup 18 /parenleftbigg put dup 19 /parenrightbigg put dup 26 /braceleftbigg put dup 48 /parenlefttp put dup 49 /parenrighttp put dup 56 /bracelefttp put dup 58 /braceleftbt put dup 60 /braceleftmid put dup 64 /parenleftbt put dup 65 /parenrightbt put dup 88 /summationdisplay put dup 89 /productdisplay put dup 90 /integraldisplay put dup 113 /radicalBig put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23E7BC2A6E71BCF95FF3DA948 1A27320759222BD7BC7C1A533E90058824F06942F0234C68671083E0E4708398 D246C94F9C16DAB6563651BA33D86273FD2DB3C50C106F3CA95B1C79778D0BEB B99D9CFB38E41BDCB4261A86A23E2CDEE4837D9B6F0E85ACEAA984C344A63709 EA35B61F08821338D363D172BD185A3658F43052AE1E61D879C99DED7F6D726E FAFEBD881BDDEA91FB09DB75675FC74AA2BEA8771027C7A51BF849F8E765B870 8F7CC0871F301ADEF9B71EC3C607B2F51325AA5B3DD74A2C5426E7B329FAE84E 94A159C8C9C35E27A0FC93FB98A4D616750DAD50068A5F0EB96B8228946E5CC6 B69E93D262C92E3BC7161313156E380A2ABE27BE400A23DF95E65A4F76B3FFE4 CF3CD141B006C487EBC73A5A101466D4388FB2CF1D9439D0714720BB58537B7D B3EE1F04AE117222CA5F0E5942F7A875D55D91D63958B1A02405D9DE08109B8C 7104F2D109EF7074852DFD74CBE02E0F3704F2BACA14E05EB1D0D9021EFAC23F 76C2389F8EA237D2E2AB6AFA83A725E16AECCAF025E05F1B1B5699D761F62A46 EC6F31B0FE4769BD0D66821592ADBAEFA9EB454CF1402FE870F5F96D09980C1B 8B6D2FE88BE56032C1959E6C3DC319B6A7353F3AC629CE5BCB947B4B235426E9 4769302817AEC1ADF50E50265AB488017634AF824D44D3C8423FC7CAD97F6D6E 6B34313637687FBDE3BDF6FC951CB41277D8EF49D14767B59656D214C9724DC4 0523EF896F4E48434FCC5D8423F07194C54D48C62AC29001B10C9C8B514B24C5 CEB60FF68D36749711E108DBB52738760FCF6571D5B04E58F24CC0247834B412 D0F6F8D7F1573F23E3E399D5A3A3A37FCFFEAFA044A5694D2458EFF2BC1F7650 8FB0A27C505A20C16776EDF94BEF9DF702F3C64DBC1939BEC0399B6AB283F832 DD8FB358F701CC075C596FA7B0ED7A9304DC73274C8169337D55124CB748CE26 A635B2704D8F65E23CC0FDA3C57ED451F8FDE7B6FBFCE2746F5AEA11B065A6DC C3D200D962A034DD6757991BA62D8DC0408F49083D48799B6097B61343365A5B 30FB02E9CDFB5104FB751BE8A268EE55C1208DD8B29D5635014EDE9D0D94BB64 ED5643B3049027925BF2FD7EFCB631E01269B731AE12AA6226B2656F035C7E92 959C4A21BE40D7C138C8FF28C9FD4B768CF25F08859AE84FEE6EA18C033B3659 D9EE250BA5FF2568E8BF7684A93BED7852251D1ADE5DB815AF3AAC36D1A500C9 41D1BF3A1926828CD1F9E501ABE441A07B1B96612CF0728AD5FECF7480421F46 0B18E06D2FF1A5B1183459C59517976474698BCE18A728515CD489A83C001AFA 47BDA929F60D0FABCD8786AE16EE18615C37D18703571936A365D334BACA9BA3 08E2523132887B5EE95ABCE8581C78C3E858DBF35ADD56A1F6C2489AFA73D1B2 379C5064DAFD30FDA84581FDE268B470636EE35F21648955513714F6EAA08AF0 249C937721DB0E93D95C4DDDFB0948051953F39C6D2D811D3FFDC25F786E072B 2A8A1F4830F9CFC34666A1D3F13268980E9A26682CAB64817318A1E266F3D2D2 DE4EBB3EDAF0E7B526C838CBD7F37E74A35B1C3EB96DA4099DE689A53970D4CB 9AB355E93EB294B07DD09356C338BB4A61C147BEDC152E58DC92FA69846E4829 551A5330006793CD88523F7B3AF7B4475C531C67A4B66A603597EE72C4ADA491 BF13706F341125CABF37FADA554FDA0BA5534C7AC35F1829E250C885D9A9983C 5D1FE8CE24458A8B13E5C7EA22BF1608AFA96B83C700889A2A6C9C4052DCB892 6CAEEAA9E7D7F3E215019719B36A5DAFCCF2396FA0C04AD99A7C23772A7BAA64 D1FABE8E476EAE9FC1A3E08CD6D1DDC6E087934E676BDFD1528652B6B9A50A35 2029466364300AF4CA3C5883F6293A7104617D0858B3E43D43752F814654A938 A44C33410BA0E5EA7BF55D4F1D57E27921DB05C059DE29BAC1BFC9B607D2C5CB 1DDC47793984FBB18BD99E1DF7776B563A55E15DF024D6D8E6ADF62F16F602A6 7DDE1C68637672AA9C7A1250161502ADDDC1B4F6011A9BD5605B73AEDC37CE4E 4467C838B7692C4D541EF87DB41123F9DCCFFA971553A5D9B0E7EC539A28750C 8554383585CD8B93DF731A301D85BA9ADC95B4A3A237794C30230A82300B6756 AE5A46A090958109C5565EF60B0B16D6C0A16A56644B05D3371DABBB67ED9BB8 9BD3983575D371419C7568B2556649402AFB9843106729E4EA87B3F9038218A1 F820B098A1271E330708432567297CCDA332B555A40C62BAEB16330175D28AA6 13AE6939CEFA2334E3E890B66A73277F0B63B1FA59F856ABECC5FC0A50571F5B 0747FA554F5FC72A51E215304B2E44701A13E41D91397B204C66AAB3D101004C 7FEF2D87DA558EA057BD492CD6EF93601CB63F78426B502CDC5C8E9EF4FF3692 376601B1FAADD801602668370B5ACEFFDBACA8F8B3F4E850D07A20F6F47440FC FD39504F0FDFCA35AF2ED0DA8BAB63AD42EA8CDA912CE17F5E62192DDD912333 3E9FA0884117F07221642490044A72E359D5F25D9591A8FAD568A3DEE435C354 11995C0EFCFEA21735DF44A30F79F747510E28767A4266461D1394F81344F6DB 1FA8D0B0D9E5F52FBB663C8F1E91192E5608FFEAA178B93F8298F70510A65BEE 12ECB5D675311B5B3B19205476512D92B1D16262720484049370A76F78D9BDC3 02EB96AC1E5B3CB078D2F219988FD0F36B043ABBF347B22D36CF541A8F80F791 8E4F92D900B7E7B64DFD500882EFBBF23565FA470103B2E0D2D14E3E4D7827D1 BAA0F84713A8CDE5904FFF2794850871DEADDDC53B77A502F5CA98B0744BB656 2FC40ED2AEBCC5CACE2301E983E6C18CF16AFB9FD8CA49DE51B22F4259D43076 DDC1BD4974CDF2E733EAB6334B1D5614288CC81FDCC722CEE193635D1088FB29 F80AD5CB96394AE89D920DF8E1F271585AF019190F17DB51FEC9064B54C3A53E 3FD33C3B553FC79F743BEC9674743BF0A821051261DE4527A2BEF4A04E293E97 02B181EC5F5EED3E26060F2C9EF6852B7433CA1BC1690C30424B03C522A087EE 92016EBDAC4B787133B4A22BFEF0B6CA564C6EB910E1DBF983CB4CFC3A1F8A26 45329CED7F5A8704ACE9D4233583365A5A97342A053EF403F0567E9D0A62EBCD 84B5D7145BBB11D31046BC2CF5B450CC68B85DA0E78EF8902F8D37DAAA9D4242 455288C0D73748F9BFEB1B1769D6FB84B94993D5F7C2B9CBDF75AEF2C930F277 210B3CCB8A0299F50AFE2548A4B8DF5ABB52F098ECDD56FCB8D3A406EFD95088 92D7EC39FDC7EB1824ECA24D0CBC6EC6F4C6A7F9590D593B269D2CC0BFBD961C AA8BB4296B4E4411B54367A341A5EDA97288DAC370A015FDE6D7FB0A4CECEFBD 1A67DF3A3703E922BEF2C414FDDA42482EB35D5DBB206B44C76C412A435A0842 6845EAD204BDF87065CE2C99B05D2D4080D5D11CFC3316967472C7DA44CC1F9D 51B83B4BE9B882D6E9ECB482F9855D024ABFBA502CCD624E0F88164A6F13CED4 85F20DC01BB15C7D78B1C79FD9FF71F4B043F59DB5C297768115542BC7C8A99E ACE39A268D32122541FB441FF1364FCBA2B7627F12C49ED038BC044B6D9D533B A72D35317A5AB8D91A9AC56CA90D1DAE9F967605C63BC9F406FB3D5BAEB4B38F 4934EE3D2F5FE434B45CF5C2D0E5E417EC279DCEC4F16504EE40E837B11620B7 7526AFF23381ED3E9A92DA4DBF4EA2BE4FE444B9A74AB60EFC818E20DD8B852B DF8CB659C0A3956D0DA61F49A9DD467726E57E9B32EFF540D551A67213D40273 AEAA6E319D92B4B406377D36DAB85662C755D76ADF5795C52D54ECCF0DE81E30 B84F951233A0A400CB063911837F0AACF44AD2441A7CE08818D64705E1ACF7E0 F59AEFC5DD812981C5508385274817056B2CDCCA4C9F3103C92838917EBFEC94 21D5737AC634B23B6F7F63B166D60C6BAA8F33AF44379C5A7337E737190EB3EE 14272B905D08C01EA118964D3444A03676FF3B62E7626168FA1DC6220699780A 0BD5776DDFA26BF0BB335B3C978CDD5CF1A419D4B5C562B3974FECFCF0118199 E547EB287CD92E32E881F344420FA3CD97333BFEF5D7E1BA31FD20622E5B4F95 692DD0ACAF01D413B21C8608FA87B470191C3CC5AD333263C955B4ADF4370FCE D6667FC93495003F4B6AEE4F83603D55F19EFBF56F955FC9CC01E494804952CD D426FE706C13D41F87C5C668D8B6BE50AE0370E07F52AC0534ECAB1C19851099 FC0BB1EC2A649795A62299F73CA606EDFB1D28183DC63ADF67294553115E8C57 7CB603CC491A6065802B925E6DFBF42917EE6E44C714228AE452851D61BF70AC 844B5D800EF029357FD659B8A648445CED0ECAE1474E443124F4B3644F54C556 A330D92EABEC7F607C6B13FACF69CA928F835056BD1A8ADA20EFE6BD5CF4A1A0 8B9E415E4A5FC6F209EF05ABF2E0C55F6E3060D1C72967E1E68791499F303C8B 3960C5A1F2DF6306710DFA98C8D0815A06B5590374554DCCDBDC4C295B3BA6B8 8BE3200CD4421A521C06BE39D4CA495BC63F3F982CAE3C82AD38DCB537E617D3 34BD96EFDA7C6A0F6D97A6BC9F084645390E194E7A11399FCE4EEB9A965909BA 6EC69D34DBA081BB3F18BD1ADB1AE1B7FBF96E4C546498667690857EB6931841 46C427A5B7C7D99FF889582C4AD11A7D267B301C5A5AAD9DA99D5BFD438238DA 62DEB899FF0F7B7997F781315B2CC328BE3572A3903A33EC901AC6BCC7F152A9 8A6865C6CB17189A4EEB699006A5F9D4482D53A76E88438E444F9302C79F0DC4 B3033D29D303B38F5959F020337EE6619DC8A8C3912101B02CF8AD113BF4BC29 8C6B9D25AF6B6A787F222C05964475B49B6751E3A3A6EBBEA03677D5B136B9DC 6D9AC20193BFB0759E89831C9E2AF68BD45ECC81175DFE80DC0879069ADFA8E5 24CF3C84121CD9739A28BACB9891945FA4E72EC07136682E18FCA81938FA6A3B 8CEFBAED60121530E33C1C0E698B5923D6AFC4E907A99B1367C3D435CAEDEF5F 878237453B8DB2FE53073CF3319FD096343F42D68F097759D051AEE17E4FCFC9 86E17099799DE82A38F22D870BF7AB90890E3B5264976700BAE594C8563A218C C985D9A5A7D7BD959F7E4E66286833C86E89203ECECD6FC4C6FE1F04010218FA A5714881C4C846E85F13BD68AC250CD0E488DBF60BB10B2CD7AE2E30F9C21DFA 0E84F76B4E996AA1C5C056E64BAC85622C160B56DEFD4DEF86887C1201F7C20C 076D4A27BA69572BE9C89FF3A9D3BAA5CAE0A6F2187AD01ED497798A305E3BD8 422DBFBF45E3F4AD35240B07285128B59FA9E83D9F6A2E620CAF6DB05129D930 44CB241CFF84E776315114C3AB61FBC0A8368D9154CC5066E2B162E89DA51165 F9CC075F2524F9A8624D2B56ABE64AF93B9F0407CC770C1F2C76CCDC06345D03 7B173C2FAA201D8E1F6C0315987A7A13902F4AA5ADF081C2B0A01C77E4F7A3E7 6A4AAEDDC577E855D69D38AF6A1D271B02AB496D94D81996FB078FBED17F833D C6C0BCE141BCDE277D530951DD6574B9CB3CF0370D74211E9AC00C7CD3A67842 0B4B72ED517E4906409DEA7993D0B8E92D418139960EBC86BE63A1B1D417C451 8BA13C230DAE1EC4E466F23351D410D9FC4A7BBD477D5FA07659B71CE9921B1B 6755C67AB3D4988064004CF75948879D16174E8097C91F7544352474C2D9A1F8 A1813BC6F4BA13E952678F5707F19B4799ADB3BD186DF650821DF58CF3C78D67 84E4E1DF8DACEC50D15647C3DBBC3C4355E602D3A03171FE1CB36FEB940211EE 0A5300841DD7B7CF91C02B3FC5D89C691156BFF8A38C6C72789DF260B868AAA1 895046E405661D97FA9A0048AF114A89E3ADAEBCE541753E4FFCD902391B5372 6A97E32F0257FA9FA1DC15BD3140EC7F0CA5A68AABCEDBE73C38B35FDF195F96 0F9DB0F592C188D72D73512F4DD92D2371D1A59254BC477CA084E68184AEAB6C 266BB21DC3AAF874DE999AD2A17C79621AE322612EE4B6D5BDAC511418EDE90A AE75066AF19662C4AD855E4200A5D67BEE4ADA9A399192C74D35E59B15FB61E7 BB167282D32D538029ED22CC5C9860C1F6B7BA7F33D5CF108D4BEEFAE7B37E67 39391F9934DE17956303532ABB011540645DB8420749C9B9A019C3CE86ACD566 1EE8D8D5E0D8D0DEAB33B5413EF10D4EE650F82417002E436E0B3B628A657F84 074098C2E9F897D9AB692E0FB9F268E6728F94A79CF4D6B0A07C8DFDC1D67FD5 EDD5863EA8949D180B1596D0009D662FC429449D76BF13D83F0D0CF165982443 E9CC288CF7C5F2E17EB7F3736D1FB814196CCEAB8C833720E3733BF594E1B536 BC0063080BC751F9DA1741522B2967D07DDDA169E7D3417B4A39EFAC15EA5E8E DE3473CC9DF991FAD2A971F44B09635085DB02D692F149F144F3DCDB69B72C53 A2AF34C65DF0D5F35E82102E67B733750646EC03A4FF47138F7998607BD93AB2 B63A0B82E8E225FFAD5DC468077FBE8C8C8E5B4BB10A8FE836B07367D742BD6B D36DF5304B9DF363120504C279453452EB177FBCDAA6F6FB78A24848F4A1D94D 1E49F6C46CB36796F3F4C9739346381F28AF085C5EBDB2A02DC0570C7A21E097 77522D4947B51182431BCBF3E55CCDDE93A916AA40CEB577277FA512380816DF 9111C56F36341381D62368E70462577D0C135BB3CB4462B269AA8E0F03245BFA D01DB8E23F2DFD5DAA88FCAFDD51D48E562EC649DB1FFDA0FD8CC8C48E6A9207 260ABE35733D75630053CC74A07E5AF6FE87BD5FEA69CB6AA20122276AD92853 6B225BC9E3350D1B1362E04C7795D473F1266852B02C83D02D938C55D8F0C671 7A9205F8CD058304DFA034D99A6BC16C582F02484A089602D42DF30D7A5716C1 D42A4CE56C19E40C01DC7DED931FA13679CFD2700B3826A1E6539AAC12293DA8 664DE251C5D1761BB45FE364CE3F7F7E9B67F86EB31D9626CCACE4DCE03EF3C1 0D2FD1B12B5774510D46C5C5CBF0A34847418B9A1DF0C67789422D0EC2D49576 9DDE72D63A4A98613461A6F730A05336C691583F96C3CAD2AF7C4BFD3AEB3814 D909858B6598FE19397006C8C4D549AA1635968F47144E7861A2BCE8AB4CA7F0 4D253949AA0127559FAE3161C810A8CE22A3079602E747C9398F9C8B2A868F23 D77D7AD6B980FEB038E0557E58E1D7AE471036CBB96B83595D9C96A4895971CD C2A810651A045F876A1F5AE470BEF39F856808B1F8D736030A722E1576BDB3B4 4DF06F73D38D313C8A0D3504EFBC774750C9F6E687ABCB1927FA1BB3882AABC1 2306A030CEBB259AECAA646C6497712F6C1E9DB7E1365A60EEC5AEDD5147A77B 1E3A10D73C477876D54FEE853D953EE75F7EDFB287550B93CFA8250D1FE2FE7D D34441F1224F3DB1D355188819EBB98A94DB193B9CA23803869DD10776647BF5 5BB42031AC44A7339DC036AD0292AB9B732E6FB79BEE852A103C3788BB0F4B72 EF37BB62356F9B2DF7F5899A26F1FE0A3D6469C1034B8AB14F52555EBF6DC592 3F24D6DB395A3A182ED4B8ECEE8254661C19CC942F236CA40BAABE818EC312D8 7F5762C210FCE8A3CB9A21C69E7495DA267D5C198848DFADA31AC9F5DD453B1D 3838DCCD32AD23C7D890BC859BAC8AEB18B09AC71832190E5EDEB99DC3904AF8 BBE407F5EAC1D1B0A1D662D1A896874566CBFB46E98286E82BF892917848B9BD B70BCCC4F83DC06ADFBA741F9A9E0FDDD9189DE5C3F2A05C77BA591FED2312CD D8FBDFFB276035A428E531D41C53700C98D6923FFD65A2DA9A78A3E50FA79BC7 833A2232444D1984C6BA33B510A06972844DA0B1D64C4F19C062E78A80E6349A 2D7766E0C532F6379318EC2BA20E6D7469BE0B889C8783B227CDA5B2CF811847 7AE6316F9263121D7AC1249D368641AE9A6E739A6CDE1AA68E32994BC8AE7C28 593D698A2FF779D9FB6B7E75EFACBDD14EC74FAFDFA4320D844AECD4DEE67C96 EFBAA59E6CF4DBFEC1F12B3FB398BCE7EB7BC63A59EA23267D792AEB7A549CA7 7177404034116571733DB904DF4F58EBE22EB1D0FC9BBA2DCE2448CA78CBAB56 81FC889004DCE2229FC67AFF4DE8D0937A178C6D382F97D8B7E796BB68254FCE 9F3EB2E51016CD99383517B5CEC08F2BA1DE925D35302CD08D73C7A8448523E4 FB6152973D7F67B3916A7F1C3C1824F747F6215D9D9A22997CCD6BB2337A4C6A AD020F512478705A4249B0C9923A143EC4A40FA10B2A1FD1CCA95BB6A8B7C673 D2ABC34D5EA6B632D33F6D3D33601990970839601788C7B9956C1573809E94F3 6EA4B28FACEFCB30B479EF068A7374FF965FE9A747D2DD25267FEE32C1B96007 192D0B1B2EC742C1B1B18DEB2BA9A1B4B8D811F2C7C9F5F9AB3252BB99A24F5B 5C39F94E2851726DBBD85117B22EAC75F0C86710E093291D2A83CFE2371AF3E3 8D7D0FCCB3FF7A3903FEA79FE4365BE3E07D20454C762B829136A5A75F41B70E 2525BCCF105AF2D8B4E0590714980A52B9E3508A0C2DCF675CBCDE9DFF6CEBA8 0F5ABB31939D9E5A45888178707E6BD2DD3447C292AD937EE9B62F9AD9DED297 56466AB219A449A007E5D87C5C71DEBF8A5BD260BFF3B2DFD0B2BB59E821836C 3F4000BA9ED8C4AAB8BEA07DA1EB6DFE97E8C20DB787083633A04E825F762FF5 E78F5A87FEBA30C9F63A779229742D6835F6EB51AB00D58B2BF5DA8A566AA7CD B19024FAA0F43AC1C9DDF34FF7FD64D296668BE0AB07943FD227DEEFD0914219 738CCDF2AC49C4C74898A2E53515C6642EC26E87C627E72541E8E158F68A780D 95FB8BF85E8F749A238FEF9DF062340BD4DBFF9A91207F6AFE540CE16CF8B37A 324996876ADFCF16A680F96AF0B1F046138F543E0F912E334E22FB81895F0C57 22664E92338FE0EA5971F7D52A6C7B03E46266D658F6094400960E88141F17EB B80801E4EDAD1A23106653E6D680B364C8486C76B8B7FF025814BD3DD5212DBB F1C621E05E2E44F6B08B680D9C03B64DAA8ACA84F01EFD81A7ABEA76E47A6DF7 6FDA1F815684667DE1180588B9B1360030A758FEC4FCF73C68FC488040A43DCC 392D25B789D6FC1F1A715B84850528948F4AB42FE1C592949896FD4B9F358E80 56B36338AFC0E258DA9B70652F22CCC80C62C3B148CE30C614B60FE9DB2CF8C5 A34D7ADAFF78097E9CAFFAB60A95AD915F7C23373E4D1A3FD3B97C95F379CB0A 857AE3A36CBA0535678C49DAACC977F9C510B648985971C7E6847E7C2ECC97E6 76CE4CCCA2D2B0E375979ABD15ED728051B45B2861B917227DC4A69380804EC6 CF114E5E2D834C0B44725620D7EB457132D26FA531B44BF80148C835D03F143E 5CA67ADCD967D82180ED136D84AA511212E88D82549F2DD42C68E8727D63443F 7414F45CDEBBD4BD8666477539A1BAF4680DBE0435331E1BC167B542B23B148D F14731493F24572343A3DA4329E3B341A7777000710F56B18D60C8FD2D9FEB0E 5393EDC45068D3C09A4D3059D559CD19CBE265D73FC7F1761B4841BF30B87432 03945233EA453656A8BED8BC74B0AA8951B3A1E776E3B8116F67854C2C2C8E05 48BC480C5F0AFAB2498FE1D76A3558DC33E2948707FC0FD765A53B11C334439A 47EFD5A68D7A1F7CCD1C43C49617EC2FFD56DFB27EFE25A1B28E65172D4F64D7 52925863D542DAE64D9204CC30E6EDF0679FAE077BDE86C493793C672B0A37FF 8A031E1BB21D0E1DB40EC799FD22B6D4ACBE418EF52DA379024CBF61774DDBC1 6BD5A5B957AF221F5C838DFC6A6E664991EC5D3CD241A643168D7B755D7246AD 2FE3A0041B8F4594DD6F7264A785C2A6926C016CE49F8826FE41CEC8EF7A62E9 253218ED42182C4D8B05B1C8ED2227A729A5161E414CB9DECD58EBD9102D5F0A 25DDEF621291D2F81DFC2C62B4F1254790F41FAD422F4DA45520A8F7BD3CE465 82C49E9BB3768A8B5BEB1861F9489ACF6BEECA9E58D496B2E9B28F4321E5F421 1E3EB01320E4425AA96D9FD297ECAC81FA0F0100A7DB61074D729421FDA14CE9 F65AB982B6F47279E445EFD0B83EAA4B5C668A4FCCBDAA46AB25C2F5FF459272 AE6A0ABD9138EAE57440C505C324413CC9AA7EA263F7C09055FEF4BB5693E99B 21EE60A0DF82D224E58E63434CD18D7C0503DF129C6EBA49E4F225FC7D89AED0 F1A63DCC56D31112C3A984555ADC3B497F3570A87974000AA271851268608B6D 63E44BB9509A963367AD95B3E8C4B248FE95D68D6CAA105B0C20794F6F004295 3216C1208CBDF0F6FEFB1A03D99E9A09F4F2D67B51BED0D1C40839BA16BDC8CE E30744130B58D10A29AB603E7EB1A9629E84E831A50EF04FD0331C2A30827A27 8970BDF1CD9C8C6C4F873F690CCFF7A05FDD4D8E8053BF9AA4752AD73C0EF7EF 15444E7B9AAC54131EB496D861ECA70A3CC7B2D4AE6783EF4F7B1ECBA65A0AC0 01FD039FBDE98D86E10DAF9D01DDA00AC4218EF04F4E2B01750AD448731F8137 E4839DC05982B691AC982C92E6E01576BB0577559524FAD1D3080000F14FC653 719665AC9FC8B7274FB76F10C8F1555E7C650610854067A32295AE4299E30A2D 9A3098A30E88D61DBA7DE6E8699B684A622FBDAA51601EBCF1987BD0BFDE9E78 3E7A277F46D23516E7C40DC00963D55262B8A34C4097C77EDB31C62A96B4EF65 0078AA51F5CCB8F0619F4EFE557F391F1A0683FD820545C7CD933C492A7C54E8 ADB3B0FE91106D09465ED0F4C501256B03E4DEFB70112B2FA8DC4CF7B916BE9C 27A93C4803506DB223B657088FB6BDE9391E282368330CAD7FDCB6F74C0832E9 5764FC1A554D2DB875D64A95D9D356B74B07BF48BF03C53F7629E0669D267943 13358175F06B53A863B525451387D19B36DCA1699A6DC05D0CAD4B9A0273383D 10CCED4A74C34C4E496F9D49A57C11216C051504ADACD9B2E8FD13A7C260F0DD 8669F2E80332A10912E41B77C2E6E75DA7BAC2D0ED529916BCF8E345F73ABF52 36A1B6AFB8BE5B8DDDD3990803C681C01C37CB44E623E2360C5A7059CFB9919A E68BFBF235A21BBF6C5D52FC18991FA0090ED4685EAF8BD59D57833177245F26 870493C594F45D2C6268CE7558761876EC575B2855A463481A6AB3C65D75A2BE D0E1D73694DED8FFFF6C6A0F3DE2C8AF48DD25C3FDA6A4314AEA9464B150B940 EB62A15F4ED537F92153D7A6677E0A0E36B8D0289068106DDAABD30A82212BB7 BBF1691E667A6845E4DFB98AB5A9D2559C85177C3178BE96469F1BC45B2B017A 6A96E7D1EDF09F3492E9A7C13C49D7556631F410CCED37A46F7019B3DC8A2CF6 5413E99CA12EFD409B77F7D29AED0AF8763A1A96B63B9A7FDBD78328B038B1EB 8054F88D0DAEBEE0BF6B0A16B739553F9F2B3C9B0DE86EABBD15CC74D3EFDB4A 83C1223EA5D9B8B24ABD031DF21E4FF2F1D67961933269CBCF72CF5B1518572E 9C6BD9081822A63D2EB222B3B830EFCD73F58D3809F6801894040EB55A5015AD 87ED6B 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMSY8 %!PS-AdobeFont-1.0: CMSY8 003.002 %%Title: CMSY8 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSY8. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSY8 known{/CMSY8 findfont dup/UniqueID known{dup /UniqueID get 5096649 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSY8 def /FontBBox {-30 -955 1185 779 }readonly def /UniqueID 5096649 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSY8.) readonly def /FullName (CMSY8) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /minus put dup 2 /multiply put dup 3 /asteriskmath put dup 20 /lessequal put dup 48 /prime put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CD06DFE1BE899059C588357426D7A0 7B684C079A47D271426064AD18CB9750D8A986D1D67C1B2AEEF8CE785CC19C81 DE96489F740045C5E342F02DA1C9F9F3C167651E646F1A67CF379789E311EF91 511D0F605B045B279357D6FC8537C233E7AEE6A4FDBE73E75A39EB206D20A6F6 1021961B748D419EBEEB028B592124E174CA595C108E12725B9875544955CFFD 028B698EF742BC8C19F979E35B8E99CADDDDC89CC6C59733F2A24BC3AF36AD86 1319147A4A219ECB92D0D9F6228B51A97C29547000FCC8A4D80B73E7B6CB7548 0E1D77FFC695988391DC44AEED8CC947B3D7E198B9620E2238DB3A2819182F03 14498B8CDFBA48926DA721920B221FB33BC21A8456AF10891403501D0F6415F0 7E041AFFE109F640E54FC1A365674711EFF94E752652A4C8DA62CDB1149DB899 2C4A4BD77A06E81E93C5698C05DD02F74A0756082738BDB53003B483752AE498 DD718AEA8F3FB5A6B7E2D2AE8F309065F3D556F9A34AB90C88833A54295E0982 209C466A301BA3372AABEE20D862C6DC6B6FAC1463C8CBA8AD766ED1B4C9D712 2BECB4E6ABF558D8AB5281C35726BB8D046982C0DDAE17BFFC9394125E4E84C0 B283977D31460B8EED4346CCB09F64DA0ACB640C6DBF32F2DC30D54668C1CC12 24C7280593088E9958C047125C323E9C842801346A9CE5F50413D69F6DE99471 65D2E387765E92EA4C43F17B467DF6E266D92551009C0E52E7219AE9F5E2E8D2 88852086FF3600BFB50AF3EAF8C009D8D5F084B510F792385F328F7EFA8C38AD CDAB2EEDFBC6AA45F6DD7364C2F02DD2BE6C79C8361E83D4267CEC2407689864 B57B5D967FC80AB3BE8CA43955FB0FD3081D438437559AD24A7ADD484C1E4A77 B00BDCB0D1B121FEE983412E1EA5489BDCE5DCB4A7310135956B230C0DE7BBED 516369A92BC41FAC8D73490984942D930DC193BF0C774C1AEF627B969EE4B001 11381AC57815D7581E2372A1DB740B09F4A7FB4318B765DA4E7B44E8805CEF85 44EC3B10613FE7B397BF91B69A5CB2E9086D1E7A1FAE0A9ABF2A237A2D29ABFF E392A18AEACBF28274E775D3FBAED4F46B982B9DA4602E24094EDCCBC9D6FC0F 67C60376879245606C0B9C9A678E8917516BE1CF097B1C75C9F0DDAD6899F08F 81FB7A198D45FE060CD2A550D9B8D58B882B969D7BC3EC018A1FE92BDB262835 26516FF97AC387EA525FF987E5EB1EAAE4EA5866C9CC043D183763C530F7D7A1 2070E4044507C4E5611FCC117FBE4396E0B24F672CD53D5FDFA56D561FB86D40 90A52A7C7F29A119DFFB694A8C445367746A49CA5FA83163BE448EB19625DF26 609A8C8672631A10411036CAA3D6C2F822A4B2505DCBE8E1CE6916AE515E78CE E8C894B134BF811671D17C19248853131DFFAEDB24B15FF17EAC194662460642 48D23515AD434C68DF56753806FE96DB3A29F9D4980E0B6EAED7383F9FAD2584 8F85679D6D1933677ADF5D31FE6E43DABF137E834A1DEA632D36EA5728625159 8F33348893C9D1C510501628E4A9A80587DF6E179FAF68B158406A3EBCD726E2 AC17F2DF8B3607072824D2E5A6479F7BADE32E603E54E7A83BB2DFDEDB0D80CD 1F1BDD4F6C9025CC3A8A3685DF10A8183FA80CE0F0FE2BFF2500F76B1037AE41 56D2D7FB468C3CA7549E3599A2AACF66302572F1B35BC8EF7C23F6FC4B720228 1D673D903111CE378AAE83480B4DEB7EA84BB35F4F7BE997DD4FFF5A9B5E7650 3C7365BA0965B242DC369D03215651184024A08EC284F1798B0726152884B4D8 46411B3BC8F5CB53A70AD53BD7B1AF23528849B56CF2F75609FE715878CF6448 38579380688B47AE3D374B0DB6ECA5B8284414090123D47F3F9DF389E023F431 6B4C0DDEE4190DEEF4CA772742012754DA9A44A8F550FADA6D8FB0C512D5BA2C BB7DF71B1DA41FB6936BA71B710CC6A80751E43436F0F5888F51AB370DD4A088 40F402661E08732C960705C7E0D29B8DA1A8A3E119409E51EE575E9655F47568 023977917C8EC610BEBDB9C1F4EBC192084D63EAA00EC87B53E86620BB5AE51A 579B0F8E1972CE1DA02832FC75184F45409DD9D413402C2FA27BCB0AE6DB4CE1 5AFB114E23232DE07C4674969A1FC94D152C6D3A611F029ACF4D949A2C0755D0 31C7DACDBB4DFCFAF7E87295CCF5D4AE28D87ABC3533D87EEF1507B9FF9063F7 F007DF03734A20BC3A198B049000C92D2849C62DDAA719FC28EB372793E20128 D786670E08948808BA45C4F6AA0DD8A8357CCC47228A760C5C7864853BD9C9A4 285E446CB72C5C9D3F03FAB000810DC5674061FA116153040743E846506CFA67 FA8770E785D7DBC7293F37389A0859CC22275B23C44B57B92A033A7BD194340A D6BAC6E103402F8396A5394C617CB2A27D9500921D5DA06115EC81715EA8E360 4A95DCE8689CBE268B8E6C8B806CFB0ECBF634250243C9E1AFFACAD65311FA4C 1DB0988203537E5EF12B86FB454D06CF05E4F4FC4143D62920E99304245B6ABC 82E21192BE94F5E980DB21E07FEDF0EB0CAF4ABDFC20EF08A2A44A7940E2862E 08FABA516152DBA899D6CA561EB08C7C8298DD511084E5230CEBF28AB1D84C85 B5BAF4616C28FE05AFA4BABB3BA03F8CEEF3F3EB0D3034BD3D8D06629B8E9EBD 72484057E71C9EB4DFC7C2CE7749271AC926C2419D618FB0B60FD6F81F0F2C04 E529CC74DCC9E4AF32D935D7CA65FBD0842A7BAF162D08F782E65DF3AD9EFE69 198AFA9208B22BC21BC4ECABB9BFFBA84C8421B74748E1EAAACEB59E566838F2 C439579D6C75074F94493F7D5C8942D881AAE6302C37A61003AF77684EE99AD7 EB5EEEF050C52E75E4E842F8174470FA60CB213BB6F257EEB26CC55D1202931B B981DE2535A87CF37BFF912220C117EE166CCAE58BBF624170FFBC0716726B36 304D698F2CA131675F7B1199E6581B8C812C4FAF75814282477BE2B7EBCBA7C2 FA6356B2876F89698C6C2493989E9EB252DE03BB374622A7C88B8EE9FEB4851E 02F85CF70CDCA7BED5EC94E81170FB557C3BFC6F32CD70B506E56A2CC5451592 130C6F570C679577C44D60A811DCEFB3535D855259B1021AC168DB76DD38B459 F1813E3DB20AD9275D58880CE94058490ABBBB0D8DD16D4A65F680B30057F15D 07FF54D779CC978E90A850A2D8D79961EE276BB26B594C16F56557435671A3D8 ADD3DD0BC4BC73B0652B9DA8462FE614A14A11ADB2214EC4910823FB4CEC8938 24354C5C62547EE5710FB5ECD93AA45DEA7411F6CA8D5B5FA222685E622AD73C 1BD5DFD1C8F253352D6C7D14FF2FACF07CA5EB11392C6A33E9CABFD99F743BED 55E8DEF49E07B9444171D1780C698E5B65B540F41F845AC188DC7C0C8B5BA5F3 546BEAAA4F29F0DF30D5AC12A60862742623100074457BF2D820DCAAB340C1DF 22FF26992DC02F276B40A7C528C84B72CD189A4088C90070486C49A1014FDDA3 5093FC12DAF309FBC063653E6A33E14EB51B081126AB5BCB8016E975060B796D 6CBFDFE6CB9E191F12E309254BDD6660E3227012F5DADE246B02B6D8127F1EE2 248F48DC5ABBD229748444420C868450602120664984FE3A8B2373232CE5CA15 E67172CAF7EA99F73A66AE33B1EDE5E8351DB02497CE3338930147873D4E46B5 E918F5592A21789FA9F46232BE693DFC33240E2649D6AC1940B101D806089436 F0CE230BF6D0363510378822891DBD3EEF3365430E74FB6C994BB40C8EEDA593 CEDAFEBC3B87C7C04F52FBD7D557A77B44855CDBEC8A8D26F44D66446B5662AD 15B6B79D13BD262D79BF51C09F8F690A61C7F11EC2E05F6BEDA273648E9E1EBC 3D5F1D6ED486797F753064ADDA8494405556D43D395B1487EDE877CCC1EAE954 1AEE2513DDA94897B733609E8179DFE1975590568202EF20D58A89B34874CC3A A5579473AC65E0EE61545AEF578ADE10BE3FB3E2CDC96678F613E4DEF7BC1B38 8A551C93438A0540E292F65F1FA73D9AB30A5F545284085E4930A570C1807995 7108AA8194607304488616DD4AB189F8EDC5F4507AEFD7847817A8ECFFDD2DD5 DE95E04EAF2774F8AF661827229F01E769A32734097C457EB6FF056D90C46C5E 9F936AA6BF2EE8244BBEDB8862E56423F5845BB10C8809730B011D650EA18945 83C320A3F4ED095A5EF91929FC877ECC28A1C2CE74A53245E629BF46C6534983 307B1C94EB35CECDEE86551F0C308F66690E591C5D9D8FE14F534CF3F5DB6D32 39D7C799F392C4E65759B7BF61F4D8312E3B26C31466206A367A0DD7A90D25E2 805D36ED5CE0A4BEBCAC0A348FADD2D2AAD670E28BE6E33F627B4A9F35078B1D 6688084C4C18840673EF9B3526172EE14EF64E97C8B006C27DF6EF73BA6E6459 3608F10EB1EC4B824DD5360B42AFF2084788B165747AABFB2C9C0EBBA9C6246C 08F28143809315D6268E386F09BBAC54C34213438B56C386B34AA457D149CC39 A3C163F56E3C2E637C63A79CF7F2DE969EF3AAFF75F3F20499A9ACA61279D545 866FFE57D25998244F448AAB042B141952BD653007A889B1A716A4042CBBB827 C1ED5E3C616C22D5FCB39D3B3539F9B71D50D25ECD2E5D953C7A5194C867DDB1 75CE10B2C3A20E8CDE15AAE9F549D034838DC066CA649C31EE365D46450AF18B 893748D055DD88C72391FD92DDF0AA1A1316051BC756F87BC9A425019B2FA7BD CA9F35E89E2229B3021DD24C9DF0DC3217F44DCF510116DDC9E92EFDA3E0A892 491C8961CA484BA29B8CACD2FED2E246FA7414F892AF7B9F08698FDEC82D2E4D 8C6ED1FD9E0BA2645663E7E97B0F780033D025F2EF3B364574C03F04FFC4E09A 3D4182BBFCCCD8CA54A92434E2208803ED36F931D31C7498B7FCEE4B78AECF11 B27123A10F031F9CBA36066680E4748E346D18FD0EFA395D1A9227530618ADD9 64D96C50A0172F712CB427E8F7170F8A1691FB95B247A271499F0E63676BD64B 167438333A3BD9CD9641AC637E0ADB17F1E394DF34AF5A2BD02030DD087BBA02 E1209338B74075744A9A9966039AB6D223F385E06FF359257913E6C01BF32F5B A3640C7CA41A6C51F296E50DC1CD1D68491CE5D75E0ABDD4C5C4A97C8BE2BA35 D91AF9F8F38E7AB8C1778B06A212D0416E6137087329AAA2679C51D014CC4DEF 0F1543E2FD97621E552E19B29AA1368CB5046C188BA59B1E1875B25FB269DD2D C0678A42CD310702465694F2BF302AEBC43F714F7C657505132DDA71CD23D17D 628BF3400EB5DDFCE2850F31B40C5913394649AA4241CF646F3939916C2077AD C11F8C3E478586AA7931E327333FCD8A2EB31DF4B47AA2F31B999556602DD998 5848143C0CBD0B5187DF08E675550F2384D48C2954EA7D16AD2B94DF97C194D2 302CC47BF968CB1F6C9641A87525D5C6972ACCA1D4A4B4DA8EC54BEA6E7312B3 2737754A9FCBED3BA5F8220B751506BB0A5BB5CF706AFCC04BFD713A3BE3C842 9FFDBAA0CA5691D0FCE76134841A169970903843163DE68FF09649E99945DB64 491FD6D8B2DF237DBAF550D1B74263B3BF1EF6211F40D4DF2DEC46E4DE557088 5D458A7CDC6F34B8C3F5C76582C8B7D24A333AAE0B43CA67436F8ECAD7C50B12 35BAAD521033D8024E4DFCF01580AEC63BD5F8ADB778F822AC4FF0DA608EB7CC 1A52A51B9F38FFADC0D2F4D8394C5D598123B483AE5AC1215F24F2492EBAA134 3C58AD4E3B493AABDF753EBF1F04058C6981C353D6788C2D3294165B667D3765 7883A8493F5D772F789F73979B254BB9397FDE4F8B76CA6FFF312F4B012949F4 3EDCF1AC60FFF2681549DFF430B498405E79CB407DADFCEDCAB1E2FAD3B0F4C7 B575A33EAFF9F67D37F50BB06D06834EA683862991C5BE340D4A7F8D131E733D 289F72977870F9958102F5D835739F0F5A642E7194E8AF7FDA2937E5C0712CE4 EE15CB475725030CE0F238C32775D3EC95CE3D0886046E3EEAE322F59D423E83 DE88DDAB5CE0F70537487EBA5A16A9306BA7DDCA14A85A9F83B3BC3600DC9421 BDADA2704A5A24F7174A3A486ACE68739EC5960038CB44D969A594E97AE1F42C 42C1B7E3A456B3CDFC7683537B337AA8777F18CA45B22C8BEB18877DC624496B 9E8EF9F386B7FE4D94ABD5CE3B5786E76FE04A35909C472C04654A4405932EE6 A4A3E0F6DB088603FDD82F0EFCB85A962002A662D1AD0647A2F484B59075A1FA 9F4327D542ED7962620B998ECC3A95CE736089593461CED9B5AAAB05C2DA3820 5AF29B32904E1EEC357C8E282189C6D8F562DB11291091E6897E24CD8F8E2A34 67F35D261E01336152E69831B0CC6B03FF1AC7EA22B745F513A25FE10F70E74A 3FD71FE1EC9999BEDE7CFA6A97EA2DF621711BE950FF8960965685BAAEA71FA6 36F165573A0A6A92DAEE41A9B0C97BF03419FF6BA1F44524D00FD671EACC4233 9A857680DFD27B9F1E7A760058C8277B3761DB9969241D1824A7DADF70BBFC38 89C6DB9091E3BFCB36851CB9662B365A4B7384BDBA1D385902D1E5DABA72A159 63790096B927EA49299AE03E41C7F593F3B995D1155E91C62D5F68845ED3C797 7798B56858F96C2FE2E37D812873B7801767082A6D6B60602CEB94B7F6D7A142 72814734DC584A18D1FFEA7333D4C7E2DFE5B91E9AD92EB52533CA52FA888980 C79FEEDF0FAFB3B20B497F9AB668BDAFA364B405916526D5C48E57DC30BC35B9 BF684FDFAD199D9A28541327F3899AD505FBBBBB22F419E22E0149EE5FDD2B43 AF442E2724EC16934C307FA731F90AD1C76B74569B78CDEA7C19808233C6364B D049F3F50A68D3EC5F29F2B96BC58C44AF90FE13F244B7129F14B5DAC3F3F310 B330E67CA4EB76F895DAC8025F11EC7630EEB4826B5721348FA38F28B2AEEB1C 5F7CA413C486C94B1DD96988F07F7A08D3635E28624878E55D4FFBEB5E183CB5 93014D8A272EBCF3A09133603CFFEF43A6FF059BCE525706D3795884FB495748 C8AFB50DB464459A5C36D7CD087631BC09C693A11BDF1C6011D9864FE66EE8C0 4824A42E97D16E017C0BB73732D4537E2A5BB283B3568950E5681364DBC1D6DA 058A122862A44ED85029A7B39F2FA7C362D859D0B429E056891339626AE6091D 74F6110CA32F8F3E9507216997E6AD1A2F1FFBE8B407C9880DE230E234F6FD41 A291851178BEAE5DB9DEB22E3443807E2BCEF12A4AE8C490AA9E3D2918329F47 42314CD258A0760DE5FDAC4AF7209CEB530B8508B278952A3638CA8491C3B493 516F461610DBAF32E923ACB834B15E2D169A10F2609EC0ACDF7BDBC777DD2C19 2DB330FD557D3B06B78824D6AB237D8F2D57A7ED35F02CFA9290ED6893B41657 A2485524A3F1642FF5808FDB77015D9467EDAC4A6BBE8A175833B1225A5554F7 2C60207F7A2632A4023255E8EF1F38C1B8216C9B03319B60BEC9799E5378683F 46E698FA75F2DFD40F17C603F3335F1EC70DBA1449C7A33EDDD46CC3DE4A6557 EE67BF349AA8680FDBF415DC527129288B5879500180F75DF80394EC7CF11BC8 9EE9A4ABD64DE3076A2963F83FA333F19FF74F79ECF36A87A31D6F125FD2415B 3F6A6FC33C179F54CA164835F3C3DB62AF444BDF27AFF23098C7212477F688B8 6F48D9AD080D544D57FEDD33D3D9AED9346CBB644C97C951D4AEEB2BF6F0CB18 E2517BA7ADCFD00FE44E290E731D53E5C0D762FCBA08004562DCE6A5EF2FBB74 B3053CBED3B6E896B1C3356DD9E8FCB69691AAF6BEBA0424D62B9F266D560B40 89E20A9F35AD4A7F65A7183761ABBEE0F7EF26ED3565A25516A3A5A57143979A 1EEED8CD52A69E4E1AE4795F3EE0CA21B9F4D166783A9AF54B08B6C56703932A 310197E328C6E6A6BADAA11D66A952964F31FD690082FA02D1E2A4512A9F2742 33B203FB770A3A1C7490ED630D0FAEB3066429D0237E18818EC368D0DA72EEA7 5DF428ADB692796415085A0C3C917A5117A9461C92DE712D74BE41FF43D070A7 3EAF55A3BE7042F6E114D3DE6ECD95B4BE8C22431094706AC66B30445FFF661B CCCA755EDEE4922E00C3EE943A7DE7A65E32BFC9A596472C721DC08E941B1E7F 573D8C0964194509C21E85600DCB77B817793536F67C1588EDD14D6BCBAF4D8D 22068B21474C71933C90CF92BA6C5ABAB1864D85AAED9FF4C1D98BA42AA91660 B2AE39F7BAA5A9077FB46001A00C49620DA84A7D1D2EE42BC5614F0744B3D75B E4582B4C98B73630B967E4148136D99ADE052D5A2E577BB9BC650DC773CF31C2 CDF058FE624ED84BCEA273F000F765D1CB762C01F0925CC89920648572F1005C 5B8BBDDB702DCA151C8064D9033EA065C44F4DA84DF20998014260A53269FBE3 8672FC59BF4678D08E283F8C74C0035ADA5B2C9B9A65829C56DECD4C0B02C46C 0AE33417BBF49B2B4F773628A14FC96EBFD4B96AD916EFD2D13C0F9687044ADC 59A243F951DB26086F158D8163A2BBF04AFE4627E035F74E728529A74230A3D9 2F1139F5EFABE1C7806421B254B7ECB487889AEEB5DB5DAF33A112FC84DD8D86 D77F26EC6E3C902DFEA667D2724A27023DF5778BC4CA4E0FCF0C3361E95CA5FC 03C60CCAD4F5FA1DB984CA154AF22EA82AC436A54CF5348A699E3A371B46330B 9F9D22F16E4018B6BBE870674BA307BD4AEA4610C53D663B9ECF6DEF3A81952E 548AA838E035464809126937CED266BA46102C8A48BC13FE3ABFAEB39C0DC012 54E3F2F1B90ED64DF30CE7836142BF6670F9F5D76D0CA6788456A42D13B97A87 7F174060743F33757D996860CA2BB932D52F94F75697000A6F82EED9E808D0C5 8D7DF0FCCE61CA9414E2DA70871AD842EED44DA582420BA705E34D0F0A7872CE 9FE24A9761A3833636F8B33B0C6637CE3CE3B0E76C24CE7293D6148710FFC8D9 932DA549D602EA1147933F499C357FF36EED2393B9AC7C92DEC6F782913337FF E1F6F4BC45873BE9C6C1D5428C4B3A98A21183A320D73815097B428B309E718A F92539F58CD00F8A8087A6E7791A2B87AD0F4E6D34DB3FF306AD3861753B0185 20B3A81F2AEDE94B879B3289BDCD4E7C8DFB2EEFB0105EC9B9196713FF246937 1022D95945C55399B4FEE86CC4C67990F4710EEC119EDADFB079638C21C06B0F 5D729ABA913D99AF92391BF8B26BE94A4085CC0045EC78016C8319F29F90808D 4AA1FBAF363B89706B1D0BE7D17DDDEDCF834DDEF414BAA1F19561EED2D19AD4 F266D781BD4B66FA745B07EBC3F311B9F14A37B16B0670C34C08C6E96CB7353E A5FCDE6BA54DBA60CC99017AB64C72F08BDA066F8765E34D45209E5F2946DEB4 403716DFC9D425274FBBE9FA75D9EA904AEFF7A0B000969A21EA5C3464B0245E A081FAFC3DFBACB4972F48FBB89310A265E5C1C3A22C992D2375443F59A569F6 B3C773FFFE1792DF36BB0AE98D27A65AF5104118ACCF0D3A054D36EF92AE551E 79F718ED5FA52FE440D1BA995B6DB9941E9257D9BEE80A8BBEDAF6F96FF540D9 6C9845BC21AA2922761A4421C39CACCF0C5DEF22AC6CED9B1EEA7598F397AA23 D72302930D2F1DD7A01052EE3C16BC38EE5DB9FD8866D7B1E8797C36CA147EC5 5C4F0E528BDFC6 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMMIB10 %!PS-AdobeFont-1.0: CMMIB10 003.002 %%Title: CMMIB10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMMIB10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMIB10 known{/CMMIB10 findfont dup/UniqueID known{dup /UniqueID get 5087392 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMIB10 def /FontBBox {-15 -250 1216 750 }readonly def /UniqueID 5087392 def /PaintType 0 def /FontInfo 8 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMMIB10.) readonly def /FullName (CMMIB10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Bold) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 60 /less put dup 62 /greater put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE32340DC6F28AF40857E4451976E7 5182433CF9F333A38BD841C0D4E68BF9E012EB32A8FFB76B5816306B5EDF7C99 8B3A16D9B4BC056662E32C7CD0123DFAEB734C7532E64BBFBF5A60336E646716 EFB852C877F440D329172C71F1E5D59CE9473C26B8AEF7AD68EF0727B6EC2E0C 02CE8D8B07183838330C0284BD419CBDAE42B141D3D4BE492473F240CEED931D 46E9F999C5CB3235E2C6DAAA2C0169E1991BEAEA0D704BF49CEA3E98E8C2361A 4B60D020D325E4C2450F3BCF59223103D20DB6943569C4269F4A3F32986A7D15 50483BA7C04CAE03D8C22F6F9A1827004DE75B70455207585BCDA37DB2ECD162 363518DA08026AD9B621422303A6D262158CFFCC48946A47FE42911F1A43CF10 7CE85E61151664036FCF591A1CFF0E7AAF263909A6A4A50DF0CDB60C91A75327 8C011FC63A462B0598140B4357EAEA08DC2C5445E1F8C2C913B721D5A1B67941 77BB66689F330A22D1DE5D86B2C4712DE9EEB66EF95D1E68BE947672CBEA966B 3E26531084152B1412F48697A965C85B0338CAD1EE054DD4445A9726A72E959A B5B74F0E0A5A8F630116FB8342254BC455EC3667E184A9954E0B76EF54015BDF F3DB7D1FAF44EEEF38E5F07E9589B85ADCB9B529CE9C889CB4C43D1C7F5C676C DFE91F37CD6CD338DF774DBBAB9A1493C7384ECD4B588506F23A024487CE4903 0B8C9D1483536BF7CBC05E9326211B9211F11FC8B2B098A0C5F89F19106978D5 84C9134F45A542D914AE56D73299B3FDC93C2E8F4D271B54F7EC0FB05C1DA397 E9A2036EA69C903EB95485765BB05BBD2E021ADD7B5D83555E490EAA81157819 A2AE883E39B4254EAA5C4FF60087C4875CDB9E4A85A54955EEF5DD5B15F8C970 8E22FDBBE98CCD8E49C27F55616F3588E6699202AE58B0D9A3E398A350D90CA8 D3BF920E504EFAF93B5CCBB336B072F2B3EFEA907599A95774F4870B6656257A 29ED37ABFBFDAA41ED08161F473C20CADE82D6F7531110CE680EB172A2024F8D 6F02DDD49350CB0BCC97C657BEC9A7A92A7C1E623E8B0E409A74B01DD0A470DC 94ED4CA0B6BD786EE287B753ACB1C10BD826A84D8FF92424FF1A2418A6EF9BF8 0B3D0F708E2F52E4557F497E749CA9F2E513F33D6D489612C68B68CDBBB4CE24 E53AC2AB756F64B838CD2B0D9402620B0903B8A357D8020DA8B4DEF15AA06A1D D4D78057167B901643CFC357D7283A850C139E1BBF6E4079F375EAF63C7C4F7B F630FB23A70A90178560B1A2C7F64A2B8796D60826F3B10BEFF755CB59DC26AB FE5E0630FA1E16D083C8A5ADE0345F783D771AFE185F3DB251C33AD86127C0CC 548400D92F559737FD421E6D1A807AF696A22C1779AB236BDD37F7BC467570BD 4C1981D141680DC78513430DE03DCA87134EE46E90471F4DDFB4D5AF445433D9 FF6F9700904F274A610E5978C0C14110C00C0D49891AB4BC8690BC93418E9EF6 DF7A3BA8AF0BD66C17DA2694FF55528771B28262917CFFE822E973DA4B55AFC4 AE9F6C28994E25F88612E804C918278040097C028E15C6B7FB53332908842185 10217D7AF376DC438FE712CDE9C50040E0B79F4BD67DEA70C6C2FD34FDA699EB 0F6047A613FC8485CFAEC294FAA0214F0639603A00F19A5D92A3BE89E5FEFFDF CBE800B960AFAC6EF1B85F4B74D8830266D0FDF78081F6DF0F596C90E1954C09 631D98F44A8F0C2394AEDF98EF8BB4D21AA7905B3703D76FC4E104389E61377F 92CA0B2A9CABDAF99CD194E473FA0104ABA283C76C20F003C604199E6D4D2A5F C72FC32D84A1F4EAEE4E20660BA4C14C244AB65F000B6D896054B2B52F19F708 CB80929D9F98AEDC99365FABB6FC42D9337653ED45D2A2B802017BDFB8D28F62 745B5D74F4411CFDA724189030854D6D578DCADFB37B73AE15E80EE20EFBBFD7 959AEA06EE4A93DCE0D30B894D811EA3033FE26358EDEB614DA60CA8F9DE9855 F26F1B7FE1EC8DF0E6983ADDE63E3DC55C1088EA3091C21FBEA4C39E59BBF3C2 7C4EE5AE85C89FAECDBE6BED7B789D390EF78674F41A8104BC970E81FA9CCB45 DF6B8C2C2DBE4DACD0FD66877529BADA909675A761460C3F6B6F122ABF3C4F3C C2B74804989359C5C127B69CE1D89AF4A74BE3B8499014942319D03AA740596D 863F0ECEFB11825FACEACB3E6971762E5BD8CB9D0055C620F4E276C3339B31C1 C321D785E1FD9D7AE53725AAEF68C258D2AB7F8DA4F9B95DD5CE20C35F3E9908 964C6CEC56D0AB5B34FE2AFE412455C971881B144FD7D979BB6C8B721A6499EE D39109FDC63E5DDE7CAF6559CEDD080A1624690BB6565FB0828D5025D153145A E8885E5D37301BC1ECF95161DD88ED99FCD11B77BBAD6BF1E1D1BB265817AD2F 40B223CD712D48CFD86428661D191D0DE40CEE65272A90AE80C134307D575808 57CCE5A72EE709196847F25EC20775359490CD96F818E135A4770A5D477FACE1 18C3E44F1C1F60D1B6BA8B206F107DF7FB7167870392CCB34357F9E4499A4164 0FD3EE38365F9F16642FA5D4BBCCD53E9680174838110C2F341E8856923D67FB 17F77E3C9EEA8B51509ADDFD595784714495BB36BF6331697025D64718C37131 782349E44FFFF0CC73A9A01D0F41D89A433D01D82267B25B15774CD010594C91 A5FE2AB68455420213D78D44D0D29DCBB7C27381182947FBA133FA137B8B7A78 9A1514A411497C4EAE49ABF00971280276284E642036ACE628F142181CAEC3E2 2FA3B8B74109C3317B8A0DCF444A2D7CD40B56A6A0FB571F29020C10467F8E5D 56DFF57F4B067C7115CE624EC693759F6C93F10C4BF79C1083D72390CF06110B 6A909581DCF8D72361238801670A67DBF1A2C831DBED6740191FB43F325AEEA2 7CBFF48305A64AD9FF4EAE3A6F71596DB0E5A1F5B6BA2B6869F4F65156E823C6 4FA7BEA68663C5A539F7609EFFB902DA29DB1AEC8D477051840A9AA16FC5389A 121D76409D28E23E7908DBBD8FF823B62036C9526C3B10375A9385A4AF991B59 88BF2D51C62FABFF359AAF056DB79D13260016F6217B32DFED2938DF6A313D9A F4852580D0C5357C413D5E06C883D19CC2E6968A5902DC3E4CA25FF06C6F76A6 9E15D2395CAE81EA10644263244B15EAA5A40C6E3D66C0B6AC3AF60FE4C1F473 6D4C2A110EDC509210E58B4A5E5B8408170535D1321825986A1B998D105991AF CBD6A46610E58EB90C9ECDF50BC0D26C7A681F6670ECCBE1B091808E4016D871 E3E4123FB6B1927307950B814B19D665E8CE2D5E5A77BF59108B2D9E183A1BEF 7D229985E5D326571C07E94A68EC0C495E8DA0DF16C11F6DA761BDF810195971 3EA07F0BAD9E1118239673FAFECDB14C685427B9FBF3D309C726D9AF11FBE3F8 9BBA94E8331845E2CD62549F90EDA5482053354CFFED5185ECBEB1305057F699 3FF0F6B568B180A1690C5734054B8903D637F31F3255526DCB44C8549B7E7AE8 65EDDA8AC5A34FF63EC3DEE34A9EA6F7FEF817CEFA9D7B22B603ABCEC4A45A17 4A5FE48105B99857693DF7C56F148FD13F085EB821CBD3F3DDB49138B1875A98 6D6E48B2C2C124EC0BC9164989AAB1F5AE8C0F21E63193C70038DE654D67F565 431FC9CE4B58D283A2DAA40287616409DBB7F7E94DCCACDF68CD8ECB19B98BA7 BD00C1499731B7959DF35899DEF7F684CAA993990B6239B66BB2220919C36185 A3BB431DCD9197A67852D137C00BF45AF3698C115A41CEBA5D3F1E2FF32717A1 69307623AEAF8287EFB7A7019B181C30F2CF4584351E8176E17A42BB48C5F521 B4538474B2724B5DB5CEA51E783E870AA97FC47401CA0FC0DFC4998613F2946B B827C2F7E874267DD7BE63ECC00AB0E2448E7951EEC5DB4095F9915085A97AB3 812A376AC0101429983921C76C8E686A52A669E8BABBE21354C4A74A6EBD99E9 E2DCCE027FF45D75DFA6547FA60F2A63243D5A3AE3A808C75A99F3D42839A080 557C7DE6628F353F57B704B809F249DF208245612B47221653F42ADF0AA26CF8 57000DD580F6BEFC12E654AB4C4317490832055B92EE69CC2CF85A0232986CC3 819877F3DBAE3AACB1F431C216077B528B1D863CCD0BC6860C97009B90F33779 4DD77D702A114565F58A1DF4B7FDDCA0157CB0A7E74A116033212D83C1C2699D 65BBB42025622243B1A25E399014D0C0582DC50561373C8631D79148CAC3DB86 DAA8CF5E39387115637865FCC04676592C3365F2130852EDA3FD572A353F4B02 497576CE8B5E7BC90A46E02E20536AD5DC1F3EA2B832253D1D1A819B0BDAFE91 893067A21AABFF14BF0485EFF09F6256A58772FF91877896F54582EA274F32DD CB96295DBA8BA6FAD260A71766FBAA4865CACCB938D96A7F35884B2F80DE838A 532F64A69274B1E648E6B18333465A3B89E8EC4ECED5855F6188825DC2D232AA 88283656765F0F957E152D46620E0001C4B0713F7D9AC4E887B649593353DFEE 334A3C8A3DF606AD48E286A7962ED8F7B0F382373CF35DBAFBAAD8B1B4B564FB D421EC6183B7051E3F3022E09818EA7DA564EE44E054C995F112E33DF2A7C38E B5BB24A172F51B5FEA5D11A81957A075AF1CC2D7C9041F85E46709ABE201426C 244C07EEA7550E78D3866493E451937C404152E4B9E081F52653EF379AFC7F85 D00FDB5360563EABFF210F4D46574091A6FBADE205D15BC7A0EAC7C25BCF58CE 479497AFAD121023BF24D9737C42F4566B3CE3E0DDE592E02A4088354A4D5799 02EB0EBA57C13A27BBA913EB949A144FC4F913E3A06FDF1C7C88AB50BD994F8E 08A5837496483EE06EDABEF4381339B1007CDB8D888A2770536EB20DFFC71327 B768DE076F35D951034F4E09E18359837D2D5B80339885FC6FB6E6CE88BC0C7F 465D36783E58902AF41670D0E01656E2983B45459BA7D7822DCA1D505E36F554 4625A1684579A20F7B9491B949E2FE69F32A016E62A979EB9C4A05944001CC9F CAC4B8E45CF45726B6BF10811DB74CCABA5EA5E5F2AAAD3D24B2CBCA416F2BF5 C86B6495C5C820757C4743F1464B300F47EC054EA29215AD2F2F17F55AB92016 9919577ADF4BACE5695986055FC4730E531FE82E9D926B1B03A8C204F6FB4A39 1C94C310E6D5F2F53D41BBDF76848CC247C89D4CCE56EE40FADFF0FBB48804C0 1823A8A70992C265A469576F47CA341810FFC1B8B58ABE8EB762567DA328B25B A9D4F3472428AE0FC180543D29B8E4376D7EC48D25A411991924FFC2DF520BF6 90A7B08513D2A6B42F2AA51B0E3E5F2F6FD57E63BD1736482F303A13D6E0EAED 1761211598B1F2AB26DDD5D45ED477172287BDA7062E8AF61D232473EC060F68 31A225E0AF2E6A5BE2D8604384359C53F880B0A503B5DF5C98D2D657D1466390 6736B42A24D1DBE55ACAEF4C5058DE5ACCE069D39746488D6AA244BEFE1F32D1 BF65D0EC3FADF515EE45E672AAC72040A1E1065DB5A52FC889E1650487BC4C79 77D55ACD9D726C74B6249277B0DF721ADB3293098639658F6796F7A012416C14 7C694BA55C734A527ABA0C9E6363C2C00633058B69261961658CDC29A477784C 90517818017B6BF89580BC66BF15757490F131D9470A323287091DF45DF490B1 9328CCAE434A9637E0E7D3A63A418989384C98463294D25CB07883B8637AC816 57A0AB17C4BB9891599D2B8398DC08A13B73A2DCBB9A79218C161AEF14D238A0 8D00C90ABDCC18B11AF05A54621B19294D09A4B533A7F1D4F0BF2E637BF5E723 53AAC5785828293988797F37B8F14C7CD165E8587E48A876C96D701F46438349 0DDF52FB12DE623F786F13D9BCF2D5BFBBB9D5A16E3FBBB5E6A9C34494FA3F6D B81C12FF86521554113D1AED9A894E5BE1E7225A9B98D4980AE902A8DB3DF1AB 5D48B334C4476EE4FAE42C2CFFFD1BCFD99D82AB3992D3CE1F8642FCF7BBEE3D 5840F516EE8F6E87B5294DC8BF2DF4A0B7A380CF7A2BECF45CE0B0F8A996A463 E6193879C8E25724BF182AEF116B7FFE8BF1A1C7FB6FEDCA86965D325538AE1F 2863A49700469ECD3BEC3D75AC255984373E4A5A621AFE445A10B8D97EF1BCBB 61263A4A2009650770801C386AC6F95F02870DEC62FD6C556A084FD4C165AB0C A52DF2633B01DCAC757F614FFBE09CE217092414A7C0FDC43FB02DD311A70063 2E594A67C9F8D8CD037020C074BFE24168E810C8804EB53F16CB67ABD8C9F99F 80D65C981C4221E857378C4EA79E5CF88CD53B841C2CEB7C58581AD1C3EE79FF 6B07BD35895A8843393EA65FD48BD248DE0E7799845B1B568189EE76445A58E1 42ADE3CC51747B8B97E031CD51E90C75880B6EB5D7729BC29EC0AFA8690955C4 AA5E809DE62E0AC18C5F1A6FE5E5F767B70C8DC44C965E7E2E8077938B4EA3CE F119F7F824DAB88946A3BD00FEE7D8CF68B5A35614F864473C24A95F13C7BDC2 00F018B5BD313629E0BF5A5E35D0A34000BA338653FEB7040C3D5A43DEFC7FB2 5999A596BB7A701E8E03E8D3D35FDE11BC8421E8283EBC327F7C9F6D457E573D 073755A97EC24BCC4C33D93D72F62790E732CE02320F8D7B385DFE2230418B1E 70AFA7DF7D83D7E04A2F657CA6C2410A63F9B45C562B7736A272349BBB18E462 A02BCF7CBCD049B2FA692445C13C4B28C1762DD4A632CD41A8196DBB26075B7E 9708EA316266289D910151A6F7FD5F4755E7A41DCC3AADEFEFA2F28D241DC4D7 0AD828E18F7541FAD3C51FF4938FFD048E1EFFA5A6E443049FCA2472FD9CD0D3 00A0AB032E36C43ACE958C75B2772BEEE4327A53F279FA49DF38E5A3BEC64EBF 7677CCD8EC1B972B65FC2643DC5064EB8A66A777124B70F2DC6FE62030EA59CF 9E328396317798C1074AF49EE9698EC5B3A0DF1112669CB2EB0E2B6948DE7DB4 B136C23C5D0B2DEB49808EDCD5A3B68E161ACCDFA41C8FEDDA50942F8D2E75EC EC36EB127AA8656B0EFCDEE65748D32220E16F296B8D06AEF513E272CAE380EC 17A1A2B0F235FC70D479A606B33AFF70D324C6FF178A38DBFF6F2BA86115FC2B 7237BCD1325690F655B912C30BC069B20095279D01D4AFDADEA0E9FBFAC0B22E 60E377515AF3012FD9069DE25DC4FA527AB6B2EA9CA5420243D815C95E0F4D51 FD84FDC5341F20BA6BF1520C684788BA2801A7CF3B95932EDB3D8693ECE35D70 3666A19F6348D59155A89FF25E119B37D5AF6635843E4FDCBBC413F4A6031F4C 615AA55A257FDF806FD0CC1A65FC78F1427DEDFBC1FC71408978F46E3F32E8C9 96FFE6AB284538B37213D6B88AEA47E99DD73D9AD4369B428EC913CBB75FF2BE D9D9C51701D2D0559632530D6231586A667F3A530FF2F6227EA4CDC10BAB9FE0 E313D378C933138BEFE6D0639DE34F45A5CE2049F5DB6E28A70246877C55DDF2 079FB885DDA5C02313345CE0D2373638BA9990A6911978264D314CF74DF63517 57EE8699DEECC391365AFED7C1329813024B3ADC3565E28D754217B5B1EE6BF7 AF11791FC1BEB8E6835BE35B05CCF2992ED7EB12909C9D10E89DDF362036ECA9 FFDA4DCA0A6B1485F4C4B8A9BA588C708DEE0286A83FBBC77B9E9B8DEA69E54C D7DA907064DFD9C45D3CEA56AE7503493D5F4BE359D3F1669F0B4722B2171811 C8C58B922FB5A692314BBE92730DD235964A7CE0DA5F79507D659EF04BAAA9ED 372D08CA888C6640CDDF10C3811BF9679C6340418C89C8A56E50467C11FD1BF7 D7A58A97F117F511B5BDA0F10AA18F32C4A6A2B7AD54974DA8E693381243AC52 1BF222A8CF93A087FCA2CBF3C036E803B2A5FE026072BDEF9A6AB04B50A9AF0B C78CB24EAD3C4C6C1043F6701FBEDC2B16C73B0220B1226E8CF1C4AE76A77D50 A4F2FB0D95866FC447A648A6E95481134C882B3CFC3CD9CD8BE6B0D25A1CEAC0 E1CA4591E98EACE52EE14B5FE74A4A729CD3E5580A9B0D0473AA2ECE3C05B9D3 F253C0B613BA7CE0AC4D16FD02C19C536AAC90E5511DFABD5837A3B800C49239 871F61F40EBB75EE3024F37818ECDA106D09D2647CCC4E6AC34F49B8FFF4238E DC8441F3D1D592D6AFF3FD02A5099C8A5559AE1529BCADB53735EB669DE1E469 9DCB7D2970392C6F89A018A6C56C82D5AB21E079E498FCEFDA5DF97D448F3FC6 02053ACD4EF8BBE8D561F5A26F23793E217333BBC92828ADDCB833CC192201F8 538DA1C7C2F92DBC03803424CC08EB458C1EFA4427D7D6E50A8012E5B372B6D3 A147EBC16DEE2AA83379F0AAC7512A6F3866B330F3A585CBE2D3061D85691969 C3CEB34DC12A5D1CE3C5DCF36ABCF13FEB174A9BE6C357786A39CEA83A8982BA 039984F437D09F51516D93EF7B88D29F4DA4D88D86C2AB253FD23D54A6E0C01B 9B8671E5F611E133DFF6478C9FB8D964C5B52822F4DA9BBB366845D10BC6D94A DAFAE069EFB8834B21C526F758631E74C0B3AB013A05C497D66DB5BE22E67C4F 687DB852A3009C8211EBD691B35D2B8819B3BB5D07453C5E6D775A72B8F8206F 0B1D760A6DB92B039B08B99D07CE436C1082069156CA671871434048A95C88 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMTI10 %!PS-AdobeFont-1.0: CMTI10 003.002 %%Title: CMTI10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMTI10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMTI10 known{/CMTI10 findfont dup/UniqueID known{dup /UniqueID get 5000828 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMTI10 def /FontBBox {-35 -250 1124 750 }readonly def /UniqueID 5000828 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMTI10.) readonly def /FullName (CMTI10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 11 /ff put dup 12 /fi put dup 14 /ffi put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 48 /zero put dup 50 /two put dup 56 /eight put dup 58 /colon put dup 63 /question put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 71 /G put dup 72 /H put dup 73 /I put dup 74 /J put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 82 /R put dup 83 /S put dup 84 /T put dup 87 /W put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE32340DC6F28AF40857E4451976E7 5182433CF9F333A38BD841C0D4E68BF9E012EB32A8FFB76B5816306B5EDF7C99 8B3A16D9B4BC056662E32C7CD0123DFAEB734C7532E64BBFBF5A60336E646716 EFB852C877F440D329172C71F1E5D59CE9473C26B8AEF7AD68EF0727B6EC2E0C 02CE8D8B07183838330C0284BD419CBDAE42B141D3D4BE492473F240CEED931D 46E9F999C5CB3235E2C6DAAA2C0169E1991BEAEA0D704BF49CEA3E98E8C2361A 4B60D020D325E4C2450F3BCF59223103D20DB6943DE1B57C5FD29DA32D34C95E 2AB2ADB3F60EEB0600C8ADE15A2380DE10AC5AAD585FBD13097B1A7E8E210D4A EE96785449E07F0C8EBC2EC5EFBFD0897DFDC15E5BFAC9584D8DE95C5AB288CD 8AD8B9BEF0B8E5F887B3B0B331542FC8184DCCB753DB6ACEEF98B85756B988DF CAF1AE0DBE7D37D5F44A2E760AAE3A5197C27B15E32275A64946C3E4D0476FD2 7FDE148C788DD2106F7C825E270588AC05B57E625AB17BDD02306F9E5FC851DC 32A5A6EDC43C770A71419B2C0C8074EF3F222C8A2097CD81A91F333A521B3A09 482A4FE1CB231CE344AD126AA284C3280AAC3AD162CF0EE241BFB4C8F20502FF 118507F5D1B5FD898571015E73E5CF2281085072E00D401F6F59761EEC3E8381 1F26F75DB66C504AB6BABA87D121B1E7040A07AA2FE01F80DBC246CC03C4B2DC C2A715980C52B7F96BC1A78FCC7F4F52EEED5F705E08FC1E5BBFCAD121FA88AA 8EBE58172C162AF409DBB0728F14923ED02A65EA24E5D52B6AD07777455A70A4 61833D3789C719BA92E901232599767E423D5AD9C807670BE0E7B5CFF8256A20 C7BF7214FFE0342809570F5966A2C43E784F35015D9040BA34FEAB6A6F089504 3A40A9E9D711A2721D3F4998371430FB3C94BFC619559B97D49627BB630F4B70 9D0A8FE4E916235335C3962F3CFDB04C4A3CF714DB5E260F4E66FFF2F27CEF2A D4AA26BBCAED23B8BDC98F8F453BA27AD7758537561E766B82DC3032E92A9EB0 125D98A22C5466AF069BF72A9BFA052A8628FEC6A6AD0B711DFFEDE3AA2D7CE8 34EA487038EF50F953B8B4471CBA6FC3C53877EC1BC94582B1123EDF44B4056A 30F49394BDE22CDAD7F01951C7013D26979277D18EFA594E8F4F2B5E615187D9 39E842EC28461B9ABA52020A127D2CB9002A673A435B13C10602EEFDBBA6BD49 9DDEAB9E68D655443A5C2492BA061C1391A51592BA8C353A6F6A0708E8860184 2B5D031D2CAB87D618E9F6F7A0BF3F66B3FD5A25BB91F7F1F5F99CFF56EFF4FF 0A35C55658001ED2E97B26C869292F6274D433A5443179DBB8EE987196306348 3F9E87C6422AFFDD30080C9AC4EE7FE5E2DCBFEE4974331F4AAE479FD8806D4D 9C2B85FC69EB0453AD827A1E767E5C484BDFBF5C8D6E2B3C96298B390F22D757 802643A79D5E29CF3AEDF0E12CFBECA4663444FC87F2027571DBA9ECF688BF28 FF0DDB3AEDBA0FB28447CB4B5D5205F40C1E7A525FD7373392EEFFD910AC82D0 98E71660A1B3227C4A2592F3E853CA4CDF64DF19A52582E167234F4036FAAAB9 5446BE102DE2BF43E82F0112C2A20F15A3F92C6571AC761665A905362C4F8BDF AC8705519C99862CD9C0D75113C4AB5FBB83C880E46B82715B5628890D9103AD A2329638B95D93C4DECDC5E6C588C9D5183EE6FC28FAF9825F02DCA567306D93 5440987A81B51EE7291107A08F201C609FEF91A8F0587E8B13D4BAF74A5A6815 DE9E4441F46AF8E1DDDFA2D611C889614040B144A5EC064DEE4638C04EAB2E37 4CA8F50FB8C4D65BB296DCCCD39F1F554CFBED96670A91F515CA10EF896874BC 8EF48C6447752C70FF5A06F928DB55586354076773BFF7E94C4C3A7A1C1F421B A9B4E3936EC26E0C19BBBFC90F021E877F54B62108F6DD1C7F6D5B8E64FC9362 E173F01BF2904B7E5A08B3543611562C2714099DE7D4FA330DB148B560A9601F 42A84452811CE213DCE782A0D7809CFD954D6BC1EBF2BA4D1B18F50FA8174C96 3E0120E266AD5DDB40B3F6798AC28CDC5C3C4BC34583528F5B5DC8A222B80B59 A3A93DC715D061EC6915E6E6E21A25425C25E8747C60F170D61047108826F96F 7830E220C108B441B6EA3198E33C49BAD8D43086E49F5A2BC7958A1A8CD011C4 49045193394696EC3DDD0BE084E8F2E9F0B9496F035C0DEC1CE11409DF566428 D50043CFF5CDD1092F6E0807E660B68163BCA738E8D98FC6EE3F713164CD204C 0BA84FFF4F33F47BC31750B448603D7ADB9AE92FA91AEBBBEC0DCD66980E6955 CEB425ED07115B24E40F53B29B9D840842EAC691B4F591F866DF27556474B485 1C6F53DD72499847109B16C7093984A6B8487D4F3870DD517945CD90E648C1BB 8A6861E540FCF9D75B984B5009B5CC760CBE297042C240DD624111670B703388 6FE6FC0E89C6B4C88F51DFF3913D0CC1FB4770C8CBEADD4B86393605C0B6C468 83CA5594754411B6FC331EF56D7CD6D247FAE42E966583C29239A8F862348D29 60B177984B6B957E733DB4D275015691D91443BBB13C2DA96097A29733CDB284 42F89C85A7A743338C9DD3BBC4EE53F695E5163E6E1ABE5791ABF100B198B9B2 1C21E2FA2FB4AFE7F9BB2D381260CDD3A2CC05BF513AA1E80ED69FA27BC5ED5A 21445BF00BC2F997B356D94AF13736C6D3B0613EB6F4CD96A685FEB672661DCA 206105EDC3CA07900676EB2FAB37F48D2E8207BDE1463894DA3C5B1488AC1EE9 D39DAF691648048F5D7A384B8927F8DA2BE3602669F71D80686E427F395134E7 7ADCC611BA91AD4B7A0237213C60CF2C905359C90795230344FC3C50A22BD44B 55B2044792509F50F5C21F53D9F9E9F063ADBED3AB99E2613B23334FE8DF70B4 6120F2EDF69F50BE793EE145B9FF9C73179DE640FC2ACEB5C6617F918CEEB762 4CD81E665B2E544864D13230B058717B207D3CC5D6647D5343DB4D0356082392 871EFFA896631A7E0D6477942B632074A9A4EF7B09D4701B1639BAAB4E03A40E 9B54A7A4F845CD63F88831EBFA4FB847847CB98F3455CB5957F2E0A0F5623645 DBB5C5564C7F8B117D6E27E65C0F3EA81AE67B4AE4B201E7C4FB0A8364FE53F5 41A7CE8F834C2C4B322809B353A5E63BBA7BF3B7DC1A85EA700BD287C2BD3FC8 2832B0BB4695FC937FF5EF06FCD87DCE6DE793C2B1EE10E6450352C17726155F 220D550B1759E15AB2C1D5968E52C8080CD280E99D3CCC0E80C2EF8BBFD96001 A226FEED7311EFB4B67F424B557A877379A15BCA54780F0CD2CCA00400B9B39D 981C6B552AFD2506D1B23618FA9AE6D8143CD7198A8482CB416CCE62B992347F 337D505A4078713BBD91E5535BD58EF0351EBDCD749CC24D4AD39F8CECD7D6C8 139756680A4C03A58B3374CEC658D30160AE4863A3938A891BB59CBE02BB451B 1BA4B2B6E68AB61DEB85F95E3C909B8B66E220B9F18280161C279F10F7093CDC 100A53D542F071CC0A5AF834DC1D18738F5DD62A5573E884E1FFD22BD810828A 1EA47F8218C15A2E97CBC609927DA3CC2B802EA4A0D7EB57627C135E3B065905 F97597D818A2C5CC6F328AD25AD11FA50F1E4FE637980B7474D6F85A521892FB 72989AABEBE02A2D0EFE88A6F67AC29F5D8DDFEDAAF465C439983C6B84389FF7 A6434462BEB7B07DBE4BBA61ACD4A60C55B5C0AAE527DE381DFECA2E6BAFDC8D 310364ECB42CAFF72BA93C067B2F02D1CA7C34AE7CDC46787A0E234C8BE8A928 7A6F3DDE0338FAD532A9886E8E3525B85DD39364AB03EC4C0DD25DC179CC1989 1BE232E387E857C78332D834679195E10F1E7B87B7966DA3B2238F53D1E13FE2 8F55ED6A92A750C7250C9B91E29796621E7E9520373214D7DA81B2875A986D33 80382AFF6DE1F829F048E57664D9C4ACE91E4684A51023943A4964AB5657D610 3A5405EFD4CFD1EBA684243E15093C9667797BB47617B66054EE02C41FFEC45C C1BAE8AD56B00D323FCB1D2744F061FA16E161988741A319B1564E04BA210996 4F9F02A3268CABE450D166A763F5284954564A1C86B76544C5F5ACDFE0D758DB 865A1CFCF9FE8CD5F9C3B2998C56468FD52DF8EE60C6935A3D221EAEC7714E3B 301371C7DDA0B03A2416238F2B47BAD3A2C5021C886DF51C695AF9C87A864B48 3BB3FE0B355EED5454B59B25A0D8A1B8CBD356C24F64D9B55E16C30C011365C9 1E0380753BA3EDC0868788D5F50B9353D0227BCEE1BE36998B2622C0759BD66B E4444250589F9CEDE766D8B940770CB6B89503E925B35C00CBEC2873D2DC4A29 0823FB7A3717B69A7DEDBAAECC067949932728E89BEECAA91DE3AF9BF070B9C0 30EEFA8C0A55C8388CAA2F0515915C98E67FA095BB98967D14B0DCAFA9622E4E 2E0EBFC768D80585ACDF28D8A5C2B6EE2FE7AAF62FFB90F569F84A0903996DF0 C1D5723366C436E4088F3E2BB9B47F9789052A71CF5C49908CDC1DDA194BFB89 14D7E3D7D4D72A150FD6FFD8303E9DE5A97A71B808B8BDF2AE466F31BF5D7A4A 44F81230BBE2B456A221E2F72A8B59F8FEA8D31F8A005A5BD93B9F49CFDC3DCC CE2B67090460F632271C7157BDC2F05BC2749FD562FC28682A616A52D1B67654 DF78B7843A9EC26A7DE2EB168F874904C2915B97534B2D4D9F74A9573A771D34 9F7BC855E8F794621BF6AD471BCC347E2DF5F620F5C209E33A4CBF1EA85AEA87 4492A77342DD33EF615FF34037D660B713C908786D9022051B825226545827A3 2AD1B05D654DB6E6D261B4E8AF0933AD1F0FCFC7201E1A7C1B4199F160C38676 21ABA2DDF1CEB655B3EC3226E0B122976EEA998F7A5241F062E54AD1DFD6ED26 47C99A439E0AE95415059179867CDD3F0FF751F3141309F40E00A6C7C28433E4 F649BCD5DAA64177580E05C495EE7BCBCC5FBF104DAF360CC2711386655B26F9 D349D887EEB32ADE595241560FD5924A1745A22E6A01DB9C285EF14596EBFF0F 03F36EB2E0A7C3864F819EF7B0855121292D49482F046A55CD7271FE03F02EA5 886864D9D8EC22A68C23089EAEFFF03DED6484D8C341861EF8B6FD3C5BDF5AC8 352DA4E13A1E30D0CB71E090E9CFB9AB2CAFD0CA7C34AE7D8E3B2EB4666834BD 9CCD1AC2108348AFEF6071796F4BB2FFA4A67ED917E76A109FA2DC2A30D744A0 9AE653A748C1D18FB52595D84E87F1C1FB6B2F32667FE203262C66627AEFFED3 92B23861E5EB238BB4EDCE09DAE1C65BAFC198CDD1B45D42CDF93E16BB82D35F 821E9E49067E966AFAB2AB52928F8DD6359984071FC37AA652FB834A09E5BD93 3AFAE161140E74C6531E413E8FBBFC42BFE8A464B71EB1D8CAA93B33D7BCC3B0 47C7EEFCD3E9FCF26FF9441DD9BDE68D77AD7251C06BBB9A2103049E8827CAF0 F26BEF33F656A690235DEEC623CC519AFA82DE2AE16FB99F780FD7D8290DA40B 9B604AEF36B529FD184239E7D50561A07428D28E51B55546590A1AEAD4B7F2B1 AB8C5B9022C1FA03E33F8F409B24911AB8BFCF6EF4A8E415263C789F89063E71 C0910DC20347469380B7FC1EEB87D4CED7F4A361E58B61C91AFCABA35C03F978 B9FB5257C31657EE48504C355CE893FE3C553274C641DBC4004F5D5B879CC5ED D3F21F867F6DF054127067DE86189F0B59A1B90FDABCDFEE61423609D888EEFD F4A1367129962110C651D9481CEDDB8C5C2576A59AED64E95F7ED042AEAE2F7E 81AC0C408E593DC30DCAC334EDE9EE27D932B98F040DDCD195D6155607DD2038 970EB78221A94C52BD4F0EAC65F1FC10E5DAA93C17266F351669CAE56F42B68C 6D01E1EA03AE554D63CE76D800FDD9CFD89F80A241EAEFF7EDFA41794EA25CE7 97BD5028464D2CD45B53834B4AEF8BF0B9E7C6ECDEACEC887E8790A47A93F668 A9095E5FA1116A122C0E5B74E2226C654D3187C6CFD8807917820423DA3EC1DE AA020EEEF2280C44A15209EE2F3FC1776875308CEAD38571E7BF889F287E4594 971A83605E0B4169D4A23EE790515223DF8724054EDAD905F57918FC0BC64F96 514B4BF7DC9BA79E763C22C977FB6146B10D26FEA1BAA7BAF21312F78D1625A7 8E242D743471DB5821408AB786E4A7EA9D35E30E85533C617689F95758FB2C7C 392E759C299DCCE36689686DE0C4DCE32649493650BA194A6208C5EAB670B170 3F2C70BF0EF0E3BE2FB0A79224FF4ECECD6BB3388C6D06867A0E5E3DB93C1B2F 464C23E44D3132E7D4086E3B59B1D13F49EB4772DEDF8EDC4F603217233FB7BE C13C28648E9AA51D53F11FB896839F97AEDD8834BCA53CB0021AE91FD8E95E2E F8A094093AF556B9639F508A401542B06821FF9DE1A745FE9AC5CACD5E8E1053 911442FC15CA5333751ABFE2C617D38FA1DC332BFEF44AE569DC631C93EC54D6 261583A695F5A392867A57F59B741EFCD2DCFECBC55D1EA5F2317601C9DFE9ED D1EA466210FFA905A8F85BD58B98991BEA58DFD1CDED5C9B086D42CCE632DADA 147941917B879139E016B0DDEB8446BA017FC8EE5A354533D667B0835F5D027D C2D580C16B80B3D05CC92C0465CAE077729F0A15B2DAFC89DCD349B3F81D0516 C65526EB5C10E45A8A85D716EE35FB9AB201FD7C89ADE5AD925A174169DA20FB 61E96C73A143DF964C20589EF24A0FCFE6195317F2FA0D2249C0D8E649C3D9AD FF13332EA2E4C9CD36D8443EC8F027B61CEF92C6A6B72DD4ACBACC16E429A9A3 F5F29C1631360E32F8C1C93ACB22F810B86D2969A7480F486F62F8488BEEC74C 2C1AF13BB92BC578E8CD30BEA6BC8CB68ED730F54CED0167605FA76AD7B7E88C 7AE7688E598F91C471BD65A542E96D64B1EAF19FB4F1234308C48C2DC86E2193 11ABDB4C6189C6F201627C693691A86DD07FF55C30FDB3F72381E09C6080FD7C 9182762E5001E30F52A216E0B71E4D2D4E2F3B20F95DF3A11FDB2D2B5B5FAA66 C46226D5E0C77066349770514E5675550FAC9394FB27CD2C2F974F1FD58C04A3 1EF53A8AB3B2202CCA1CEFA66228E1480A0709436C44BD3319C40CF888AE4692 5DBBB52B15CF3A518F627F672135A24D5DB9B2EBEF04C860AECF231EBB5A3BF5 6DCCD5E72FE4B6DD29E896691868A7DE4120AD06AC573F5608B8449B38E71CA0 EB5CDA3F942482EA7973661170F81DC88D54DD5B92323F46F833DFA757107E9E F62A47CC50FAA1B68ED535C3E0E1073532A05ED339C8D70B3B9864808ABACD23 AA95E9FDA43D54C66A675FA074E0A5B8777D3C07850A09087F36852B5351F35D 8BC4DDFCA35CF29CD5E3DE118A741FAC4DED36847F2E2C6CFE08669301722D94 376F540982958074E7F1383C409652F6C99DA39FE90B38221E75BC1ECB93ABF6 B00F410A0C5651DB418566AB350FDA1789AFD88286AF3BCB42B98386F7BC144B 02DEB8940D20A6B3062F0C4244EABC50923390064F1D027A8BACC3DE45156E56 4A942D1B87F1C4A76B0D4D6801AE792CCAE3009BF25368B31B6AD5476FBD3BFF 9759EF463EF5E78E10B7BF64005B2ABE0E8813950A08A1808587A98E0021D0DD 751AD515E8278F1A0759E85D8A084490BBB0F8206484AA36388B1013643D3198 3509078847BDAE08E76FA5BF3E3A73C323CE093DCC148E3C02C2DE1E26C94D5A 40EC8308ECB02FF7DD04EC1005A2A0DC74D4E587F10A3EF349E828F69FD38962 2F0C74D5DAB3ED6CC9F97008ACCE74C086A503948DEF1AAF58FC8BEC703CD360 D32098A56AC776B1BD08442052A2A4EF6C8798F7CDC102AF1A2009657254762A 0793F79A39DCD6ADBAA5EC84A7ED6018BBE727E5D477893D84F157074B24C13E 8D4881C7DF8ADC13EBA0D89745EF93B7616EC5355600BB0D2B630AABA3CF2946 AFFD0B2B724EF0F28393F2034B2E69DA5061426805353EB4D80E20739BC4C510 6C45275B8261DCBA10DE1D104B12F46ACD230977EE7D7D1D35D2814139E38C4B CA6937CCFA653349B1EF64A98457F7B4B5D8F2978F16ECCEF7054905863AA46E DD524CB33459220C71E9EFA7845A3A760A507B3D3ABC525B35930B613710A13D 098832C58EBBC8B0CA6AD516E6385792C59220331D0922A1F6F838A8DE13C337 900462F952EABBDC2EB1FBF94A66186C177501453CD3FE3582073DD86F04406B 41B6AEB440DA475E13240445D46726A6D45185D56BAB8807CEC8A8F7CE1AD149 7CE2E1BB5DE4E5B9592241DD136479A65905FD0062C91DFF7349874BFEA5D9EA 2F610ADB9AE7757B2307A1BB9D6797D9F9C4844A59841C7C7682105E23A374BC A91885E7410F56F60C29AB8B417E2D6092F8BB70A2DD5DEDD4BA1077D7CC62FD EA43428C6F79C332342E15F75B08A1ED360CD1885730E570A3252A5ECC419A7F D124C3FB3A7D58C0EF6AC117F50D7D4B6CD852200A1F3193BE101CBEF414F60F 85935BDBDD23254648DEA12B95871AC8F859AD8C9315B258E525FA7BB0DD294D 497646805C3CFC1CFC72C17EED56FC5E7A5FA54691474DEA0C85DD18ECD59923 619117DC6AF37242576C4E9A56BFF2D3E717DFA750607BA2BE87050F8AE8EA72 8056655F9D9DA1ADBCB07A6697F6664AC6B6C1F5650255776305892A6E3D986E 10A3F76B65763C33A249C23C8616B866CC56D8440C501D46E821750FAFBA1CF3 06101C7D563C43EFE7A7AD8D402F232034B7BCEDA9C49AB562DC60CEFA521711 DB3D81E0400F776034AA7370C867BDF8F8CBE2F2E59D2099F8627118EFD202D3 51B7AC1FC6D959ED360DC88686071FF45FF4893C8C58C4BEC02AB175C3645944 2931F3C13438B06171B814FADD837552972E4242EA058517C5E2C69174395C1F 913209EA0C72D6FC00F57428AAD3852D2B22B8A80BC62BE33B6810E923D71611 9830DB44FFAF36266EDDB105E92B6E0BE02CC9B501B878415E9950C6B84F74CB 7B5F8460E0240962086B547540264F9CD029F40E734EC9E8B0C72335662D0BA4 2ED66B3E5649529D21E3B9479DEB3053E25D96514DE0885D3BA5976E4D90C21D B094A39F0AC8535F07BA31C71CA5D158A149F9339F2127B3C69A0ED01AC4044F 9CFC6DBAE9427BD16A47984402E72783D4918D2C6FF35AD436D828D913DD08D5 F199F9EE9ED19941FE693D1733CE3672C8A584A6F1ADD85A2B273D46EA84D990 85AA9AE8DF53A2A2EDEC89F9C9A6A5C646AF571DA905DE5FC792EE9FD4292B4C 730C54CADCBEDD838CAD24FFB5D67500F54A2C3A15DACFF65AF7E7B919E34D90 637B34D44320B723392E3F9B21849A2F8520C2D0698C337B7E95A5CC571361AD B8E5C86D33E381E570D50EDC85B763C354E8017CD117CBCA2B8E9FC3FF3B65E9 3F62EEC686AA23869A4BCC126E1586563641730867405783AB204281F94B9D06 542B9F983351C0D1260E2DB6426A83FAE409890C9FCD1B636E55AA94D596CDE6 C5F8B14B9524994033E46EDA743CE5D7BCA6AAC5C893E83424A3BC1ED0858347 3B21FAF6359E2D858001D0F08DA33F1161523C76692F213E2BE3E179B674BAC2 F5366DC1BCB3CAF7324E0A8A36BD3EF07DF9FCA929E0834456AA86D0F24F8E33 BACD0F4D746442D1034890909374FB13DF8ACE922C9190928ED4EB3D2083450D C0675C45C27CF2B31641EC3F2CF6D0C964CBCF8B75E77E0DDE0F9ED874963AED D63D790AE6B2D6166C5D7190F2C24F9A9A13961898AE5DC311A762B8B785C659 9C81446DFCB6B336847052277997867DA5CD0DFC35BEE83ACCBC73C481D12695 81D4B3D5003D79CDA6134495F480B392129D179CBD57E02DB1E6D8AB3B6E6936 B7611F7BB4A88FCB0B58939C7AF1CCE46D69A9E54B3DBC11A99B50F00D4F0240 AD2BF3132F9E10835BD48AADD04772AE1D41629906B92CD90B1D7BB7D34F77E8 A16C7A3674160275B835F2D4FC98DD0F344E13F39F4399172A6DE7D6700FC37F 5BB99113342112ABE3C88BFEFB048C4FF1C5CE51B521F225B704F87DE9DAC36F 1BC313F148C4BF1BB8ACB4C2A1FA49CD56323E649D4419E7069A9E7E1B9CABC1 73D49B4B4855817C22860F9FB1970F624075304BA29FA32307DB49C6908ACCF6 E4222A3BF369ED22F6F4C8CF8587EDB0874A4551E00462CF53D08212F92E74D7 0CBF83B142EEDBC007FE06A06D8DD4E0D8791537B917935B4B9BDE9B86784FE0 B45DD898F54B9EA2F95687D1D9ADD22E09261C07034EDDA896D6075C40E14352 2151D437D555CB1FEF886C3FFC610649345724C7C9D0AAB585906C5E9366F5AB 636082E7EFA02DCB8DBA1612509A59F3447A2465C460E3DF20C9B5E742635403 B3CC004D592193DF553068F1DF66B627B992CF9BB68967704D31695637109405 150D9B3A9D82BE7BC57EEB19D151D290E50A0B9EF24A5ED767F4D533BA6F79E2 A45DC54B2B25B0996CA4EDA63B5EBA0D36732EBF2690ABA9E34F3C88F3283357 A738A3779DDF7A231C59272BAD167479F8DD75489F62B54C8AE4D3A04CAD3775 FAD0264F387E38BD7E652C4F43C0AC856F2130F5F65F789FC1B795E7C092C256 8F46CBB87FFAAFEB234BC7775786FB7DCEA539E0922A3C733FB9D4DF1F45B0BC E476682F356CC9F86D5EBADCFD58902B637141B0964BF735180C9A72A264B2D9 9BBE9379D1FB28D0EECD4C587BCDA76AEF4FD7398006DE39F79DFA46567B27D2 022B6FD3E5821425537E8D3249C2D7A26E390D0A6D60158FB56E09E23A3F5F5F 7204BA738FB20170E1642A216F4385C8166EEA925A411C17BCE8689FFC7B96EA B0E5C071A1AECF6A572AFF573E09E131EB134FCB43D6324CF380C88713A3D01F F1084F353C1640854EB3DB5F00207738D087A28495A61402F8824240B45FBAFC B708F932EE8F5740D18C7078275E91C05B73F30E2A059A3CAC06EDE70A270546 12F69E6485E3C06AC1B4B09D93EB970D1B525DFE25DD9CC588216383229708B8 E69D936A2E3B83C3D3D178D8F6C0692ED8AA89B028CC92B5CF2DEF52C5422050 390A03D4A74AF6D785990E1A33A1E39BDBC5514D8BC185F5964DDA1964EDEF8C 89D8FE54A11B5382F1D27E9A80DD6A45923C1298B25A95957FD338384130B535 A9284522C11E7835CB8B485436EC398B51FCD2341467BDF21BD878049B04C4CE 9B1CCEA9F6DBB764B79510861E8ED9DF00B574D2E7FA4D0E09A05259BDB92DD4 15521FDEDEDDAEF4B45537781707F17B3C315963640820ACDD337C118A622BFD 39CD2ED25E8F947B1E048868328212B5F41A2568B2A4954B9AC37B7F7932B722 1510FADD1A3BBB6147BAF755A54435869F15C8BF57AD046706F4C82BCF81DB19 BD30CE237B1580D99D53A8D6716AB4705AA485B5FDE2FA8D7F66DE87F5E99167 6FBE7AF0B64469B21841DA39E813B54EF0A54CF4947555BE7D63A9F7F26E5971 2ED2A33BC61AC52062F83EA1A7CAD63B0998203DB05709D658ADDFC9E7AD81AE DCE9A49320DECE486F753F84F4C01F68BFD40DF05A3468B0E1A8A5CF306D03C0 A128935434D5DD372C912B45525522905CEA75FF510DDC50075433C5F7DB63D3 75F24B61E8C90B579412728E68ECC70420691BA6A870AA4D31C415ED5F126004 4135C36850071173D577E97BB6D9D834E5ECDF95727A0F42DA26DB8BC22FCE8F 8B85184BB36A17F854E64E1AB79B61296FBEEBDD42F609A82184E377FA36DB21 362D35288AB67A5D6235B01D57FAC6855A05B1C680C21EE0654D0C664433DC10 E065A1CF447D2BBEAC3925A573C8E50D2FC33F91A3D9CEB49A967690F661DB1F 0624552415DA4754F432A06E706912CAC38C259ACD49876879C72D7EFB339AEE 85499F4EDE486309BE97CF518760105DF8F5ACC354E71337175604EFF9D9CDE7 DE411384D195D8FE57DE1FA54AD69E95EDDA2B1E95E1432BC60FB065E901BED0 4E465DFF821D0FF8EFC178ADF9E8C13A6248321A3A3C776585F114DC0623D321 A5382EAFC303080D6719FFC247FC2E090CB1420DF3131685441F8E276DC040B8 98E610D568458D42E84D739007AB26E6B5C9DB6AA9A9941283D1304FB199A6DE 95215A82BE54943255D62F0C84FE553310459188EC48F19E82386A47C6B77195 DF9BE89A949451D468FA70A08134334CDC0CFF34EBBD77790D8F41C849A1F6ED 840B8808DBCA3724BDFC29B635386A12B99DFD0285DAFE99783AD2D72E438409 C48B9E23C50525915FC7341D9B986967C680A3C826B9E3050F3B98CEED72DD74 C2CF26F4D0B770F7DC166C85BC0104284BBA4EF684B89FA5998C5D6EEC1D56D0 A2EB3429A186CD07E62F7615E7D275AA4EE5B649C793ECE81D738BD1FD399518 691E40E74AB7040231EE6689C92A0E4E05C91F29E9C3425F8BFE4AF49D45F1B7 151372F47E04918EB40E6BE6C0A34165411F30762EB128A8C1B5C9BF700C4992 0FF4D80AEC5A17C04935C42AC98B2EECD422E130FA736F098697898FBB3EF314 0DC8D81890FB8FBD4723206401CDA1BA7BF890805C264D9D06076EA7B210654F B9BCDC601ABD0BCF27989725EE46B3491536D828763563179B63D3B850CE8CDE 1711510FD8F67C517C01DC974AD4503C2A67BDA9A377221D122BA72F5FD9E2AD D87D33301E216351797D7D4458C51D29C2D53EC5C813564543F0AEF5617DADD0 26779A789E364A474B440E76A750892BF5F2591F6E8702705BE60150D346FD60 C96B143C2D8CA478182F03ED5D557BF6495F90752211C30EC659AD14882970F3 2662E7DF1C190338F0805B84294DF240117E4F4966464F218F270EA6990C9FAA 6C85FF6F3F0C265960D9F178A2E7C4B0AC181B69755712E56A2051A9ED321DA6 1CA7A8101D4A26419D95FEF28E49E7BBA32C1DC955302574BBC42239106A6B9F B9805D1DDCBF84926554D0C8E15366ED2150BD18B6C9062FF86DEABFFB160894 221868212DA0D3E92779E06E56106224478EB7BFB7BE278E6069E1718D3BD50A 6FAB53AE1B65B8AAE6D23C71E6169F46ACE0AEFE88433B58B6BD978562A128B0 0EFBCEA83E5BA1BF282AEF03023D9B2D3FD8733098FE8589CD687F26A9C2F7C9 6A4CCFDE7A9FF4D8C2ED31B8A853F139F788DABC9D5754A09479D6F64FF71F1F 8A3F2522AC4D8AFF79F174970D3B8E497546ED852C397E0168BC9DA4617F9B42 97309860536DF81F1068AB5AA3DB5C37A9973CAF73CC43AFC2BE532E2C0561F7 B8EB82CD406F83DE1C26F0206698D47D7FB42B6E6C16907871446F81C8628082 F3B0D6763E0F45915B2355CAB8062074058F20FEE2CCF97DF3BA4399908E939F 30D69AF4AAD2B9ED2B661FC744B208432BAB922DC27E0C5927A28C4B9AD3BF7D F52C59A47DFB37670A2587880515277F5F861B6BB28E15CE3FDA4D6A1196F2EC 4E444390B346CC1665B0458EDC336C7D9E6613BEB2F2601D520AA8B32F755659 865F8F2522C3EC06349CAAAA988F4C092D4DACC072B5E6275C00F5A3E3683723 B5E17A3D30AE05FEF12463DFF7E99019326B32C682BD2B708835FC816FA073F2 BE002FBBAF703002E4425C6D7B479EA0A59D65B54A6A61F391FA499C63F6A236 9802C50398B8B672DAA72FE80613265093146CDA06B0E0DAEB234CDDB1B6B65D 766A9FDF2E2F52841ACAFD1F2A3AC35391BDD85974A602AA9F01DD938FB588F5 3FA449E8E9648F4832372FFBDEA29CDBF00EEBFA2B0350C17B54E8F639AE9624 7D818CFAEF3064ECE364BF74027AE4F11CE3BE2CF24B938A5B51EDD531CD2FBB 73C4D458D0ED266D83F777D00485964CC6B5B4A9B294535F30A2A09012CBA757 DD4E7331B510D579EA88D9ED5EDBEF2D8B073801B95F833EAFB8133305670046 3B9288F0E4AF27BC60B5AD62D199F3D1E7EB7D1F2354604A0B1313BF49A13C92 D22BC32652ACA653F8F8E8A40373CA86C2252D94E120BB24B074639BBC081916 C15D1A64B30D0F54A17A233BE35E6A9FB0B519E497C66D64487D21E68C3266B6 E05D6BA61CD5D327B507C7F9FC236B8CD6AD02D0D8E8703BC7366ABEDC18D9F4 D8021D9F976A76411A5ABF110F08B0C82E543633EA2F4BBF42B46A3A173C7E58 D605431AB183C8608CA5C96DCE8C9774C94357C2439AFD69696153442D44D7D9 9D3036A524104EE87D41CF81D1BEA4DCB3DFA1FCB8684DB183E1125B40E07E47 EE00BEB21821534262E47735A12353F01F181E4A2A31F14F648FC33C27A9C8BF CCBE00CC19E918ED21C9985EE8DF456FF5315F24C9C6212C697D91FA63D6242B 4DC7C38653351CA031400CE50073E6686E1134982756E80BC168418541C3D5B1 4CD810D2E4458B0EDE635352FFB488360E17D7CDF4CF3A62348E408CCABD6142 5A803EC4A579D843B1F749319CE465882D248F1CAAF3017F859EE68812E13F19 DC6CEDB6A1506229410732C93EFBCC4C0031595CE61DF46576DC6905DB8983DC 9A632781A659DC1A38BC829FA6CE850576A87B511C9E86665E01F83CE84BB80A 253A73E4FE801D95A83A4C46DC35E652BE2DA990CAFA8571B29AFCD068FD7F9F 1640C120EF144873B511FE902FE70C2DA7AE9A073A92EEC0755C3E86343F596C 90E228AE82026B337366A2AC0BBBAFF0E21F7B0AB128194496416A6923B5CACC E2039CD15CC2D16C150FA403895FB424686036EE8512120AC755CA519C621BCB E05879EBE38DE047A968061D37C4189B25183FF0670BE46EFC2424755C302099 495FA5717B3C52762EA67AC9868D567AF5A85E26015D5572BE55C8D26D4126B4 AD3D47F61598D91F646E61E9F80F1B7C905739C1F47015CDEBC7621E763244C1 541BD38101C0ED0493F86E9C4202937D7E43D5EC140785226287AFA57C0865FF 437D38B0A9031608372BBD549DB624942845F535F8E3CC2F480E50520EE844BA 4B2C57A781806F9AD6271CAF3474BB4D3706F3C26267E85586F66A77779B7FBF 5640A5FF74543FF67A5672D0E2CAC2883534B620C4ACAF60934457E5EFEDEE9B 78ACE702656861FE5EEF161B86D0D72DFE91C696BFA828138CC5EF2B2B3F3A9B 11F9AFE35400432B9079A4DD5A6BCA21BE51A50DABA5002D5802E6C050ECE8E4 E389F3CCE30D7633EEA11FA1CC2C156491EC83951A52E235BEA1FBB823B483F1 7AF7641254A28509E8B963B03F132867C0490BE3693294F8978504E3152A5619 B484AD1807D46045725B93CFF4DE58C30A7543BF2468EFB71AA843E5F685C2C3 1BF1ECA92F9531A9E8012095738B40285E1449A934F887D05D07591C52993FB1 B1BA4F4B5C613C14EB49905E59B00A25491AB731C1C5E2C7F95DF48FF57731B3 9778B6111214B87178E51FAD9884A71D620662873402A2F7C79B2A919CD1F610 EFB614E16572614EA00A89E4CA3220C8194B1889B64E5CA527587240BCF02629 262021717491CBC00E6A157E0C772FA8B975EE76E0EA7E51FD2C895F0C2E726C CF8FFAD54CF9B5B5D3C761B0153ABBDF39A3C60DD10A7237421689882CE9F55E 5615AC8DEBE313F01550825ADA83DC19869AF8231062689F3EABEB03A6915D15 8BC02B202592F6ADFAC8F5495F5583E79254BEFDF0A0C39B84B90CDD38D9134A A66011E55CB8D10E32211647FF56A337D3F8D43FF54D9E6146E1A3DFEC6C7022 487C466005B9306F5DBB2C40B120D70CF92F9AC419678B16D1A198C634C67B59 670F234D94108E42330D2A4FE470E77F881425966E551AA323C01BFB4F928973 C22D30CCE15A43EDCF173B7ECDF89651AFEF88C582E1C1255C8053DE081C3E94 01922F22C9FBD73C82C559735BD7350AF5A17DF49FAF1FC647D04840C0D51533 F9DFBE1883660D41B5E29CF95DE07587FADB78456B915348E544062FFFC5DE31 6584A84FF09DEA09CE4B7F8EEA24F4CD85D6B85F9C4B43A79C71F71D30CC19EE CE97C3AF1F14C27D704B5047EA59E65A9DC3967BFECEF50167FCD9287E8B689B 9A847DC78BD4CA43ECEF7C21B91949B367A672C0A78E3581FD5DF0E3201C0DD0 61DD304F851F64B90ED329CF8BD74084133F2762C75ACFB780BEE05BBDBC2457 ADE2F2D308029FE979D19F91959FE72757C73C0FADB5E9E624D17F7808DA5268 AA7A2C147D9786D17207A3619AA4339CF26E4199B7F52AD65496C2C21473F089 19815C5E5CEFA4907348EFC5AC767F1518432A7372C06CA2F9827CB840F52D5C 7F76594DB5394DB341B7ECA274D223E034942B581DA75B26B1788F05D8CA04E0 097CB367D18B628A259DAB0B26CE5FCABD4D639FAAB489CAF6F7B607DFBF2692 6F4C6093F230BF6DFFD7AB31115E51D5318F5FF5435BE5D0979C50D00DC039DC 5A930A7AB95DDD5CA426E3B49FC64864BD47248643DACEAE5280CE7397770343 3ABE825A842FE443E4DC27603C87526341B24FFCAE5F8BB0125823C40F00D3DB 67492DA1BD681E9B9F1E377D44CCC023D7E9A55F58738CB4A12B31951AEB3083 7EF7CCDF2AAE900E064906D0F881EEBDF43BFAE3A793E9179F3410C64A8C54EF F6A5DEB2B8E5FF88177442B4BAA989EC97ED3395D3597AEE3F7FCFA62FB2BEED BC58D81B36057A69614ACF806CA5F4D3CA63020B7F6E9995B50A40DE3C3F9A34 E7710196FCEEC34E5E0E74F8C2270BEE23B2860CE9E464B7B2A1A8240CD95E1E BC88A99D693CB6CD8233C45CC7CF4972B40066A4E9FAAADAFEE78E1D8DEDBC49 38747F66D91486EB857C0E45A6DF4C2C229FC05C8C8C4F75AA3D2BF49BEC7343 4268E07D8E47D9EFBBF64869468E8485A56B4223DBDFA9E17BDC0D0CB48937FD E6B17EF663B664898F84814862C7A3EA3381DAEF453D74F4927A1CCC78A12E50 16292A6B4DFD0E0A7C3D702B2E0E3D5AE19C92BA5737687E1DDAA620E43C43AF 866E9FEAD7E7E1BFB1AA7E905302C91F65D7438477F18729B8DF4DC6828428B8 58F0A0E023B0456205EBEDE6358B1169EEFAACABC41AA2E69A29C2461DE4D300 E2394BD1E2BBD97C0807A95F8D6828522112EAA352FFCCB8DE2C54F3E635005A F03F396331662FE17387AA3A697AC8137D4601383EE6AE293AB6881D40993F7E 16BA4152181D7EE87EF9DA11D8679060A48C418C1C3DC184C9EBE4D8C422D691 6126B2D450A3F7007A9BF12DB1AF58E6AF981D7CD4882F55258C9538576CF3DF 4DD8CE1C04A7EDA773279E7883ED833C47B948D4629728EFCBCCCECDFEADEAED 8165D933A94B2096CA5D78288557F28D3E011D96E19AE0A72BCF794BE3715C30 B83B49963240A52DAEC6B1278682CDA43C3776F822BD1EC20E775EC4620C7CBA 03896DE341199AD658773A38D5498597EF1EA8F40BEFEA47E03361AEE65B38D8 5AD169E3BCD41D49DEBD31CD69BC49672F808D9FEBA08E07DF47BF0738E999DB FF979A78B2C270C5CC036DC31D11F6B03217CC699089044136D8AA5B5C4ECE15 E13574E322BE99BE0F14ED4130EBA6786136317EDC7B41359D9B92F43D5266E7 B6FD7CDCE626544F5CB53D0202D6D38236EEC7B0D5DF6A1498266E798F03984D BF13C06BDABC7A1B1488EC186353B9C4B2E1EA10C7441FDAF860592CD186F324 292F73DDA02B7F6069DAE5B98AE7BD4435B9D99A18A82AEBE47308AF726F98FA 4E4296BCFD05EFD91762DCF8DC4369E68153A4BF258CA3BA72D540748419BB4A 45E8F237C5C9708DEF25493DB95F657B188384A98D39BC3CE40DACF182C6F951 6EE6D8E61C7A7B42B5A63631D7D32E22129543C49F1D293359C491B5BE7257BD 2A43956B6A9AE1B72989E5F98CC5324644F3416B277511CFBDE86981AFE4C080 9C1E543F01A9D6A7B31AC240CC3F2BA074E7B198E60A72CC2D3B16617AF8E3E9 1788862AE7163B72D7A7FF070D4496B15B002C95EECBF49623ED17B7752C6358 6A0FC72CB5EBFAECF6E68A1EBF878E258DE19EDA5A9CBFE92555227B651725E4 018DB8A7B88AF8AF92497A681C381B199497F35446353C413F3B500644E4601D 291DA0B6551596A79D5FBB6A62EB3A4FEE7094C66CB8B5CC9D18994DDB9DB96D 4F1D6C185B98DD528B00444FBBE57F0A911B89C1F878255BD5DCFDE90364264C 2CAAACE7B8B2273F38EAA0089282557FFD83CC90ABA391ECD548BC410CE078EC B76E4B7E0947D797700DD8D537006CE8560528BBF978882890C0471DBDC12B2E D2F0763AB9C11FB7B9164BC4FB3A19CBCBB3048D4938EC9689411E2EBAEE182C 3F027AF6A6CB7C626980878275121A81CCD29F5924B775C1745CCD36843B2DE3 696EADE613A9B428CD94276ABC67E5527BD313C2AEADD53803D7222A982F3BB0 D4971D007D768B120FC8620E690ACB11BCE62379CE4971DE8D41F8C9957C0947 C4DD1ACCACBC30EAD59BB771B4BCA42A61A1BE6A3038949ECF5B5FC4140F85B3 3DD70921AC47D44E84C65AF8E73FD335C43789EEA3DA42F30369FA2DEAB7BD48 40DF86D6E4356D7E1BF9101894177CBA7213B0C733135EB1CCD189C580D8B6A3 2E0504EA3AF06A12E8AB5819E045A100CEE5612C1275C80F0F73E1249039FB18 2EA98BCE36738A191088278774AA3D40675131CE235488D0A62307E339ACF66C 19594DDE6738498FA746C364FD9745523BFD9DA16F6325B6837106762E54825F 1BA3DF52E15CD4C736BDC659A521AA36919B60979F6B2D1840E28DA43FFDEEB0 F54FDA0B10FB085FBB5DA6D3EF91BD8473E92FEB1195BE168F53959B05171E8D 7D336E2D6C085A51EFBA4CE33609A1D19DD43AFD1314804BD873B77B0B127FD8 D6EC27300B8FD628814DA7F9A3B7EDA72637D6C1E39961E8FF601F780D18BA82 CAE4E88FEDEC805A77AB139E3088208D6FD96D9434DE9C624ED76AB74AB65EE1 ADC86DF386E7661AF6A75976DCB06E5AB234CB1DCDAA0C24D4FE7667258C1983 0F11DC07DE831DE6803CF64403B9E933C566C83B2A4E257D4A9D259AC2FFFE61 3D99E2F5354B359D740DA55D227F2E47225772A3AAD66BB4DE8FEE30EEFB30A4 A260E5548DFA43D5F963F4E19976D366A5CB28CC0933C086E67C16A36B6F5CC6 96662DB0C56748A3DEE3295024C3E10C0E7393F7A6B05DF8BB6C9199510F64D0 9116D53EFBD7493A150FBB958C693257CEBC23EA1ACF2141D8667D569EB4972F 3475E1613E9930B648D1697FAB291BC0980216CF5F7DAA4446EC7417DDBDB627 34285CD64F021750B78A39BD9FC70251250B5CA9DBCF2591991BE230F8E00BB9 B6264250E2948DFCC834797F1A6FBCF11FED85D610F10785ABA88299DCF659BF 9EF6273314E1CB3B1CE4C75366FBCBE4677D2AF48B1481E66A4483394A19BA39 EB0289F145C81CFA6EF1522471391DAFE0824F8A0AB394E484A874C67AD62685 AA3F6B914A876F1DBB0AF5FE0AB88687F034C6D59557B6626FE111217866BDDB 779391AE15DEA9C6A93ACEC142DA2E6D2475D46E34995DE210D9CC2D6BB3C224 4CE3BDCF1B59E013A723CDC2478F0D778B0CAEE323EA7BB25DDC25AD68E266B9 1F7C71524369E97B63ABEA0E26721B8A09050DC307C1CCED764B6760DE9DF423 DD2E7F8246B0A0D24AD5E83395478A6DBE0EA5AA1FB7191A926E754FCC394A31 EAFB7008356466D75EEB48EFA1CFAFA92F3816C50CE2443FFD92EAAD32B01A43 88144F43DC4D73FE4BA9958146B56350AF6D4F27DD2B105245EEE16F81CD51D0 2FA1999CB88E5ABAD0C11A1FB959DA1BF8E99FCFDA28E216C1AC5C0EFA23BBB0 0FB2E52D2CB0BCC0D5BA58E7F91635520926F48349237B227702E0B2B3849ADE DF6F29A6CF5722229FBD5027B6EB7BD07B6BEC78C4CBF9D81B30D395F3177000 0994126FFBF7024AD10005DC5CD36ECE75AEFEE17F243B24C994CEF8E842C4E1 ADEDBC1D76B3227CDABC495FE9481DA9EE4AA727A3792FF1363225A9E116F699 C54BDC7E568CB430B12CA30882774CFF523518DA08024754B2B3AE1087764A21 7B1E958039E547D2323A01106B297157A10108DF9775FFFD55FDC33A15ADBC9F 650DF622C7A6CD7F51C824CD5C8B057A136F603914FA6F3153EFB1E3F778E4E6 CF1708B0B567A34611668C2F1BE23DA297FFF66C49E390E7817252B5F72B6D54 D8C604843E267EAE5EBD2D855C2ADBEB626D9A95A5EB5BE00ABBC2A9F892D2E7 10D1DA59BA9498AA12182D3414A64461073CA6993E912A728240A3592804D09C B17F3B3260289B9AE6F8F9EDB8010348955480E6A912C1995C4FA8C62E55F202 CB0CE5AB04AAEAA2FCEE645FC478F6DB59A79BADB3D025E209E8D171E9E20BA2 86F2197C7A0C0680EE9CC761F6053A7694962E87BBC2AD33803F53F9C8604D64 97A1376CD2D861867E3D1666A450CCF50E446711801785751069FFAD0E86957D 9B16E46121E2876E45AA5184F91552C7010C4AF56B631D3C6C41571E6E1FC8DB 90F337A45D70885ADA54F94DB84C86D0CC1831CEA3444C9EC65ABE74072F05BE 33D675B48F7B8761FA1F2853A01D4E6FA4FFC426ADDA25D4C557D53244A0E635 0931B89E3278F42F7600F173DE06B0330B7842218EC583B334FDB1A2DC1100CD 0620EBEC78AE8271C8F59846DE869BA38CA4EBBE8A92402FD244ADC9D6BC3512 8D6D89C7D29BC66D19510A6C6644EFB60AD28566D460DFD5F96EC7E358D058E0 BCD33120978ED539D76BB1FB26A369D3C4E4E674798D1931FEC03C99E88C495D 98FF236C8B948CF45E2FC66BD4D8148C0C01521FDA4137F32BFACC1730317696 1AE2EF3EF97A339F298FF787514EFFF4310EF3C0DBC1842E9DCAD48D0B2B1E49 7273C95DE8DDB19312CFEFD9641C76643A008EBBCA29EB8CAA62DBCBC640012B F78C5C0C9BA61FB48F4F4C63445CBC839337986809E45676120BB7835B77B564 586905AC4B75114B9CC3B64F5BC10596848CFE863D0E444FC6C51ED1C06F15A9 00E9DF4441B3D1560D636814FC3160E858129AF5EF45736277EF74C871F9B153 D24EAB15DB65F47C04B128BE53AE87E71DD265C173476F34EC98EB4E285AECF9 C4CAA12571C1070BF94B8B057A2840C7AC0B4E24599D3304A23BDC117A2134E8 2A6A39E3723FFEB5EACD1AB9A8265DD5C90D0F15485D4F4266670C3868990326 990E79FB65C04F432C39CCBB549D9310D9D0E9AC45109C60A9BD4EF2D4197EA6 27089D71EA6F0CF7C61563DF5D7261D8238F426284A50C8E8A5B1CE7A3F74668 A4C6B77FDE4842D692D43802A28284F2D7745BB00DC2CD15CE0BCFE0AB303D09 4554D8F7BF0A19CD0DB84BB955E9F30654F0CED772ABD0DFAA7E1A6321A5FBC9 587434960D1A2D6ACC5108E2CAC594AFCB38616EDBBFCA93940CB724E4280F27 0E91B3C04F01F6C9EC361FE256B030CFAC5A710046255E6CD81823828C4684A0 7F7B9B24446BCC09CC5311FDE9F0B8D384017EEBFD1A492C418E90A8A42AB1ED E173746CB9E09B720740C4535D76425439A3DAF357261FB4CB436A9242AC912E 191FC66E9075AE9896A23754FD6A4A1B42057BE56D0E22275BE37F75AA0AC3F1 6988B8124B04EED4B6FBB410393C56614960B6530B6174A596FFA850C5FC9FA9 C41458A2C7F9E796C01A3020B00D4F26FB4CD52592935D03AEA40671E460C3AC AEA3A13B59F9AEE6B071B5A326BAFB26B841889E20BCB92A174DF96C74D8865F E68B5B7FA828B670A921CFB4DE819380617EC8DD71323323594F3AA57CA06351 890164CE9EA38FC4EADDD69AFD5F4D8CA5F5E358814669283DE425B3402318FF 265673F77139606B438C5CC5DF58936BD35F29CDE8064097E3C27F4AA9E6F664 414804B7EB1BCF34CA5AEA8A9B39F38B2CCB0741EA84B992D45A2680BAA54311 7FAE15BEAAFE6044AFAB0B80E230D2C7E1F1845CB9D0D8EC5DD4DE062732D162 72F279E65914A62559B3A974FE31E6A567B8A0C7F6AF833F147EE07EDC1962F1 7FBED30CA4AD305F73C75C3480A59A4D85A4F1D0C81EDF8C60EAA4A159DE0C13 C8355427CAD4D37C30953A48CD0752FE91ED6549A96AB4CFCECFD416ED925717 884969D671B88D0D25640690E5FF95B9D2F95A072A6D5CF9F29189AC3708C8E2 2DBF3EBC3578BB857FA6AE9B0271AC4B8BD975FA20B4AE6217EB27774C984DC1 B3668F3BAD2BB5BE6771CE84818493F675E15C5E97ABC2295A1388AEEB0F07BA 530384DE356DCB2609FEF2C2D8D55CA4482272F1BE568C4D43A0357154181FF4 76A45FB72A6A8237781E876E6CFCAFB759C44603B92921F3149D986F7E46CCCB F44708067D004772C7D5A1007EACF51A4450CBDFE34E6B02F6380CF5EF091A4B F90B04550F8DCA42EE4899BF7E3AB18279AFBC247FA297709529F41719F7083F 25074DCFF2FA0EF5B2EE4C7F1380958A195E7E070058822D5F9656F6C80365BE 89A86A86E8E3DE58694F134F3EECEE077EAECBBCC5F423D204F70C57CBE45135 838EF53EE8E41302E5975323133F59E1D59C0E2058CD708CC96869F36E9045D5 43F5FB8EF21E7EBF3FC3A1F4D6415C099482D6D31020881454DC6CBC2588542D 58C0678EC8565E7A97CFFEF1542C8850A8A1D50B78AA80AFE075C889A867DF58 C59E010B25E4097844CBD40D76F536B8B3265C1A16D2EDA1D5BC8E6D7E8AA3FB 5B4BBBCCB6B56ECDBD441E342F1DFD315FA30A4DA142C8CAD8394F8FD589D20B 885340A5D53AC6EA973A175C552198F91C8AD698C94D386B2DA4FE020EB20964 6BCCB3CF9847584551344384D2542F871AE8D52D147500FF6B2F254EE9F06D98 81AA1E0191A60FFAC176479C6A60777EEC84D723A235B3682AD425670D3C0729 82072184BA0D96FC77D2915C59720B94365C7BCBCB4565B98C352CA42187035C 74483DCB99D99C8EF548A2857AFD92ADD9B2BAC3D06095CEB5F1B28F017A05A7 E040D862DF27FB8D2838E1542C123A3C26B304E5CB737F59BB97E85FCE6E1790 2EF69451C608C68C19F98ED686638AF5495B4FE885DF83BF3BAAE33682B3213F F311545287CF8E0772808902965366C3FB7651FCA48F4302FDBB78C8093DB7DB 52D919E63CB8EEB418A8F943D76C063F9031A824BD56AEC510AF1B90679B8F8E 61A7B7FDE61093F3FBD296A5A3F495C1C77F118B3CA02826C13709C5E2747CF7 2AFB710A245D09E6EA25484912DF0F385FE368273047EDAA341116D1B028B00C 9ED1BBA4B8CE5F2E9F7088EB4D8F5D116B2F56D671F2A35AC99D04DD5EC9CCC0 B601DF82CC8F35AE8DCAE8A14031ED12BCE202B2161E998AD76EA41D0CFAC3CC 9478B0FAC21A0178DFBF5BE8FB593AF13C9C9E24D78B55A2F3020F9209DD4680 CFB4D1C23B67A5313F7A3F7AADC8CC6D7E0C727DADB5F084F3D5B5510520D207 6639D0FFA99677C4D2E328D0E71C9DB7800BB12BA388E4DCCB8A9A0D5E3588B1 A1A8A7DF82C1709D96CDC17DB4FD47F0113C2824450DE224E8F5F2EA0A47C1DE 520E994DFDCC78FC572D00BAA347F68ECE76676E05588A2F17611F99F5D0C21B 1303DE26CDF34A30BB3E59828BED54EB1DAFF848C550D849D55D93F2B4661334 A87318EFFC251EAC0441AE47579A01A315B2C4F1CDD2EA76E22268D7F0CDA453 50C40C75920914B2312B51EC51A0AD1E5BBCFF81003AE1CF1BBDABD20FE9205D 181BA7777C7B9C19DC4481D8994A53BBBB9D0550652355B228F04ACA6D820667 3495F80635459892E952B4B8B5D479750CCEB3AE58D0273BC5246BA429C6A6C4 5908F8238787A044F5F5775F5BF6685F577351B35F27A715974EE56A469FE375 9724C5625B2D399C2D4AE2D1CD0630CFC8905A60FD43806640DF01216C3F1750 05E79D28682625F7DDE19BD2B98BA3581EAAA9EE0143A2AF43045A0D39EE9C62 9B5F4F4AE4FCAC9AD59300BED0800FAACBBE97445CE7E15B331D7BB0EB861A19 CD8BDEB1E253B0F6C14820C206B6361C673DF28E6905EC04ED310E3741BC027F 77D6B45533C6114F02D0A901960BDB5C16F69988B88CA2DFDAFABBF5215022D2 3D421D7ED07EDC9569EDA34EC5BE108480D6A5905CA8442CA76B64C5EC9C1C83 C422E07605DC86D013BB8ED86F6F93F98050C1A648A6C4F3D5084EBCD24F1997 CEE6001B3195C1F79B3F47CC67629B336571C3C9395E11DD3F1E9D508D20436C F4EEEAF84BED866EA90EB2E980725C2E5E39457D515D9B9C4E57A110488EC558 AA839EFDA7FDC4B59F7B1C5163F34360CEA089E94114919D76B583EF05B1D9D9 C2B7389B2A450F96722D095BFA42783C4DCC3D893186D37C4FB7C24335968A19 65945DB7F6981607399D180D9964F1DA780A98B5CF2E4D51BE7FCB72BD7AB251 4705F390E60760A2329526E2F134479B1621F006C6C5CDC5EB7D1F6F42E8EE8F 7C327621951B419A92C33B380891076E3765BC64B7B1077897ADAFEBCF22EF0C BB0C4C55559C6699B53D29F74EB2A402392A840C03215E6986B3EC0A2884EF0B 1A4A263A71321A2E167F611EEFD46B1F3FBFEA25504C412E927B4FB452BD3984 9CB515735532BB3D51817290583AB5A7ACD7A0075C88648C1DDD03FC39BBB0BE 8F8544935F97A71C81185FA94436B4D4E7CB772EEAF288F1344324B60E287ECA DA67E8EB473CE63653EB1BCC36AD9C7E0D8B5711BA863A6B3B2F554838314F53 EE63508B1E19EAFA4C6788C73B6656923882116F6C3CF1B00061F95A04328305 32102BB0FBBE6219CAEC573AADCDB3A021949ECDC9C51B09AE09911247E77622 5B9663B4BCAFA55A4DC4C1820D24AAC910801F046F19D50E0BC1CFD5E433E95C 3D2BDE84DD5550A6ED4EA5C49AC8B3F3BC1DFED0D1BECF01C243CE6D7B7FD8D8 D0C18D70A3DA8B496BC5B8FBCA8E3EA53D89E24E759B7C1742E998985E08F174 469A5CBD27502FA95C43DA6EE82C4BCD5B807500C2EB82A44C53099AD219B650 2F7A038F43C44C68B56FAFFEF098D916C86F68A7726C45B277A98A3C385CD279 F1E666F7B633789F9315618DC338478DD02D58FE469010706EBFCDD868E9FCEB FCB31675AC4347D326DA7FB7C0A67C820BE987D3AA39729B50C424AF3098F7E1 83B0C44BC31FA1410D3CDA1519B70568AA7F6CA8D1FBD98EA8E5F51A5E91ACD7 D5D8A6ACF0BE688545C104847D7BF7BBA34D81A47F55655DC1E85916084A97B6 BA49FE332A07CBF9E9AED719CCEFB73A9DE9BF792CC60B9DD92AA0139D4ACB19 E7FD1F5F8ABE0396DEF13F4D596183802017E86D386EB0DCC365489DC2FF43F1 0A0880BCE91F7EF5BFCF90C7F33B4A8EC22BC129A69D0B0097F8C3C9547EFE83 1C6C4A58ADD302681B53F692E892F3AFB9B57C118E3BBF194A2869E9C4E5B94D 89E85D9365F6746E20BBD331C25FBDAA8305C6F95A5183B3705390C853BEB7C9 B367CC5FAD625C16C8192B6384292A2E1CD061E5932CB4110B62F302D859DB70 2427565BCA07F86A53921B1FCEEC3A53ED45CB307DF991377183D55D85722FC8 25D7666F51E085C541E1E8442765D2F6D9763601AAE73F4368CEDC5DB61FE58A 7CF801E47BC61D014CDC0A994E6682B64CA73A9AF36E588E1FE63573111B8673 5D16169D32186CF36395629B4350112A8D6E90034AD43CBF037AE9638B80478C E13A903BBEFCFFC571BB9AAFD22BE56FF2983904A95030E577899453ABFC9382 E6D598500FD94EE839B6C802959DB7612F0D2B15C7462D2878DF99E013ACBD85 80A7C69EC16DF0445DF866B98B7D8FB2277759A4DD357B500489E4603D79D936 C5B460C4CF2B6291D013DDB1DFC4A177D38BE9D71164D287DC99B62B8C50BF82 846C76C8C79D86B6D3806A4B124AC9602CD4A5918A9C9B4516AE7886F4078906 F0F9C0FE2954F4A0E7CFB0DC75D23CC90D83C2F6359A797993EB274E29F1817C 52F87749C4FB1C9B44C3C15426C9B9C065D2D293CFA3B63D184C26ECD5A58245 7CA23E3ECDA67D1A398BBC6183F9220E89E909B79A9F2B6D5E125601B2E6BAE8 67547C8332CE4E16B78007ECD5D3F7D05E5D3FCF8DDD0E8F74048595B6452F43 CFA2A197A06ECD74CAA7C26F777010946829430A1CC436400CDAE3F9DA457BBB F264A3CA50D09E925D38EA21B55D68EB74D57CA505B778B0BF7C68C761075A6B 33E54F8A1F5555E1FFE4FCD3B521CFCD2C0BDE1237B9197026E40449418B5107 E2689347D90F92FF40D2640DC9C37B9EF67EFAD8A1A619AB67E7D84CCD3A7C10 081DDF357A04378D29FADF70AD43408E6F2CE2D411614FCD2D60124F37DEFCEB 7857269B9A463D4DBA8E1C9E1E1B660B6726523EECCF6CA85AD57DAD768C5472 DEB557195A1E2C96A3CC82379630664FB09FBA8CE601BA2C6996EE61E2CA7227 E3B987EA4DAE5D83B695AF8B34E343CCFA937CC01F0F53AFE8ADCD551FF055D3 D5E5FD28153EA590281BA5FFF4C2B8A9917AFC4FA9F3F9A189776C8EB5B5D4EC 442E93D54EB74EF154D6EB5645E7F2401F048DC2438AF0930D079C99DED53C9E C3055A5F0C7E3592 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMMI10 %!PS-AdobeFont-1.0: CMMI10 003.002 %%Title: CMMI10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMMI10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI10 known{/CMMI10 findfont dup/UniqueID known{dup /UniqueID get 5087385 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI10 def /FontBBox {-32 -250 1048 750 }readonly def /UniqueID 5087385 def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMMI10.) readonly def /FullName (CMMI10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 16 /zeta put dup 24 /xi put dup 30 /phi put dup 34 /epsilon put dup 58 /period put dup 59 /comma put dup 60 /less put dup 61 /slash put dup 62 /greater put dup 64 /partialdiff put dup 65 /A put dup 66 /B put dup 70 /F put dup 71 /G put dup 73 /I put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 88 /X put dup 89 /Y put dup 90 /Z put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBC7878DFBD546AC2 1EF6CC527FEEA044B7C8E686367E920F575AD585387358FFF41BCB212922791C 7B0BD3BED7C6D8F3D9D52D0F181CD4D164E75851D04F64309D810A0DEA1E257B 0D7633CEFE93FEF9D2FB7901453A46F8ACA007358D904E0189AE7B7221545085 EDD3D5A3CEACD6023861F13C8A345A68115425E94B8FDCCEC1255454EC3E7A37 404F6C00A3BCCF851B929D4FE66B6D8FD1C0C80130541609759F18EF07BCD133 78CBC4A0D8A796A2574260C6A952CA73D9EB5C28356F5C90D1A59DC788762BFF A1B6F0614958D09751C0DB2309406F6B4489125B31C5DD365B2F140CB5E42CEE 88BE11C7176E6BBC90D24E40956279FBDC9D89A6C4A1F4D27EC57F496602FBC4 C854143903A53EF1188D117C49F8B6F2498B4698C25F2C5E8D8BD833206F88FC BD5B495EB993A26B6055BD0BBA2B3DDFD462C39E022D4A1760C845EA448DED88 98C44BAAB85CD0423E00154C4741240EB3A2290B67144A4C80C88BE3D59AD760 E553DAC4E8BA00B06398B1D0DFE96FB89449D4AE18CE8B27AFE75D2B84EFDB44 143FD887F8FB364D000651912E40B0BAEDDA5AD57A3BC0E411E1AD908C77DCE3 981985F98E258A9BB3A1B845FC4A21BCC54559E51BC0E6C22F0C38540F8C9490 88A0E23EA504FA79F8960CC9D58611C519D3ACDC63FB2FBCAE6674357D7F2285 4BCC9F54D3DA421D744D3A341DA3B494BB526C0734E1A8FC71501745399F7683 FD17EC3044419A88C3979FD2ABA5B0130907B145A8462AAF0A9B511D2C8A7C7F 347FF6AC057E6512902BFD2918E2CD31DE615F5D643764E900B60287670AE18F FDE15545D8BC69591A8CBBB275AFFC9B14BD68DF0AAB32268FB84844D4DBC7BB C591C1AC5102C50A9C7BAAA848DA88B0519F0F5F0813BF055CF0E3C86F633A04 B779D2E8E656DB1E09A66A85FE21CA8BA5523F472A229E83F2C4E91ABA46C733 F3C7B5775B06C97782BC225C46385BEBDC61572458EFC5CF4190AB7A9C1C92DA 29F84BAACF552089195966E3AD9E57CC914D20B6962BE80429A16D4DF1ECAA66 36C4343FADF0B2B48F12E2EB8443C4AA29D00949255F3968617F98B8ABD4CC12 048B838EE243A21AC808BD295195E4AE9027005F52258BFCA915C8D9AED9A2C0 80814F79CF943FBE3594C530A22A92E11BE80FCEC1684C4F56712D5846B0749C 9B54A979B315222F209DEE72583B03093EC38F7C5B9F9BCB21DBE8EDDAE9BE8B 75ACE6B12A31083AC8348EC84D1D29D2297A266284B7E9734E207DAF59A25F4E 4AA38509E993C5394FED76E6A2F25462685C4C86C6E8CFC9863338EC1428BDFC 74616BB1BC8948B0ED4C87C15B4405F3A7796F9DB3798FFFE8BD0A94E834817B D5E9812E308D0CC920470A6F2CD088FCB80462BF7CB3F039A7DF3DAF5B2B5355 E083A385CD2EAF0FC181E40E96DD7E9AB9EF5C7E6866A13B8A54718E950FE097 EF0951A357114F18CE9933D28B3A77AA71E3CE884661F13284BCED5D5FD1A86D 543E588FF473DC2CF9A4DC312500135F29C2D0174B32018C8DBD40EF9A232883 710A1F2AB2CD11312300ACDF789A9B7B93D2035D81D1C84984D92D78A53A00C6 EDA94B24BBAC1AD17774A4E07E6F74ABD90415965616AD540C8ECD8C3A44EE4F 7F4F6BB6238C5062D63FA59B7BF08BE93FAEA70A2AB08FBEAAF7DBF56B95FD93 03CA406543BA6C9527D0DF01F5108D31A51778A5EB1C93F27B72B46146A353A2 01CACBC829603B9989A87CF64528682CCBA0562A8165B185C58A5C6BB72F5E89 500ACCAAB8ECEFBB2640E99EAEEC4EA979AA793D013D61D8ACF8784FF8D9398F F6A252A709324FB39509F0B3A4E725E82F53543383C6765BE556CC897C758208 AA3AD37B0406E4A79F8F0A6C1983FC73E71CD858C0DB66ED66D5D992978614EE 1EA91EBE191E082EBA1FC040AF19A2202575C2EBEB8058833E3520FA03D2F915 85C1ED337E457B9FEEB0C6EF2735EFDA6E0D05FA641BCF698AC6B97751E8306C 4DF00A39B8581FF53DB8F8525FDB196D85950906CCB59B8EF171349AA3B567B1 6A00819947A995FB383C3C1709C9A2C113B2E40BB832B7D4A0FBA0B16A2C455F 55809CC425C403E9668DC66BE45B71A81C332FD4DB279D22A2959962304A8F18 085893DAC61317D24A8F198FDAB95F3B86F0AFD35047B868A9A17037A2829A02 BAB042F75F349E197A7EED41984C2859754CAFD0251439921C248B463B516951 2E1322C80D73F9CBCAA63A585450275AC2492E4D3FB78E800F788254DB5E610D CF788DF5C70FF99892BCDF16133E34B24B77C8F097F546B87C603DDB8998B66E BACB68BA27462AF54AA405682EC96D701F0D474DECD5F95CA2102DF639EB169E D518162C2BAE45FF698B6DE15FC6E7DE48C336C40A670FD26952A6BAB09115E1 991F0073419F2CC2A1C08BE91096936AA0C37E4ED3CCCEE235476074B8FF1125 6BDE3701F85532D8BB64CCC927CC335281C95EA689706F0AC717DC2CF680C754 E5EFD7FA4BB8880B2B727A964C876D4A223069D4E6001771F0E23EAD2A4BBC80 E76675297B2EF05F52BF4E71B3EE2BE3048CF088C79540113C66AE98B2FD3CB1 B0741A215FD070882C52765009D7D711DAA2508F19AE7DDA15229A856AC49BC3 4DDF40814FF96500E4B9B02D412E94623C5FDCC76C0FB8E42DF56A904FE49D65 1DA7C53901B2EA71AB658A464D3ABDE27D9DB8D9E0B48F64E61A2495AD5D8DAB B5E72424AD017DF37964AF911BD7FA21A5EB4775DC8E95EF0C0EB856B00D89D7 8172A1DE8530767D317B8256103E53CFB877E10686A04F5A08F8DC58D843DEBA FD5F40597588663D103689F6EB3EB14D06E18C8078F2538B43E712DF491FC5C6 AF639256C8C6134B64D560D8476DEA6329D995E46CC4BC78841C59E73648B47E BFA7DE0846422F738454AE77E822A083405289247BD7C478BE4974F742CD6051 E99FBB1D1B3FBABFEE855174734EE45E87D0AADF32B1283B911162A9955847FD 38944D70584FAA6B1A7191C5C134B73F98EB632B69E2F0C0F94156787C34C8A3 7622A029D58F9626B74F8A8A1F3803E0BC20E0EADEB1E99B70F1BD9F980FB751 2A842843DE42EB142A84D5D3138629AE9EAF6F3479C423E8829C8816FA6EFA27 DCE5580E65AA9854B1C64163DC318420CD993C15BFD76A8BA1182860A6B03D6D 22B8CF43CFE6C8AB27C64842E239CAE707D3086BADDE1D7C94E3BC96319470D6 8D26915C575CFDD03271D6BB9DE86A0EB6EEA6E768B224A626C62A9AB48A6EDB 44F70BB5AF991CDF9736D65933E81CC57A78F623F33EC9AF535F2F25FA4EEC90 D50DB7E87F31E971A75A33A301CA6013EEC5A4E179D695B33DADF2C98364434A 42926776000B610E17524162253F6FA638D6581C18F99EA0BD1D2E24D2424ADF C05010D08192485153DD03930C7BF45237593E484F9851E6D464FA10FECA5D9E 0C8CCC97DE029030900CDBB491C5CF226DBF903CFE7735D939C3FDF3A20B70CE 66579B28B99313FEE914E295388C7BC8E055A2E54EA3A8206D3C8F4F7C0BA5E6 E519419FD8CE215F7B8E9BEC604A9E3FE272A0328A24E31997C8A91E0946BCF1 6943A97CBED2AB9FC636B49828BBB8B89E0BBC2653796431224895ABA5DAC41E 1854BD9764E86147FD7624F736F40DE3B7582EDDFD15C2BDE3F22B5A54D7DF10 B87A1301CE85CFC061689A890A321412A13314AE96DCD3EDA75035FDD8F4AB9B 897A2C68263A68457032C469987970648BA2D88B1C5375DFEAA35A917B8A952E EE670427942AEDB3CB599C5746180E392837D371E15D860620ABDB6AA7772C40 A5E346661673ACA530BE3D8E3FFB895E5DA3DC23B1B43C080C77F7E47847F0F3 F3AA5CA9E4BF75FC5EBD18D19F21A7DAA3B11CABC6E4070A15F7DBC8B05EB6AA A02EF1B078EB66D61D6AFE41DA9B36FE7EC9EF94D1EA26282A9871E2CACB3126 2AD49C2D9B50A6E47D8F2CCAD50992D1B430979A45FD9E76182A19964BB2A1F6 51779A2B258DC1DF4C2F3074621286831F3848AC152DDD2BA561E6586ADA88D3 598A2CE2CD048F027CE0008B828BD915887D7785341E8305DF2346ADB76BE99F 87B02173BDC334E9221C8DF54114A6B24C1C5340299512FA6C8C51AB4C8778CE 178CEF531C6D1B5FF0A1BE8EFF767F959BD4C345C52699A29A17B2A230842BF6 4B011217D6D24EDAC3F6D53482786F1CA33169B90ECD499407D37CE9B70DDF78 7B7547B32952535BA9ACD1E244447AE3FCED3AF28717083CF9590A09780984D6 AF0743C82AE4FB3E2BB2856A4153A3967A023FFC35382D6C22D84A924900B6A6 3DDD400E6D2418DA6C27F2FA34C075C902B89EBAE658B3C9A18EEE449DA5A379 337DE95CB7AB3F0970CF1A5D8FAD8090E495570FDFB2FBBA79244780D8035547 C5A55BB21A2270F724BF5D442CDC5BB9F09BE0CAE59B1C2270F0BDACE698F2C5 DE8F66BFB9634904B161F5BA2B1950048300D69BABD312D58D89C4ED527AF7BA 7DA2478EDC2CDEE3473DD8A8ED9D891CD1FC21F23013228BB3281B71FCE959BD 6F8E9059D682A7FCC5265A0620992D4FA8D78377EB34CE3ECA070EE3707239BC 98907DB0120CE42ABA32CF97127E28382BDDFD685674279F588D4F951216C355 821361790F64C2CC720DE97E8ECB57326C43EE47367628E05769E106868B54F4 C33C9951908DF6FC4F5ED2C7787BD8FA591BBB3E9C6C1DA94CC5E38D9B20C886 7D237572FF46DD896A4D6163408EA6CEFAC398EE041EAE29D577E75326CA17A6 B072D47A7B13EC441CE6DAA042ECD02134CBFA6809A435050413817193DAEB16 A5882C8AEA44BCF36E74E9ECCDFE7E19FF5A5DD7A94E5AB4F8702C3DA7F42325 23C808670A0490F5B373DADE40814FF9650241D3D69C91FBC5ECE728F827D9BF C928602E05477903449E079164CA39859C4BCA60C579F490AA455F82B5050BB3 969AFB478E0D4A257B3356EA3CD62051FCE6C6B1929CFF85BFDF166BEF658E10 3A55E007F38EBBB248B3F0B8ED1925106B499B762E45113AE1AC9DE09644C84B 9C08034B297314EE69BC32DB6E7D7FB9913CE5AC17E7335979E9DCCE2BAB3725 1976155551F9706A576FE0E3ADCCF72C87683291528ECB749CB0ED291966E239 B5E3630676BD409E08F85BC1AEC9A2D4135376284A96EA24431243BD6FE8B966 95F11A4BB53F392E0AEFEA623064FF8A7002367B0A515635CB2D2DDFB9B4A8D7 FE721754E81BBA548848A235B91AD4E4F7DB19CCE2F61D277FC00AB956EB93BE 44AB4970CA56BF59506C94ED160FB1E25D3DF2988A532BDB787BFB8539D22986 FDC378AC31444E63C4727FEE121A43751043849E6DCAC5B59D0FC703AAFBBFD4 E8B7C268F21615AD02CE9DABEFA27B5FE6A6441B619539CAB1F810F1263447AA 633F5DAF483752EF1A0421740E3A811D2D2898CBF53E7F686C9223FD7235F02D 6F90D2D48CC20AB87778DE3C6FB335E0F0EC20B5DC5B65223FE117526DE2C72F FE839DF93CB2A7D66CD900CB325F891E311BEC932F703FB4FEFA29DB8B9C88DD 375EC71B3D58C7BC59ADA91971A3BDA1ADEA629CE6CC92BD542CDDFAA7706FB2 6CDDE2DF07E56D6741916AE8E8744339816F3E6C38062747AA9FDA2A2678A6B7 EFEA870AA3A4D71B25EE3013EAB1DBA34401B867C7A41AE51E0421D41D3BB83C E120C8FEABA6E5DEC53A689C21426D4BBCB68CB37568761C360E6D4E3596FB7D F4DEC7918E58C0293D12D6DDA7E9DCDAAD7C939F55CD1BC4A228B31E9A904156 DA6B40B08E6ACE674618B768DD681C772A3E55FE096CF949CF3B0460ABDCD891 D17B37B355B29AB5137899C036F31DA026244FA25FB798FBE5105BDA29F46538 D3D3AC1001A7BCECE64DE94FFE6C354166A0F97256137BDFA07F6E22A3D1D2F4 9588DBAE95E895BC5E64DDCBBAA8D0A22C229B42CB717FC711E7E9DF793DF80B 9F14754585A3C7E17F37B32924B9F9870DA8635E3E18BD1DCD81EDF01834D9C6 B33F23C956C2FCBFA47D84422F583459D827D1E120B97694D12F1F54D02379C0 D288F7104F3FFCF4F76E3494F4ACBD1BE3A15543CC680924C78A473F8E311ADF 8FE00A04C6C393DE61AD3EDA5BC031E2353076A2489391B52632387CA28A7B93 FBB065A6EF3658AE80B1ADA47E9B2539E73A71FA75645F85ED8ECC257FB4CF26 B6C912DE9D0F9899E70BECCB934AD32CF49A093371A9F73DE6255EBC39DE1E7F 00D0CBDABD4D0383977E694890E71FBE5C376BE5F3A80C28987417504F515C50 909F3D31178BB9B1D085BE514F71B910A9085BD6122DDC72A150BFE266920E49 5661BCB4BAB51D6DEFE32B616963DBD989FCDD1637B294CE4E288655FBEFA1BF 7F25BBF8CF17C2D5FD161A7C2CC9CC7490D9BF15A1D35B3BFA43ADE256E88BDA BD490D92907C57BAC408A575EC84D6AEE070148C7C9A91C03B09FDBD792E8FF0 C0B886AAD2EDD86541E5E579359D40E3AC312ACD3D8FD49F71BD533DDF8859B1 BAF17F1884E331DD07CEEF93B71D492AEBAADF7A263450A7A72210CE630A0D37 BF024BDC09ACC882816B8C22C62AE38A3A8D0F6EBC2B1B2C0B8161A8B076DD5D 4B779C0788546BB4CF57332230D237856B00D79C28A7C01D11F44B7304F69075 94B97A745DA43D1BE561372CE611C345A843834E46AD9DDB16CABCD3FA33D6F1 F6B5C0497F5EE5400B305CDC16A7EC286AA4D45D0EEBB9DA06AC9C5294D68EC9 E4DC3CA2B92CE8FC0526184A86EDC7AB34D67E60AC12D9CA8FD300235EC968BA 92C6FBDA47572BC5600F25249F60AD287CBDAE980E747FCBE7EE5CD323E733F0 63553B494D3DDEB9CC1480B5C3BB79A28E419AA65B18CB297AB383419E890E2A CE6F98C9900CCB4675280A10CF060B8D220DDA1BE55DFA65715EABCC1AFAA271 B1F8732341613E17B231231A0D24D4D7FC198AE04D89A99C4536217769C6FBD9 5EE24A6302F97438F7C0E311C878F674B4477A5ADA3952CDE4055AC408B8174E 86F8FB797646DFFFE0ECA25D1BAB9A9F71F3926D3D85AA63E7A8C931D71E79E0 AF1EAC26FADE468F4FF7F3861D14C10E3BE1F9EAFD6D3A544E8108D5DAB5B180 3950C74818BC8AF4758A108F462EF1826647A49667F5E482038C54716856D9BC 35F29922846D2148F92F943E951D7438C73D6A60459A8003174036C64E1629CD 155D47FD04B03C023AD67CD5A70C98AB556EEAB8C48169706E5B352F6505D580 AC945171BFE62E81F8F500438AC3B64D857BA5BC54C2C4BBB237F8FA51296255 E66A92A61FE13FDE781D393557EB72CEBAD86511035F775FAC39A0479CCD400F 226709118F887F47CC2ECC8F79816D4A945B2845F50AFD62D8C9A9BBF4739496 9E644BC9F7B04803B7EE75A09EAE94365F6F374B4FCEB0B506C76297564B9B6B 8B812BC3A33929AA94692572B010E6210AEAA312BDFC88BF302244AB9D587A9B 919823FD01DE12438D960944D1977800FEB49E638C32E5B188B1CA033E0C37EE A142F746367888AA119535F0CCAF7EAA461B790EB089D2D6962E28A398439BB7 9C9943654D7A2D765B46BC0DD1F915327F369162E1BA1BA83110B93F442905E0 523BFF5E279508A98568CD5CFD18FABBE9D17265A9042537872831BF5F1F340A 8D3E6DEA1D9675E87B3425FAA0172DBEFD7C28E30906B9FBA65517C9B58FB6BD E0D474E69BB90B0D130A32C4130974A1C961CF064A5BE8EC1056858553FFCF7C 0D78627BDE04E5D0B9F6F72F92B61A915DFF7AFE7DC3807891D039AECEAC3F50 0A09579E661D3DC3022206061E0250B09A05CF198DF82D4F28FCD3671E815A6D 94820D0C87AB1DCEC251605D9490BC465D8A62C95B7352250D76D9FF1D3D5A32 9690780A5B56F9BA2083B29AAEA996FA95246D55AE88B0D3F6F307959251AFD9 82650287B5A98758C8FF3A60C40CBE3445ECB497F3E04C98DD52DCDB2F632D5E FB5654C417A12EEEF2DB5F0CC54A379DA75BB9DEAB9FD9F256C1B832D55382E1 22A7DFDC37044BF0CC2CBCC4405D8A3495F4886001D615E1737FD9877EA3EB51 823C2FA1940BD8BD802C34BD648B41E268B825129BB13543961334C69DDD8407 97E868B79C83752682CB506FC1C801F63AE7B3B8D7EFD23C54232AA97FA8B2ED EF2AE0382B4ECC8B24CFC62F698F8BBC90215BEAA8446BE6D261E30DCBEE8CE7 6BF8D0E51BE2597E8086F27D4C58573A26BCDAB16BA279CB1336C362FF57CBCD 091AEBE7280B2096E8B02143177EA0EBC1EADF964D980DE4D9437737D42A9160 55EACBAD04BE427F252D90ABB66DC373129BB8866C077C70E76EDA6A8973F284 2912DA925584E2BA91C563F57E7422375E6957D8314A2683BCA1573067F3F1D5 6C6FCBC9A4041F28AB0A5483847EF64FBB35BAAB9AD149FE89AEA3DCF09F6B18 18C23506916D7320290F8C6875A0F8F37BF3185B77A4950E98786000776167B5 BA48FDD9BB25C65F05BC4322164BE8166D888E9BAD7A8701592F687D020FDFB7 0F2AD37895A7261577019F285DCAFF1F8F3685144A0BB43C4FCFE26554982B65 7F7DDABE3DEB88134E00F5861F70A277B3BF6E0E991B837B615791FF2EA548DB 387685D716D9A35002EF7231FF70255B94AFB383526AAE6FAD58CC7516A5583C C1F6D4C1D2E543B148442FB018389F5987AA74FF850EF9949BC9EBF64BF24958 4346DABB7B2E3E805ADE13140ABEE2DA328BF7D19391AD11444B17E97649059A 7149CA74B136DD3021D37D870EFEE1390B8BC2EB801E6D8368D90A002AECAEE7 63657CD26DDF74A2E974F65E5480ED68B277346AA84B1D9E08FB21A355A72401 E52269D5534D7918DDA7B733465C106DBA5802D852C13C884E0599B3BDBEAFEF 904B9BB7DC89B6C8297CB2EC801BCEC12AA50F3B295E43F949E9641FEEF81155 92268096C37F19C406810A77CF2884AE0BC9F4905B0CD9866568710C5C60B014 27E323A8B22DA2AC64F8A19DCF38CF447F81F2444AECF1E6F3FE0B889C4E3B36 08C3830251B49D31E88F3948548DA2955BCBD710B72B350D035C43B7551109DD AB035604EEA148CA5FDBDD2C28CBE605F6C8021628D0F1DEB1F85C2F13D9A552 0C37C21CF4ED524AFF6EA7EAC40B7DCF7FC933BBA0D29D0CBA011F9B9827E242 C8A2CE742FD2ABC00A949AB2FC42E6DB135E657CA2CDF50E90AA436AD64783E4 7A2D3F42C3ACC7B94FDFE7DF468ACF844FAA3B3ACFBD024341A7BA745D8F8A96 8F69DCE7222B8CA7D8E636F759CA4D2AC396D7C5458A635BC58648484DDE90A2 28AF32BC432866347750732DB90551A7D828AF6C9D4C0AD6C50C6550188A47C6 591C79612D50306AAD6ABF00FA849C593BAA89A0CE8AC50E81D74DDF46DF997E 912A171C61C79E6F9A9BD0334069D72BAD8961F47285E4BA83752D365B0AC4D0 91AC38BF602BA805A8A19AA67499F4648B1B29B6CEF9CA8ECDA2601FC828AB4E C4355F3E62EAB29B568486DCB5B8A12CBB36B06DFA498D5EF351FEF8672FF7CE 4557E2E1ABEB7D9F02EA6FD40B3A236AE78A8E4AB9706678E6957D60DDBB0912 48F4569D507B435A2AA9CA49F37EF5BA35C71176D307F0C7808C7935A239FEDE 83A1A0C85D5EDF6EC318F941EFACE6753B70DBF0BDFBBE4BFC5D7D36F8283183 083D1BEA3A3415A51AF741BCFC6BE782832B6F2F7F0A9A2F87BA94ABA42C8AC0 41C930A9A1B409218185556B045E814AC6ACED426519F5A5056E7133E0E7C389 5C94FC462B4B674558CB3D1051463F2B636BB218B25E97EA858825C1EEFB93C4 D081C0D71F7950780A1469BB3107A3FFE21D9099979E5710730AFE0CC34C2772 6757BDF962CD42702175D23A310172CB864C7A0E0D209AFE9C72613498B68B44 D1EAF79E250A06E7682033B43765F86866339771B49C08F90B472850643FCA95 76EDE69F451D53CDAE42699DCBE1AD51302988904BC52C3772B13E088BA0B69D 5C908BFBE17639B693EE10316C220AD76440B7E2F076AD8B17B2E3C83FC92235 6073B3C932D3CD17659D1A13D2FCFF3CE55A5FEAFEBCD678E84DADB58D5A3581 D3D3023D9DAB2C5B202869755CD6EB415E44E4821A8D36E6D2B79B925F17F3DC 336C3839696155B7D3E8F15A273D0384967BD8F13F2BB3C4AEB9AA76CB101055 F8BC1F129A293E4B5A5F469AB3EEC14B8E39B79DC4258369FE89D391CA583B53 6F27B4638DB316E65D9D248F89D829E66E8F731BDC8DC776F096D7F9DB54323B 933D4EDC99052C6DF47FD428B7142240B0EC96739A81AFCE9A447DF95F6F75DD B973D551F1FEF1C6160CF3A6760D3A32B0DF36A8825B776F7FC3E3C570691CE5 EFA87EBB7700E6C2F72F94F91292A33BFF80A3485B59CEDCE6AEE57CE7EBC90A 48B297EB9F4AF24A19872842A4BDBA7B6AAF60DC7FF672727ABC28A663DB69B8 A82938DACA465AB89C99F4F3BC8686C805A1F6DB353B0E34C6206FC504319BF2 FB2CE2C1183E283257FA60C5AF157AD9B8BA9D73F85774CB0B21E95AF44B3207 6D605E280AB1A78058AA379079174F48A5677FADE6D165C85E84197179B1A553 CCBE9F5D6FFB9C6F74F2952E014FC78F05F18ED556108D5C679E6D5701DD7992 9AA5ECFB8D573CFD658B2B122A2534124C2ED344895B533FD75C53BE0A1FB881 EC7E791416B53DB5530F50D8F2E9C6A7EF3D689B52E26F4C9A70609CC54CD901 CAE875F456C730FFC5EFB91F029C3D522877448D99F7B4D030E16BB1730B9E3B 03988AB4FB5B714E17D3492995A5DF100A17DCCB89041F378742ED2FC5E2E5B6 99DCDB235F4B2B7D1C6C4F386D03205E328ACB304FE9ABAD91F7F363B5A1987E 68C32FB8021DCE96BA6FFF7D5C69E741B2BC924BBA356C3DDE506E204218F3E3 E14BA5A0B33238154E920492456B2C60A2B6EF04B14C497CD29305AB5A79A3AF 01020C15222AEC3B873954FA40571C31135FBE3C9DF064911EE341A13BA4D69B 33F01763CC8022FC59A5B791978BEBE8858298614A77C2DB6FD9E0ED2740DCA8 161290B1537B6F9EB264DA3639B67A828D89A8B2D911C4F545135C9A8105423C F88CA756334B0CB6CE98F869F0D80B46BB641815B142F1C4B5D94BB9518F5360 3B8E0D139E8DD0548A7E17A4A32D468F2C548F1B949424D6A2F65BE1C199A0AA 75CE529549AC3281FFD6550CE10DD2E31DF6BBF2FECB3A50ADCFFE96A0CC5862 E0FE2B59AE5D635EB6CB17A8BCE218355D755A7288D34B771C707CBAE6D16955 327B2B347DFEF2685155C47041DF92ED6F9B1C366015A21A85C33D884800242F A9005383E89C20073DE2789BCC12ACEFAB2ADCE378FED119476F1400DEAE62BC BDAAC4D15E10E8FF551D62B7E2CD1ED69D7DAC3E5190463DEB33A8BE362A3AD1 F83A14BA2EE8209121C2A6988D1E25686B8C3FE7D7E89981B21AB41F73AE03CA D2C98DF69F4F3A04198A9FBB41EE344DF7E6D56096CAD35EDA4CB9A1C4E585B9 6E4839E67237B711375B3075879728BFCFA2657D794983F7E74D050BEDA39F4A 1612D15624E92A667CC854C91A46E2E642DE50D7BD040C098FE56F0FAD1ABE48 DC69000ABF394624A8DADA654B6BAA5AEC3F9BF2C5F5D541138648A52637C486 A3AC42BD866A429AE73473264F98F76A8C67227254CAD04C573FD8E6A3C7848D 9C72C10463101C10C81797C2A8A79C25B2451097ACD8E2E46189EC8874943ED2 D803008A1B473DBA27356E126FBBC35E3661A101059CE6F8504E8AB5D7C04236 C1FBF4D48B9E05EE58516770A5B3062BB946959B27B32C187B8D38EEF2BD4486 AEB60FAF8B43F9409324B9D8F7F83A256BEF1D5707CB62312122D2AA9EE06C10 EF1DC4AB536A9BAC2551A2A55938FDF37E361025E266AE284188DD9BEA734B97 B23E2888ACCDA62631AD1B861BFC77C33538AC2C82F4960F8E013A99F05E5ACF A4CE083286BC9654DA6F7C291EFFB4F28EE27F0461F3BC38E7CE57F73FB0E915 60B20D5C845EE1B883E25FDDD59A07F3EC086D39D76E09E5719126622A0EA272 FE6D4AB64E9D2684FA77A81244A1EFA701E87BCAB04D0E5E5731552E35882BC1 BF1B44B97CC1554BC4EDADC2057385C35067024C1C52D3E9162863C2C79E75D2 9C9A4A802F9A8BB4BC553AE3DE5B649CA90C9DB679D7A2B1A58AAB7DECF859A4 EE1E72323A82362F818B975D50533604FCCBB6F97C163D5DCB8504A3D120D677 A190FBE238C6A2ACC29B37474170E23DF253FE7D443823D9AD491B668BCDB530 F727E6F58E0146010F72F81AC05679674F57120CBB7E5A83BA94D1E3D9F5EE53 DDAE1A7FCDAEABA5421A8A0E85C79E3D82D26E5C15E972550E8850455FED78C9 BB9DD98408F4D65033F91FBBA35F7D12187B7B12F7AC0DC5A8D815864501196F 679B2EF94890911689E0929ED64B1D7718AB031949B864846CD065C96DF60407 55C432DFB4918BDDD6EE13724CAFE0D66ADD947935CC6BB820B13D3A68787927 226172FDFDA335012D1385E0975B364AC04F853C96AC36322EEB36032E583461 9A9A14CE201B74345B78CC9915F5BA3326F6336DE14A14A8769FE7710537B5F7 328C025B100C5334B9F029968E6816E78F6577F56ED5EBF812A091326C7D61D8 1E65B661A1A7971DE7323F500CFEBB7CE4F6FAC2957B88D7395B5D105AC0F3F7 ECCE82B56CF07A3E67C526E48A1910AE155F50F51E86191608E02B17274E23E3 DDD370EBCBDD64E7CC72BB91BF698ADC349593E6F4EE5D47F6AA663459C546D7 2BC9963276AEB0573B54B581D6E2DD721C7AC20BF56993E7B3CFAFE0755A13CF E633818CD6FCFA61D110F5949DE6BFDE77C610F8056DB0314BDF74A59F1DDA27 E217DA83782A74D7934AC29595470C916BB9A2D728D090492C6068526EBDAD68 5E405F4E6A70BD327B2F41E2655228D74387BF2370E7EA5E5984571E19A0D91E 9E05CF35E7676D7C7E425F91CB126939E53B59DF689B91B26017C4F39E288015 A5677C9FDCF3BBC68C1A65568668233FC94252CEB83143F662B6CF075DCE4D81 A8CF8D5C4D69A473C2DF134F0CD1B3CE203ACF6580AAF907309BE28197BE70E5 36F9752020FFE3B89D7C7786D6262F52F15CCBA896FD0E74537D0BC445339A06 388F1A55EFEC0EDE1C83F1378BE855A19E9B7255292EB5DA03771A19418259C0 C2EAC38C56F9577DD07FCDBC3C6B102A479D2457A3CDB1F742C087926E2ED530 388B59BF9916DECDBADA5557BF9DDF5DD4BB0C0817AEFCFAE78060A74EF55097 1965B4838464C89CC5FDA68DA436ED7F37EFB2C3D7790A40C3ABAAF98928A686 B6165E15748466C78345F67A2FA3009BFB445CF6CC3CE3D7DC8D5C0810B63F60 C4D9ECBB78DE08CBFC9F5FF534C7FEEE01759450E986C5C651B76F89328EA498 285772E2CA6FBD1016CD5621F182401ED59F5DDD0A3D987BF7ABBB3FF2BDB7A0 DEA2BB37F5C5BA8F89F59D078C0F5311045F3C38BA43E9A3220FD496EE886870 33E9CF7353102D744464223D5A1E70FBB8D03B477884513F35908A7F6442333B AAABBA233F13E424663C5897E0096751577D41A125C5A2ADEAE39CCC0C9E2ADE 783D6E4F38D7705E205F9877D36110988B7EBDA7E499DF8B7FB0DB4A2B8EC9E3 92C32D955A5622B5340E5A3A4F10D21B5A312E1A4091B4C161DD786E071D0BBA 18E6FDD227361FA21CFCAC4CC9A50C632A6343E4D535D25D6D70FAEFEDB60B9D DAB2DDDC9CE027F61E45BAAC3A2D8B6055F612C41D8E7A1AD590FCD7C54447F4 B9C37849B027A3E75A8DED52D4B549D6B6680E4A66E2A81BB36288559528CD82 EC7DDC2531869926759C241E6478E4444AF96B470831C1A60387EB684C2FEDFC AA4D62D4FA592CBBF91FE9A5BDDA5BE75E5B5DB5139FFDE86727651BF500C3C5 1E074C2F227EC539AFCE33A412BD96A440F9FDB9D7A3E3564A58C8320AE23ED1 230477F704A824E210EC5F9E627856FEDC7555A8A4AD57A874C49FC6374D74FA EE8DDCF9FDCB4EE86070A2F893B59E5B605F5E4C2DB9F8B46EC4B859E717FBC4 D3D2C613D4D972FE0465DE11F3C0A9844D46A804A3F6218C51353A720EDF1C94 C0A0F8DFF779C82E4939BC3D30D93E80151E0FEA55BDC7451B36636D6EC8C6A6 E13C689465FDAD4BFCCA7CFF90FECDC786343F6EC6B4D7D45FBD60018E983868 2ECE1E3E09EEB45FA25DAB0D94344D49DCE937A447180505556AE87101C2184C 794F0DDDA490FAE81C0CF53C3B8B62BECAB3437CD1D3B72EBD0F8A5D2F2A7A02 ADDB34C58CBF7FC046C1AD7BCFBD78A03D0BCC59C5AE951C90914575DA4D10B2 DB730391DFFAF267CFECF15C63EADBC65D0525061A75B4DA74732D5C3BD80877 09BC3FC661AE67C1DDCBE7430C415662B7E712A625A79BC762C71B1DDC6C6870 9BCC727C45F255B3E16A5D1F76BE8811BDAFD49B043F8FC00D68C5005C85E53B 0C9EC9F34C9B4A5F24764CC10F87AFA6F68CE8AEDAB690AC8C5F4489ADA6B0DB 4A461492849C3561388B7D46525E5623ACF78144F0BFC607F2B582CC3225A177 2D7410BD44BAB2760A6D98361970B2BC35B973D4B042369191B387E934BA4BCA F910C257366FE77E089E0CC30D008B9F7AB76405CB7436DF01ED7ED5731B19DF D1158826EAF1E1820F81F315A07C17AB6B6DC915A94769C79C5D0A9A4BC085ED 5D61381059D39B3969A77919FFD8D4DDCE7C064502E0841CA82C69D301F7EA84 DD6646BA8AB0C714C4602DC46B7AAB4BCC6251527774DA561B7A4125AA511E1A 1A11E63A03E4051717FDFDEA4BEC0DBCEE798359D2046F6D2D2BDE62147F7B5C 4126A949213FF1CAFE4081763867EAA0EDBFE67575C705AC4E0E1B0FC1B1E85A A28AA3D22DA307B9A2405702D7DC743E205E5ED5BC6C9E7CF4A1B1410AE9941A 3E9E7C1C0E7A2A5816C4E27B8AC068BCC25E7A499A077469DC01DF602E2C2F24 0B6CCD594D961E24E7D4EDB428E30D85871AFA3A48A4BFA9FB732AD62AE30DEC 7230FE091E58785C58C318F7675B64EE5FC0DDF6FE6A036313042F220B64B78A 2FD3964DC8A8E8DBBE33DD8710429996F4624D817A4841191F286CC6C2E3EEE1 A1B5138A8C840F490D103CE460DC88AB927F3E4B0E6B7340571B21EAB51CA71E ACC770BFA3DCFEF2FA4804721903B870EB465D471307D842E4E6752F883AA72A D064B4EF803E62601B970D8D27A8D83FA8525DDC047CAACA637937A96EDB644D D8C6181D69BCC4845929C700BCADA0707DEDFFF59FF1546BA49535053F9D1622 34A4A245B6D75BCF10BFD841C3F6683ED4EFB1D178CDE7A27D237A688AC73849 EAADC717918F45F7AF6ED67ED1DEE0B88E95EFBB51E1DC3148ACA0B30337C8FB 83B2A13C0947FB515BA3E51AF0C00097AF98A2AB541821547054A6CEA61303E2 BDAAAE03087A78EA1F925C775EB3CDF695E3B715749F24CB768D9EC1F3B2BEFD FB4EB20973CA0254CE41F7A5776DF3E4CF0F85DF430555300E38E23BB8184EDA ACA9893C07EBFBF6F7AA396111EF208AD98F43350354CFF94B677880A9D17B8B 3C44F4666AC25923F3BDBF5D3A3F2524F10AE53122B27032FB74B1013258484B 942421183F7B55941E491C528BD0F0E4ECCBCE5101134B3744DC3659686387DE C3897DD27232B0E73A26055FE1E60265F5CBD3410C03060027BFE6C305662ADC 088062360B779A0A18851E9060CF21103C4C0B7C44FAF890C7B4BBC5313939F4 166E7C8AFDC2B1AB85B6D26893942FAB6C7AEAEC9B63E645B39FCAB4670B3DD3 BCCFAA124B1FB73B397B6C13604DD9D3AA3C4293F0D5346EF87D662457BE5BD5 3B3899631BB6E9C39C741901EA30AFC7888FBCCE74E3A22FD8D2509F32690E29 1ED3DD002349CB82720352F0BB8EDA0EAD11C4BB2BD47C8B85938E5DBEA92422 BE1FC8D89311EFE9AB8591E668A4DD9FE2FCCF5D79248B7E084A5D949807C8C6 EEC8BE7ACBC2A061EFA5E9AF79B491D940488ACEF795B038E35E94653D52C406 348D816F2E7BB852F134A9E65DBFFDD79675F45E27DBEA9390809A086A357C57 366E56DF38F25580BA29FAD1E965DDCC283AA89DE6096F92730B6994DF7ACA82 4EF47F0CC3BD462AA697AE68907BF26DF9DC577B0810B6E67C1787A2745F85B0 A6006ED26917240FE6A4C56CB573DA7801C599A5E2C9CF1B50283717F53CFB0C D4F51F4116DA63DDE3616DD4071FB2F07AF5784177522509A279E8E3D4698F37 2BFDA50977D1122064554E075B23C423AD43FD75AE3649FB686280D9862C3082 B5D5F5D6008D42179EB3EB508AB32573E46AEFFCC64E4993A854467E19422D5B 711F69AE0F7FA24015D901FC36969A09501E219BD0F8FD660F114D83416179EF 42440D68060C4F2507DE689EAB7AEADD2ED21CBAED9FCED65A107FA0F09F2661 37B4FEAFF592B02F32988AF8E52B2A3A68308122CA7E76DA022B34F368C70BCD C605AE498505A76E2AC8A8F4020038FE4BDE934D3DD1AC9AE9E08F1F946D4C2C 94AC6C38BE28AFA227615EB4E544AE3889D82B0C91D2CE8A26CBA5E58E3A16D9 7B93E91734786A4C4F4B7E5F5EC5283D203292AB8328953B3027650C0B5D4060 9ECDAB9D89E316CB7CB8434BE0A76ACBF12633EE83E6564D6C3A76835CD616BE 6647F63FBB3E962CA5AE0106220D09B8280E65E3F4050BC6C7F112886688809E 94479CE89CEB0B1E145601DC64895AA38BBD3840FF2E59108376B84051687308 F34645535DD368CFAC797DC1D22D584612CF6FF5DB2CA99C09ABACD8757BF3BD F1FD6C5FF79ABFDAF8703E5E0FEF71DA2E937C200ED5D775564C84F3A8094DA0 5D22E52A629613DFA5DDF5C1D9F0E684B48324B5DC448D85713267504B127A86 D231A451FB378C2E709BB73F2D60564552CBF69CD8BB2CC5FD9FC46E7AFCB084 E2D34146E966E371DED73DE519D5107F00AE94973D36FE1494D003DF4B2CE1A6 F4C0C44249217A66317E73889A5415691BEDBEF5F1A89ED5F5695AD3469D870E C4295930A373ED833E3B023A2BDF56A343E8F568FC0F8B66C3A2E8E5526A69B4 4E635C11EF41516D76B99BA79A504C7F380286ECD238B5CD9005BA2C32539199 BEC364B6C766575CCFEDE4A75306520EE9CF8F52C877B1EC18C06F9E58AA3A42 D6CC2D796BA6CA1B934BBFCF2C61049B4BF23CA949E7BE3A692133F013D223B7 85164276A26C87B1FDE887AD9C0020E118AB65276ACC3D5E99CB6B3ECD01A848 1234D432ACF8F32582A6FAE3319E7C4EF694EAA5E74DE750ADAB4805AD399012 33666FD3E576F0D88E50E6B01A3301CB6CDF9C7F2B52ECF88F79A484EBA0C89F 579046F3BCE788CCBFC2146CC51EA06340E2CA74F9AEA51FD6DFD658AF791410 678E8797559CEB255D38ED9FF45F2D070A7FF586B8367A92F312F7AFF9D932F9 0A57CB4DC70B0AB290D97052429CC33D7BFBA27619B05B33F2357CF1680DDBCB 2DAC9F340B0CEA26E59DEC33875878F15C0C414B361411E3B2AAC218B209FCF7 715CC546AEEDAD288D45D421D97ED89AFA606EBA29FFFBC3F4A0A91C999BA379 3637A4BEDDC6AA2E1691583D7CD194590FE10CB87D689EAF79ABD0FB7DA4F518 B8A7C758DD09BE7E95DC99F86DA1A3708245E0FF03C64CF6394CEBFE390324B7 E4E0274D0F34F20CF5E90C9C9B2E91D01DD197D4EA442420E4377D731A51FA83 0FB21596EAD41BCDF85C5DE7214754403736AEBE339641B39D5757672A5E4906 ADD509821EC0B12EE1993633E2E4E0210513FDCA66AE610D21CEFC1F187700AF 64BD0961AD402D93DBCD12FEBC9799D0F9A3575D115EDD34179FE21F43E99C0F 28418B2C29A3F92B0ADA512FB083945CDA1B3A4195C5DB9CF6531D70644B5A5A E9433FB43A63DCAAE7E2CC979E0D7049926F3B17AB6A7BA8BE7EEE73CB34B4AA 65CBD91DD07BF6B7F8A9585C544BD662DDACD567EB32AE02AFCFD04621165064 6D53164083A5978E6124B4D4D5AAEEAEA7A16472B29F79EB04D0F92FAFA30804 18BE89641CFD194466A56FAD9DD85AE2E30642D27A8A99CA3A1EF3406417D478 BF9F215DD919E8BE043CB39A8BF8FC055DCB4D70FCB2E1B638397AD0F37D7230 4D4ED3435EFBAFA96EEFFCAB528E0D126365FF0725793E79FE7836CF19B5D114 8CF7CF6913CCBFB4ACB0A48B04DF4FC54F1B5A93636FE75CF4FEF12562884832 46804468AE77EFDBB6EEADE14179E7917B8C8A27851CBFEDD21DF3C9456326AB 2C2BEB61C7AA772D05B85BF8B4569ACBF8378C1CA6593B09778F329413774BF5 E86FB5A2976FB9D83AAA8BE071D15BF41F9A8BC565D2CEB7E3B807A90737AEF2 C098FE4CE372CE81B69909D72A5DABB50BD47AC059DCDBE3A4B9933146C13696 F1DAB567462980AF443BA1A9A9A395D4D00C122BB63306BD1724F3052D629BC5 B71D1589A103C0CA08E82A8A7BAF4F643B4A38219A647F5FD026805C11113030 941FA0D7DA95BFE92D09CAAC27863711244424E7BBF31ACC1EAEA394C7C1FA93 FEDE7349DD6724599DAA44C164315C29A078320A7939A30BA7FB5472C81BA3AE 6BE27B17DADD363B6FB2F166367D551340490A81B8E09CEB2F5FA2F74A193593 23FB2F1D93C885F8BAA6EC77A68B3C1224052FC2A37E8401E9A95F617C1705A6 0A48AAAFC77728CF3EFC6456109238F47AAC4FA2FDB488425E60E8A48EE66510 C383E43BBAA1EDB69BF6436E8BFB937C7B1D7C8A34E81AD4C5034C563630BA95 50B94CFC343B3EF7A7951FEF750C4839D4717AAB494DABDCD16A3EA19B25C954 8BDB2ADF0A492747AC1F54C392C317D51A54E50C80387EE5C66AE3DBB0BDE2D6 1D0D2509168EFFB03F4AA4E329C69E91F4CE25028595019FB14C6525ADBD8DDD E3A795B1A7782EE56F1E2B9AA07DC4770377C8FED6775F15948A9D4D6BC968F8 BB4E1A147D02C1B00BD1DC228FF1FE8B0D2213281523FF712FE93EFB0CF75ED7 843BAFD62F298F97629669CF173933CCEEA5EDA8F3F5DCCDDF6EB0DF1B8B5FAD 8BB15302486D15384CBE4208CF7CD877A055858B25C8A0FDC6B7026C205E1B36 B52536C64A0C5186CA529DB2B3D373EEECEA0DD6A30C5CFFFB2E5750BF04C770 C33495032C54C84DBFE652B4D0D9D89AD6139FE78ABB5FF2C1C0618500CDC450 6E3CE9F06A252615EFA5B3A25A59A86144E79577D607F36BED4B265D605FA73F ADB16C3A5AAC8FAAC40186A253D582F39FDF8C350DBC16D0A1C7B967872D95F3 B00896C0806A898C3D2C1B26E44E7E264E1D334D4CAA1EBD54B0A93A8BE512F3 84F595B96B18FBCDB476804A027B63393513486154FC5921105C668DBE65F0AB A9C61E3A37A6AE63DE65E5698AF02D8CCED91FAD7C6120EDC561A33345C621FC 271B76C4A6DA027BB90D61E96AB0769912A03086E294EEBA27B472EE5FC191DC 5ACB0926B6C186BAA7F6C80236AABFC2C008E447DA5CB1B9D24BB7AD8F1229C6 AC72D05CAE19270CD2E92DF4400142D5E73B730E64FE01E0820A853D483F07AF 35C79995D9DEE96523ABBCC1647A97C9C4FDDD9E3C06A13152E6976C32480485 FC5F60D938E50C24D7342947CCB8B64F4DD97F513FC3EEF217D7AC3BACE8F7A9 E37454557FEEB2F0F49F09E828E680CD386D21EFC7DC1A68133B113C1A3F9221 61EFE99701107BDC65CEFF577AA85355AE4DE04811A5396C13E828101B2CDC0B 2D476B59C2E364B9EB90AA1D04A692F981701352F0CB1F5F4C68945FCBE51899 E034EC8916A4F50BB8B01A22464B31A021018162CE61F227BEB4ABB67BF3281C E8CFC1DE69FD844826A1A8D47FB257FC03028D0ADDD911B13596B57E8B85AECB 212DD2CE8D723DEA14FD91B4D9E566D97E0211FA86B2022F9349BBD46B8C4F1E 9CE7B51DE27A3926F8136F51AEACACF45C64DC91E691B3003C5800A9FB8FDAED B67A7646E3D3CC209B26D0FAC08CD2C25986A27D1BEFE20FB3ACD94D7A8ECC6F 2DAE686EA28DB321610A91A742B4ADE6E27C38E348243AB0AB584CF2268EBE23 67E976E5535578E6D32D4DB773FDDF61E7890B65666A69E8953F683AB197A864 3E98BDBFDC13253B2C825D0874922738FA16B3A737E5579A1D82B2A715008D21 516705AB828E5A93558E8A9CC776330C1B572869F7B98EFC382774FE44FE5CF5 7D78DD4A86A8EF57D61350DDEF04D1F261954E8A67502F20A84CDB8C5A979A56 BD6D5CE89E7222D710C10E4D0AFA44616EDC8606BF3BC53B6BF0347B16C13E23 F21630F4D23599D8A806196559277B139DEC9EAC296BDF88BB4C3A49B11E5D76 732E4F54AFD21DA91E69BFE0A35A221C467E65A6741557E153AB2A75B9ABCD76 834EAD03737F6522FFCF39965CF566F45BC94F864A477B615C6112E91EAC2FD9 630D86D5AFD47DDBB8AE2A44CFB81ACE9164A48170A411772C67FAF7483205CC A34EFE23A2E556B3DCCA71B86017BB14FF6294564748A8ED7D0B7B0F0F82C2F8 7A364A5B98B966707FF98FFDA656B0382FC00FD41915D86FD79D887B62152CB2 ABE7313813024788E47889F5438270181175729A2E78B72F75EC71C73B643063 8C10FAF0F8A4CD060C992B2504B7542FAB3DBEABAA2246EA84266D4BE0E7E928 EBAB34FEC23ECEFBC239057E2E417BB312D7B9DB4C7AEABED7CA2DB5D64B779F FA51753F9A9DF80B0E17F05056919FDD72937DBB68478AD4FD131041AD800C3B F47DAF19FE4923E98CB3660DA09F02F5877551671BAED4BF4F0297C07FBFBF86 0DD366A2DD71F6672DAF056ADE329366E694749B0A0DFC58DF34FCBF1FDC9EE0 4928013B9315C61C534679C5A471244B4F6661C430E9AE20D8092A36C5B9CF27 BA749489C7D9633F2677A10F9B919404F49F9CD7826DFC9F972E60BB2A67BCB5 2B180E4948BF8D63F713854F91FF37D36F119D2C6DC7028D546D35ABCD6D15E5 FC5BD504D2969E5B5A7E45CCDD7FED125A7845887AAFDB061CF0F7CCF99CBFBE EA2F228A09CB5597148C60287AD5F343DF25997CF986E59445E2E75CA7BDB7E1 CE7C24C2022E8EFBF71D8E708A4E915FAF67C0A5169F98ACE1E686A7DAE2CA4C B8A0340A6CC0CEBA9A68F0074F6305824E4408A86D6338B327EE66C3C51C07B2 1ADD648A2FDE4251EE246AE8AEBDE04FBF58262A61EE87011C436D3F72F6A021 8C3ECB3ADFD3177C19CA4F84661B20D59B79687C3E758EE1121462F669E740C9 0DBEFC471A2E73659E9A976D2904CBA0F7066CAF811C54AD021FFCEC7126A526 628AE8B6838244D185C2BC372ADA0AA3ED16B43152E7FB34EBFECDB3E097000F 96DEB88F066070845C4F4A9B95E025DE0FC41A5C417851D7E0B4BE68FDF8C4ED F8729842637313740458221C92D24122A749B0F05AC3D4E095F23033F9B9C270 8085211139EB67C3DE0716CE871347CB44F35EDBCEE0A89CB3C66C48D8B5FF5F 34D9E83BB718BEBB308E3093AC76251F8EA28FE6F35126DFB8B58499253F7E97 D001A9D7F6AAE1E139B1BDDE5D1D70E365DA86E43968E71E22B66AD484CCC3E7 92589DC8B9172AB36E6BDE975363AD5F64DD9551B667352FDDD6CADFDF048DD7 247F50E9F46A458E59A87BAEA355F2192032E5095FEA2B9A1A5F05B87DD26E60 37CD8567917935E57A84A1E13FAD50CDEAD4CDF9D8A282C083633DE226D6DFB3 BAFC8A87303A25E7726AB5240D9252177999AC382234804B9E53251C5FDC9095 52A378354CA44B08045AE72209F8B1A0FB05265C0D10302EE835EC717078F78C AC7DC73ADB46914AD1214B8BFB43BC8997B8239D3BA04A461E49F2245287BA3F 4B88164B715600CE82A45285269EEEA419D390B7EB4CC90DFBF8124F118CA26E 164E52B159441C26D6B71CF8EA372B015F8401DE26C1B87758AEBD35A761424F 764F1DFD7FFC9D7C4150832191C797424C577762BDBC41ADC9528011497AF1C9 88AF8DCF8986E3D1339ABEDDC7774AA1880ACE00A85FF55B23CBA363CD7215E9 87EAB79C39B9B80D298AEF899FC385F00F52BF74EA0EF18DC0DD8BD7E5D7F96E 61BA9423F48155E646028E21E6747A56C532F931FAC82AA49F27588ED6D948B6 852437CE9668351AA3365FB73C68EE9F45424336322E10A59DE6F32E2DA03B44 5E1D9900A4A4694A6ADAF88CC010A1A5AA3E0ADB6D820AC869DE4A630F9F8F49 6CE548F8CC7001F9C8CACD2B9F08AAA6F5A2475EE006888F8C68C021E629E7E2 623DF2BFC16E64032BAEA92EE03FFBFEFEA547027146CA020651994986CCCE91 C7170B8D4ECDDDAA55A6CE41C0FE34C35D4AB477BE528C3667F0CD49E19786C1 5849E8158AE65B25A99724AE14789107852061F859FA8ED99521BDF1670A9A7B E7A82045083FB7EE8D5C31823B33CE517CDDF2D1516AE2E923CDC10B450F9DA6 0470468CE584C21FF91BE063616BB800FB810251BC97081DA8959EBC58CCDBD7 8CE60D39347C8A424C95586D8E4D28D3FA382CC0E749BCF874E50DA61951D6F7 CEE6063A0356595479155B34FDF74511F27C0516FD02309FC1FF1122F98B997A 594643C70F6D534D96169D139C80D720B2990AC74CDCDCCA62DFF322897A3485 C6C02C36E6D04D12E6D09ACA38215C5725FEDBFEB0F2DF2FD2D9E8A0716849D6 11AF64223B73F449C6C1A7B7BA4169371A3A2F71BEA9EE5D653ED81DD46F5D7D 6BB629E1F50CD802DC02765BA52223C64421A82E1202F272DA1ABB9C74A721E3 8A82069885CE203F8C8BFFB15576D46BFB39B21C0090F0EFBDF9E990A91F5BC1 0282684A75CF849157D9F32303A6276B6A2D9D252E5A0FC91802FA0486D39C24 11F8450D0687460912C9A51D2337EEAC9A071312DD9A90E32FC5A67AB87FCB7C D33886B8D0E9941A3E9E51B0913135127A6FF5F873691FE3479E39C25057F61B D8E0299BE3720CF383033BD934FA31294FB4CE8B7D2B8E2AB01C02DE7C81CD35 07E0C50A2B14F4B3B8AE853FE0F3489D73A2592045451893520CDAC0A434977D C92F7CFED85BDEFF99ABFC8A2922BC118D55D57BFB0F95E2C4373AA816EE26E9 CBDDCEEA7074CE2ED0B0E2F1488C54BD3661A295BEE47120C188122BD050B92A 0D25D6BA0CBB5AFF98CA6A7760ECFE70B3B64CD5C2A8D1D856E009E1AE7E6D5C 0982A69E09196FEB84DE78853E5EE8C30E431C66460C8EB1CACC7732D36D2651 A7B1F58F7C236F0BCEB41F2B5580801936F5E8A1E4D3E72712DB287EBD8A1D46 89422FF581CF55B0E0E7AE112645EDB52390673C407ED49CB6A529F099DFFCFB CDB3B46330D68F4EDB0FC08BE4F53560274295ACC2A66557D398A8A884A3A5F2 311ADDBF2AF96936C96B14F324C1AAA1104B5B729B9AAB8BC5E4F5B51AF5A361 5C7300159EB6A020E016E3F2C2D36A0A1152FB098E35EC871B8990AC26A641D3 C3E8792A9E561C6A4CB4A67B440455D2EDC72C7CE4DF7657B9C8F2D8AF1C04C9 5ADDB525C13B3E2836A94B1A6325ED1CE2055D47C16D8FC83E8DF16F2A8CAFD7 D8D5D2048DE7FB9E64B1468AB776B2262AA204BCB6BA1F8608CCF674025C8D12 0F5E065119FEB0D8FF7DF74F791E8905A99FFD95CD1602D55ABA94A278FCD12E B9DA95F0458DA30D0EAD7C5AD4CB6AF441A686AB39D5169CE02F7BC3AE6D63B3 A0C47877BE87237FB4F7ACC4A4DCB8F43AFDDAC52AE9D262BBCC6E10BFE29FDC CB4011ED35939336C68579822E617C58AF990668B8DDBE5F5DD4E18590996744 E0317D1BC3A7E53C45322FDF95575538ED757602803E4785A384DCD54FFA63A1 7DEA18363A9FB79A910F98790D39D275A4677AA92AEA69EEDAA751E0CB72E2DD E9893B117909D34B85313AF9D47477A7FA4C1F75ED7379EA2A320BB629E326DC 1174958971401B58E0B257232C2FFDB06BCB9ECC3DEFAFA8E19A6860B9A6BAA9 F18F95323F86F1D9455AE46DF587B4EF4D6C51D68B14E0A4C358F33C4860C9DB 6F2233EB1B834881813EB26FC0910B17DD 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMSL10 %!PS-AdobeFont-1.0: CMSL10 003.002 %%Title: CMSL10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSL10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSL10 known{/CMSL10 findfont dup/UniqueID known{dup /UniqueID get 5000798 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSL10 def /FontBBox {-62 -250 1123 750 }readonly def /UniqueID 5000798 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSL10.) readonly def /FullName (CMSL10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -9.46 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 11 /ff put dup 12 /fi put dup 14 /ffi put dup 40 /parenleft put dup 41 /parenright put dup 43 /plus put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 74 /J put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 87 /W put dup 88 /X put dup 89 /Y put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE32340DC6F28AF40857E4451976E7 5182433CF9F333A38BD841C0D4E68BF9E012EB32A8FFB76B5816306B5EDF7C99 8B3A16D9B4BC056662E32C7CD0123DFAEB734C7532E64BBFBF5A60336E646716 EFB852C877F440D329172C71F1E5D59CE9473C26B8AEF7AD68EF0727B6EC2E0C 02CE8D8B07183838330C0284BD419CBDAE42B141D3D4BE492473F240CEED931D 46E9F999C5CB3235E2C6DAAA2C0169E1991BEAEA0D704BF49CEA3E98E8C2361A 4B60D020D325E4C2450F3BCF59223103D20DB6943DE1BA6FC8D4362C3CE32E0D DCE118A7394CB72B56624142B74A3863C1D054C7CB14F89CBAFF08A4162FC384 7FEDA760DD8E09028C461D7C8C765390E13667DD233EA2E20063634941F668C0 C14657504A30C0C298F341B0EC9D1247E084CC760B7D4F27874744CDC5D76814 25E2367955EA15B0B5CD2C4A0B21F3653FCC70D32D6AC6E28FB470EB246D6ED5 7872201EF784EE43930DC4801FC99043C93D789F5ED9A09946EC104C430B5581 299CB76590919D5538B16837F966CF6B213D6E40238F55B4E0F715DBD2A8B8B8 80A4B633D128EB01BB783569E827F83AF61665C0510C7EA8E6FC89A30B0BC0EB 5A53E5E67EF62D8855F6606E421BD351916549C569C7368AAFB714E22A023584 8B1D6B52FC6F635E44058690002C6BA02CEC21C54CC8875B408A8BB84F445894 5D6B3E4841CA20AF852A660FE9C832F773691DC6F7197FF3DEAEE97418A5ED2F F2AE65300416227CD3BB03C29003C770CD7D2A7A2E4C1DCA193651C2CDDBF93B 966938788694BFB562AB0010268955FC3555E5984CCAB0A9B7590C77C9BC713E A29E5BD7193A4E971D1752DDD0F0AA4648E7E87BBCE66A1E836C715C408B07A5 9EB56BEFD4596706CF839BA4CFA90CAD4038C1E006B51913279A2C31FBEE5BD4 A7D74F9103CE6124F5B439CB860987DF44FE17EF88EF1BF62C67060D25696BCD 94ADF08F04E349CEBDF9D3389D870D94CC05E393B3F4362A13A6A672EE5E8F5A DFE7046AFE3EBAEA58FFEBA4A47BF61F92E2003756DA643CCF2C9DFCCAB62669 E3C2A18D690B64D907F50BCA155A85E47C3A6954C6FF7ACA36D8DFCE777B7929 5F5D5F787B9C247ABF13D6D7B4A8F06BA25CCB342F8A5071325CDA86AD71BA23 8A9695C7D1D50D0AAC267AB7CDBA7AAF46A264B7B081B7E79AD937FEE4969FD5 155A99E652461EFFB4BD010E5885631E2B2497D6B8C43CE77D7D47FE201DD46E 4482FFDCE150A1183C22C004A0AF0E1F42AA6804E038E1DFC8B0A3CE26B52038 44D2E7F759DA5C252489E5525963D68BC27C82247BEB18818C7D4CF0BC5CC97D 8C701034B8DF798DD4CE36C3F8B1FD40B2DA14EA75583852875031AF8C909EE0 04495FDCD04B05A5EFEBA56A8CAC1F57F1B8AB91FB25C81CD51EE69D6E0F52CC A0E12CF7E3187D67DF71A599FFD895FAA7BF80E2E6B96592BE77AE96905BAF0F F547355A36C443797DDA7C414AA606CF9153E03450B77D1BA4088D739DF55F07 111B9E11AF37F45B6EDE6D7AC126E05886A57C83886DA87761BE600DEECD1344 8A82BD652BE7ABFE6A0F50ED7C6F4EE12CDFD80CA7A5518692F267C51C3FE76C 567BB8DDBE09A2AF901F79AD02B435287CB8057B3D5EE6655071F67B00438728 C4C3EBD648BAF650993AFE5E2B29074A99ED0FB725D9B8CE8B0292B08A280214 C3AF252BEEAD30C88F72E322FAC3E9D78A1038F5DFC41F7BF1AE3744A0677094 51B77C2D630B67853FE5E975A395C06A4D4DA744040B272C2B88D8B7ED3A2C01 66F503C9DFD3C7DDAC865900D2A4F2CDF517F449851DB1963468D0266D7A3E58 9F6B2A1843E6444274F16A9930302DACD8D2BC4588765099A86BCCD8A31DF0E6 2853114DFF2D19F812F19AE6C2E419D7AC1BC024D1195074FD0C6717BFB389A4 4D5428E7BB2E4F9E9FDEDED7BDCBDD3460805AEA0B5F6460C2FDF19273CE5BA7 5D3AAE0DB94C6AFA8339646191C23B0149E7CBF136FC4C844E025A38935DF256 0A0A6466A45EE8B9B23B6A055856FB084F87C73BA28F1883E3B184CD813C72F9 233B78CA4E125ABD26F29B92CD9DF39D6FDC2A217E2B6B45D9B0A4D536790A5D BC0903069565A442FA7466414D948AC432C6B75D8D0E1DBB217CA3DC38A52DEF 62E9D5AE9E753956C13819D93148C7683BE4F71B80BC066D8C19FC807FB1C086 B49215DCF56A91A42089F0D063B9981925691F7DDE3237403AC714F5CC3ACA88 DB2F1DD205578C00472FD70C8BA4F752E3923ACF3164D442A6B639902ED060D0 C5777BC20F9A3BDA60FA3BC986C38136FBD2E8F910E32EF36377C9CC187F4AFA CCEC423DB925B378522B748BDF12D523804CABA83CB5A7ED69FAB9AAB75EE8FC 38D9866E3754C4E2F2B9AEFA804044D878DED0E114EA0E9682FCF38F6628E63D FE1C1B5615E54FAE8684566EDC4B616F76EEFD6207E0386F06D3BFFA26425F24 303CC7C8A8D7021E7D09B202616988287838C3DBCE3179B4FB5C726E603A47F2 8248CB508F327D1291CF3F08F7C88298DC2D0F778D24304EFCF6E074182BF5B1 8E6551811FD6991971692108E289B61053D6DCBA2925B3903E8916EBD09D97A2 C6D08E89DE4C0CDF7185E1E00DF456B249F0BFC686E04FDAAD2772DC2C39DD53 9C23A41471267F53A87E5C2B8CBCDB66CE0B9844BC506428E6150B48D2FA6363 4FDB2CEDFBAE0B7DBCE4D83E29B2955F8966272CB865EDB360C8A8C19EC62A29 03066483E4083524A1E8D80FE3867BC1AA91753C26ACBE8489AB0E3330206212 93E07ED473DBF457EB8489E66FB4B8ED8A9EA8911CF9308CFE3E6D6F36810EE8 91CCB11BD548617B2C683C354452B9229E7C9E68828BBEC324420DF7C188CCE0 FBB514547553A7E9B38AC265783891F42DA472388569C8E7594F7E8810895A27 06E456902A8D9F65CA808F1FD475D011C4572F8A654BA01D67942226A663D179 95149FFF41A9F55AE84EEB9A6A39C017D7E4FD6EFEEE7FF3CE847CDB064A4954 9DCD273B810E0F259501BA4003A3EC1ABA6E13D24C0B57FF82D6DF077833B6A2 7EA54801BA81DB961C261689C0887FAD83771E55D3D137AFBB21779397E11972 6C6CA922F45AFA5C0526863A5AD8B9C0775CCBA17FFD37A44CED4710884DBC31 5C9D3F5441595B86CF7CA2EEE42AE87896E9E60EBF5F35C2B7FDBF9A9CDAE262 3F48396F0F741E9DDF1D4FEF75E68AFB020D06CC29B3A7B2ED819D1AABC12B91 CA2A65F1AFDDA2F3FB322E0268DBBA024663E49EFF076455338FE31A16B04EC1 797EAB0B49AFFB906A0690A1E8E2F5314773E1CCFFF43E6FB3875AC907F0C5D0 DCB9BCC127014D472463560CA0CB1C2CE614D94177C7A52A5B089316689C8112 CA57E35D716D956DBF9013B1E5B9626456B1433C8C15FA906458F957133B9E19 8D46DC3AC015F7602538C2AE3927C6DDBACF38E59220C2F5AF36B68DE9117C51 04CF7DF32B1AF55B87D1D8A5F4BCFEC66F63B32B6548DEDA3AAB06C5310E4757 78AFF947DA22809B360FE535506A554DDDE5A6F2411246653710ECE5CD3185BE 730520A766C47E1ED01890059882BE1432586864E1A86A7F586438C8DD35C00F 021A741ED47E0F16DB6070ED0C50038632CA4AC2975578A8372A080CC0447C79 CEABDF2BCD5E78564247B0F0025F556DA8FB62125227849EACFB724A4AE3EF57 90C07A5B27D2E59425F56BF8AD84C5F5310FEB1BC73D536339FC2E6A5BE2DAFD 97FC835E0D52F680F80ACA37DB498AACF152B9B44626CD89E3302C3EE1623EE0 F998FA78305960AAB9F483F731F5F67A8C963C23DB8E48FB804EF8B86FAFE7F9 4C09641915FA7E3930AC922682313408BC1607C76751CEEAFD660206A39CF394 40ABE2A313AB7D5FD6444E219DC5C26734D322BA268D330AC17959A390D6C8E7 3A155095BDD66516DAD5D65519A7FB871ECDA77061EFB21F359158B4470EF79B 362C35C06B85C9A9505C8361939C6AC013F2CFE8EEF46FD8CB4452AAB3EF1FA7 DC066557BADC2ADDDF7DDC2A0E1DD4A357E27A2073427EACF9B9035DA5272136 7DF37E26D96ED4B2ACD60596E039BCB15E259C72FEB3344E3EEE3D4F17DF4233 04C1416BCADE80BD483DD8C9AF979E1C7D50C4CF015870703F88B92C4FE46AB8 DE6717B55C460C805B391B84333097E116F4A51F631FAFAB34CFC925BEE8B72B C9FD5F5A79D8F2295FBFAE649DC6AB47794AC7D73431FFE5BE992F2B5AC67049 B5208251C0E442385A9FACF25E3A98D7F5D4C2A1ABDC600AABE84769CA83350F 9B87F71CEAD3600E02FF9AC03C1B5C21C84F911511A0CF0111BAC7605EE31229 3C526A79D943D92E1CC3C38ABE82D560CFD4172F318030852A5FCC0534B8B3FE D7365987C8B48A072907B26CDC2108130A33233E8E0BB5FDF14FB55098A10EA2 B51AD9EFB119F82B08D256D396D3263FBD9DBF172D43A90ACD1A31F3E89E8571 74BE98B9560E2CD661A2F93C69FEA3FF26B00772AE2C2C24B98D3D122EA2AA8A 44652CCDF4EF4F01CA7D62A976E23E8A86291F43BFAF38FD9C325E70F9C36CB5 A181DAD30156E98339E6A0498D3420B7BB3B4E651A9090D4A17604AE386273A8 3D4AE8CC18345E6E19DF06BA848F203F74B161D6A8882991CBA7385F308696A1 BEEB0130D938A764B98A2001A38489B1334025EA848CA44A116D64926D460D64 01159E77EA7ED9ECE7BA77635BE564A4ED89315BDFF54ACE6AA1A26591D13CD4 6D6425CA7933769B842192858D10998509396829263290A3A7CFEBBDA3EE6CDD DF1E492AECDFF7941B53573F01F623CA0A5ECC9D05A3D0954F7AE8CE94AC3B2A CD4E27519B2E16F033EB732AA024BBAF74626DB55DC74B1FDDB07FAE98B4AC5C 683CFD8744F361838D343B657EBF52DEEE7AEA7565C5BEEFE455DDDBC4DCCA7D 87D6D769C5ECCF14118A14A85A86865777C8E28F953160D5E82844AE54D541DF 550D5F1519E183E0C42BE88F0458CE8087F2CD4B1B49A8E9E3D127C4A4CB74A6 2E73BF4CC317781D03FF04BC36AC0E4AF99E2ACAD20F6F8029DE8A035DAB40DB 17D237850BCDD05931FF4B0FE2D0B79EC5A88FE0236271CCB075BD194AA25AFB 3FB93A5206F61A14602E4EB6F1C31C654527CE0C02D04314DF9AFD710D0EBB9E F8721B97F5FB18E27507E1F800B5509A58A1A8296C72B7B73F99B6CFE42E9C2F B63B3555475E562672645CD374BCDE937A9B05A157FB3E74C8297507253E957B 1A9DC421946734CEFA3D5EE357DAC7E9DE17A5BDDEF6B2D2A740BC58128FC514 61154664412BA1C05209EC992A77B7CA45AB7C0EEBF590A5B5652866008CDEF7 124A3003AE6A7CF9DF3C72750CBD281358CD2FF25B162B78CBB971DB3477F8D2 ECA3EE9CBC90323B2C236E375337EA0848CD7CB5781A2B0A42DE7E4D99DB2746 0B26796CEE129D23C76794B7CE21C13C7D4A998B752C8CF43A4821B736EBE246 D2A2BD7BA3351FBCD1B0A501EC1EAABE60D06DA2FE39BE1F0AD629769FDDC933 F9D02F9686EC8C2D7455C26AF4DD3F6860B2289E3A30E1C254AD17D731CB73B2 BF4DFE90CAEECE3ED0CD3FB4C8F4C7BE1C056AB4E9B95781A8968E3CC1010003 75DFBC4AB9F6B27C5A9AD88D94441A8ADF09EB275E5F0E5E6F3BFEA0FA8C308A 8593ABA0645ECA8FDC3F0E264B35D4B0DDB86B93CD8A047FC409E18196B501C3 B003622999C47BAC04FD1ABD8AD359C977766E9643EF3BD6385306B08EE3E13E 7DA5A06AE33D17A3D574C6390DB6E9429754B210F0C349C359559C7EAA2350BD F61D4D8A92B1AF697BC620FA0351E67E0D9F41A95A47EE0BF210C2C48691901F F905F65693DCB85BE412F097480F6A7266AE0A928729DA0F691CBFFF3B276EA7 322BCD2206D96E3DAFDFB992CA8F2955F0E8B882729DFF840569D12E4DA1775E 523AA734552AAB6F2F16B89B39F1A3FF0E07EA08D13E612F201716C67F327017 6C041760DA30374434808273062C1FFA2C47B3FB578807BC26537F542040FF77 66C995EF3E8B08B09FCD3EE89C30F157158A739606D2CEAA26694A4F1CEA6633 B54933141CB85C60AB262E2D4E824A3B85C2BEF810DD774F296AB37D0BAE7182 5648CD18556ACB124246A75474B232D712C2358908B5D9A76F82C626BFDE01A1 093B8FA6AA0B32F2CDEF737B28BC0448FF816DDB5812131DA0DD5979D77C3838 B978CC3F6778A4BFCE9A7087EFB19749285AE4C92B99A6649DA349A2E0889D72 6D4FC664522F06C8C4D86D30BA43ED4E42211217D01636A4E17E2A132D26F394 EC34EA12D84594AED9C6CDBBC0908860F39B240FA7D7B3003DB10322498691CF A294C0FC7ACC0BAD1EED3E9D60AAE3F7429695892D1A21CEBF062C6129B33966 8B2EF6E932F9891DE6028B81C5E9B23278D35B7F0D83989BCBA25E20E9D503DE 144DC485F09A4EFA1268AC5E4B551C5B2F1D51E9B9B9C0FEE585204F869D0BE0 7287D7570A12940A47C1F51AC6134F03B415C30E147C49F89228855D093EE55F 172711F37776E97A99CC4B36E2F10713E36FB279FD3FA5A0EB9F3938F42E2BB9 254EB8F0C0F30391735019E02BFDA21D9813C6A22279B898EAF01AA892B14DC6 5912B9275167AB46EBC420836CC1A5F38A4EB47C039A7BCA62BC3FCE4199FC71 011DD6E5FFA0F3D7F04AC02AF91B9249B9F993AE346572329DA852115BEF8460 B94690E790003586F473F37EAB5AC2922F5F663EE2C3C0C336A8DB71650631AC 0A923A389AC911CB215EC2EC7D50CF8AEFD59EBFFA53A9F1FFB7E6215F17093E 3975F186FE23BB5FA5474C11408FABD223E1E6F62035B5A5C1AEFD8899F00FFB E729C2D5FD551E80716CEA4E8281660286A802AAE8D5834F37F2EAC46297E57E 993B09251DD7789D3467417E393B7DEABD06676B96241B0E43ED1A1A9FC3B12E 0D34B2B0792B79AA648FE9450C3B209FB6D7D91F50C52A5DAB0BC81A8B698BD9 18946EFF691912D7348D48FE68CD876FC6F71F81165D0C3272DA1A992308D9E0 ED6D0A4DAD679AF495F62B78D462B463BD4A40931172290C615B3B3B6B47E45F CEBB85E0A6AB6832067CA6D403C239530D07F199788AA4DD52553836851C5228 1072406F6D7323A334E7A7FCA588897C4FBA6D4F7DEB65525EFB74E539C988C3 A685A98752F7198E77E456A545F0D23A1BEF81EF58B02D289CF980A3F17BEC8A 6F83DD90C4A917EB0E5E2B444A608E2E9D2FF80620E16AC1D7775C0A10C1299B BEE0E1AB24C50647E5CA1DA65CFF3B2C295F0644CA7826E1DC6FADEA93D66A20 DE852F20AD224D28DB900519EB1569837139C833F24B799F7EBE3FDC14235323 1D0BCD4991C861F38DF413A5A5588B73AEC3BBFDB885CE17BB3E97B4E6A79761 93EC8418C2BC4725CD61B5E30C07352F647C3FD50083878C13CFAC241DDCB082 E53703D182068727F9EB6FACEC25F6D901D7309ED7370867E34E267519E22D62 4FC7093448BD0D6B1C43D318A3E14C92032325C132AE0FF7ED707E1FA4A955FB F5224BE0045CB14ECC321D0F333FE24EEFCC504F7C756451D7693C3E6CA87526 4912E1B6DB935BDE76FBFAFCA4ED473F1D2618812CFF25A6859C626A216603C1 361BE3E071FCFEC2D4BF2FEBDE07DBD56A1BFF8303901168FA06488BA6B76F36 95B0A90D7724E9ADB567C2ADC65CF3482CF47FD1D16F70AA19A97D0F9EFC611C AEA5E1ACCDA7FB2DF05E9480936281484BC329F0B771775E73F7FD72FE3F45F0 50ADBD03932B38F37A8F0A66B2F739EA3AC8811C8F514E68C5643E4AFF485C81 88475A523D7FCCA5C8809BD49846C77795A38DC6406082000236A4D2628B5932 AB7916D44EC2210CB941B1422DEB13896DD78CB7B7F400EA5A6CD639D9CC828F 52311A11F2A84E566DE98826F1E28D55FB08ED70950205DE52C207CF14238446 084FB4DCE04C781858BB4E0744C023EB0B563769751AF1D807EED20E4AFFDC46 3C1510C782FD92902761F7557FEF701AA67B20A9B019C760B2BBA8A048BA3681 35DB440925CABA05B8A13B2D30D14FA875D3E200A018C78BE2E930457BC33AD2 FE3610314A268E9A30EB41F7C771758410E7D1179567B22CFEB5163F7CADBC40 4D40860E83BD5DF2BAB4822B55B863D0793D3B60F0DDDB6DB993711C4C7C2F39 31D02C7D8EE36FFF8FF2179534EE4F2DF388C8AF7468EB28FD5E0CBDF9E23D1F F320EBF19352E03458A43BD42366D549EEE1256555177E3D6A0932C6028CA6D1 1849D17B5DA8ED647B79AB412E0D5BB39A58964B4CA44CAF45F63AF49B330AB3 DD863F5EA66EF0C6D7FB2EAF256CEA1CF067D32DDB9E44EF1E351BDB292EADD0 55C9796128CD979A5F012FA15EB06B0C15120E70E0FDC963BD83BC0E73C5DB4E 29A03DF4D2722616B45D8664ED5EA0F0587DFFD8DF4D75E2B6686336B4E51EEA EF420C00A5147B235AE21F3AD9FC9F8C388258291A894DD984BF07362A38D350 F86FA32836BDB9B3FA67D85DC4F52219B50AAC16EAE195CBDAC59C65598BDF94 FED19A819CFD718B5961134DD369922D19F2AC56323463E52B443FBF412CB140 F13F5FB4D0ABA96E35920B10655C5140AB8F866C252E61B115A867B3EC13AFBC 1AB69B310C13EE3B055B9CEE392D7378E6E8E5D06AB75ADEE196C3C7E803D1E7 60AD2192379223C13FD869F65CFEE325F976715B0793C05E4A1A52B6198B6EAD 4226F759951BD07D595766C4C778136F7932A064A8647EA29A74E5F67C7BE1CF 00F0B2BC30E5A38826F20EE0CC7196CC63BE245D5CE75686062C3844E30F8C95 A54090974B9F1FD2B700C62D7A3E7EEE5B512EB525843BF5B99E45BCFACB5D57 DB69B405BBCA71367D993FFD59A5173166A39C8838748A7FB12DBDB03F93EDCC D451BA1CDB764EF35482A8F37A19D8C32BE7806A4D391661BCDCDC82CFE3EC90 53C71486B4A7CFF4ADCB58CD94ED36A39615F94CF0EAEB9BEF61C24273C1CD40 2D1F90B309D47C98D9414BB8113472B8A6F1188617E630E5CF596A7CDCE8EF8E C8B93F487AB5BD52973577027386A6423AF8ABBE2476E58E49A34D538AB17A7F D6B8B7A073AD75664DE25D070C2080C8F37CCF2B035000C13C1E9A8DA3E69095 70E3E14B19A8E6ECDC0136AAFCB295ED0B15046021B03F89CA2838904AC88DF3 4CD2D5BCFCDB082E370C4A4FDB4ADBE71F2420E3002EBACB077B6E75FB63D890 AA9F3C5CE4657DF40F5C33904778AE2F713AC67033D5A9AD5DE6A894D54201C7 7B533D494F36CB87984C8D5E1C4858A6D3ECA76AA286EC83C9AF340D61F3405F AB3A9F3548485CA1905812CBBB010FF5A996E50A81099ED85E399CD85F880533 C90A906EC5C538EF834F3AC404F328CBB7C07BE69D68E3D7CC7991498F6A5530 31569E866CB34E08AC969F3150324A118633ED878D7ED482C553DFCACD3A22A7 8819BC3A3BE7A741ADF78482F9C8650A648F53B37550717FD75F51937438727D ACF397231EC6ABFE78DCCE12D910360CC62A66E1BBE8F93BB705072CE1B5F1B3 D935DDC566337855D32BB83F7134722174785847EEA7CA738143C68817CC9BF6 406092EB8C887707FD3D8827723680E143687036CEBE3532745395B41F8FEB76 00F34A075A387141FAF8D0DC5C959401584952034DE4DFABB06527512FEBAEA6 27B4D68B68AEFB99EAD18960D911C003F5F35896A9FE53FAC73A6C11CAA23576 2EF43BD21544947705F4D3516E52132333A8D91FEB8C9E31E7E4A3D74116F236 4588A69FF0A5A332FE54C72C1A61A8B0E34E869C1452921EB8DD6A869146F56D DA2A4C8774E427C1F752D6A0FA02AC5A37F24750125E422EDCDE32A8CA148E23 4B076A22BA78DBF07287C26A807E72C5C8B15BE85681C185C3ACA6016FA4B4B8 8705883631E2E773DCA83EE247A515312FA43BB1CC9F9C1768AABB1B1A72BB10 E8CA5C2BAAD08128D899566EF759D8EB46C1E0EC84A4FB51F787FEE2D09CDB6C E97D70AC2CF1BFDDD5713D93B98AD42D0DAD4B9EAE2412FD8A8EB1F7E6B85D56 7E0947ED88D7B74424DE2AF4A5C98C9979614614DB003C5D21197F7FF377B270 D7A23CB2F0B596C0A1E73AEE1550DCF1E727EA4ADE0CB45895A75AB26594D1B5 C3279B6D554FD08563C752C176D0CFCB3D11E227834E6BB98F311B662DCCF0D8 17E7417B97098D5F9127C1B3B097975D86ECA8D6036DD0CBC13DD79EA7BA740C 585D4BDFE4A6812968EAF3DB76915528DF5683610511995B613FD3FA224DBB11 0A223A3D085AA60CA0192EFFA679762805B79F2F20C862362B06A2E19A0DBD91 F9DA3A0FF4B21F4F53F14D7ABAC803B134C53A6ADAC0F4BBD3271DEC585E68E0 349930FDCF8A435AE732E8682FB1DE3F7E3BCDD4A51D9A258198F6F0682E4E80 80D88F17B96CB4CD118419E5AE9CF0D05BCF1FDB13B334F2F7391FC7A4EBAAB1 55496000955BF95BF3EBCDCDAEA581E13CDB95362BD850A964CAC1414075ACF4 B7B386AB36EA50577E0AB3BEF2E6B5CFF6DEF6855EEBFA4C04BA750B3C493486 21701C8D1B66D2DB0129DA87BBE7D3383E7CB8FE3A867D16D1F1308B3BFFCB2A 7BC79077BB034791B7D7BE6227BECE6AE144727E60A254A47A9398966D6F93E9 9A0B97AE1878A2C9A889573A579DAA7490C29C537BFF8E75A9EEFB69049FC1FC A4FC1AD1A49079650A11B696430D1352E59FF45F2D070A7FF5AFB875FC1BDF7F 0D29AA7CE1B1C9E411729C4FA140DCF12AE62F6ED0834FE33C4B6C5563C97BA2 459F4FA0B820235E66547AE2888ECC0C86CC418C2F9E81E153CC475432A1F190 2F2F026ACC90CBB7CF06445C229B54658B514F5D2EEB62DED6DA9A08CAD6B790 72EEDC7AB0533086EC1F876B774E38AA81431EA898EDA3E1FD900DBB9ADACA97 CD6EA32269DE177C1716D42CE0D6867E15D6FACDC6BF2F1892761D7AFB301FDB FC7798018F195A1A6BA27A53635F91BFE70228FC962EE2CD3A98CB5E378D8AE6 2791D3C55EA291A0D0C58A421722CFAA0D193DB1BBEC4ED18CF3CBA7C3581157 A18B49659EA8CBB3E0C454C8C5773503ADBE534C4AC82405B59611C33CBB9138 928613B046713DEA2EAFEA9392EF0018359DBB3D753B11A3C8DAF0E2EB47C47A 3E464D7F526D02E509C115846129DD21DA6D2006035F9597AB033F155D477008 686C6A94EB3708614B38F60840DD0870E080A06BACF50D1F122061D65DBA48B6 317D456008511D3B674C3AECEE8571C0C3A94A04F92225D15889DB0A7325DFDE E111590DB1DE51A9DBCBB225D135E550E0E9404EB76DB972E12B04AFBACC45C5 4AAF31AB18A0CDEA3EA8CB6F5560BA3B56CF6163F2B673FCEAD9DF38BCA5C295 1AC5DC0D64ED21D51E218BA12E9FCF7578B0329D2D157E2D6BA21F7CBB88B038 4D1AD6AB08871C03853EB3CCF960D72931611845B7108041E61902CB2B0F27BF BCC6D05C9521764B7E0CDF9E961CCF19B8BD519D64A955DB74AA89D2F86D2588 58BB74132BA212B2597C5BB0503C2E505D94CA8910F51F12C8835D160CC2E93E 0F2881E1834A0263193037F1D93497B008C65CE45EB44BBCFD5FD8B3D9B0D671 B328B7C0AEA7393AF9FA7E24AE32D8B09E7CB1C935D4BBB8F140C08CD8ACC427 3EC50464E62ED4304B2172C313D8E092A6947E5F9CC5F1F636BDD7171228396C CEB2B9C5C533AADB5AF023431C834D28AFEB0D1C7853C4DAF3E14314BD00EB01 C1D91DB66456F5546617C0EC8D2DCF0A456863F4156011258A8461EB60E397E1 6EC2C64088ABDE4DB6E4E6939FCDF67C93AA669258A4AF9C664A2F1352FE49A5 3260A363DB44A1DA88C81189ADAF04E3C3F00E7760A46D9FD6BDBD9FE2EFFF32 1F61025CFC33337FE829289080DB16B472A57CE356B5543A43831B9DA32D0DC7 5328E3A249A4D623AE5070291454A13CA4AC116B360ECF85C5BBA9B54A311349 415BE06D01BC0E041FC4427ADF955EC9EF6F0AFB867210EAFFB055A1EC321E75 93FB29B901F82FD766D2AC8F1FD2E4C4658714BA5D55B96BA058B582BA706322 792894AEEB18A22740FFAAE1A274CABC80A156EE225C58A113AE5259F3A65EEB 4AAAEC53C6A2806D8F94EB2B53C801EE5AF8943010004274DB499CAFCA1D3A30 655E1A7CD860252ACFC5659C6B0F100C5D8C90247F6C774D9BA1F54A718FC3BE 7D9AD75E44AC6CF381E54A0B8F21A5ED3B49C670CC386440D7BFE5F4CC4590BB 1F500655BB4736F9C579B27629924E78917D6054F4E5C81C9A2ADCC1BC2511E6 1D7E52350E8F9FD45105C5ACF0D7A773B46EE09DE643E8CEA826DAE0A4F0A98D 51BD39546D60260BC539AE1E4186F867CBD0B146013BB1FDD131FE4A6B390753 7895F0F124C22E2FEC8DFCCCC5605BBF8C485989608E955AA2F4EB42EA11A981 A9510C5EF83D1C082FE475ECE527A5CDBD5D01168C90FE07D69B7068239BDC3A DD9789F1E10242715BEFDAB388275CD9CBC3B1E23AEB9B40DBF988C61BD4CF92 9AF3C195CB80DB8ACAD91C8105124D9281BE247C40BCBBBCF1F6E0134D4D5239 53D993EAB2562CD9813807BE09D3A261CCEAF5FA946FF09DA05C3BB052D3A029 D2ABF2ED50FC3859C0CCD7047847F23FD45EC4CE92E552E0F322F1FB0EAD126F 1A158A3AE2FD8B051FCC6C6E5474A7143D6B2A7A5596A228F6FA568B2370E2D2 EA7CEA71580F94890813ACA583E16D481BF99E4FF014790BB096FFF7A5A06672 1BE23B0406B0999FB2E4E9E204D9E1F200AC408B2DF3F35620E66536B743BC1E FCC9E4B93A1C2BC72054FE9DF0BF16D2F2B2506B21B4CBE35F8CFE60E1855B86 EE1C18B287B3CD0BE0AA486CE54FFA3CF57333EFB892191B63BBC0C4CC5E6BC7 FA35B165361B94BD723CB7A32FC78BFEB99129B922FCBABD557CCC0B9EF1957A C05CF4CB1D2D836FB60E179AA352BB0478E5D50CA5FCF2E7426E48164135E6E1 04FC2017252A07A45832F32325DFDA549101217D21835DB0B527AD0B9646BFAF D8D9B02D1FE08A4EBA94087BF43D88A30BB8BB76159CD02B8E42889653573273 90DC372355B674AAF2C9B1AA9ECAE89E8FAB0AD46889FB38D736934CA6AFE29F DD172598AB8C44D26A4AB165F640300D9680CC4B042135205FBBAE897B93C744 DD828F72A92543A0D731B4B7892CA36BD4D136A21B8FA2E11352770A961F7CE0 76A0BB3F00640EE6ED5E349697D4C5C70D51C1A7FAAB50D0A8F2D3FE53FFADA9 AAD86869EDAD1E1D1AE1381F902BF73F86D5F969C28FF830583E767665EE15AC 1D3DD926A079065D473319FB41A1071BA7405BD18EEB609F617234F0080BBB82 CBC10CF1941FCD67433BBA20AA6A6A12557621D4CF94BA6C2F972622D49123DE D4C5BBC54C959E7EB6CBB049286A7F5B0521A252218EE12E4689D2E569DED40E 48BD79D8BA6899C5CC83444EC22618F10B7546438AEA18C18A98C488D17530DB E82330DFB8C9C1F838E19D85E544BB78B4174977602B72A4F042791606F1FE58 7A34475797EA479A384728D6DFA952CB55F206A857F152EDB3BFBB650D21CAE7 657F655CFAE7853627C35A31CF7D0FF60C9F8AD6795F820D51B0DA54F150E3B0 B6C3BE1DF8959F13DAC3B83B9DF4567844C83FC498E6221A8A1108CDA080124E 565EF37CC968FBF6B9E5E477786EABCCEB78ED62C1A079234C3B3001C035B1AF 8D1BF1AD32E0CF873ACB499FCBB9D8EE242936B1AF44E79D0BE16BAEFBAC5641 827763AB37EA821CB9DB9B46906A8181BC112228E37FBCE6ACE3B79CA2514707 9087EBC9754CD6E905C279284B3E1DF0D81844E8926C7BCA852784D763E6BA5C 414047B2E7D8FFCE31DD376B6F85DE1577FFA269A0344DC7262AB62FDB2EEC3B 3BFF4EA046BFF2A09D37A5FB7A2F5C8FBB0CC66B750997AA9F5C8FA545CB90B1 ADE0DD94263676B2E0E39B357F6991CFF25D8C518078C756CB5EE3455F1471AF F0A5976A62C1A9ACB49CBD0D026E49163ABAFA7B8D3084FA490483117AD7AB39 A00CA5F72FFB310993992A7FBCF049BF17CF043206262755F49A3CD4961CB2E4 5849350FC1AB11A431314160D29411D9CB79A226969BADE5791DBEDB27FD007A 4BCE1DFDB20F3001CCE12E6121E62A8E7CA59929C8E2AE84FE74717EB50C3D9B 87CE6FDAF21DFD9618E6DDB03846126099A897F8CAA3A9C86984609FBF3B1480 866F3FBA03B41112D6B5E389D723EFCC9038935AB0FD0A10AC1127B440DB87C2 771B6F611B1E2C6FF9072BFE0B054AFB29A151D8CCE8DEE8F32C9F93BEC9BFD5 4FF6529882B21F69C7EDDA4681AEDEE1992F203EC5FEEE9345FC54950B1B43FC 05389C8B9E40C062E961895E76ECD4334FE5097A66196C047D75830EB56ACE1A C1C2A7A7D8DD29F491C0A49E3779BDCC8FC54C5A8E0A77203AF80EF158C17023 F115CF205D613266A3D922F485DEBE82EF71A8BE0545F95AD3CF73AEC4B3FA07 1F140D0281383349F59C19204232F30EC7740C87A124DF813818EEB7370E7349 7DD6B1D0C388219C94DA49995517B9C724C27E0D5A32D9E239C353E9CDCFAB23 73F35A9FB763D49D5CF3CB92DF690EF7A86C4CA6CF4D16E0BFFFD2BE6D6B87D6 6F48C2D51FB512A130BC72E1BA97338D20BAAA37B60001A85349706AD42CFE4F 33E54ADE4FBC09F77DA85F61B66AD803ED99FEF1A7BE40A4C74FA1C4EAE13874 E1910F4B3B4822EC5FB8387A296C0FC28D45E24D5052A9C0E7AD15D356D9FFCB BEC26FC6F402BAF1415964616485FDE195D96ABC06C8B23A91A9E69E6B18A95A 610183C6020EDFB918657D3183BAD71B3F7B40ED0A699EF03367147A0E5A42C1 9DFEC03A179ACA0DD904E35EA369D5FD8E02FDA8A499FAA071F617A8C03D1A21 CE46C189124BF552ABEAD2B128E0AEEAFD21201A7B18A1541238DD9594EF9C93 81AF0EA3F7A74E53CE3E523CD1C7B85305E5C32308A810D74A2462EAE869F770 446140B7E80ABECABF71E3AC1A970FAD5B56474D0369EFF5C622DA2703CB4B3A 19AFC60662AA5E1E4C4C21DFF492DCA6B75D3EC3801025DCB8064FE4C71AC555 2C8FEEA71E2315CDDDAD371F68F379DE4D5D53977367FB385C61FFD25782751D 753A96290E7CCEB879F4C9B1B505BDD94812E98DB0FEBBFE1D429B4D351493BB 5562AC18167899E7C3E9F965E94A1D11837B54829DF869C830435F8214D78897 7102EE5A43579DEC18D3E9DB543436D56510FBF53F053EA870E57357A0E382CA 7EF6D889FB6CC1F07DC3D12A16B6773B0E14D186E395772C4A656257722542FD 797438C6A52A57C30F6350E674044A8D14D03E454AC37D6A52679EBD2476CF1B D7A202F81B340AED15ABE2C58FD7C6EFC1E72C6347100455807007EDAACA193D 56F8E63FC34C94D7B8A89B9B1EAFCE05CEA27E18AE12572F9010868A95262815 13D3264CA59ACE4596DC9709648587BFA55132C1D47C583D2C7521341C514793 8BFD0D5E8194B140703E62DC187008F4FB61A8606036BA73BCE3DBF16EAC2B98 0CB56031A04AA19EEDD88639F835AD2B004378EFFF6EE81A4CE43BB1ECFE96BB 47065AAE4FF6F606EE0FC23A6EC15153C19277DDC63725D9B61F1C58BAE31CE7 686C166DB0904F1D2F5D62F0D1C1EDA4F26637EA58FA78F7FBBFD71535523870 425A8C988665BA95AC2369E4F4B16CB5728547900D32ACA14BA7A54761DD899B 96CD24B716B2A9F079E4B44C789D299C2CBA48358A7CF676C4A9DB0B057C6683 9BC7B3CD0C6A3BF6A6C60213BD21886FED20C35A22C44479D42100B592791491 414B4484BBB45B3EAC0C34B89330B378290477C57860590A66CB7DF404F5A506 F89920C5FE5D52854F0A12955E12C9A5BF9ECB578FFB84297501FF3D9CBFF4B1 1CB8015372CD8D09BF0265A8EE337AE458495CD6EF996914B2FF9290CC803E02 672FEBF3700B21DEA55741905969D0B14E0DA028C5BAB047A945F1CF781B6E4D 66B39B6C6AF3EA18197D06FF1B18EA9D3ADF961623E99CEE08036C89C7491FE5 D23FF94BC5F20885F29B5BCC768674BD12D71BC50689953684236E75295C532E A17525B0462A37728811A6EB15C0522C7AA8B387C66839572FB0422A4410C63B 0086B5449B1C2D59A4FF6C02D704764883773094786A8B030692CC97CF5435F1 1215970300229E00B743C5E2DB03A049865E997CB540F05972F919355FA1C18F 578F51F6187D3E5931874BF1804EA405E97D966F947A2E4585396D1EE4C3F6DB 4F1D8A52827AF7590F9947AC2A2C676FB7DE9F6ECEEE61F034F9FB2099856B6C 5865A96672620A36A8C69D0E814A606AA9C06519F200DA2F02EE9185AEFC1AFE EE5F44B16EFCDA397853C4E8079DC8D51BA86172AB2FCB22886F8B213F271C8C AD6C49AA65BD5D88DB69BFB37B226F382668DBB4CBB1EDB483A94BA300534B7B 45DB5C45F0924ABB8021BFA3225517E6DE016C754AD50388A24061A5199F9260 C2EC458EA249D2D53FB6FD1A808139781A883DA08020516B3D1571A2BAC44905 884CB8C8E5F48A89DBFA3445014C37A0555E3369A281ED0A2327EA091B4D019D 8C1879FA51CEC3DD8A557C45D6A5A562E0896569128E94851BE7DD09123DB949 206BB3530FD8DB247581ED03076077E570B92103886E39D5803738D1C7B82428 601031598223CC3BDCC9ACDBC6A3D9E0220E0432BF322834DAB6495D667A6B53 6803C4ABB054632A883009325459B610B58A59876D6E98C360968CDB03870A94 81D1399154E479C8513D4A5CC7E545605241ACEB9EBA00D3964DFC44F51ACB09 2D57DD043A43A294F4A7F05DDF3FEA9BEFD870A58E4ECEE25805A605C43A4ECF 1DF18305769790F104E94E841A30CE0E3CC8EADE9001B98F38ADF170C67978DC 8ECB4EC5F4508EA897ED742CB80DE8FC66A7A237BD1FE09133F7408920224A9F 5753C8FF8A8C90A6413E900B370F1AF49A64A54BCA69F936838B37162A1EC0D1 9D8945036E6A9D043ACC3D40D8497DBA8EAD5D9B1C15DA039F105DB764D98D39 947FF0B5D6B3CA03277F8E3E709F0BC17F47A177C4D9DAF8D14512D7992EA17F 49D2D583ADFC27FEC2433972C0E5D89686B2D062EF939D0933B363179F5597C4 4374D9E4949CF283DB8678FCD3202C348E8AE3EF96087AA292326B47D39EB122 7994570379E373ED6F8F44D4DC00C6A3FEB3B77B74380B13E2535349909B9B9F 142DD1E36CE2667956804181850CC48693FA11DE8FE27F8693361B47084A781D 449A27F2AED67B5C6AF899811B31928EA4DB9B1A122118AA5ADD282D0003D149 F5A184BD3AD197685530F0607379CDCA4509528A95F4AC31E88543F85ED43684 37F742CCBE02EC86AF68975DDA4B6965C346F4F119FEAC79858630F50EF31264 2BA004EDDA6D1253222D37211F027E606EAA304D7D5DD1602E9ACC32AF8577FA 85B01D71CCC582D37CE8D82AE27D3A5E51A47A5A6B9651791AC0C395EF17936A 6E6FA1A3B351C8324DA83C6A4309C93B27EDAC17ACB819A5AE2C4600DB73E5D7 703D736B1E9CF1A2EEDFA7F27F525FCE6F30F0F9905B003F3EAC99E7DF468ACF A6B22B4CB91F03066CDE17ED24F8A9DC1482734AB7648D60C9F176B9FB0DA5B6 B0587854E95927BB9ACEEFDC271F91F30CB068F552468F886236ABE3C5FCDC4D F3DC8CD9A67D16B92B41A12617D5F38870361EEEB354858F537BA2D55C92BA41 286DF178F8E5A92E0165C9211C037CA00ED6AF86C8555931EC02C75789A9EC20 0DD6A21BDB856A5E6CB1F067FDFBF4868570C220843737D98EB6AE2C9CEDB5D7 89E009F5070EB46CCE89BEB35EEC0E31690E2D4C0E08832740DFFDA69A02171E 2BE04DD06DA630315F8915CC68520B8094B4E8F94B4AC709D5A2697899E3238F 7C59BA6B879DFD0F4CB8818C1781FFCF33A328DFEE7D8C35C6F0B39136737226 E651088D7B86DC097FE41B40DA4C5BCFE8F57804BD384B0168456883C3619E58 953261D63A41A21CB473B0EDA3B5210464479F1CF20A1D6C9084B6B8E6AEFDCE 2DFBF3AC3C368D320055B2F6F328341DEC7B379DDD912F1DD27C89DFB0D7F083 EF7AD9CF0878EA7C96D6124A33553AFB6582FF1D62D0E4538DA4AFF1F4F35A6E 2AF42C33DBBBBC6AD0EF9209C1257901B148A24B3947995ACF3ACFF5AC3CC17F FCE5F74295FBA0C510FD09D5DE2DB8BF58989621B6AE3D2F8F9D38EB230216BD 3180E51D08309B7FB148D6F4DBDBFA3EE5E934527279C7A89C2269FAD8C59983 34381459376C599F685C3CF768BC574FC45887A461BCB08A71FD97906927DF72 EB6D6B06EC7C748A40418C24FF5EB5D046D9BB84A72C86DFBFDAA751A7C7EC85 4367895B639CC7BB239A1C628FA9F9766F83C212F2DEF2590CD32811CD7394D3 02CEB3AD723AEBA487F0342B329CE92C20E1EB6EABACE7E1D03ADE9ECDC03D9B 24B067317FD5C0D7E86A4B4988BFB536C335F33629665AFB2CA0241FDE2A16AF A9EF5C21D1AEBC5917A92AA18EC3A21BFB99D2B1EC8B1AB3C720707648A9BA46 EFA5AB3F55EFCB35E199B2DB4E75471BA4B498F70D379D0F6D4837DE6574967B D2336012BAA0CAF0010B93BD665C451A305FD8DAAA277E39B5E75CC57E1B6CAC 2450FCE7DC205A0F7737BA0F47270675007855B56CFF2FAEA468C5754B12D384 8A2112B1EB626B6A2CD42BD058F4C211326F6C166D3455527C8E1EF9306D9EBD 6A331E59212AF6E1207F262DA1D78209EC3FA43782088BCCCAA66C807B62FB15 82F886E159A314D6FAA80281EBA3615830CD44AB4973720FF697ACFE76B36058 F5E12288160071BBC85E5564665537564CAD7AEFBCF85923F8D2BF20C1158800 80F8ACBFFED983B6A3B9A731B32BD8BCFA80B317CE22647F501C002C39DA94B1 438B4AEB72DDCA445EB189304AFA9517A40CF4BF4A02072F1446FF3D07F82D56 0B65177BD37FC90B4F3F04994F5246B6FCBEA37C1E214BD3AA2624FC50DEECCD EA700F00893CDA26B293A2B37C474D3BD195898CD1EEE40AA236A3F970C22C48 35E7C392F2914C7DB9FFA969D8DA028E2B6229DD500793F7000A5BC9B2067E93 DF725B8066C49790FE80033A57360FDB61BB9B2BE20258792B5E29AA577BBDE5 C2DBF062894FE130F4D784187A33185B654F2F20B38CFCFE0BC16C5C721A1598 D1C7C3866F26B2B2D5D7C010E6FF026C27A87CE961E0DD577E19040860DF5E65 7AEA2E2CC78AD3054CFA8B301D3D1713FDB67DCD2F0E9D451FA0903C65DD868A 28E70285D4FD7B32BF4211DA0277975B53CCB2BFA544E00A84465DDE0205C215 74ACAC2A1B81F99101362E536CC1C63DA25B9D480020863EC7B624273FF0A148 03360FE1F5FE5FFB4AA80BA46BDB8BE492876ABE18718E7F4D73EFAC56B1B4BE D866AA3F3C356353428FB77C6C0D6DE6DBB14249C8D9B2BB60C450FD4506E8C8 03B868098D1C2582AAA6D2341780006E90368A2EAE50BC605DFD4DDDE468FA2F C4F19DB1994413365EEC53521AC365993016441665C5CF6B112CCEDD2AB2C682 E2BEC5C3904F4996743C0225EA871D7A593F4077852AC8EB39C7DC042F3BD204 BC4041F5FDAD9C0E6361DCDA743AB6E20BD8E8A4E2B3D36741084785A3ACE461 25E58716A771551808B0A15418BC02F1532DDEE6CD469E72B0085B4E35A237A4 5EDAEDBC422593D4D217AB69A6E25B87D4E9C1184A6C8289DDC1DE8CB3F8E5D5 547F89FA0BA91D4E142EFC7C1AD67101B7CB2FF1ECDEF6C4B86C7ACE0A39D3F6 6328CE620DC692C17049342AE1D3F6D144336725246CE4E001CE29B9CAEE33B1 EB8B3D5DEC661875B272515EB503FE3687729FE5C5FF8EE7EE6F75AC9C3C1989 915A21A08F8D9D3B44D4D955D11895D222403E3DCDB2E5958F5C832D5DE7F5DE 8D01E821CB2C3DBF777F8976B7EB24F66382BC8E071D093FC2EBF856BB0AAA07 DE4BB3EABAA85EDDE7AD56A10F48C9EA43CE4B82697B719304CAAC00ADDB91DA 8AE2C59BB960562C08F17DCF8C78708B4FBD27A474C76C534DBDDD5E8036EBDC 8CF23953FE789169FBA3A236BB8D7284A451F20F544D446022DC52C201802EED 5956481734B708F877CD0ABE524040FC0173890863F1FB42877E6B1395CD2ABF 7B8F83EE2FEB2962CED6277EDB1C9DACCC4A00A4358CBC524AC888F895099160 A41ADA7F20AD9F07C36372696879E8B01BB520304765220C46573516E6AF7F1A 35A8C0ED72A578F78918DA3EFEDBAEFDD97BD87B20D7C9EEC4CFDE4D1B3EB13D FCAE5172CA2F80A2FEFB3FA11E5BA5AB0BFAB924A68B8C7A4A5544144A006ECC 557DB4C53DC3A81A40A2FC96224F65D21B47B3392331DEF2331A73A407CECD5C 4F4364F824A7EB58CBDCBAC9247573C9CDFAA1AEFE7637B2D5404BD98F891617 D8BC1931089D8B3721B464C28D3BC271EC0B1DA0209BC9486DFCA1F4EBBC16F4 934836AE7DE13B446B0573D2137747FC1D7E8ECAC50B180B01B0F5666F63D7A3 D211E7871687F754A207EFFC5B87B694108471DB25B2523FABE81607E56948B7 05AB42225A3B41CE5E3BA180658E78E04D7A2CCCA1AC2758F73EC8A2107DC4A9 8AFC5808E49EE7085E40765303507ABFD7E0F0B9670E83A338ECBF922767CF80 98D4121614126C5195950C17CF32263FDEE85CE619109DC57FB923D7C0AC0A2C 8D5D2B8CAF9435A90A78EE4EC3321543F6907145B88919FBC8AFDBD74130E0D0 668BAC751611993374A284FF88C345AE259F58DCE609AFADB98AD66E95165E96 9DEA24ED3C758FFBA5AF0360C9C7BDBB4A260D654EF11051DEA893B10643A56F 252A146315ABEDA311F2528AFFF887D624093C1C2C7586A8F82F5143F0B46F1A 547DB6677408D88DB7573D7AB5C15D1D0F4FE40C6CC81B1CD24348E3E94DE8C2 7475487844D16A9EE56424F8083606D34D60B587777223EEB8C874B91BA3A75C 29401B7EBDF030C7EA89A50A7B4E88C87581AD3FABE6D7481DF168A078E7DEA7 B04D6389F97AAB753A46B36EB9EFB8E9074A28528A0A5F6E75A62854BD6F1F6D CFB26CB6339086E3B0C1077A0721BEED1FF4946EFF2D00623605D04A3D9A6F32 9CBA8749CDB0BF1B0AAF2FF2D2A688A0A7E06B03F99085A123B808EB184852ED 4E6D2756DAA1C013310B04AAFB00B1EB27324470D17578E6DB2FDCE73E615CF6 A5820F442474C4E8D67B60C7293CF362A492DC17661FEB6B46E333463B0458FC D131798CF1D617FC9F373FF3F54FDB7357B560C43EEB035EC95CE4DB155957C9 F2C5BEE77324DA2315714978D1FB104F6697564A2BB1C9DC551E5AEA04DBE9DB 87A77E1BC2B85194CC04222B83C0600377C339452841BA8D0AA4855DBE8BCF5E F799492911454488F0FC28BC79252FA79EAFE596D9A8FB7DF4AA5AEAB5212015 5BD533AED55D546CD2A28145CC41488F3108ED4EF556303E43A4ED7774E3A82F 4FF521B0BF66359605F54383E141613DD6705FC85A4B08EDAF7FBA485B334BAD 8BB42B61F3A0F5B337BF9FB4CDBF7FA9F1BBCC92A8205CE3BFEEBB263D9D60F8 A5867740D37B855DA02E877E2D7E0837FDF7C331F81E212A6796AF4AC32B8AA1 A5653F3D16ECB2029D68548E81BEACB7DF34508C4DF31877B43DDFDB2A8C4436 65FCBB4D1707EC9ED2D591D11D35F3956C1F102EF63847C378BC67739672E823 EF16EE58759E294F902F25CE0E2F312AA76115D70B346D63F673B5F13056E3EC 86A768BACD68F96204BDAF276029323C31127FC8B496E365800602DAB7020BE2 68B82CD7A6BA7C0AFE03D051ABCB8A0F9F74D16AFF819976E5DE8DBFFC077470 85F13E21E2C6FCAA4666CC23F59F9E37597D734A1D108630F6D234460CF00663 EBAE6E99A261E1C34F6C6B7F170487FBF684C7535E271664747A1F2175523D99 8F75E5FFC87FF03B48CB2746239EF9E450883CCCE72695A844A66304D9DDBCFD E3FB6E0EF13C6CB9BA2780F323C20F047F2DD54F4D13ACE0E75D160780613073 9891997D24D4811E3082BDBAF57A5DD4AD7E787E7A73E86292F2A58A3CE9ABA5 497CB659E7F6CD94EB897D07313C7F5722E89FC2F1795B91BE513FDB24F4E97F 6E543633B92AA2B2E45F4DFCE429396178AA22816E47EFA0C5CA40BC989FDB51 EE0AF64289F682CAE39E3FE7C617A3610D77FE087D3A6C6AAFC7AAAC7A66741B BF10D2F7E8D519D954645A44E5C4AFE06880333E224282D088E52486E03ADC5C CD00B1BA1BFB01607555B5116C40364404982077B44E6A3D51353E98A37EAC5A 0D17655538A9EE4D5B493C4F4CB6FCE7036AF9E34881F034B8D94A7F04FEC033 21800A3D56609FD17F3BF1A21068B1F3ABA340EED90CFD7AD1791D37A3C13F35 9E55EC8FB53F172FE2A1A83BFF0A982FB22A65C0266757FD83514FB731A65AC9 56F4B9D9C84845245A5A65B0682AEA8AD574279655958B10741E2DC83D8EEA76 B465F31FA8B8E40D83E410628200272D3410B496F61942D0B03F9B3ABC02F9D6 C5207A7C6F7C7586D8AEBDA4CA9E22FCBBD30636E1F31B9572EF9A6821ACBF4F C93DBD69489481A81EA7A2CA5F4B5B9CFDEE0D51637B7B22D6675CA47EB34F85 68B0045FE88854DD2BBB5BFCC12C09B62B4B53E5EA4DFEBB2CED4C75A5CE4D1D DD1FFC273390E460E07DD7AEFF8EA0BD75DB632DC97E372FB0F9A360F6E07CC2 E4D89FC2E0B5533F61E179E1B6EA5707A5488B51778D6BECC23531A920BD31EC 41DC11760B067A659596B0EF09CBDB31F046B9B7E8EF5CD38F0EDD85193DAC7F BC467C000A589FD6C1D79CE7163B36A297A9BEBC9667AF38C15B3BE5E779C3E7 1BE2DA705FFF35CAB9B166655DC764D3B0F545FD45EFAD5F3783261DDA5E2DB3 BD66E1CD15DE973D4D9C9CFAF99828C11FE172A35062EA5F4B7CA087BC8B42D7 C7F105B1B1E426ACCA14E388A7FBE9450B7BB67F4FFF71201A94C3A73F63240B 832BEB906CE05278532806D4393D7EF723FD81FE785D29042E46D5F26F0E188C C477CC3FF1CA665E115789CC453EA08706FECE375F8FF9CB4361872D0D7B70B2 F3ECBD4FD43C66705A552BFDACD9B5D0E4E1058EAC181038612744C220AA537E 70D53DF531A4936A4A0F15C9DB2E3AC98F1537397559DB904C7503B8E0D1BF8E E9814F8C833CF794F02B59AF06E4D08A9FD036198A3FFF110A4B6E7DC0D313CE 02BB273C7176066DAD3C6005D215653AE8E35DB7956FFB941C8327C91A300FDE C41E537F93C06D91FFAC4E16C0BBB3F799378157AE008DA4D6D79C6D6F9208A2 97A454095397CA194B69869B6C9F92CF0D709F48749A199404EB2FCDFFC12ACF 4D0C8A0678F1DA880669A5D315660E933A28180E3FF09B48B592DD43AE7E0925 A1F2E05C5341957BABD29F3A37B0098F3374D4D857F3CDD673DF35061745B6F7 AC504D90AB9C3FACD18E3F0DBFB5AD81D85AAAFA8D76FCF2FA605AB00EA40172 3DF08FE9065B54DF281A0D38069E3DF26A6EADBE3A00984F4DF4FFB377B493FA 0F04C028E5985AFF6C6A985BD38B97B9A80D764739D8CD7E52353DB8FFAFCD9A 2E5572D47E1255D76ADBD7EC0CA8C26C531686B6EBF921962F2FC9AF170E3A66 40D5B871A398A1B37A85223B8FD656E8F5408CC07A9AC5F13EB8BEEADA42A14C 514A20AA0141BC80C599446B636075C82860689ABE416E47A81992F4680CB6F2 0FF549F782BA8F06C5B91E493DF15C7C5FE66426AAD82D246211880BC56EC1DE 8AD4ABD009E90583AEE2EC549DC6A68C034231FF814E12CAFEEE65F10DF56F2E A8409E3CFC02B9D8F18815E73742CCF4629F05C2AF967E21626B70E87AE38593 55159C71A9D9A51C35B8C1DF5D27D2EDD221E1A3F3E0B9F75DD67DAF6C2B73AC F2D07F322D9BDFEF491BFD3E04A5DC11DB77989224817C3B77F3B1FFEEFE1C62 4D5C01E5FF40AAA343F7C654C190C4B1FC82558B387A05E15B83B992223B210F 8E9ED4C266FB7165F038D4AE9924E1DBB4A6EB4DB66EAD6781FA3C2E7D862E52 7D2B3AADB8A6497A229629199D7C0BB41EAC24069F3436C14FBFF30F171E1E21 4ED6148B1DC40326FB7F798113293573F8165D3A035FC7CD5541FD87BC1FCD09 9A2F4DC2FCF87089D3329BDF75DB74A469F67D05209D2951DBC6DE2A6E2134D4 EAF1171B52E5D031471929E033098D757D42A80162BE013BC7AF3402079A358D D4B00F11F70E6A1F5FE7D92C1E702B61B968EAA35EAC6260DC94E5D0EA8B1426 EC895A0CC0F0BB6C46321F3C10CFC126B4C06D6543BA75F3F9DBF823134E4F7D 46C0F2CC3B5F18EDE118261E193F6689C26CE8D5CE36D51E455EE84E57390394 0AEB7E10C80CE05FC9C439CAAAA7EAB0C88BB6EFE215ABD24EE618E763C8EEA5 BE4855521A005EE7FF802C84CC7B76BC6B56EF253BD2B8FB2D03A1BA252D76A8 E67F069EB90BFAA580339817C7150F75A5D064FFCC0B055449ACB865EAE4FDA6 F2CC809F754EB30E52ED52A52E3F770CE3BB21C8ABAF83845690573B8E43DBE3 7C661D4018A2544FCC2E13C442787F1E01D1D942C0FDB6B3BC7979E5ABF402C4 A171037EB5DEAFF9AA9F31C1D65AA2AD3104D4EDA8445A4855F7ABD42BB0A2F2 12F682E65FD9DFC5B0308A34C6310767CBCD4ED8D1A1FDFB9C2A4F834544CF6B D609CB9FB2CF6FA699125F1F2611E71AD0140339856974750CE221683CEC3604 D729156AE996489DC41660A9D6A11F6F6482E9065E076A9773A65F8A2E6C414B 5D61B044ED2466B0443142CF1CEFB07E2A777D8D52BAB71700FEEBB1443FB009 D0AA698881DBB4C9005F56703B10EE1D7D3D6D142B803713B6FD77ACDFA67201 480822C7E9B2C3DEB59710491C728CFD66323DB550ADD19FD880B16D54218DAD D0C9BB1A448D51DD3718714A62A46E19E96BC9C994AE81A36EE786E12FAF126C FD09D2DEB897DB4D710AE1F753A2BE873D37D8DDA33181298275ABA3EA06135D 9789ED829602D0862A2A73442B3D94E81259E9855D8F271A5E24C9C5BC5CB737 ED544DA3CB670FD6DAEB13FE81FA485B983951A70D991249ADCE151EF22951FA 19DF648FCDC7FEBCEA6CA654268C658652AABB6D01F742E21CB6F65743C1A258 8203FB6DB9B7450A20C714C607FC4214511030920DF77239AF1B653DDF57942B B60FC272F32E20105A962C3EC62562C5AA3675729484F7DC7EE01840F98A82B8 3C2B94479D9C99C828EB22481CD4CE68EF2F9FB7CE3D69EB49B851ADB2C73264 64C8C8F4EE3796E249E401A49AB25E49850CD8294842BAECE354CD76A7A857AC C2C22D5D9087B9F4CB9565BB89C1F9974AAF5FEEDE65F76ECDFA94D6425FF9A1 90549AE4331EB0538DF38DC6383CF7CE5656ED233F872B5E96503118733DC552 5FB47F51B1D88580CF9A4353E2C6A7DD07632F9938D1CF8166DDB7E719EB6FA9 4EFEADB6BFFAFF9BFFD7CE59859E83BD52042456DAA721DC1D204E1A113F75E7 0EA9D91B918F9112D38A79F2F67C3CB285FF21783536080398D643AC0C88F94A 3174D5438E9A7A28BBF4417B188C2CADC4834184A34E4C4CD6777222349B653B B0ED1B9E626FDF0F6E4F93C7D7B2D8376786506FF46CF32990BA87A168CF50A0 2A1FCE57C1D30DBF93B80C485325EC845316CCDA7DEBD6C2ADC02318740DCF8F 8B572F08DF6970D537F2E8AB8497982116F8A464F1B654DCE21613B618573725 0D56ECB030C0C31C35D39160980DFF4721CFE5B4B5C117779DE81A842D8168D2 9C44A538B6ABD5346BD3C42F8191E2607136A98DDC3EA106AFFB11BD8CFCD54C 90839256AA599D1F27DD25A630BD7F1F4CB5A129DBC94C0F491FCA917354CD7B 5811F7DBF49D0094B50B65FBB9DF2BB15BB04B27DADEFDB89F8095EEC4ED11B2 E2F084BFCB492227E1D5763B0661941A5AC4B266203FAD2EF03B692A537FCDA5 BAD90942BFC233508BF94E544310EC10856841A8F684A11693BB42C4322AD5B2 C77961F7275C36F029542CE34F84E11EDA2CA6112C1C9E7814D09B7702D390BE 7BE0C18FFBBE0C4DCEC4AC01BA958AC16DDED2A073D16A0B5706621BA18B8275 5CBA3C779DF7E8930EDB1DD2A2068E3EE9B0F31D6F8C143B82DEBC2DE5C13608 05826609757E5F19361C60A191296B416036CAC31D880C0BACDD327FDD1B8EBE 650400A54F9CFE1B3C5E91956B6AF932FAC394AA85CF43899D1E80953D89C9C0 3283CB9666A896B2F24CF0AF20A79F57687BF627C2074DFA97B0C706A582A31C BC7D0C236726B9B181BBFAB2EC207468F0B1544E18B446DDE5468DAE485DC115 4DCB52DC6102CE711AF4640585C569E691172ABDA1182F67156FFA5498FCFD6F E8447932BEB1B5FE0949A887B8C19CAFD2CDAAE8EDF4D57B12B62600CF464713 43F4754AC6089D3C9CD541531D0455B50062A3D0C385F11890FBE82F4CFD4330 53608FCC96708B0524A8DCC3A3B6FAF87D59D9B0A78F3A0F933B7F66DA50188E 190657DCEFB1F747737D5DBBD9BCAB77737FEE1EE5E33CD79DE3DABDA511BACB 5402E4B464A517BDEB008FC3E7DD9DA62261ADFA479D41F7594D9513A2C658B3 3EEC9117FD6D556606DE1B87F81CBF262DD113DC3BE17BC5067C95CC97E266BE A49D45AAD0AA3F716D029D2F4190062F2961FE39212CF1F259916300BACEE2D6 3205CA891C913CCB1F56D89A5EFA8F8E9AC15C4C6B962EAE79A0A3C9896586C1 FF00FD2D665A3D161D99553D5249D4244EC75E604BD9050DCC622AE230D548C0 BCA5AB9988FB72DEF4AE2D4986AC2E853DC6BDC7056CD651EFC5089D57D5365A 2803CF326DF19CE674622206B3A949ABA7A4943DBAC160AC9DC0D182A7FAF607 ABEBB3C3E2519306C5DF5BB041D4FB27ECAB65E5CA59D45B8BECD819C37A6C45 AEABFAAF71FF475567C06B60436980B6D47AD18A75324E5ED592D13E1C9E4D95 42DE4DE28E96E4A7303F0A126A8941854E325FCAA650A23D86F57356DFF96C9A 0B4DA8FAC047AC54A1CAA6AE46A6DC5A013FEC09779769053B1C71A2D53C72E7 E600B0FFCF996947226FC7D50F47BD80DEF6428CF01DE22A3A8F0872B1572ABC 40217F68CBC76F71874417F56ACA6800B14C4E823999C9FBBF05F184C3CDEEE6 5BCACDBF715EED343FC781637E45569723D3CDFB8BE055F11E18136A93B77EA4 1AF997E71BE6B6680A687607B7587F576691B5F1F90EE6343B046BE8E96FCDF5 089395CA87596D48A47BEF623DD7958DACD1E6A52D8C7CAA830712F3E9DC92E6 140D4EB39AD3A2E07447D3FE27B0335AF5CD6E1BB3112D368D036DDA5D8B8914 A071379189E9AA9E5E4CF971F575A7C1234750C92764BAE572448183A92FDDAF 3785D213FBE37A34B7134F7246560220FB24AF87BF545C8B2CF2EDE51F8138B8 35CE9278BA545604E567511D3305E11E2D701C07B23235AD2ADE1E3D2F808049 9FC40824F789505754120BB1333ED752CBD66F4CBE2DC7B6FD86E1C56BBAE79E 6F6BACCAEACA5D33BC910B6B25FF42DD4471E8F13664892EDFC848D1AD264ED0 BE2D8367AA0C73EB4855DC898A2CB68607838CBD81EC75C3D011B73D74A9B33A 5E6E506F266AC44D8745D47666A1EA31FABB831047CE69287C5DCA0E007A45C2 94461BE7D7D3CF67D91009DC263ACA190CFD0E96828E77308EFEE897913B7A5D 263D58238EC94DF13769526236F2C5518DE827AD307A84098CD830CFE04A5EDF EAAB747CAD287613CE48CC1BC3CA3A78D84BF5938BCECE2CD475B71F76E0C224 B9C2E5598D15B04679C38B1F1E5018B8DCB4CF213ADE0B438034F4DAA754968F B905A6FE403EC929D1C9C5D0DD94A0A0A9C80DDE14A492A3464A3802BC8015B5 A09D51F59ED9DCBC6D68513FABC17C3F64EAA067C6FD1F0A0BBFA2E15FAFB808 C7C9C512FE2D00C2804D386382226C92B9537D7B1F3B38EFDB7E6250E06DF6EF 88568EA2580963B8651FF4AC08A0513B5DF3733C34D1AC870E922330F8C5CDDC BCD64B498059C6CF4D5ED1C15B1F2DEB072212865303852F40DAD9AD882B77D0 C4BA9E8246B80F83D46BB331BA63F1E1059E18A1CE2BF4883B2063C244116972 ADAA87C3AE238C801EA601AB2C29F488E000D509096CA63515BB79A918473C57 D2B92FC84CB5A084358C79D78E0BE8A97185F908934514DE544A53EB03F58FFE 3A1449B0913C62A043BF54F51F020EA38E18933195880B3CB44E7BA8DDCF36C2 E3815F7E8FA798FAE3702B991DD5067A0FA6E7CDC628F8AA56530303750C14AB 484D892786ED30AE2C787714B9777D9D803ED7218C1A88B40958C7D2399035AA ACA0D1F477926AC8852C43D997E7193668A9DB83EFFB0B21F053B7A8BF7D28DE 687BF89F27962D4734D7219C12F6E5BD606E5FAC51C0EA9A98ED4182BC44C222 7D68AC7858A0690FFE6D3812A612A99B91689E9D6DC689BEF85E37F3B1EAF215 403D5D20664C6EAFE3CB1DD97420C8B4F0AA7A2BF749EF87AA03BB488E655DD9 B3DE663439C6BAE6800BE01F2195D98D1AF9B24DA0E4C3E76EB4A21F4CB32066 EF251A155D5657 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMR9 %!PS-AdobeFont-1.0: CMR9 003.002 %%Title: CMR9 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMR9. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR9 known{/CMR9 findfont dup/UniqueID known{dup /UniqueID get 5000792 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR9 def /FontBBox {-39 -250 1036 750 }readonly def /UniqueID 5000792 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR9.) readonly def /FullName (CMR9) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 12 /fi put dup 14 /ffi put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 75 /K put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 83 /S put dup 84 /T put dup 85 /U put dup 87 /W put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 121 /y put dup 122 /z put dup 127 /dieresis put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9AF72336CC4AD340 15A449513D5F74BFB9A68ABC471020464E3E6E33008238B123DEDE18557D712E ED5223722892A4DAC477120B8C9F3FE3FD334EACD3E8AABDC3C967C61FF003B4 B10C56D6A490CE9594D57A2D431B9E5E10FE3D8832E227A7087611431ABCD029 85F4865E17E17F8CFBD2CADC97E0A8820E3ACEC873F31464466A9545E967E53C DBDDB8478E69063FBB891566BAF88B7660A4405B16834761F041CCF7650AF955 F9E853AA9F5F4382E1FE7D0C5BB4023818A2383F91249D48CE021250EC9EEB1D 2835E18FB73026250B32A8849067D5E2258797C917F998F2D4121D96560C5FB5 B5D3471216639A8671B6DFAC5E3554EC36D9A72518525A795590C74DD70DA3A7 78BFC43E51D6F2BA52F17D4DD00D389D3983EC54912AFF73684A8A7E345537B7 E62361C04A47859DA084BC72EA53512DC54132EB2EE671793603015652EAFDE3 41C4B6B679BD60AEC5153EA0D2200CB1D097DAD770F5F31E6FC475A225995277 B867B731D5401E2D02B85BA85158C80FF7E2BBCC42B98AC867E67D25DB656072 55A0D32AB7AA483A5A9686CEA4E2B3031D90D84DB3E2DEE7706C91BA81CB8DAA 700E5F61E07D6998C9552C81B66FD10A10033D49EF3BCB0FF22ED0A3737523C9 8F851C61C4BF8A213BF6EC70C956AE48B5BD276CC0437C72BF6515B10739919A F00F6ADD2798CB211668842349171A5AEB0664D2C44397E55A4A9EBDF54A3EF4 FBBCDAD9DAEF4B0CAEF7112FA828F2F8D9F633D37E5516AB5ECEA87342EF8DC4 3A50548490F5BC9A8A1F98AC7AEAD9D913BFA10CA86D73AEB5BACC1FEEFDCC15 B3655522CCA2C772E902FAB2A6FC153597D52763EB44AB7489FF061F7F58E8F2 AEAAF4D17F36CBFC00D3C653F335D14240C87DB4339DA9D30A5BD1F502BC9013 461B9DB2FBEEC01BB18990439A0E9CA6576BC9CF6B1A3DB9386C4A5D4AA6A5DC CFA45FB75F22E10ECB72565DB441A194902C91427B4F676E531C661F7A2C3C85 CD534D1C89B6779B2EDC8E44667B992C20C70B663BFBF680A6CF4383EB7CA26C 4D1F06B5EF4025BBE65795F1EDB5CCB97050872D6C07BC2974F905ACDB7A765F 291365D6C8152153E7F017A25FB4476C60FD9EAF9A121633DBEAC32F62850223 D6418566AB350F90F4B35F19598478F76B63E347D4C61E203D4DB8ECB9889181 C387F4B663A502C638761D2782BB96EAC81A0108D7BD6938F67FEBB69218D115 D8E89CFABCE15C6ACC7FEB983332A51A6A73CF4E341574F366713D7FB29956D9 9BF238A87483D37E526A2EA2F101EDD34E34CB92730DCA7235AA0027189BE405 2DAB4AA021A30C28B26C50808E1E965C02F6212EC7C72F5683339425A7739380 A422E6191ED8453AF0CAAA424AE44DFA7CC5C2F6EAA8D73A5101D8E9517DBCFB 2858D0E8ECB7DC430EF23A9E4428CB7DED8D035D6050251AC101A2D0E884721E 2F21E573F948048BB8FF888911C508CC198BD750083B339500C426AFCD5634A6 AAAC1C7E91249667B231BBFC64B4317192FE07FE9DA0DDB5E517D097AAE46577 9555F29D45C67CDE9812CAD03F220B20519F2FF32DCA56A554D4296FE2D1F3FB B209B5270E0E695EA5A0EF1144957CE045881AEB8D05D72CE57F4D34617AED67 0D3AF0472CD8D60933651626550366E300E72A9C89ACD475C2E2ED9BD44B472D 9DAFE943F8E02A6DC38E447EED964624C37C3130E48211CA279BB6A0BD59466B 42F3D89B5746F29E084E22CF58395AF0F29E55113F3A3F2F52CB3A6DF3D026D0 C81754B8E2E4A15F6943BE9D0087D5166060734FD07C4C57D7C7D90E8C9C1F35 623CEEE3ABAE75E1A18A1E3B50B7266BD2D8E812CFEB4A46B856885B185640D6 B9C22179551002B94282F57FB433B7FF157D2F0D240836B72AF4A331668AE5D4 E6B85415F4E8B9D2F9AF90FAFAA0A3866DF417CA5A31348CF9B41B8F5F4D2F97 CCF7ADE851B5E2E2F6E319AAF5792EBB9DA2C6AA8B73D889F3CDAA42932CDA7D 07A7E59183CD89520DDFC36E5D513BFD8AD0886046585F29B4D7F42CC0C27AA7 53915AB1167D292FE91957E94A57FEE2D49C20C9070ECD736BDEE0F046E60350 EA539DC298156A4E0D019E7D481FDDA6861E20678516AB80ABEC1F09B126BCB9 52E8272A06BB6DD87ACFC423B4A4FC9A3DC8DCAEBB807C5F748F1FF8B17B8B88 F426206BF1B7B7D239D26BC3CF0776C467A98CFBBCA5FB6145D5900137ED19DC D002F10704AA680EC753C22E29AAB15712EF22AF73D80820A1EEE953463D4EA3 81FAF99518D4FD0F862A324FC44C4B9542A92C5B60CC983CC8F647CE5BDB4D6D B92B380E0E5F7208A9CD91FA9A469548162C761C1BA05AC9D60B766764D821B6 B4E17F56CE455F06EA1EE2D38FE47581746C4C5FBA63AEE2B58E877D1A8FA83A 31C972D53B64E92EEEA147426A92CFBF76FC614119C6E9C6476FD6A069C803BF E949FBE50B5AB1F1463F9747E8D353F7BBD991C4F90F920BC9407D8E24720293 846D052214E60390C3CB926D38C83AF697425D80C2B4FC4706615B905516B733 46ACA325CEA68FB21B2D17CF0B68BA4DF249368625CF83441EDBF2B86C957C1E 44CD722BD2537CE84FBA07EC7AE15C840041B9F7F3040072E6084CD55B301C08 A64A53BD4D3DC30DCAC6C152F316ABC59B8EE978793EBD568849DCC2A75A495A BC83470D503F8E389F54B4A4A31624E83C601B43AC1E52CB811FAA7CA6B644A5 1AE0BFD4FC774C9C9DFC2769ABFA9C83F900BE2DD4010416053A1D4874E6ECF4 D86E44B4CAB15D53E5630C144B0C15B58DAAD785BA298B1893D1B09BA5D40344 6678FD2D17FF6674433C976D6DAC659175CED26139967C9B2B9CFFD78FC2570A E5142141C2888DBF2DC8503F9137CE7CB21A1EBC2D65BF33FCEFBC85C9CB736E 24E8595CE934AB032CC70BD6A3B0F3BDBFBBE185512FDB7BE3D4A6620478453E 75D044BF770B44C9741E31985E6DAF5A318D7BED12B02A4BCFE60D25EF12843D EFC9BAE2A3F2EFAD66D7858E83EB46BB09D2FF8AE9C43844A7001C86ED97AF51 C511E3A89A1BE349FF5215D1A57843EF51456B9838133846F19BE79AAA5C1AB0 5F400E5E8E7B0BF96EFCA3B8F0894BE589F2C9FB6C97BD16D38F0A237CD4F034 099C41F85C7E2C7BEC8E02C4F327306A53B4B48B26A8926670CEEF96F6DF2281 7C2DAD99EF8B81BBB777227C2475AE7400DC393D9C0445E925DB1E955950F7AE 53E9AC4306794239346A419F7B5DF4168382EF5956B81F83BD4BB7635B3BCC84 7D84D05AEDC02D14675D777CD19B08124001A4F4EA96990D96000C082A12F00F 7FEF793A7FA69D56D3A38D012168C5458B667190AFE80E02C816CAFF0A71953C D80B085CD286027E2FDBB05452AA762FD7C813B2E19A79C74190E04E746C4933 CE1E300CAF5DD53B08110509BDA404EF07FA1BC5224BF1205DE8E0C3276A13DD 866675103B960C5F36644F96B4FAC16F5D6E91F74629B318FCCC8E8CB13EB76B B0B7B90718D913A52A04732EA3667674994A325A7973C601A7DDD50F658E0826 ACB8E53D4914B0274AED98D7BC3B2B7F9D48A7ECC2F8ABEE05CF2C4F2B90360B B7DF779EAF3E103D1D83EDBE32DDA873768D8C37DC10A5354A94B4153049AD64 FF3E0BB51AB91D7C0B4134D8731CD0270DAAF19BED9EAD800A14B65B68EEE89B 40DD624111670DDC7C030DEFE0D1B96420E249332445C155BA96231C88E70643 D526BDF3CA1E05FEE72CE2B881CFC01ED780C10E89F0828AD55FE29043BC56E8 2750A6DD15AADD54492F6092618F4CC6A31766B17FC60766D18C307EFC9BB787 39047DAD6B38419EFBA46B4E2C932F97451FE78AD75FA90DE409FC6DD46585D2 1941F5ED47A8FBAEF5A917A240959E8D9F9917DEA3247D9CAE6BF7A88DB4C4A4 F9F5A6DCE542420A032FF3392FE0F3357B51F884D6181583A554F75B1DF192E9 253CC828FF06B0D992D5316435980B044BB191508C7C45CD90F797F88856424B 14A5707459C50EDCF3E3D8D1667AAA83015405354CE744C66D9A5728F29E0085 6DBF740717FA0799E3BCC4ED7841588B496A5E549B953A7FD288B4A045DB611E E3B2F35963FF18ACCB1C968BEEA2CBF52B3999AAF89A05320BB2E97F52CFE06B 9F10E3A79865A3059A957F97972D80ADF678A36E2B586C101FC6AFA4D137C13E EE7102C9B8EF78CB057F8B7476F146E8FF5C897FD5503DD198128CFF7B5FB339 FAD0AF0EA967F77B07B367A4AC9F668F8BED99B98E87FAC750EE045602D76C3F 289FC9D97694C96AAC0AD1BD3FA94DF2CBCEA24B40F47B9B59E54EECEE7AC4C3 A3F5D19160E4C1EA830D57FBE10D8D46AC5CA0260F22FAA45236F0F542BEA9C5 5A88F878F68B36114E0573900C65E305462B22A3429A17C7A567694414DDDA46 5F30542B8FD4F00F6C295B2E8D3A986B953D96822DB2ECD48E8BB1763434E652 152EF3717F5E7FA10FF0B01D9F64E22C5DBD7254629658887BACEC0ABDE972EE 67299FB84A05B3EFE22B6976DB4CCA384232DDAE38C31623A4E39EA2E82C1EA3 BBB68F1A7DBF405DEC37CB7203A895C36A44BD2D63F45B3888AF91D37B510A59 3C921BB44DA620892AD87B665F69F6FA510B071ECC403CB2BE2F54B3969C9E88 713244BC97C1466DA8216DA7600C221E7E7EF5C789D2E12B36422023A03E11BF 2790FD6062FE6BF62F5010A92F0A104B76E255A0975E04F6F20F760881BDA7F5 D834D1D328B6EC19AA7D5E5678A84C74C82553DBE8BB5765E84F5A8789032143 6020940B4B8D45FC3433D356E28C25F42D0C19F911213D85951B2B00D01B77BB A4C72E964F9D95422BEDE582A05CD52E03D28A996E6CC8FCD910CBAB728073F9 F9FAEED5470FFA55930447C5BA816F826F983D53EC9941EC8364B3060FD74C95 26D4F5CA753B574FD2FA4D1D333785241D8741B79E628BC852FDC35478C5ED9A C1BE88C5EE7302816E65C12B58EA16FEDD4672EB3E24B6EDAD5DCE263BA8A970 350B651E5A9F3C281D85BC3F44EADD0D93402E36489BA5185E7D388974B0B700 70575188BB610CCA20F081E2CBDA13DCC6F72567962ADB342E02C1E763B673C5 F7384E24C6E1730A3A790D690A2103AEF88E0C1D4480DC9B25E5C8C9E1919C95 F83320179B4C7C4A26D559BFB24D7D596FB73758C9990C451E77FCDDD17763B8 9C30A9534E3CB6680D3D419D4B70B0B0A0D160FCCDE169714E373F65B7144CC2 DB9A44E041211E1517D3148E65A2486CBE5E74E625261CCF65392FB4F3091473 F9E8DF327D59A58558E5C9F7190DB577D5DC658F5E36258291C708B3D224653D 064BB6079F91293FC733710893AD1C96169B30CBFE4E9D52E7EFAE4AFEE68FEF 1AFD5E7E9DFCE8DE332B0FDC0514F9B3090AC85BBFB527FD8034DD33E9576325 A8769AE09AF1BA792447DDD932B98FC9486B39E0B04DDB3EFB7A30DA0940B33E E27490E0E841E87B1C90E5248A91742ABEDC10F43A8AF0F9C5B4A4930B1AADAF 01874B9AC3B8D0DBECCDA6CD7E96471FAA15CB7F8A599C5746327CE392224C3C 40BD60AF97BCA6FF6FCAB2FEA114D7300B89E91C3BC92D5B3E2C83BB37992D8C 72F661EFD0AA034C738C019DFB79BF40651A1A34BC1EB9F5AAF58F8B3DA32645 24AFF8636486F08BC21533B5FF7391B0679A78DFDCB03DAF6BB7475A1D51DAC1 EE4BE9B986655D1FDB6936445EF99B58B303FE79F11275EEA96A9F6808EA8775 D873D1052FAC93769789C700F20EB2ED6D15676F6E563A769CA9298E463FC311 83281483B1C953370D196727A6A0E66D32D9480AB1B6DCA77868C1A2D5DB6483 5F31EB6B18EEFEF1CDC31533E69B0AFC6B30FC9912DC89BAAEEADC30BE14F448 1A6B70D36A5D9B01799BEEA686066114910842D022EB464A9A1E8F0A5628BA69 AA9A1925CCADD44703BC67A89F3B48E4680726DC4360274185CF3C8AB747A8FC 4B928AD62B092EFE48B01E33ED756DB696171FDB775396BBA138E056F71EDAE3 7A1E4CC272B8418114B0E81DE0BC43DB3C133167344488820A92DF10FFA26FB9 65FCA2C87D302E956DE6B4FE145145440C83DB43A68F8B29A592B127BDF49063 B7F11E155CD4CAE305525BEA56B7C412A6260426407BD892A3F2B444AC3421E6 FB6E6425EB5C3053C5644666B80405530FA0012B54557327C98E0F4F064099A6 4ACAAFC1870359C1B6FBE7606BB8A26026AE20C212210449905E628AF1B20490 8CE908B7EF3E3DB551C85AEB0F7FEB6A8D215B97998E5DD9C7CCFB2A9402B8B6 1770D4023777D4B45A73F471355353412C51D4CE71FAD1E0AFBD87B5F86307F3 10D0B94F1194EFFB64AD5DA54A4200490F609CA8B912E149F8217ABB1E9EBB3B C4470E7365CF5E1E761AA1945044B225BD53D142F6588C50E0644740F7DD55E4 8F73201E5354A8BC78339211AFC4935F44701FBA043AAC4BA4698E9D7700029A C79F992F62627C91EB855F64C4B251718FDA71EDAF082A0C7B00550949D617A0 7071FB14F05620CCF2180941341D8E60FC88823438FD728A4042AFA8B853107F 852F631518B61B234565291B5D5B89DA818DEE3AE3B68A2869DFA63255CC882C 3B16BBA08FCE3632E57FF7A07F857A1F0FDCADAB39D77960BD827CCC8661A997 648BF5BEBC0FD2286C2A112A8DEB9CCB6330A049170D5D68EEEEA011D3EF3EBD 855236B9380087CBBB6BE24191F728B7EAC5B50F7A547AA0989B7C7D3437DBCE 1669341264E290646F2C8C5A3ACAAC7CB63DC692FAAE13E9B40E8BD39FE16A0C 1660CE66872D061056C04DDDC265C024BEF8B7E3C3AEE76FE5C9702002C28BE0 B180295EE00E567FA2E5CD1638226D24A7C732E1BD8103B476EF5702768689C7 D4FCD47F2AB94A2B1FBAE6ABF87B09E7713C773FB65CA83F7318035B332B9F99 24A2C8897527021321D003AAD7C273E4BFA2710B9BB26C2CFD3D9A5D7ED1096C 552D50028AE2476FCD6D12A5D0A897521313ED1A3A8456A70C16EAA50A3E6733 6DC89FEC56AB54A579EF264377A103939D5EE00A90B4F2206D0023AF9491FBE0 800C6540FC945199E20E945F46CEEA2E885F6800B9DF042BCEF4291A4B1A62C8 6A7ACFF872B25FA3AE69E0093F3D0FF13A3313430C06F1AF94D500431566F659 E8C859A5F80F5BD2E85C8E32603D3745628E8FE6FBC50FA68F9C3811A2BEFEA4 5852CAE2AE5AAD3230ED050593BAD0A9581EB7B327C6916B8FC348F4C23E6FA2 00FA28AAACCB3091C1D83F7BB88672A53A2EA3B8C7C24374E400C57F0F01019F E52D5C47F389D4C9AF126F4080F9AB8D1C8F470932BBECCEC72A9796F6E965A4 82057DDB43D68298A00880D4C2E2496F26F015FD83C5549215753459310339B7 6B2961EEEE74DA31FEC8E2BDDA42D4080A32372AC372524BDDA580EF6634ACE3 128C69D04D890DCA337212B109585C665AA83EFE47D5BABC2627A86EAD11BF7D 744176652C7F9497785A7A06A994ED8414BBE8B26E74D48CB83FA24AAFBDD507 84A90195EA3D77BCE8C2BEDDD1DC52E8164DF15D65B916EBDF3A8A76849653DF AE3CAF9561AF3B705F75B9E5DFD6758DB65A2FD54683759912E0D0035CFBCD86 5D207125947C3797DDDDF27B0F05D69411E79DF1586378263BE1BFB9863BF9B1 B2CE4EAEDABE212A040FCA30A5AC8F758F4B543CA539858D7D2DA5E8D4AE8343 DA1C74EFA3207BFD3AAF761712526884385719C5B2B1C3C2A125975270E98803 BE1717D7FD9500E68B2C77DBDA49C6C7CC468986AD847D5976FA7D445365047C DEC7C2EA876A6D2048DB062B6682A49CB88706982B6687B8E51E12F0AD378B85 8DFDA6DD200D31F6BA872ACBEBA94F1FE5920A18A2F17DA30AFEB722FEC5701C B3691A04D0896F1A60DA20C9BFB9FF931ECEEE556BCC9C4374EA6B2CC21E5301 C5B8623C5878851857B3E665490A7FFCE5A8DC0FFCF3D56BF55E4AB2ACC6743F 4DE7216BA87F183CC0CA3266EDD52D3A8681B75AD590B3989A01A62745ACD499 17C30C6D5AB9B7AE32D938D2A9257D3A4444614D8DAADBDEE4C99F4FF66DE769 52F52733B7F3B44F48E7FBBD1038AE21593A5B8B4C649ACB5F5C66A5E4C7CE09 E8530FF9E9E77B6982E21ABE6EAE47E2372B4552D66D2C141237569D7CE41808 CD3259B7325463CD9475124A0453475186BB44083AE9262BD5EBA8E709E36725 A1257264A4CE1F08102F2D4BD5640F758B4ADA3F4EC9DBEC4063547AC174E81C F88EF1B4ABF1EDB4C6C94053DAEA20D3B36179F1490B23A95AD7CA9B8C5E797D B75DB61D83AF76F0EB2A612502CE147B11579A6C8BC27630AE14535C0B77E4C1 06578A1C23B48A90E2E786462439CF2CC73F89825E5E7B4AE1245E300CED4B30 C9EDB92AC36F7DFD0FABD94996A0D326D478B7783C87AE473351ABD014CD380C EF7BFBB68CDB7C90D1C85A5D96C622B04FCDDB40B675F081053377364DEC2F69 2FC74AE7FF1F486B78D68E137D1E6B740311B9F339B2B4830DA2FFDD7B721978 DD641CDF0C04591128628EE46E65F4C501E208857CFBB6E3DF0BCCEA8DBA8AFB 3129A508F54655B5B47DACE807262DE6F99F755AF5F1C05B1237C7D010056642 702A4D8C1A156A4B71FF31B02B6DB146F4B358C2890599A3C590E3A7C5FE2404 D7748075F07DFD48CEF6189F15C489FE93469C707D8180D4F078B87930A6D5C0 E60A207893C1A4FCCC29386254DED7C902121055471A218E4C972085EE1EA6C7 F8F416770AC1F98F12A9E59DF18C612471DB3C8C771345EEFB47878CC42CE433 0BF181E419EB38C7433849C02805E1C56025C2A0C30E35C7B7C1D182C9CF7D22 D4E5286AE31463751E9FBED42DFE16DE3909DA1132653B5FA9FF78D86334C0EC C06D2EC674DE57347CA87C9345F7D9E3B20D36D20926718FD3762B8C104B89A3 7575171281D47B62421AC3243AF5F9D51A4E976EEE3AE07442D24BFDFDB28A50 C9F72B9ABA68B9495E156D1869749A5DE13FFEEE969EEB7F6A2B39CE01BDF946 3E1BB4D2CC4B661EA30107B2945D18085D91ACF2036EB46649337914CBEF8E94 077222B339700B84DE70CE0D01A294276F86BA9400696CEA6F807F2DABC31694 6EBA4034A7FF763A522C2B09390AECCA59FA67A4D1A70A60DBB15E19968D6616 2ABC78B2E9E3FEBCE28793C40544A989869EB84A0148542FBECDE3EE45019BA6 FF7DF48D6C4EB8960863109593B5916B9A2DD56EC0717C3A40790CE64065B6F3 1AACF8562E1D016CFFBC57A60E4C195C3C0D1442D4C7EFCFB25CA0D6F5ABD046 FCD1E586842FECCA7D4419B8C988456CCCA4553F7051FC322C38B22156780F11 3DBA3E418D394A00F12B01489158442248ACD2A797A3E1084B6B423935854603 AF41EC8B547B68A41FC346A1490DC711883368A40C23317C6A58B053EB63E81E 92C9369FB88B2756D5EECA0A809F8EF09B3245C968922F71F5848DBB6267E9D5 8963942EBB6CC8FDD0E0E6A8383E21C98CADB350E8D90E4ABE3599210CD4D769 4F73728D4D6A4223B208DF9EF5BE90BA710681C3BC28000980384C869E87BA82 6D0881E6FB951D2E9194AB6CBD68417F1391AA32B0EA703E6EE873EC04657235 C2DE1F22F3AC7AE5D597D13EDB6CBB702FD120FF18B9981671983B8A83BF9E6D 8824B9D57D5592DA15B29CA142C7BB2296C59671E27A4AE50E9D3D2427FBA592 BDA358B1A86F25655606191AC5FCAA0ED19F18081DD3457D9AB5DC8562E700BB 3DA0ED0FFA11FDBF711E63D70683C1939607E3A9592CF086C4650AEA303ACE98 75645867D0EA3446F4FA176517141B75FA51F69D5442874EFDD3D7586D95E7DF E70FBD7E679F03A8E2E4C8C268CD84F332FB505DB3A35DE963CEF8CFA34D66EB 44A4B63A6497C0B276424F50CB186BBCB369B984A5DEF54CE999BCE6425C6A0B E4F2A54569A59D638F46406458081B290E073B8A067D9B83437750F08826EA5B 60E7795A4E3B234FD0DB31CD4F1ACA9704215BC584E34344215287B25BCBC3FF BB52523073B979205A90930E177C708F0F49D5F207915DA2F10E46CF71C05A7C 911225D77F402626B033126AC26EA984A4660F22D390595911A900FED0368CF0 DDD078FF2E319A37EB5CEFDBF36492D265A37D8F00E9F582DD36C1D291666192 AF7535A991FA745849C942A48B0AFBB54D9E075B0E1E43F5C0C9BD8B92F63895 47FBBC6540B4B08872FB50CBC485E1D342E15A3B21E9F636AC58B04C89D5A9D6 3C55A19F056DFA3497CD19F853ABAD7378A8CA601157274EDE2C28D6E1253BFC EADFF35DA48B228CF68EE00387B954DD1E5A2BE5E614B091C8F36F3D19EC4562 72C14787CAEF8844DEA3FAC5AA5DD7DEC1C1835F83616B6AE8928F6968253E9E C0F9CC0C043F591F76D5E422CF682FD5248830B70FA100D03A7A91E772EE2A4C 9003BCE0AA56F132DBE7C8F0A556B2DFA0264A605BF4EEA5CE458711C3C9EB62 7943E031E41F311F3A98954848CE9946BABFBBE1C91F2BF9A43A1A533FE3281C F408D7B4F989219CED5B02C354A8EA2CF43D6A7C877999C5F56B0DA66152EB47 C2EDCA7677764E30421B0FD16CE375A042859ABFB4BC2CD8DE59A72B9882DD5C 1D1CFD6163C4CA1AD4830FE316ADFF7F4B839B58FABD44AF59232FFA9D427EB6 98B1C79EA6594EFEC4C0CBE41CAEAD6A4714069E1905FFC25244E7590336EE91 AA451C180127B717F7D595F04F46C03735D1C3FFAD8433B57A63C1E4C2321AE7 8CACCC9E9D5C84FD660BA2B6E49F3484039BF409D95A1DC11769220726225269 F177FA133FE2DD06C2F2682E81C72E3A9A0C1F6C63710AE589F77CF51C3F6EFE 9594A09814EB65E7FAF0CBD52D1B747177746525CF9B43ADEEB691AC73BE98F6 5CE82E74ECC0763BDF5775D56679158EDED7F4157CA1B8FFABA285A415E221E6 2FDADD44E35FBCFB974D4C77381B020A8B909B704D014D6CA3B7453E8C2B7D4A 1554AEBC784CDFEBB96D12FB55C866FD2338AA5548E80C814FAE95779D89CDD0 F2D8A7F53E3A87D4834F3DA91D7985C3FC819E0B85630468D231DF31FD74DC4B 3CFBF35AD468B13D006B90F7ECBE2EC5FD076428B23BD81A4567EB68009F4BE2 579169EC21824FEADBB29045F934B1F01719010D3ED1D7125C10F04D79F9C991 1B1C1537625AD134635D84D9505BCBD305A922924E80A8E59DAF85DD41B02906 27575926A7AA84A5E965C9E8C7BBF03355F6B9EADD0A42DD9D86B48B48606658 EBC012471E0EC4602D7AA9B6D759073759A93838182B39E43519D7AFC1B53470 33FF34025C8CAF5C9D965C4544907E63F5B78D082890AE3809A0084305994178 ADF1A496C53D8598D7A5EC3CE9A1EEFE56E6C469B1C0F76F5FB588A2B8C5C041 08D0DBE741CAD67736799319CB4A3B2876B5A1D90D9371B8F05F0D1203524A59 01B15B7807729F90214BA1CB1FCA94642068AAAB77A79DF221A0638DCC1A7728 5EDE6C0F3E8D2672CD950808FFC5B93C89C9A77A18D0B554DB823F5C9FDD29E2 9790758AC03830BAD321285962972DD58BF36D88EAA5ADFF3D132D5AF01A5DEF 1D3BF2B625D3A4C5717FC269C11EA7FFE94965173CC136C5DC6DA8C599504DA9 89DF8AEB19E7383D05AF90AE7C1FA1FE0789D65224FECC8A437AE2E1FA698669 F1A5A15C373A9FF8F4B47857A0FF2B2CB642CAC7B3DAB69689479FDEA4B26B6D 01CF4A76DD9A32C47D8467B962ED4A762BD672BFD3C99441106260A99CD8EBA8 9D3CC72ACAD57063F0C1F3738ED18E5F205ADFBC019C7B625EBF15D55BC4BB7A 590D2D15D5B3B7A463F3F2DC46DD4C9BCE0CF8C7E5B47E7139E7AB354C2AF66A 2B7616DBEB6CAF7219806B73ADD1D1917D5D547E26C55D4B6A02B927B8519E73 70CD04650510449ABCCE0E7BAA08F7C623C508E3515A5A32B7CC008B32B6449B 15AAE7490D332BAC4C6F8C39B705D2CF810ABF23014E04750BCEA6826EC1FA94 811588AFAAD10E166DB6CF97066AF9A78553D3B64BDF9A3E89DE1DD85960CEE5 3C2CA59FD43F3F3331F6662F92CB63287D9D49F7E0F0A85AE2B0C77B07205855 EFD8B63A15BE710DCA3E8EC62608B13B44A886C867F82B98A0E5A7BCB6BE3893 20E30EBD4313598280E73E1FC881041D0A9884A2CC660CD813CD4694F14EFB76 D587FED979E7EC3109CD33D3CB32808174D72C7BC064E1C29BDC76CEF76E983C 4E6440CCEE6375A50C13C491A526CE7F21F6329037F5623E12D9C31486F11194 61A2C21D7F94918F46A9ADFB58DBB07874D71F0534850EEF2D1D86D3E1DF6EB2 A940E40E9A30FB83B7636E850BBE6D6D4D6804042C7959E9AD86ED56250FDBF8 3A47DC41A67095602F227F7CF102E58015C55317B6D3EF1533CD1A3C96F4DB9A 0710E57C3F93F1F33992AB4024DD7F4EDFD56B4FD48F5BEA3ADDD38E36AA0707 D432FA4CEF3291EDB1EBF3FD95C829BA1924733AD199CC8C51A5CE72140B4330 2DD946EADE5A860A43D48FADFCD084B4DAFA74AEE4465C910F9478B0CCC99F56 DA19C05566AA7DDF8CA06341E8B320A41763E4303E518D43F36A032BE3180E36 EAB8F0B02AF390A9DCB764F94BB751DB0AEF1F2EAA39D7562227D45F543F4320 D0F34E70B8854BAD02576CEE7C320EEA86BDEE6B6C3B2F75FA4782CE95E68E24 63959E7A86A6874B09C18204477D821FE1D96F018DCB2578D11BE772DCF52FB0 2407A75C799F56D592EBDBF85528062D87368048807B1B120A9252B345F7A533 393865F154659F06F83CABF7B2DEBE5EC4E202818710E7BE8A7B3E96DE971E78 B084E49CA0266C78991206B5B7669C8D8172E53BE579653356FD4D8B23FD51FE 4D2D3FDEA114F232752C20F6C0A5BB478C39AA555DCF646F393724215F53E2E1 852725D9B71D879C5BE65D1C79268EF917002E5E01B67DF000B0BDB6C95250BE 179E279125A5FEB023651682B5976A7F0CBBC3DAF8E3E78E1FAE2A1D00E810B0 4F49610F28309FA7F6CB660DA35D957B4DBCDD7889CDDC4BFE2886261B78C6E6 DFFDE771DF926943DE183195C38C8396BF9A1B51446B4F46307BC9ECEC1AD96C EB2BDC48FDE9A20458B7D6FFCD729CBE44EE3B4DACF77A9A22CCC2FCF1A0B58C B821BD88A999DB3073C5A9DBFF748395385701AA4AFC353F77DA910C49AF5C7E 748CE707F09D164D5B0C3D4B6FE445EC0DA087A4A476F14733B1DF6DA56636EA 59B97DE6CA1779FD9A70F00C801BE6CE71BC12C39630E593A8C9115184D162EF BD6AE9F22BFA7601D11A474EF4DD48CABD3CBC37359F877FBB1C085F1D103F6F 89743D6D7BF99B6BCC1EEB70796AB6DB5CFD436FE6B0521E392E56B13D96BA6D 51F120944F679A2FF4B98B9118A6033C0B8F1E773E705EDA7A028AAC315C9BE1 6FE0B997FB197257406A808FF7635042BBF09B3C3FE30329F6A5EB3F515A7B8D E3021F88EFD986B5D9C1B6B1402A1CDB0CCDD5ED9302D530E6A9F485156800E2 EF2BACBB2E879C88BFD6CD25B4CC1AD71488053C4D7A2AD1AC7C834E3199D699 1B5AEEA43B6D0694422C58BE06F859C3B6AA280F90F6AB5ED90D8C5DFEA59102 F75D76D37928BA6702EDA05B4CFFE9EB8ECC1E33C8956BCA521F902A6B819E06 DD585703E1AEACC6BBF6403B7906CDB2C837D9DDE5517D0EB883C7833763CCC4 5B064B684F1C65D27844B42D86A611ACD393030366E482CFE2FC35BB0E9BF0CF CF7D6AD760E765EC96FF02D2ECDCBEB201FDC4D3C37BDE2AB62148863D0C5B56 CF965F42CE0C6A1ACF57DEED760F7B155E40E765D119D895B9F4AAD107B444D0 BD9B04E2B978321FF95AADFE249794C2C361C2A249D6A5FBD1A1CE3F545DECE1 32191D6B8F0844D4177A97E9E2FC8B5DFB17F821D067FF0BAFEAF0F06B1DD1E0 7B108EA2EDBA87CA0EB0B322FEDE7C4A0C83D9A7B348872DC4FCAEC8719C1FF0 7C8C055A493150D8A83B50BEA75624070D508D9F90DA599C77F2F197AA4765AA 15A5359EA8DF7ADB5C5E9B44D3C0A68425E2E6C190E8710B000768DCCFD1FE2C FFF4F96991A772B7D83DFC097E0F1DC439E3DA8231A7ABD4B235FF13AC7F178F D0281CB0373B54B48A33F3ADEB58A65BDAF824D1EF631AD4F37289D44B992D0D D282D72666858F924F74AD50806CC64099C3681674554C32DB66544DF740707C D152550640B16E3116DA88EE06FC28762A90981A585752D89F3F8D8670AF5EE7 85816DEC0A2785E4E336BEC2E31947036C50C72BC5A5E23ECA749937BBA896B6 A12EB9DA29003465550C5C73D8A9AE1885C5A0F21868A6877ED807428C87A60C 028E2E8CFB2C152855147DFAD391611C20047432DC92FED105CE6032FBBA8EEF E07974CC065E45DAC183176D6279A0271BA0433080586C8F01D92B531F34ECEB 6EFDA37815A79B4AF8E35BF32937AF88F7160CA68169C7E272E394A4E6AABDEA B7B5A21872EC5AEFEC5E31D4537A329AAA92C4031FED90EDCBD09E0FA9529788 A7729DEEFA4B4F833816C25A7ED5477C6A870F952CDDAC72B754FD17F8163ED1 91A793E2EA0E731058786B1D3F56AFAD267C9053CED438AC07B5A85E701400EA 39E2A786CBC73CC0CA8DF687B9406AC560BE6E300A5F75B2EFD0D22803770A77 2C094B17DF809BB6B9E4738770CE38419005EA41DA47EC6FD4190ECE1A00CC6F 8167613BB854A5AB3BFE4218BD8421756C5A6EFC3192DE2075A05E067761EDF0 082B74B5E40EEEE9FFD3934077764F9C5B3B980249979D44095B0E25FAC58C22 BEBF07D47A03C22CADC99B1BABF935D069F5A742E468588D762CFA7D8A8426B4 DF7AD59EAEF4691D7ED04B8FC95CDE6D2F56335B1732106303980E5EA4611AF4 83C15C8370727C7416E7067BFA424F34CAFF344BF37B0CB881D39FDA55D0C3C6 3700835F90CCB7950D6843D81E3376C3D86C072A56451FC005B51DF796147E59 619CE15559856A88797D75028F6D7B7A104803D9AC695AED28E8B7D506E58AB2 7DDE6D07CA367D451CA83ADC20BCC900DA73F9CDBB3ED59784ACA3F8B90588EA ED634DDF7E49E0CF2D9557BE0F6D274F3983273664902E1B7AC7391C2FB9E041 B0CB8C5E5DB1A5549253F1DF1D6325398C7DB3430827B7A4003F680BA277089F DD753171869BAB087A872C035B3BB98FED046B99442CBD6B34E236558083A035 06649442C070887F679A7621CDA7F845AF298B63DC08DF2F53CBED7B5189B084 C16EC43AF59C255E117D2D32167FE7CA9A9AE20FA03541678A11E0E6A77AB3F1 77F1FB423F1428C42420AE760DA64F10052BC2F6C1D4DBCA9035E83A0D66FC34 482A763D0EF48B7386EBA25035198904978826712FB8BF9D6D5ADFF5FEE33FF1 E1DF2B3C427B7598CE733D8285D21EB78A3C4383FE7E8A2833E607D5B002AC3E 2CA7F5CCF0F51B3643FA423246819DA346924EA4197F7CEAFE2057226AF9B902 191145EAF0A576FACE3547ACDE8197F9330BD651D17FD2084FEA438716498CB1 83D8FBC57FC6D947ACBF4BD54BA673A708F5384A549A2C7523163D55192A9A19 C3E1A2A102DC993A7D841CDDD53B1F902FF27B1DDA580440087DFBFEB51C2F5F 4C48BF0484EF22A4C18B94D7276EB12E5AAC66FB143F7A95E30C7093E3C17DC7 7F10A7987B0D790BB76EE33CF6473502BB320EC865CC834261277828E273910B A13D3C69D5CCEB3E8A5616997690C6B7B072165420EB33A187D62B0B40B29FC1 7AA00DB5DCE46CC4BB9F7D9B6D47E7F17F30A494B22BCC42CA0254E1A28F1BD2 88256F79990B42BAE579A7EC22CEDBC33FCFA9BEF69E1741D9477D7C5E71CCDC 731EBE7F1C4692E3D67EF524C6D8D48EA6F21615FDA3D41F5B71CB6DBEEE4AD4 BE78920CEF6146C4DC36D0B83C2DFB9C792A96126A7ECC5768A82D051D5DF2DB 7DDB7EEF8415AAE62B538D4F809FA63B202E90D37174FC7498556857A3203842 B602B51FEC216BD3CB9A98A15D66DB82C5EB9357716D2B03920F9D73BB69BB99 838A9FB89EC3CA0B16CB3A2E083FAB859397250D3A013EE09D9983957AE8DD64 FB12EC91F532CE0171D53738081E996CF8B9F78C041191F5E0D83297C46FD333 27CC601391D23D021FAFF95F7F658D2F2DBFD3407FBF4F826FC0384E5298B7F7 FC744234E606E79CF711AA93FD1F2D51F4C23D23F9AD5974624FD90D8D844456 2F7CBDDE75CC42537349622DF53AEABFFECC639BD80B1E17346B69CE9102B1B1 19690B07782BF8F226B9FE683208653C68E693B878D4998764546601E2D89A77 248A5C408E8C547989AACA1DE88C033A2ACE0263016247509313C681EAAD2A2A AD4076CBA717CDC04189055BAD4162B7A788D282FE6A433583FAE10885AFEE51 E44ADDA2FF69DADC9185EC58A674FA0CA29A5460D46176E18E006D8C1DEEADC3 E4C5CB5B5227F47C1660BAAE3563A3F5F46706EE620B58D436A69BFCD20DEF38 0E95E7DF3F1C41AAB197AC8662B056B166F3F1FBD4BDBE1AAFB18D6663B099D0 45F0B03EDCADA4926CAD9876E25115DA7ED7C4C2CCAB4ED67849D0504C25A956 EBA242C74C81358E70F2765A8858B0878E8C084FB8A73D9CE24EE4799179200C 790BAA2712E2A2A0BD4A358C5E6E2D0651993E2786088D226F452C26353DAE6E 8D32E221EB37D7B2B6D2D51207630821BB6F327F308093F05D075A73F7A89682 71315945258D5468F01B2BC644110FCCE8AC35346B6DF8EE1ECD1BC3A5C0E281 22B5930688F463C1D42A6F1EDC9D6BE2673F7C1AE3856BE3CD74300B4A502B6A 22738D8832BCDB6E6BAF336EBCE9234E33F27839783004427676B8DEB37D03A0 4BCC3A153E93CD8E0C20E7DE1FC605C2C85F79D5C6127303386558C87ED49D25 D57666C5E0783BE8BA872215BC0B38C1F7F92CE418E7B1E69BE50F8E653BB2C0 874C81967A5C07E256E1D6A93E494F5FCED9386C41E2C51BDFEA0DF5C0E809C1 7938DF083579CE7C30170A6607C8A9A4DD03B625984D0C496C41E3BF0AFAD9F6 FB1E451A57D1916E2534B1AECC2B260A28F660550F279F1A51C2C9F98318C96C F5603381E95A67A070D794EA8D390FC66A05E9765AFF8A8E341D58BAC9B6CCDD 547181D790E30F656DCE38277CD13D11AD5F1997EEB9E3FEECBB21954F15C8BB CF0630CC2B0E087D347E98E09D1F636E3C386C2C6A3FA57A8E71DC2DAE65E3A9 2E1094CD8C64D1D3A285AEFB72DEB1AC9DC3394BD2C5ACFFD20956D8D5887CAD 0C4E03EB70399C02CF041A508E90BC05C125D03B6C7928A34EA66736B9B62AB8 CFE09F310446E53D0AB1B6E27B1C13FC14BCD5EC5CA5EE71B0930EF1F68F6089 78D2E92AC5EEE7A02097D2EA77D98B5F784BC8031195382C47EE4C9B8B17B5C1 CE634CE57DD2383BB78191DD5EFC9AA1398A25E083A10B89252AF5A7B4039D6D 20A308B6261F1D63706D36B5B8FCAD918BAAE131AD41218DB8CB7EA301417515 06345045E6E718B7CD23CA787FEBD0AECF101A97D32DD4793D9FE1D8CFA559C9 392275B4867094590AF974C8E729E72CAF2BBE312C01CE8D84CDDE6B163DADC2 5132A23E7B70C77BFEF2F1793B20E7CD9D1E4504DF4A3906305B017B93DBD755 AD8D34D2CB49B9CE260A9025A24BED5C7C063E8A955E25938D201D1595A50DF5 9739771F8884D48617224078662A500B8C455BD63B3697425EA789CDDAE7A75E 316DF13BB8D5C002B178BA8A0D96192CC0AF9FC641884B5D237434E0F6EF0614 B778BD75AFEA7E20BC2F6FBA41D805179FE9C674CE115B5431411965B4CF1A0A A5C3C7F44E538A1851EFF29BC68B75255844A19DF7D5F1080B8AE8F541A7A46E B0BECA7AEB3575A2C227A865FB48C99DD1FFF1D3E48861F7FD37233F0FA3796A C32E0BD1F60E1F7312B6C8311600033EE3BC798E759FE376525525997F715CA5 975867DD9C435C3E853A19C2B03B0AA9A620A0466B8F27625BE98E1C5BF0AFD9 3A70E4BC918F63F4610B5868C0D22F3E0DCD7BCAEF14D321E5EBD13D8750F497 D5054F8373A146789C14857312AD393CBFDF196C16595542D86612FCE21C34F7 8011EB3E4DCD4E88AEBF1248737E6CD997F63BB5BBB69DA7E7238E8ED56D681F 88AACD695B37E5710947C2F5BB103FC4386C93469FB4038A32CBCDC9EF11F68C 1BAFB74E02E8DE4706BFA4C9AE30554FCE81711834B30B1E79BACFD622177B2A DFC17F9898773105DCD17DF2B443303A6B869BEC469719BD458A329583356CC3 8F425C6574C6F188FF0EFAE8A6E81F8026A88EE01B1728D78FEEBC63EC61F961 30B5C213B89F92AC9A554332541D10E541753AEB1852268646D06138A4E2DE85 43929C47BB6CE7054186845007C66D78054A9F3AB624E46D036681BB1C000870 2CB9975AABB38C43E2064E6A1B26406D96292AE8001EC13E41FBB38DB3E70BF0 76EB9F6287AB9A8D0075E1D3515A39CD6D5966BE3FDFE8D9FF9DB46A4A493915 8043A509E255EE110274ADB5936918FA9A07732D4B23AD08E64C6D7D69B8C75D DE756FBE76013BE300705F1DF348DA2DE9F2CDE41B15658F536620DCC9F1B506 08D4449242B00BEEE5B7E5458F5E186832BE669602A7393261456C64F15130A5 23DD4EB57BF64FE4BC6EE9F6FC17CE43731459EEDA627B8044D6E8141F5885F6 D98670EFE4EF92D4223B98F9C65E813C5B782F7E6B10ED0D73BE571667554B5D 0CF7A6ECBFA97BF049DE7CE218A4884C455696B5C40E3342C9FC75F522C4A4CB 84BB4A1831E77A47031FE44224381600EDD15980FD88A75C4F1DCB5DFE38AD18 DC2D651236F8FB9BB29B70DCCE830D214866428D8ADA8A93F7D86813F0DCEC4D F9D62A296A5DA7D84641D50BD07611D38666C31CEA376225BD440107FFA0D4C4 E25F77E974FD022E8D26D5EF092E67F8A6CFD990485E87A4CC5556166FA42EB5 F848FB7097E0C85D0BC622011C5CE4A56DC66B152887FB19861708D9BDD5051B D6846D929EC19A5800CF4F0A8E6BB8F08AD8A110904257F5D95934A4290847F3 2991E3A9E08A1F386626A62627335FB88E1122E101359BFC26518E547D1699FF F1A99F055AB06F2DAAB7F43F26DB209F6FD455E4400E86BA60079E16684E2315 99FCD58CCB7072FC73478017176D9D63F6CA94DB3C7519017D468717503C1B35 6E87ACDE073E990586274DA65081A6E10A0430B55CB4758A2B98CC25D82D24E8 AD27F471BB1B411CFCFDA67BC6BF27B67EAB6F00B9C125F9C376C1EBA96A0D74 216068F01D8FCF6665AF1FE72BF8E60CDD3FD720761D5FCB25C0E0EF9A95EC7B 5A8B72074AD7CA6B5AD4246231202C62FFE26F5230466E90D05E3BF9BF11DA75 BD252276BE0CD6FF91A3017C9E58FF229B1A424E7D73BB713DF9F4E46A905C52 8A2E387522E198243C432D78B26B0F1BF2F39AA0C752BDB0535CE76EFC52F4B1 F3543295A4A01F421F3B813A004F334D87562FC61E5619C60AB6AC289F18A179 53124243B9E481506E1C885B16499E095B9EF324FBD9E46CB6E180591A0C3DEC CF250DF79F6B37203CFF2B88F8D16F5E6D7E6905AFC8ADE8265290C5DFF50BD7 0C65C982D179E45C54039F81D7599886D69CA34AD01C5CA1F57D494376811A40 A1679697486FC1E445583D2B668FCF0AC3B90667901B20A9CC64F1836006A478 86F6A90F404BB29E6A1D84ECA9C567CE1747411112872D44DB43D6123F3A4694 9F10E3EEF1FBD3E803C72541EDB15D562480D6E16DEBC59DC37CD9FBFE1E01FA 384DFF47502698B90FD85AB248BDAA05293214C0FDE3504B86F92664F404970E 670844C212E40B7D7E34AD354C5BAA9D68CFC3F38720C622D94C1D3D1593C081 FBCDF0E4DF5EBF2A7ABD4A1B855033CC7C9B768AF9922C98BB91DF4CE25F1810 4DB379F2C66E7347BFF86C1C929C2353F3CFA6AEE13C99BC86FEB93D125F1156 28B85466527876C305441CCC7E4322A086AE2FC398750AD01CCCD193B2AE47B8 7B32F09CA58C680F7F45F09FAF48017FDA673216876F9D6FA529592F6F53E8DF 9427366AB97FFB906744E05ACA3E7560D32D27DB70388B6015839D1A9CB47E33 059B83782B17C847B3718F70F02478980316FC314831F60A33A1EB30A2E4BE42 286E9F8AC7C81E0C4F2554BD6F1FE9D4053A1D48031DCECE1B6EE5599C71D886 DD516F6ED3B08FC613C5884F4B00879381ABBB783A9F6ABB40A65DD3320E00DB A0F98BABC154279319E2D0438A0B7317763EF1C3EA95FE45EE9F642BF53F75DC 4BF8247292E49680E6EB275562EEE9F65A5D588324EC8820A3F8476E11B04E3C EE7F401FDE59682248C9D6443335A7E05B3D9706DE372D081E3D92E5068871AF 4A873346810AB050FB8364F67699CF2883ACCEC2082E20585B5574EFC211E72F 255CEC5332264FE5B4DCFB8D570DEEAE624FF8370B78CA5CBE30FC9822903D35 7C93AF24FEF55B06A6036A79B9D42291AE04329B02E07F70BE332C3A4555CDFC EB206A83AD6EA7727479BE599443AE75438191A9248E43D92BDBE303DD62C555 981C34BDF5AA822A636382BB2D73811719F2C8E4EE1622CC0AE0F92D3AEE2C66 79A44D69D30857A7D9CE301B1013B92F89BDE085EC2BA6A66975CAC18A9D0038 5D703C749B314EDEE61F171B62E74BA92FADDA6792C04C2E26758EF012B1A963 8A6617C9C9D67284FCA0210F10D8BC9F3BFFA7C8C6228D0A8AC376233A36D8A1 78E4DB153BBA3E09A5F428BA5E95D2244586E68920219AD92402A53410017D3A B81C1E2E8AF4AC349394E61FEB21C496F7246C8E40B6AEB440DA475E13811508 F900075685F4278A5AC12591794259EDA1B06C33784ED4AF7CCFA88BE22F849C 92B8AF9C6ABC04DB0EFB1CB6B92AD8C49BC5FA72C9EB4935DFF3FB8345BB2C95 C5C3328F450F414EC680FE27D5044CF880E57F8866F61F03AFBEF38D20DDDA1C 9BBF0C6CAA429CD8C8E8167CD0A8BC645272DD5939869A9B5BB2008E44C5FF48 4FFA31D2373DF8F4EC408361D2EE7B007C5B448C89BDC148752CF6D059D4A0F4 840F0DAFA73BEB5E5B0DA7C988AF9A4C2E89366D73A62FDE499BBE592B851274 E5828F517E525F12BD552351FA6A0BFCEBCF10ED20F14F0A375BF88ED243742F B41FA0D741988D4500828BF846AC50D431012D24C953DBCCDC4FB74F0AD554E9 144FA2D05101A9FB82408DE0139C45B7BEAFCFAA129F8A39957185ECD919E2A5 41677336CE9CB53511E193DEE2A107098C6FE250900057312486F2753F162AA5 A6E639640298A9F9D845DC8AB36A930760631289216DCEC1079F9228F5333462 CA10519E675BC75CE58C47A339D7C55C202AB34CCED17F0D1D0216EFB4A449AF 49ECE804BACB7C037FB4269326FB32A3EFF75B7F0F7FBEE11B05314A923FF8C2 2C7EDE52168820A94BCEA3564434826DE08FE349470E07BAFE6697153328CABF 7FC6E768AB8D9C7CC193FD519C450B97C906A27C6D4E0536BBAE69C0C18A78EC 1D838F29F928AE6974B2B7BBC28DCAB808540C553DFF7550D877138BC38A1FB3 85C04DA8F939AD77CDD1271F1687BB1B6BD3B91BC99E0B0679D9B939EF7E4FED 3FF09F2E29BB6C9A173A06F6E8B3D99077A1B8CDDC10854A506E161FECE0CABD 564325AE8F33DBCB2FED6E0A56C2E4E827D085CBDD199BE10F1493B6A59DD745 BB7E27BB693CB36C61C76C75233D588E73F10CDA838EF96D043E0EECB92398CD CCC6FACC86BF4C364AA4941BFA34950475E615BDDF6D1339A4D0DF8F11BA13AD C44B5CFD2D3893BC812A185466F10767F91FFE83378317025E2906764D69CF0D 3D062AC845BAF663BAA57E2BD3580CE7FF4262B31BA656E7AAA7C6C23EFF93FA 7EE177D97F2C0763D734CEB692DB1933F1B1EA557CBB7E40A3A931FA447D02C3 B9507D205FE81E2B99FEC360F139A8E6C5DC3F6613378D4555A68529A119FE91 131B02FCA2618FDDDFA97FA30FABBD21A0573816AFCB995DB915FFC60548D8B0 4892241209DF508F97266E014C5493618B5567367D8373FFCDE74520C82C3E3B 8382B8461CE95D5436067D31B84B935C1994BC650A6E341DC39DE2C1A8519ED4 9630B2EFED8859F27C1AAA410F374724CBD4A27C1F6E5658E35F9F509E87CCD4 4E3EB1B1B62B9CDDEAC4E079A6761B9CB6F6EDA54E861840BE377642EEAE5437 255856C077951E2A3B88C911669AB6E24CA208B58883E5E5AC15212B3E3AA1CB 49DAF4ADB88F57CE4B0FD407328AF47D59DFBC86BCFE64741E135949E5DE05FA 7F09A297BE811AA272E818FC62B5E417E93B1AF4EC7D15E810F4F619B517FDA8 CC7ADF5E6DE975493455CD3490BC50163A1621E4337E8C449D02241AD30F8D17 0E959C4BC5D620BDE3CC9C09B669C51E3D354B735D0FD254E4699F41AD1AFEC0 9399BBC0DCDD2F983A4F04AAAF04837024D24E7375203F74C80C0D6E6A26A9CC 84C57EC34323609EACEBE5F14FF089AC97E423F4C4F8E56B19F1871D233AF5F2 5E1A320FE256A73DAE560281D4A928E2B7943FEF96DF184E0F16CE97B8FF6B20 D7D74E12A1BC2DD14132887457F6B892F1863968608228C1571F4E4285847F17 8A35BE55CDCAE17BB5C4CC263A777EDE774B4792EF098BB3C4C2C435F5BFDE19 420E155F82FCDD91BD22A3F00A8DDAC57312ADFB298C551AED08E1A2870CBA52 D28D7744B5910C7C079BAAAB15801BB6437E8B87CFFF41250DE47C380EFF9BFF 6C89A8E491D6CCCF0AC148301725DC051511313BA888433F94EA3280AE895730 5817109C443DBA9F3F4027C540CAB842AA2031929D4D3DEA26D5F536292CB79E 6C3E3D6247F06E955B5A5B1259FA7D7D22B5252C5CCAB66647D7CCE16FA01893 29756F0C30ED173388A41E9024FF6ECFEED932A900660682C68E951F2DBF4D01 C67E5E2A0F04DF7F57B84C5B2A683859D5D9CBDE9852E9B25F02B3880ECB0E74 127655EC04F13B7F3590BC77B2E5B46DF12418237111102A106216EB6C1CD3B4 1F5B87BD0C90E1830410550FE339B1E00E7BF55A01D2100A6636787017448586 D59E51891296A603A0496813687BB411671A334DE2BCC4328B3C2B100C5A6682 030D108849B98920F96A19DFB9F2E4457BED1983C6C68E7CB69ADCBF43A34E10 DC7106BF52ED6B61FCE408C39CDC9AC43CD5D37D725C20B85350F490C4F32972 2C69A6962ACE51BB97A81AF845343C45E16855302CF4072751C67B887768FC47 4EBAF5F47CAA4286B12BABED3EAD92B8F40E7EBACCEE319B29F0AFE36CF41D32 AADEBB2E17ED7984B05E6E14B28D0ECA08D68590F5122B8B81CC9AA53D71E5A2 B5BC4EE49C22355EA94971F4A5CCE1C3A9CD405187368C0EAB1F5182C9620EC0 2C349EDD1A87B40A4986BB491EE9F8A280F2FF338447FCC8E955B4B8A74FA3AF AEEC9949D4AFEECFBFD816398C20FFD1093DB1B2F582C1F697747F8DCE6A8BDA A42E4B15888FA2A9E52147E2BB424A8118625FA749A8EC350A7831018665221E E30911C035039A8AA12C7108B7B7FD3549BBEF541B15E108ED7761759E55D7B5 80242DB84D231C85B1B965389C94960199D946C9AEA834EAFEEB085D2A2AB4D7 1EAB1776C05B4A7C92A96F4CEDE20A8405CF5BD8BF83EEB8BF4D69C1F4DD0123 8B3B3D8A0A0CD6383119E9821BE821449BA9D75F64534A9DAB5AE37A8CE6F831 231E15C074A47FF38F63DE2B9BC810419611FC80F8C9ECAA362B7C610DBF5691 09784AA7BB5EA303ED16194E7885357F578B11444527F51EDE35748995249815 F05951C83C130F18E914C66B94DF7C113D8F7DDBB11D455EB28CE324857971E3 D6DFE4C00C392676FBF170590B0A990AC34E120515EF4AB7CD1CAE430B1F8592 4C4522B4C174C63FBAB78160037B036F7D1CFF4455B281AE2B3EB11BFDB440B3 CBA42C3B499B58CB04A3ED9BA01E5B1F851BE372B0C03C81EA1A76E1E0483305 10426E5F399D013620549478E69901FCFFA566DD47B1C0153C57144CBEE5FF05 9D2504A7AA26A66503A874392E443C9867FA178DB8143FDE9DEDD82B61EB2BAC 2B0B374F83BD0D13E0763E4AD4D7E2EE42828AAC123F71F451EFC4D9AFBC826B A417D634485AD5F43D1AC21554E0FF1142C6661C477C60E31BC0E472C76AC178 EB97A2F05F4523540AA0B72F9E788F859E7342D183924CDBB6F64B4068D0CBD7 819EE7A538C24551FF 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMR6 %!PS-AdobeFont-1.0: CMR6 003.002 %%Title: CMR6 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMR6. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR6 known{/CMR6 findfont dup/UniqueID known{dup /UniqueID get 5000789 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR6 def /FontBBox {-20 -250 1193 750 }readonly def /UniqueID 5000789 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR6.) readonly def /FullName (CMR6) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DAE339BA29C1C6F656 1DEF13780383DAE38A868377CC7D396B2A05F341AEE0F8BD0A0191F51AD11A4D 2E927B848A1EF2BA15CFBE57A51E3AF07598275195C9613041F71C1AF39E61F9 EFD5F6512FBDA76E29DE6B508F62F5CF9F73F5288DF1C7B0B82C92D3B6358BAD EC3CA20BDE55DAA7CC58004AA86B6CBF8C410D8287E88BF20588A39309C2B703 CED322F030AA6069869064486CA651DA054FF3F5E56534CA358B0829A6B954D8 9103436E6B06DAD1658BD4A95AB41343B01F5866FC87C4EDFC71F1477C98F8E1 1DCF27EF743FF90BF918AB8C4E5AC35841E2F745480E5EDE1C1DEAFAD8D0018D 2C1F1CFCAD9F6609859DEDFD1648A6CD23D8ABB80747F94899F17C8F3E6CA55A E176F19CDFDAA0D7C920B3A72051A4745560AC81978C92459EEE5AFE85AB247A 32981139CBE352B248F4BE5F73503A084A3E91F05328EE521D9669E44E202584 5407E7846F9FEE3D54EA18FFB144BF2D6803BF65AE402034B3CDBB40DD24217A 3CE0E95E2717CACD603A958187C42B3558AA38D6B6390EEEDD396F96E6041FCF 6F8888221AFA87EAD79F46E0E32CAED91E6C8500879AB6E580C581E8C8CE9B68 2BB5EFE2604E8DCB2432D39D75EE556969F1B2FBDF6A4BC72D106AA7CF22C268 464027898B311613E06E1584707F262F71D9F49D2149306A88E02BC60BBD6BDB EF41D90F19197BA9AEF32B5E63D5B9FF41B5602F9F786E76621DA54D574981AB 87A72081EA05D6C6BA940EFEBD0904EA4E77BBCE17E20B42E1722617E0F6EF32 F1ACDE9D758594E9C81049CCC10605A27C2A06872FBA9F159CB155609B496ADA 4886F478E44029B5E620DE8319E257697E93E1CDFD27D560E2E4D34507020E2C D9FF06BFA14E056D81DF701FAC3ACE4BE6C098AE116E079F0044391EC1661F6E 7A93B9320BD7F91E8FD2E8EB3F5CAE997D5CDD35107A1D35302260D1499B8B65 39625B7925F97D917B66BAFEEA992873F07220714F192839948CEA080BDB9A03 77B9DD032273DDB5629CB28B5D8797EDEFDBC601823E038384C90C79012A7D96 8F27784DA15BACE21501C26E3AFA5DCCE81B52B0ABAF71A35D33103EA86F2415 A39A830D559C5C6CA7423945BD3DFA942B20A06D7A8D8671F9831DBB52907AB4 4E54776D29C6085CD9970B6DD21DD3EA8EB09C49CBEC6CDCEEB0BBB1B8827109 3BDE64DDA024D67F098D6C1998506DDFF7907ABAADA1C39C759C850E0C6F8E89 A392D1C9329ACFFA92D361218D75E115F70A47C53B73B356D703E9C499AAD098 AA9C8119EE9E9708A9EA3049E976FA19AD04210D5F6092C7903FD155113F3A3F 269B746560F70970AC9F8D09956E0E84DACE4112C4E7C7F6B3F0B63D26EFF95E 2B2E9699D16BC8AFC4AD9113AA3A974C9E82E877288CF71E9169D2DCC61AAAA6 C536E5604EF0716F6487292BBB677518504B52C63822BED3BD5FD14EB41EE6A8 AD4B6CF90D39F98E12A765B645CBA3E8552FB9A986390212CE119E7C3DD675AC 17BD006144BEC534DA2A860188619F17589008409C5A309CB83FBA70F6446B6E 2B56991B6A03B1DE10C621591CEE45BECA27C54BC8B4F1754A9E8F660812710E 117850E1BB6FD89BB13F8CE391C43DA89EA67E9C3E7A4697790EA26B0E4E2E80 DCA508873A7AFFC11B8C02EF86C2316E8D8B6BCEA37F81A3A87546705F070C3B 9D4D28C366CEBC1EE485B8E2357DBE46E86C87B9939DADA60888AA9F1B92FECC CC1C198DDB594BB70A8FE690ECAC21A414BAC89BF019F34D2A130F485EAE35B7 2A10C67EA3A48A4D9734759CC93AD85C6A570500AE5AC9973FC76EFA06BF5DDC 26E20E28D16B50957EE01AF2653F8D860817967AA5A9BF9BF7ABCDA710E9F34F 4F0EBCC32B3C9C2971F6225D2DAA6A451366B83F32B2ACB83E746D365B2DE38D C1AB7447FE7B37F9630E410E5D8F0ECE74DF46C538947B3A167AD9F3E4A7EB3D 60F5425AE75AC3A27D39311DA35696C3DC7282AF1532E7AECE63D13DDA0296A2 01487185FDF1875AEF55A36C17D6A8DD329279D229259463A2F05CB7A874374B E2320E1F6CFECB9C1CE62FF468C29751ACD9754AF1EABE8E7696C2888914416E 235B6766F20FFBEFF285277B639A51EA2F2E30D207BC891B00F0436008F980E0 9EEE7FB375BB069B9E0BA11DA951A99D8E60B4F920A0495C247FA7DE904765AB DB5C3B2D634757E43EDD6FAA4DB3C67F82D6853E1170F0B2D8CE496DD4E72B0D 28277BEF172F1402959F64527F9B640619F04416DDB9D05FB2ACD019CB9C119E E544D24EA6DAC5C69785394EA50E6EC9AAA9E14B904EAF29A733C6D7942B63F4 85729686742F26DEF78DF0DA1CA7CEFBB684F4CAD99021A3B3D1FE03B9C5A4B1 BD04CAC89BB91B11952A2B17A61789BEE0C54B46C03FE9A1AE73D17CF94BA30A 237C29D414C3BCE8E3E2DDF83C0BD59DCB66C4D2C3DE73DA8378F3C6C8035D28 7464399857E57651A53E9C4AA68DFCA91B2376CF98AC5290FDB9BDAD9EF1604E 9B0A70EDDA1E564B6D2456E7BC722454ACA8C4950FDD44B6EB9AD01169A9F845 B06A0DDB7897C847A5B1F42258AECF3807AE936C8F52C3A7A0A85D68160AE442 FE81543DA6702D76AB6E8701F80DFC1D87C961E350D0E52AB2A298B9E5908600 7E14D2A87309043CBF13F69AEAAB1BC239DEA88EB5176624F6046664B1D2691F FBB2071D3706F97DCCA355A6DCC4D09FD35DC078FBAAF672FFDECEC61050A120 10B5A96629041303FD01ACCC7686165DED6AA712FF8E5E85DE33C4E7D877C49C 6C469A90410BAF60BE65ECD91CDC2EE7AC0CA8BA7B53865F26092BFCAA0BCA77 B80DC51DAD09C93C8DD8E43502B4B68F3D5918C3492196292447732BA90F5AB4 9F5E1D634ADE1CCAAD028DE5EBA9535F6FC5908DBD2D643E0A7E059C8C386FDC E72659C0033F535C0D7F6B98D0335552D0BF3C6E302B672A5EAADFCEF81912E3 8F54E6FB7EC2B325125159713D0AC50DEE3673B9B148643727E94C80971A2E73 5E1E13237BE69C84FC039DCE02ECE2668AFD047F21A61BB94A9F498C9FE5CDEA B274B40728B6F6CA9B6C15BAAF92F465B0D7311B46545CBA90D874839443CCB9 3110F052EB247B24B45A3D2FA6FBC7EB2A4BEC2A5892914B3C5EA3F4F9B9DCBF 6F932D95700E045B49E4B1F2C9D2A42CF39CA2F5A2654E6E8E6E92473D28AACD 5E35C6705EA728F704F5996D286BED433F976AB7E018621A577AED7C0AC0A84E A032FE1869F603E6F20386E3A190A30A21EA886249ECF8CDDE2C33D73BA8647A 3DCA7A8DD9E8EC8D9A415D126BA38B6771C489DFC419303EE9C1B83FBFB3A0B8 97D64F30E4BCBEC24DF603FF3BF541E00D5804B6B6543D3D2B661CC551D497A9 9DFFF535AF424B2F3150BB39AAE8CDB306AAD37767BA10BADB031DC2FAB16955 EE78342CCC0E8B5976BF98F215461A8C6F63EBE6E2F1A1104662DDE53388CB51 8B44F3534853B8095F3B746A2459C2EF800FB1EF7F235EBAA9731E3AB3BE4369 1D3636E3ADD5BDF0C34FA80E90D8A1DDE770943FD196E0A7C5F1FAF6970B34C6 4673AACA6B2B5C12B9608521AE736C1F4B97209B063D991300ED5AF3D7F27E76 68E0B858FD8BFF86581E2B9548C691E3E5D9EC4D39C9715CDE86C7D22223CCEB 8A38C776A30AF14912390A7546DBECECD7A687D4F08646E57A12C80DCA022B7A 33399761A50B8E0ABEFA1163EDEC3DFB5DA3248792EEEDD894872D4E6814B4C3 548BAFCDE0CABBCDB97EC6D1BA47F2E77CC1389BF19D73661749AC33F46A618E A665A85776545BF9662F2179D7BFD604FA8EF4700591AF3AEC647E27B24B76F3 133F9198DC15C1AED830E737909E43EB91C334C44BA35810007A3888E33F5DA5 B3B2C35481C648AFE630CC3E08F77744E401B2934E407D1EC17ECE737606B076 F8DE8EF3344F57495EF49D11580D6FB28AE0B1422521B320843B13467501CAE2 3DB93D7BB779F73B6AA30050DA74BDBC3F8DBB30F32EAFD07734A151BB2BAED5 C9B1F790059339B64BB4146470F30928C9A49AE88906BD6FDB7431A4B50809CE 0F67ABA01CDCC2320B0B097187B9299E3D80CDD7BB5DD5BFA7B28D924C5633C5 45A23CCEE097C41C3759C1FA8DBA0DD95034BCA89BD23FAC18C70093F40FF2F8 0FAC5DD4835F2DFD40540E9A9E9FD951A8AF2CB766597DE00147B163BACFB7E6 EFDA4DED594F1C746D8B46A1145E0E4058F5917B3F21E9BEBDE745EE72CDCA64 FB31EF7A2E55265F32559480E2B6726D3DE26FFC97EB4E3160F117E890C4B2E5 8DF310E6A728ABA85540F571C024F8DD58E1D7827FE97CED5EB31547EBC36415 02B8C0E10B7E37D816F01D56A364B8552CBFAAA95BC4BDDCFDE91CE0EF005B4B 7AB56FFB47A093AEDF0DE1EA48FC8103CA3CA1470864D2693E360006D05668A8 AA422CCCED20DCEEBEA5CE0DA1EFB00FB93E922B18124FA11A88D0F6E0F719DA 57603DD5DA42E1C56C2FD9E5415AA199D4F334C151C1157E75C107FBBFCEB706 5F4EA47A29B54ED8CAEB8DDA2F53D2A703B95487619780A52DA1270011648A28 AA64338E04AA5B92C1EDF3D8DA34FA6D227A0325EA6F22E9B38B6338C657BB21 CD4C582DC04010330F62923F817E4EDC6E5C0E6500F2A975A8A95BAA30C4A134 BB31B5AC45A2E7F6E9CDFC810D41344C4F606049445F8E93D74271C1E29DF7CB 5459593BA28AECF64D903D3E4D77CF5C04B06DE44A41EE4D9FC769854503AC85 69E4A5106E84016DE3D59865D4AB30BD6C9E45C45DCB5408421CC50CD6179C85 34E55CC70FBD8FEFE9F1D5160664981716E3BC7F24B6F54E0323D9BC4B692971 24419EE62D8B0BA726E2B4294A9A76F328B8101DA29E78BD5C4AC383350FE196 4D42DB1653637D19530124858950C22F1E9CF5BC07D46B7A58CDE19CC88DCD2E 7FE4EEFD8AA6047E919823C8CAB2EF5274F45E861E6508CC11A8AA90AED2403A B2BF1315C2157B3B50A3685205D93E40906EEE9DE5985405974BCE0B84BB37DB 080A45C5237B269B93C0A7CF294A18B45464A41F604C494CBEF829A381155CFD 71CEEA54CC39EEDB6DF58A9896246B09F95DC6BC40BA6916AAB5ED3D24F66154 3662F8978FC63DA9280FF7ADB09EA5BA79D3B66E0C88BEC1EDD78DA93839073A A4D7B0E627000C4ABA76C47CCFEE92E319315333A5584A951E34C55412049C4A A5569FE65A006F77B416E0530AB6A8E7AD6C72340AD4CE25937158FABB2153EA 281E1D840206F5DA38E00815E9081F81DAB9FAA8F4DAB305867AC84735DB4F52 A36129929BD2084A8EA37BB6889695204BF7290B68D5E722540BF8A276F8BB6D 451D582EE59D2FF03F6B97DDE05FA00C3D375D2D0AAC8FE298F85CC067B15481 48D70B6A0354C705715B891915FE8EA45244677B9FCE81E72D66177E309F3F83 F744B9EA9E55C3B30DEC6E5E03B3988FD526A82A5E8E1DC79127FC62B2FA7949 B3AD3148868DE22BD4B5708E32CEAAE6ADEED1F463EAB9692411E18F8D6BF391 126B2700B4CF3B59D02E3F8795130C96285A63FCD1E0F647ACB1D35E9C58BD01 1DD06BABA00CA4343BEBEDBE677E053E9732B33A7495DF51782A07DA07F5646C 770C957AD915CC70BA8E08BE7A1F4E6BA5BB9C603E38F6FB0A2578471C4D02F4 283069856D926B9076EC73AA39CEB0A061AFF1575C7093FDAC9F89C3DC06EA45 06F3C2A3BC9FF21128B10CB758DF0F099B459A5264A8C24C098110D2BA1A8532 8FAE146A91BA7D033F591AB1A94B8A6FE0FFB610F698D216D58B4EF6C87B1524 8037CBB7E23D8550A620341C6625A1A2ECE7CEE2598D66277F857231A36155E3 984F147783E9B93975AC38A29F2FBCF704C8A04AD84C3E04A12D2321FA56811A 5B6744813CCC187968C5C26BB8D3E6615A912FA5369C01CCF8C0DB790593B190 1A90CFB5339B8771F325C5FC448D36C7312B11A15A8635BAB59CF3CAD176131E 026F6E141B2619EF7F3048750CC9291397F141591EEC8B612D6656DD34DB54D6 DBDD303CED74BE76664E7DC86FCFEEF2001C9DBA56418FB61F589566A47AF36E C94671C5E8939AF9F4D53C0DE7142B7B63C86AAFA65877EBBB48C64589AFB2CB 1280AC099FC48058855CBDEB6C2D2A0D092267996591DC3B5EC8252984E9B27D 2E9EDE8CD8303F0905DBFCAE497DE1B755B924452CDE11CF4F20893DD6FF7251 427F520FE00580DAF1703FD968E0F8ECCDE618E1EA5820EE6CFED97C78864EF6 26FAFEEE194A268F24249D44829AA360D731C34DC285501E966A959180718F72 6330E4CC060588A2F65AE64A720DCAA818D49D4440F5D0B6C1F6C3A107E12445 F1BED2D3FCBB87A9597F01C7332AA79143564056219BF87D4B907A04F77621AD 054935E883B2B137D3D1C4BC792E8335CA08B6D83227F35736C41312A0BB077A 60FC6488C5E02FD51A10AC113D4EF70038C649C1677B2204A77F2ECBE9B3C341 F4126BECBCA61E3F3801F9188A3775924A62D30FB096B440286FA655EBA00A74 9A4162904BEA07CE68EE76018346DEEE20839C9A2FF71179B58E1D4AB30856B5 F5D97295A097174467010B15D733AAC5813CAA633746B430B1AAF9F997FDAAFD 436844D1A56B8E25A89D2CC4BA6EE7ABD167818FD4F6C747E07B262C99EE2C35 323F0B471586CA50F54C6381B052B15B0C58C19DEA82C0CA29F00400B727419B 2379979CDCBFA966AD513FA903160C571C3BF1BA239540B11EF2371A3880837C 6D6CA2F374280CFA1586427AE975A2AEC34244874E4D441DBAC6CD1828841C91 069AA87FAE849C5DC7C9EC1B9876E59F3CCDF8BB23D939F5348D7486934BFB02 CC5A22541ED352616830A510DE7732E5D8F7E785BBD31C2BC9D348CE5632654D 2C1740F89D57FB2AA1FD8FA3304EA03F757BB8F498ED98E48485722E78D97B12 A05F3A28438084D1CF90AC4C3FFCD7B3365941C45E1E02CB13CA1E99F7FA1D00 1C9D489D5C95F019AB4CE89FA3B6604473DBD2CE8E278969E0A0FCBCE68C23F6 9381882443D3FC16966555FC222F3FC4B1207522201AB7A15A7A6F22CDC9D392 360BF4C95DAD35770E0AC7E5EFF015F2C74ED7391F40EC94B8D1C163B5DEE5B3 911A20C2625AD3B24BD94D2A42405E655DA47D3F94F882CA2F479437B4E0BE71 8AFA4482C6FB270F8D05B4599A01403DAAA90C01DF3AA7C2BC7E66AB6AA833AD FB6E5EE13E45CC7CE7E200FBFE639F9CFFF5D08512C02764997FD28368969BFB 0876F236EF6189BE73AD827332DF1B2EADEAC0ED3B939CE5BC3CEC78975FC636 44FCBC2CCF4396AC7343EC62E0E4F3DFFA2B880BF31D93ADFE201BE9CCEC8BA5 0B9B919E05B851E0909968DA259EECC6AA0743F25247978CC09C28C4F878E29A 5070E4023BCE95FE0ACCCC01D0EE219FA8344E8F6D7D4347563BF8AC030B9097 41F24D4BC9494915A82EE9FD37FBB6A46BF077B728FB569B1258CEA5F51F36BE 4F4D0F890D782E44748CA3FE8C8A515998371D9C7D2311F192B4B7E7C68FC6EE 3F7136714C282A2570FE591F247A08319CE9EF1E43274E4E57166E31A2ECA506 85350DA31AA4C33C9687F5210BA225EA1007C444FBFA2126769767E47A967884 9F68589E4BAA9ED32A7A466DE35554C132810C68ABDAE536D9D884352F28EA02 8A555D2CE11F30598F44A65E2D86B43ECCBDEED9E4E5B5B7DCDA20EAA09D9FF7 422FC91F2201431A9E8FC624FF44D26C0100183D77BC7E6B1A6CFBD3FA8BABC1 AE4CB0FD382E26BE0A83169B46D91429DCB746A0326243E212F802AF6A56C709 6E70C6C7CDA243F0BDAA8832B2533A7133035259FD4BF7ABD4F214ED51BAC2E1 7957997FFB4B643294EA147956179DDF4B4BBD1DB724333E2D5EB49BE2197714 9005D675DB5319C4A1654A681E5075B0611D5638F0B9A64DF51BD6646235A81B 45F636024256624B8FDC48D5996ED405D9704C27408E9925014984E0DE6CDD95 6DA8543850C0BB8691A91DFDB74CB0DF28F825BD92C6C18C5A959F9234DE7E69 675CBD9EBF2EB8E34817E951A161999C2664BE0D11B4400097012F5031B5ACF8 83949020356034D74FB2D57BA3C3A2A2BFC5DFE014C7A13C61B6BE59EC9D7679 55FD9DF58D076BC329DF950A28672CD8A33B6E7E486CE339993CABF85F93B356 7769C76AB18E313839CEA4C33FE45D190D37F01FA2746F288A3DA17FF4DA285C 5A6260E86B7F75F002343B90F92CF1E602148DFF4DC42DB1F3C9A5874B536BF3 32B36319D8C7873BD008044788F283F8D057392EDD7046CEBA92D692FDB94619 0441733ED617BBA362F72F7171793A38759B4E388ACD481BEE18BBFEF9F3EBB0 C8B5AC6E70F8EB41A61EE7DBF3A84555A34E64B2606DE030ADD3B2EA4F8C2BD8 BD14F321D23071A729E56F1508FAF9842661674A1AA680DD01439AC96213AD23 C2F981445D19FA8C215C29B3575F3ED975271F74A0B74DA0891F324E5A30C5A1 80B7417ACACEE8553015FD052A35EDC51283BB3D0B66DEC16910CED32E031A16 EEA19ED6C6736F47E982E29C6848AD2C26176872E5AF2F8A4F93075F87013FE9 002282C19558E24ECD9F77CC747449E05D3FAB34264413E50EF3B5355E091FF8 EB97BA392A84E536CC41C1859F18D0F9C68960228F8D637E0DE891252F006CF9 E687F57AD4E1402A70E068D9910D5C7107A32F0C4FBE1D0ECDE9393CA1944AFA 14EF5243E21360A1B1FFF2E2C7B7010F5F989B9A1C09915F5B33AF8D6130403C 3DABAA3E520911A61F9E725AB816F93139EB9490155852715CF757D0FD5BACEE D85F6A291F30562762938550390138B5190A0511984147F7B9E66688964A42E7 5935FDE9A7CE547EEAA5A38411ADAB145C94B86E5E49CB4874FD30A64071F7 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMBX10 %!PS-AdobeFont-1.0: CMBX10 003.002 %%Title: CMBX10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMBX10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMBX10 known{/CMBX10 findfont dup/UniqueID known{dup /UniqueID get 5000768 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMBX10 def /FontBBox {-56 -250 1164 750 }readonly def /UniqueID 5000768 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMBX10.) readonly def /FullName (CMBX10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Bold) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 11 /ff put dup 12 /fi put dup 40 /parenleft put dup 41 /parenright put dup 43 /plus put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 61 /equal put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 72 /H put dup 73 /I put dup 74 /J put dup 75 /K put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put dup 123 /endash put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2D43B233BABF23DF8DB B6C2BD2F04672F9A3B7FE430263E962F16A948319C51B8ADE6E8A80D3D88023A 6DEA4D271676C2C8615C4A0EA7DC8F6601610F398673A4D4B905F49EA868FEF6 39BE073001A36DEA6C08ED51452F062B971740019692E221F4455EDE46AF24B8 407A98B791F6AD525C72C09776247E194043281D04FE1CD1D8AD8DCEEC3045B4 F95B3B41CD3300768D8A049815348BD7AC1004F5500817E3A267D694AE108BAF 285B288FC5F28A03E9D34FE5D9B2F9A9BB26ADE66B1CF8EB5BE606E83D213C33 DE083C20D636EF780E761944FCE3B8A950B1E6E7568F33B557C6D59E0CEAF185 53E609A4F58AC4D5269116F958C4D115C44B5A6DABAB79D3BB6E60BDFCECE108 74CFBE258779F32C80CD7D9A7CEBA50A0966BD9961F71560119668C4A0C30A5D ED91ACB30940502B24F33906D6E0F16F81DA87EB6D7FC8B7853BE388C40D75C2 2CA8F94713AAA1561F5321CE97997CB4AF0E37F44E25B0F73CF4986422B1CD89 8F861CA623004ADB1C28268D7F8C484AA10C9519B6AEADC95AFAA3304D60E85D 718B2F67D2B734095E5A92C90785252C98067DC05137BE735220BBCB7C341D61 C4B98BFB1EAF883D38D7A93195A059EF82B42027F23B6CD633231D704B891A9B 03D11A646F13898F20321D7BC150C63FD6DC6BF9CAFD8DA759E95384B729A0B2 767B9F3E55C682F7A248BC1184F7D294CFFAE0B246DFCC8F215625DDD4F49F09 FA8D41CBF4A06152FEB152C61539ADF7E70A4D23AF8267D25CE3B12D39D62377 547E2528D18DC4134FA3BE0437EE0B3509223D71F06D44C6227D62BD01AC0A2A 3EDA975E894371C07CA1027B102549A7D552FFD25ED2DCC68E29E71BBAB43C62 57B0BFC6A953ABC2EF703F35D112F6B5460018CDCEAD17F149DBE5B52C2B9E10 9818EA6D97C8AC884F6841C9B600A7D868F59C1D80E98DE0741D06D69858EC84 1B33C6C9938B7E8A6FF6C12AD456EECBD3EBAF0D7331536B9F6422019FAFFFA4 822E79D6D89D6366DA636CB708894FEF904F366E295F1CB808E78E883913C4FB 1631248ED6A7CF1095C0C61C4F05E4B9DFC47533A5FD24540AD71A0E2907B98B 28085EB88ABFC3478C9644594C7DC4244ED5A7C1CA8D960B65497D56D174645A B88F12C2CF0A807DA314017984CF3C4FB7F47392A651EB9CFA961B28E2989893 9FC4D97171BD5338673F5D1CE2C3C08D48A1B77769F01D5058236C655FFD864B 80E28F900191D4EB349AA5E400A7B0A0FCA0F3E79D7A7C69775BF754329397B7 D18B20B2683CBC4A19729BA878B3C17EBA0A7E9EE297A5B67E915CAD92C8F356 582B8299DE6A58E73408F525F7EA895C48A8F0D626A06A96A50348DFBE479D89 4272576FBB0CD332193D28A8F11503BAE98F8E1D73CF5BCADF23DCD4E6586ABB 323568F5A34E359661074D50CD8D9DF27191FCE24F10225A5D721EFDE2547E1D CA998077D2340B1A4ADFFF570AA677CDF3305D5E3A394BB1626EB35074D4EEAC 2F037CA2EA389F7683FD17A8E07C12B4CB3BA8C249C9B12D297C618009F76717 0EBF5F2DD39A6BDA10A2E5A811D4E190660F5FDDBA29201B6F8042620397AB2C E59267A7247B0463891831A6F40582BC3F614E5167B646A8F53D8A31717DD9A1 9034034E705BA7884F0E0738307AF69D3517147C282747F2788462FDC4336A4F 9CD222908401A25F0A1F7B13B8DAE622DC965AD0BE62497420B70C04AF432237 E0FDD043456187658ED93B0F9822A3998511DF05E59CC85B7B9992CA0CE3B814 9723BAE70D2631F32B4BF93511F67179FFAD2075E1591CA5907A4C67701B56CF A5E5B02EB4A842BA1F18D6864E5677359C2FB4AF5BCBABAFB053F230CC129B45 8D15413F736EB07C571521C7DE2A13F2AC1C133D491B0A607197BE9AA1231D96 BED7968788246B2E4D2BD330F802810F5BDA3760FEA5210CFC6F54748FB1D921 5CC3624BBA5B8962AA7D94159651589540B17CF7A785F297264F9C1006D36928 6E2756D3B623A6087E4B106FBA76255903C624C07E18A1AF4E185A533C640711 86BB477A906ADD36EB6C8F4A12BC2F01B2B98412E4E105977640930CD998D990 0254A1E5E9843B7A8ADE0AF6D5871E6D3D666465AE69813A2E26333213FF6713 6F08D55A90C079A56E1B9AC655F720FC22B5AD8550FFF26DA7B0C5A0B60DDB05 64E8FAF684F3A455BA9BC9278043D79537D201D520E38750335A4C8FEA887377 879331B68DAD6B253F4FF9981D0F9B9550ED5179B15EEEB00E560A3DB6E5973B 63403E4E2F40A3D0B937246E9652000B917B1369741E0F913C14C2D2D6D1FCBE 2CEC4422177C58523715BD070002EC2E13D383A1DC8C84228862B6C5D3B65667 9FA97E175239BB7FE7E37E14B96DD7960A8AD49DF428CFC13B5D3CC22E245317 47B5244DA97F1DF954CED2D552477237CB23D037C0DE728E26C82738954EEA1F F34FE497DA005AF03746DD2ACF77F6E6F2C224862A1D18AF6F7A5DAF34564387 9E01DBFF49F8621C058C04C2B3F4F3033FF3E8A977B2CD6B2A3CA4A6C569B19F C5AC457AE9AF334DA66A730960C7565E93A2D373C0E3DE14646FFDA05DF4C6EB 6D4CA8ACCA3C3115764F77B842581760BFB9E5C0EBE55308B0577A8F4D968CE2 BA3361D79378D451DD150C34D7E901397AC63B33BD7DB13C50D678F5DE999238 4B4EA15BD449C46F262D931478F5685CDEEC4C4201FC3EFA607AFB8F27AF6751 125DE42D2FE2D31DE769B7E7FD8CC8C5D91343B537139A822A5BC4160BB5314E 37501F65B4FC35475FE9E03E34CBF6795AE86CE409500BD0799DE39FA69978B6 EC74D2197C03632D3F59B85F404DB31240968FA75059B2581B101E028CDECC2E 7E5E25DFA106E9B8ADB81E82BE9ED3BAA9D03EEB22B7B67AB1262DF6AF5F5EFD A5627EFEB84F3A5F92EF2557EDA2843D7D18C592635623CEAB14CC3620F33986 410D6DBAEF9F86E4E6682054540E2B01D8FF2161F10E66851A188BC15BD6666E 8D3F21709F196A31EE676D28A2D12639CC2E7020A52910F052E61A0710DF09B0 064171D05611451BD24FAD64716F141E1C41D3218A8115A3D73CA041D02B46D9 28C3D07DF0FB668E8E91409C8D0A26A65CD737C075E026AC0A974C9BE658199B 3B9D82ED95E4646977D8F60717DA4C68767DBD7E8320D5AA1D5DEB2E6B009759 8282F27D64F1F904830AAB501CDA4D9233FC2F12F77F0FBCC46E6B729C71F6D5 E6F3EA02EC35D1048394F4EF2177FC5EB726DE5EF2DE7997166B8BE5B5105D08 EAAC3481FC612665CA112D3F889A0E5B7843EFFCEFACA24A01B6AC2B7DDE02F4 A9295AA2409A3756BAAB44608DACBB56840060037869455BEBA46F10AFC68DD0 0563843DF111C6D34911CF13AA6023E5E899060B5EC60D0F78FDEF3E981151A9 24903EB13ED1A67EA1977449716D1A5A7EDE1A2E9465C9C2B20A58AF02D9F373 73E627CBF296B3A6A4670C39F3B5EA30D76F0362C81020A1777F0ADDBC6B52F7 213FEE1718214087837049CF2AF00407639657428B9E8B532F68B631611A3501 3D9DCA38090E227BD0D6D0FB4130EE866DB6B195C873AFD18DDB3B1E40F740C6 B3B375ADCBBF628A07A5FACED539FEDA3379D3B60216C2EA6629BE2F65199D82 FE3AE627D7C67270F3497AE75F7A9514968B5950E2D63C38DA240AF4E6CAE88E E25167D179108679876E7C80C85FE1D2BCC2EC9B88BE76A8F5736E8E6B3A9CF9 42E58A4ECB7914865E67C1468CF66D658206830B9380FE346DC2DC4BB56A92CE 4B5E4EA9036C177869315A2D9E6CFE97E3BFD7CBE0747D40CE5E8A3A0988576B 8AD2B1E4314C0D8A0CBCA08844A49F7E054D31BA7543730C0A7390BC4A288D10 CE29E389A4791305D3AC1BB6F77C805F1032787306F78FF76A20A9E629899F6D 13356768D33D7B9E294E8CD50CBFB9CA02A193922BD9B4372C912D1689B6644D 52CAA30F7421E8114D077288119AD9514EF21E5B9989CCE2ABA0C12549FDF493 FFB39736AC9EB72DAF45E4EA6057527FA9F5AA0A1A3F03C12F7482E465C766D3 760DA7714D56C91BDAED507A5572BEB51A895F8DD3BD5AAB042650154FC7E4E5 5EEA6194DF73AC5EE2CBD4EE26E29B1D2D0C458B4850BFE842DDF2EBB4E2A25D C6A11CA2D8F346E2B736DF88A3D57BC0380B52396A6C039212699F5D3342EB58 0C3DD5D01D5078479BD9FD10C07925556C0AB0F03606F33796BA72074549EDA6 E33644F62CA35207D7421D2727AD8419AD1772789D33405FCDDC9286BC34C974 A52297F5BBD2E541E8BB473F733AE5097BBC9D5FACF18DE4173B4711E28B23ED 16E0A6746A60F6FF903026A3900169EDA87D98396E762C2EC963D89197B8CD0C 25244806BE7CBF46BE60A8F9171731EADFC969C28679B025371E5572E52A0EF8 B3FD9B4638D03E20BFDEC9345E70B8166D38846DCA68E0D0B4B53629C7E7620B 45E0A610BCD07FEF8814CF915CFB11119F42407D1C6DC1E6353451D40A382C2E C74DF2A4889ED5A3495C3E973565F7178CA190D22C9693C10EB12C1E7A8679CE 4AFECFC964CC98111BA4ED2BA9B10292A71D5B11870EB08EB483922CE8628A06 05E7CF6DF93E112B60EF888AA8DB52994EC33DC7277D7B7A4F913AD30257261A D6EE80476A9A8D316D190BE6CE0046CBBCED365AB305495284FA921BE0638E00 63DB2AA4C5F163340BCCD1061B469504DEE350B82FBE1689C1B65D095405614B 35997D6F0DACA7190D64ABA351705B17B23FE2EE5996FCD607F49F54392463EC DD5B944A4B82FA2BE3E75E2946D483060DF99277340B0AB65A2042AD088E2B75 BBDAB869D1940F64B50D25078519D18748AD64AC5615EFAAF4F3105B0111AD40 70EE173ABE6A4ACE486B4E5999158A4377FDA6922FAA6E9305F48570D14BC81F BFF4C663E1EA9D1E050534F9315A663C4C5DA52CB02EA6408AA473C32CB0CD71 169BB43C0508A842F400240F0063243B4C459A1FCB3312C41C32ED0EE87F591A BCB6D5D3830AE4645CB4D40336DB4AB6540B52E70E1EA415CC6D886827EBC5B3 EC35CC5C136243B0C20B3C603B648B132B99D05F9B48263ACFA59A856BE74441 FECF5C6D1FE9D1F4F9942F460961901E16017144C37E83C6822177B2A6C47ECC 6C47A1104460665E5BCFCF08874008302750EB991CD98D0D8D22B921F90B99B9 05EE7C39F2BC2A7798157503743C9F2F267BDBE2E8A4CDA7317F81DBF8962E1C EC02822CC7F770FD4D08D335904375BF0C6DAA0510771627ECB9EE69C0F47D30 69A87052989DF80D9F4F19F75B070C3689AB3BE0966453F9D56CED6C1745B50D 813AE6D7E44B73423AB3778ABE4CD2C4DF40E14C5A426043F7057E2DFA2DAA70 EA6723F1C7967FECB1E7C1C0CA283334163FBE31C32254490170C3513580A552 19A5DD75E6C4ADCB12D33517A03318A6BBC7E4214266E125140D8C40F78A0340 1F95D9FBEC4DCC55B71E89375AA94B0D55646F6C069561480407D0A3AC127024 D7D1E9ED6B599A2A8766B8792F46D35508B66F302D289405B101A3C6BADA680D 8C56E2A00B766A4CB155446F862FCF17537A2BE85418E20CD77C4F1F69F70BC6 17BB5DA8FAA876D0E8BABE273A19C04A8697B3E3CF4725E2C77C8761A9243F24 96F8AE96399996001A57FD75106745AB4646FB9C6421F1D4EBF3BE533BD11AE8 14BFBD6D308376B26E08E4ADA490DDCCA94BE8240403D5EB0FE3549061DFB668 4105B4FE77189546619B6BCF3F9723E278E98D50A17DB8A4C46744FA21760635 5B332689316BD17C966D466AE737FE3ED7ABC443ADD88D4823A10BC9747ABDEE 027515AC353A420523F85298029475D8BFD83A2CD00C02CA07974BAA581D2215 A850E6E4C0A5E17E0EDF91C63FAC18C70093F40FEEAF0350B403E2806F4EAE96 BF616A805616EE55C4657418C26CAF54187A6684821B86A76F15088AC4D5B551 66C3CA8DC61E9810858D1204F899C7E3A1754F483134609F6EEE6364B1CC04FD 92C86EF194FA3249601AD722D75D1D395CD15A93C768EC60A486AE885683364F 93DA00A865C1035F913FDA69E7D9A0422880FB81EC23C00427F07A5EA3CCB613 83C859958AC53FAEA26A6BB39ABA068863CCE3D447720BC31A5136E08EE58963 093AF587A72112D55853A1048A2B1695DB2D7F13CC924F2F0902071260C33ED6 30893A04577C0ACF0681C0FEC23E5404F844A83BB5A2F8DE1F0792196139993C 1152094BC36A6AE5BAB4B8281E506F485F0BAEEBBE71E174B7CED1E52A8242F9 DBDF3E0FBA296538D964EB5B7A4E23B1BB0F59872C9D4FE8498203E3AC08B71E D2B965AA6CD5D20DA6C83FDC86F4A5D68A58A72C5BB9BFE9BC755C56B24025CE 6F24443D3CF32CD711D3D94C7C1DC275DDAE3341D840090F97CB6CAEF274C94F 9F3BD3AAB3F98BA8A7B5CE5E48D1462DAAB37BEB1C10B410E8D33FA42D898183 BD4F807112D78AA94509E33C179BF7C9E82E55AA7D09E128A0DA06A330CF4AF8 5DC861498CE029CE8C1BD15C923A708F2E7AF98E4F7B34212A0CB417553C86EB 6DD46B0466F1A21D29FC5111226794ECFCA5DD4240C0B8D106CCD7EA6F03E133 BB7733F055D6FFA04EF5C6F872B4FDA3E42F0F036C4825543D75682ACF71B548 DED160ACD05625274799D0AE201305DA526E01A3D2A719B1B15C05CC09467F3A 5627860C0F36C503EE392E1786620F3F2287AFE56634E03566B9B1F537FD92A2 913166228791871A8F8CBA1A1DA634E8224058052A10FE1E67CBD3FD21A6C07E 243CBF58BDC78577847664EEA5225EB8D6679AB17C563848A9D4D58995EA3609 51C1443B752A070D9872FE1643F0677019235AC25DC2B29169D38308F2170A1A A0FDCC59E6602197D2815B914041FFC7106DAAAF30CD97400C6D0826A40385A4 C8520119A065CF32CF2FC5FBD8DFD29222528A7F96FDA533145846B3428F8239 E50277C366418D713F84B12A5FD4F904DC13DB1844A391FDAEB97643A6FD2945 942FD4FC5A4A35E184F23304B8B4D93D0C37EFCC4E106D4FCD0DA3E5D2117589 3FFC2BD1D121026562C55C455C3585050B9460891B006F62D9D9B66695C3D348 A467C14C0256FA9621CB056E7CD389505194FF463BCC4010897F9A690EA87D9D BB3ED4C174FBADB8A4744C6E4A44D773967FD703EC37672F9993DC48BCC8A060 6CEFE8E6B8F10886E15BA0466AF410B90DF0020FAB88BE493606B6A734EA85BB 926950EB10D2F2CFDBD182B0F133809612CCF6ACCAD049C8005A42FAF78368B9 E7684F98DE421BE0A3BC0FAEE024A7BE67E15C8394F17FE84DFD8156C2A3E94D 08259E15CC657E8CE3088395BF6B5F825764E141AE15EBD186DC049261623D26 8636705E06C6E4A1F8ACAEA59F91B042DF5DB9C2AB986A784384706A43E5F18E 42C29CC1CA86D4F247B3BBBC89F3633EE074DCA4AC15B1E33EE4822812A62E88 C32B0AA57249980EE17AFC1346074800FA529445D18649A0475246A25CF325A0 BDA06AAF392FD455218B13D9ED577D51A9500B9FB7860716A8E2FB3A8C4BE3B3 6656C6A5653AEF00184020ACA0BCCBF48BE3BF91E11C8658686C89848E714E6D DC158DCD1C1BC03B83FF94C60B1DC71CE8A86B46DBE661C9F8F4677F8A2C7CF1 E41A91EBDA2304735147BE66CDFF2673F09D408297302124C127F0B35690CAE9 CE1679120CC4D582FB69550AD34A047DDFCD9D411724554CCED753DB52D6AA7B 22B0C55EB698ADDBB0F8ED15C971AEF113C74B9E25DA29199237B98DA4023665 C2A63A837E4CAB38F8DF37DBAB5DC80C0AB25B56BCA5D899F1575E61ADF75676 F48EE26C054AD9A75FD88A3E17498AC26FD4DC8000A125D6DD423540B8A98779 B28CE97C9CAFAC45693FF43249E4B559E7F19FB349F94B60AAAAF05B5FBF244E 982B4B51D997DA5811CD43E1917DA885DD96133A5CE1A290DBBFD88AF285A879 D3136C41C839FD2276760A7B4F21F4026AADCDAB3F113FCCCA9588C7FB72643E AB8F6D8AEAD1DC3DCA6E436B3DF24E7DC6AD37137B49327871EA80F3B8AEE932 D20D9A5B4779DFFAD7B3E5D447023D6433575F8F5AF589D7E094DA3786555D0C 046A427ADF128E00AC7B458D5A131A130D6F49A7ABF47833791F172D69FE6393 EAE0E90E7FF7BC2333D4E0215D5201E4B209591782F8A664335F67B9DDE36DBA 793EC77E5EB405862D14EAB6A99218B3F66F11EA2F345629C402BD8FD9CA0AC8 FB5A2E119DAA9F80083C9BC54F4586C44320993CB5D9CBDC8F8522001F82A16C E307F175B794F4426E5D273581A6D2844444D82093FB03482B270D693391DEA7 CB26D4A418E48A2989167B7DCE251F0D53D5C9B29D359A568FEDB965DF31CBF3 900392FE739A2B43BFA2363CA74FA72668FC761D1A17B9C0B56D666F94E090DE EA37CAAB4E066201D6164118B5A5DB3FDF0B15175392AC33785AB5DF23A71731 265FC02CA542376BEA19619D331286D44EA395793E3909D01A16D0CC46B67F73 ADF61251D85C9744AC6334EC8DF8E5C93474AFDFF399F5F3C9451E14281069DE FCD9281FD8978DAF08680C2CB6C279519A46159751BF3CD0E36B7BCD9C831E65 52ED07652914BF06C32743D8544A636A804D2FD67CA10F0E3B6AFB289DD1CEDD 4E94BB26AA4C9DF1353EB7C9BF95F544E3FCF67EA5E0B2FEDC7F622FF3C96C68 D4FFED9073979E1F49C984D0D8731F93868E8F137226777551D4DE437AE5E27D 9AC6340013620938885263EE631BE20CC17D597484A978624783C2003885B830 269AD74A047F2E1EFF2906517BD765EE9BA27728A753A1BBF0615D7AC52C9370 6D730166015B5579401DB7D251E1367B190DE298114926B34AE0824F8054FE40 2799EA3E8DBDF999FA98E9FC634677BEB7E2A5062ECA0C2EB86A038754504AE3 5AA17151913D7B8071150521CBE040A2AEFCBEC1E0DCAE4EA5592F134CADA707 93FA57B02177BC98406E9FD02CDD47B8B2DEADDD475CAFF235D5879EA3D51A22 D4359129F80A9A705ECC2042E5419A6064CD69D506E7D3C910FA9DF6DB85E1D0 E5068ED5F4A464382F8EAF5EA8248AEFCE2C57F12368A2494F7970B396F508C9 99AFEDE6F666CB3DE7FCC667A5B810B665519E7E1450E00BB9D0279E7306279C 91938C746FFB2F9BB1859B9E19B54C00F323B79291780BE365DCAE0F0CFD1C19 02CA2E7BEE10F6ECB0658FF099EE65B791C63EC6AF40656D93D61FB7DAE0C845 09C5E1537974E0CAF7DAEC080E933811655BABEF23430F28DB530F7EE522ED28 10C5CB1928B187FD918D3B0ACAB4DD394F6FA4728AF2CEED07C5F473334549D0 F9F9C71B704E04D0E72D235A8D5D1C97096A2308AE1E55B85CBC2DD258113B70 2B2C13F34434EA594F46C3BB844048F77885219C54974E7DF47A96C96D8F3BE8 779580A9273DD50EFF343B69F77A375F54EBC3A3C0A201089663D101BAC1D911 14CC7163FB9F4DC8F14BF056FF0804DE76474D0EE084E363C8B2033C97985F77 E601BED695A5E82A145CA98AC55AD9A38320573041DE8287BD9A4B3EA8E5E16C 9CB6C43FE96580EA54B3C318A104A1E3544B0FC0E0EAAE8700BC7AFCA7BEB4DA 390109F7C4635470D39C7BB49C86B6725EDE1262199758B7BCD57F9AF62E89B5 45CC8CE83C4991BB87AE86A1EFC1396CB78D3948701D6092ABBD8568490F646A D421F3AA230DBAC8417207486DFED4B6EA7863C71DF2812EB840E1818F6F1CA4 698E262ED76057341F21053DBBD57FB065E3B9EE82EF149E2D19C21EF5F5DD74 5F323D016D893B5198850DD9C65222454C6A9CBBF205837EF06E5CBF7ED4EF91 81ED273E29C5EB616AC9751F16AE17384099CF4A62DCDE8EE6C44899633FD2E4 8F4CA389AA7EFF7D09862C8AC20ADE56FE3E8952891AF90587A45AE742EC06DF B4EE000266D3E97E68320CEA2508FACA50DEEA7AB2CFEA126A5FC0BE030413F5 6DEB89BA6E42C5DFAD3CF71494A639DD781F1C8BECE119C3525B0B45F0295F0C 11C05028637C7722A6B844C619ED2A9D2D366BC8AC5E4D11753CE4F22396E249 BAEC49949A55469248CA615C5D93731B35DD3F3A1C551E3A788BC4F442FED0FB CE0E01F764EC4EDB7FA76B64BFB2FED183678A9A3EEA6DF86113481A2D211A17 C5B44960014FD0EA80F0E45FE00933038F1B14036225A0DD6D3A6CE6AF5A545D 4E9879000936023011063863D5FC4D81066085C13AF52E34E1C79E7561E450C6 5E13CE8DB7D88C48FDDA2B0CD86182754D56406D3774853C3A363D360DD1D3A7 ECF49D9DB6743D9540ADD2348CA838B32139AE5BC1CD44345C27F9D47B6AF403 B067C4FC966D23A12CD458EBC74170CF6C8FDB960B9C4619882EBEA0B535BB43 4E5BCBEF57E2506D46D00A4EFDC5C30AACB66AC6349E6D09199BA12884737714 C5FF161633C277E7EAFA734D911FB31839155E86F09EFA9F7681AB025815E2A8 A49F428AD81E66FFAC6E82085EA8F36E73DA11957540698D22AC1B6E6527DA0F BC55BD74FD0C1B4978EDF499107FB92EA2ACC44FE9E2FC476AB0BB7835D0AE18 6699BF0ABDA98AEC711A55C6C0DFA937D95CA1D5AED112BD71932364C0C9997A F83DD45D1AB3E2C8B8FB8628E4809029FF9F796104761078B0F59386340C9F9A 4F0FEAFA7AA8D34BF5C2638139AF9BC195E298373DA0C6F6DC9A5718BF056A6C 4A5B98E62CCEAE40547AFBEB0198225DD774FADBF308B91026EADFE90AC92E1B 0CC8FA7599549EF396E5EFC66EE2362AF38BD7A9B899E934C1BE4746FA3BEA06 DF388C547DF7A34037F06CE42521C7F9A5DC0B4586C3992FC53F1ED102E969CC E27E8B1578C968FB3FF4848C380C8B9839873F934C88858A3D1FE5C511311744 B77AEBA5E72F58748AF4F2C42F5F4475C3174C7CBD917EDF3D43F47C6F5677DA 3B1A8C79F8DA266F89F3204FCDF6B2BCB704AB332D99DEFC50BB03301A7E46E3 F2ADACDB6294C3D1C6B8EABF2D703BE382313608956EA32D3A447D0AEF638B8C 9F7F58F4A33261BB8558CF6624BAA632825543D0F62BB5DC16C11D3E57BD1920 54A124C63043794EF59D717626845DA8D0375AD01D63E8F687C8386518B9EBC7 01DA7510F98EE95538E85B95E167C6CFB9A221BA06493C80A3C18EC4503D3FDB AC00AC16871EFC3063A356D230C015C6ABB22E10CD76A88250665AE266ED133E CED633BAFFCE5535163BA355DA64925CB69A5A2AA3AE147AEBDDBAEC2278DEF6 B3A250A220D8F88BCFDF1D312FC0FCF16A0601026C6FE18C7642EC98A19C9AE6 5EB3B8890338F828EA79EB8C5F9DACAFE9657FBEF5BEC54868977852157326FD 7889ABE42B4922561B0994F8AD1C9C8282B43414870CFF7EFD2A3FCFA0D98D4D 0B88323556BC8C21388AA2B223E95401BE9376956749691B0E9C8A3CBC66C2FA 69969D54CCA43C756185726D6158E2843ADE684936712D85DD32A73FCCA05037 A2A84E448A72A369E4104996B360A0A470C22FDEE87E53945816B7A1E4B6764A 0F87848033CD5523B1A7D6779F08B8230DC2AFAF4C19766336E623857D979D82 00B32D7368EC956E43687C73F82BD0C2F0244EDB76DF562293E6073542FBC646 2D45076E249A857FC13D34B4A0D9A8A3FEB720B435C1F8C806B60E1F0044D66B F56D2E7EFDF190DBEE7067482D521AAD0869E1AC8649100EB3C4C8E8FF0007F8 94D98504F43B31AE17FD6D1A383664F8F43E428A9DFC14B81BA24CA596076E3A D1F6363E98EDC6DB0958112FC644EE3054740073E553FA3B4CE88FE858753A0D 8A34C0283934A876F76F75FD04EFE007F60EB8D88200E037D53E61928FAEC54B 3DD85E2D6F536DC397220D78FD2C235E3DFADC0FC34570F8879C9AC6FCB41034 7CED9F35AB5A2F84B7F140CCA47C328390DFC904541F59EB2216409F046AB94C C7AD300CA053069A016A4D137ED388E3AA1F920D8E4703E7AEB467B957566D57 B5BA1467B97A34025F96F8C6BC6207B5E120A72AEDDFA9338AE7C810D46229B5 EF5F30891A379389985357599C13569A0EDF76016B2999C69427ADB14FA864C2 28CF28F25A2E9B7F907B1D27EBDB426D85CA90BBE9173EC247022744ABFD799D 1B512BE4DC20BDEC9314CE9A4BD6A9CD854728B30EE6CD12B06056F2DABDB71C 12EAABF36BFD61F1DFBB512F032EFAE6EE3AF85762C3C55566B3BB033FBC2C82 411356FD74ED08CBE0DD67DB3722B74AD657D4C13425D205C2805355CA361715 DCAA5130051D163BE0BB84AAC82D23E6A29D39A8175C18A8E51DF6804F477EC3 209C46D2AA6B4637E65A343D7960DAE177DE7CE56277278B0B508090CEBC2517 A18257CBC02085DEB9BFF3EAA4CC835271766F1A7FF5C4A3BE3B298D80E4224F 16AEFC8D983C8ECF088801F8BBF731EC3446D4A8C5DAB7E1ACE1F6DDAC862D00 B03BFDDA6AC5238E0B43F631F43E4B36A21E913940F438EC3F95B6187D080414 DEA10669F6A40C7B5ED4F51C228F1A596CA3764AA03DD2ECA72702A435819A0F 50B428725820C2AB0434963B41B99B95C3FCE782115F715AF72352CAF6FC2718 B62609656C97780433F8D87AE75E84F897E3409EBDC4BD348691B7639BD9DD6B 86E41C6C0475962406BB67DA94BDEA7DFD8B7D10750AF82C59ECFA2C5CB7FA99 49592065C81529400635A97E7B8B9FAD014A2082D19640FD3C4471EBA052FAA5 3114076D0FB03076D67649443696FE09AD9413F3FD34CBABA360921CA1807A3F CF7B242E1793372E57F2A68B5E2194BAF806EAC9A5AAC369387DCD4F8F22FB5F 812D26293171EABD52744FCE1F257856CD4F0A57658B16329BC9E7A784798F60 70695286AE088670AF77C6C71E7BE088E4BFE578FE2EFB2DA7C9803DD7A01DB8 FFBCFB1D781A77084CEE2252CDEAA871367443B08E0D319D90F94AFADF6CA2C6 3C78F8A013656834C8F281F8E0187FBE7A80BCFA6028DBE609D45B3E82B74DE6 62FB9E5D6A2467895EE3EE013F332ABDC1DB52CC747372557CCDCC45D11F609B 10C161FBD95ECBC414640CA4E10D34220A81F9F7B46DA99BE9E8A051F253F89D 7477500CE26CA34C113EA8E81542151F661690643DD52E024E8AE52C473CB336 18BFB41336FD792AF1AE5B1E49B48AC34506982743A0865413A76070C7CB3FE2 693A600849C304EE6A5AA80FA77A7055F3BE8BF321DD1C5461134E1A6E2D8EFA CB5E7F9D9F6D462AEB6E3BF5806F160AB270E8BBE278E41D25CE62129F4D43E3 B166D5EA8414B395FD8AFA989EB8BA0C003D12EC593DA65CC63DE8FC1937FD08 248DD2D2614D1F19CC777C918B217AC747E46E0EC0C4F7CC2A09FC1A002F8562 2B6C8F74E7043480AA032B82AF3D74DB836795C09D37E082BA247121BA3D194C 772D41A7160E807A6397A7B599D46DFAB73C9360EC316A42C3236C1FF444D4D4 A47F4DBC605B23497B97C652884AF98E6EF320A298E24A387EBA63113CF577EF D7695B543ECC92E09672912F2495D196A0355EC3CD7EF7E2F6E03CBC20DFE7C0 A961E9A7E204B869EFA6FCBADB15BC24284662B7E016A763DDDB222804C11D37 F555A299DD4B0890A4F67D5BE319F892A39D4B7EF88DE18E1DBA38A33115F25C 0B738F2D8C3BB35404F620BDFECBBC0EB4C0AD8756905AF2C38EFC2B6D4481AA 22D65468184B4F60446CCB98B9AC390AFE1D3DDB60BCDAF9DD63B77F79D025A2 DD2D8C49F08F3E03D3644384FA5F844861E1E299941B7D928768B7F1AB24C520 1D2D18430D39BE5FFA933D802E1575A47E49D1A26BEE52D16B77F8CCC04DBF92 C270A0C9184EB31DEAE13C94F3F30854414781035977011440E84CEE022B54A8 38F92DA70FDFED1402BDB173D2E7A50B401B418C2EDC7F055DDF6A6EAB2E7615 7334FBBDF36F6E1BC01E3C8D110BD0FF762EE6D9E60694E935B0E0C058B7E5DB 9DE695EC5F05238DE1ACB9292B7582D6062CE2DE7D9040BEAEC3442B34834634 B515AE079949B2AAAC72C542EFEE29C5067F8484337A503D80C8D0B944DCB5F0 95B2C9FAD22EFE585E62A164F4C56647F63B531130C7D1AC8982F7719757FB46 7C741A1873B2C51CF8D1EAAC6158DDCB3595AD4A50149D411360C00E8F3AC109 7D418D3251ACCC0EA7225C230E8E90F72067285EDDE3C0FA9F61F7303E1DF016 65D459655501E67BFB0E5C714AD530825E4FC11E6BEA871BB67F9770921543A1 D26182E6C3BA1C0487AC8B72905D4B53ACB8FA827FBB193D76D516DF6C08F421 A5BBA96EFB376C003083A703EB0363B7A5A57920CDBAF2EAB2F7EF10C33DEBC1 AE7A9083BDE0AA81F6FA0E764CDE48B20FBBDC2B3DF9C42CA7E3D696B97D6C8D D5F966C3F6C6C0426BEBF025C0BD0B7524CFFC369CFA0747C133BEF70F7E80B6 4CFB868F035B376A664C193E1A282C9813B053261E9CCF778C9A76E115C82038 D3BFC7712E634ACA57E92678639B740A6AEE35D23F5A311E4A14749642FA99B0 3F4542988D19C3A6D2EF536AB9A7003AF7C7C2C38A78A3590DAF6F7E9C26667B 92D2AFB5B10853ECBB9557C732865D11097A80B4469A71F3617CFE901D345324 8EDA15197B5D94EFB958E2F137E476FE5A098ED0296330FBFCE5B25D5A470259 99F4597BA48BA977944B053243D80EB1E62B4CCF57BF087B1680226F6EE4D332 CD0892AFDCC733690D954062E81AD89A8AA78341EFA0B4188574978E203B188D 808BA2CEB399FF649D1D48DD04FE88CA9B8625813E1EC4276A28D34659D59063 EA9D1345DF422FA2A9D42ADB3A10EF9A22701946CE8B0FDDEA999571056B7BFF DB12048FEBA7915B26DB94D3804EB2E47218DA62DA15BC418AA554D43762C01C B14087BD0A6031AF16D2DBB332A20DC7D6410B2A6BB0FF8362BC393684752B65 C378807379B3C8334DF2BDF1F52C3FDEA8D913920D3457BDF6BCBC19ABD0ABE2 DF99C90317FA2DB601A7C9D1BB6F3EB9F553C99758E64BA4479B9ECDDBDF05B4 0FC0B0863E01F6441F6B73C4E6F29E38247A74FE51C0341FD499B9253E4F8EBA 8FA68880CC311932B29F4E8763944C7A9C1A8B87A66D82F7095D3B880B93827C FBE23247AB03205757F90D7DA436B536C131F0D46C9D484204D282F020FF34FF 277B6BE009CEABA766F6FE38E0A6F9982353F416D8EC81A60B269C3ED504A9A5 ACBEFB3624F19AA950ABBB0932F38AAA3B36B3573B17F2BF680A32BA75A94935 3290D3B0D919FE97AEB82F26BE2BA7256E49DF6B94AC47470464A8FD9C5EF6BA 9767AE0EE366AC9013E14E4381B0DC960AE96398A0AAC85EA836F46B575DB4BE 989E9F426EE6F63EAEEA62550A50D0E7205C5C8ACFB3A6D8F78B2F1487653437 5B99E8953771540B992986170B6E0CB11CBB7E289B63459296081CFE26A3F37E B958A2B4DAA1A27C9E8468B5285179A3A5D951F05C3935F77CC342D564865148 61B1113A9E9FE1DC5C3EF3A6315955B24907649AE8B4FC3708B3E83D87F36376 BC2FD5A0EE6540E6D5C8D2797B93FB5EB1F835A230DCCB23B41272714AA3E806 2DC00C64AA4F2ECC59DA6AADDF4963B8CCEF4FCC11EFC505EFFDEED97CF923D9 143DB244D198AD87221A05827CC2AC7BEC828BC4018836F196A02656F1D63B9A 4B2C1D4BACE30B3DAEA6CBAD24F519F769A2792A47A9D73DB31DD6F8D3B5B3E1 F3D2E5C31B021CB21FAF97F872002C483FCFB84DB74F1AD0F98F4C6F262BD281 A4B42765331E1E135257AC95CE7B2F7D797B11C025568A5D780B1661499F84E6 5E218914374FF7247AF1A3FA8511E0B19032E970AF6861CBE6A47C26832CACA7 DDA85ECB7AADF175F5CFF28E3ABED33138B140BF10FB7E414BAACF7BADB0EB16 6E37082152E22DB2A3695729447C8AFF7F6D4F61A5910B7558720D38D478E202 29C6F5442058B7FF166C507B4913D7595C86D9E13DF205A98A459AE4F03A3B4B 0769D041E7A894CBAB8231E29766B5F351C19A36E5A5040601EC32FE53F945CE 18ABAFD2C5DF56E9E5DC0DDC2243316CCA14309E585976DEEFC6F24087EA751E 4FA27AC361F211649C81DE5B1B03864C94924C34DB26687AED02B5989E4E3F41 48E01768A16363529DD3866C9761F7E82AF19552D766E692587EFF04AEC3CD39 5D933B704C9433529AA6B9B66B6FED1908DA5EABA3578A289575C56A4D7DC12E 07E4465D9EB35D880C7E7EB69DABA7B6EB1DF57D9076F7D7A51FDD37084029F1 AC76866699E90B37D7B8C0A7F0BAE46982E97EB07FFAC2FE49E674C28CD95BB5 3E22373644C1639198B62F0E48A8C74EDBBBB5EA6ABB42BE68C8EB8E08B408D0 1B6DDA99355AC111AF022B4C6A9E797B94C792A76B6805FF4FA0E8ADA58EE653 67929C5D339DB8359A81FBBD99D6DCE8DD5DEBF68D897E0AA62B27AF6F876A7C 21D56ACD305DF8928A76FEB185CADF03D24C7849E6FE25B545A1C59818DCE065 6137BF5CD35C1300CA330E0431E9FA602BD82863DBB32545A2F556AF2069ADBB 877E819A23128DBA5D5237EB791CB407A7959F66D142EA4B1A67967E8BC25C12 5B604BF61507B21C5D1E47FA39B8A0706CF93DF52083E25359150F2D6989C045 142BD0EF8A191BC097B057398E7686BE484622F8E80D6D6F96E6E6D98CFD5C4C 46FBE997BED32C0A9A762D7C9B5E21E42F325E6A5AFE8CF33BEDA7A4B24FD8C3 4E2F2A02ABD96A29873EF29F19F8DDC59FE67BB71DA722716A2E5781FE233597 6F37CDDDCD90EC653CFD14DDC21A6EE1F633C7B2F42DF2465DE731E333755B85 C6B32501946CD2EB3994CFB457AE95C6039CCE9729D35CF8C94092A8681FEAEA FE654F6B32E7F090721904BA4D54066E0873B89ABEDE1AB33E8CD1DA09242C0A B5E9D562EF215C61E3F07E91FD937F652F851FE60A3AD6CB8490E4A11A9749BB 3CB31320CC9790876BDB056F38CF2D23227DD5C8E89A129961F2D06770AE6DE5 BE319736B766DF7DBDEBCFA4D29149246F2501432734222CCC4FB04D18821924 22FA3E0AC05817B26F41F1AC83712D0C1A513DB51C2B59794341A68B93BB4222 1563F86989A58DBB3F107C9AE9CA65EC662B9F802DAA26DF125564E66F2B2F62 27C0A45F78CE968AE5E15387FCDEE2C104922F2373B49DF44D5D5E56E8E8F648 374E4A41C005B79D29ECBA9456BBCAD9BF8598E7C82DA47620A0BE0FF7E19576 63291E783B079C38EA67312F13DD44DC9663137D02FF005F4F595FA4DC256142 4FB74D479B9DCD6D4948F9D02AA76F16B6DC3B1A0EC73412F798EBACDCE8670A F915157043CF3FFC2A8871CA468DF05E6F5834B3F5B00FA8B60157E7691BD5E7 8404560B45DA751214691EE2C3ECBB5A1D961697B5BAA6938E62B6D5FB4C09F7 B03C7D301315F7F3B6BD3A4B0C66203EA1665F64BE350E1E615298D86A8401C2 9B5507060E0AC70FBE1A807B44AA46426CD3D5A61C6158410AD9D0349AD13C6F C5477F2C115DC9E77B8C473960C18037F800964D0AEC896BAC664B43F4CA5E47 90B83A40D90E3AAADB0C6B694D7F8A98415F964512887A6ACCF499CEE96B714C 16903019FAAD25A116F1D80CABD3F952FA94ABD8FA2EC549E8486288F522B9B1 685B263CD794A1D0CD46FB5A95211C4BD39C1669975D87EA4341B87098816442 A2DEB84FAD43C95578B967EC76C2658BEFD98244F221F1AD01193D3B77841ABB 093255F582107F616DFB06C1282BC908C479A93EEA7CFA7FDB15A59877AAE1A3 D62044673A181C375EFEF9BACD0FFC7CC44971E4083F54897A9D82857FB31BC6 7975A2DA68BF14D3D109A875311F78AAAC134A5E2CE157A0203DAA565CFA7345 20DA4AC1FEBDAB29D4BA1A2CD000F467BB0AD8170ECCB7C8B19F479368EC9A26 67DED8B453AA35A1B3842B4D62BB3B6EFA4F6C0251F1DB122A353856D508869A BC4516F41D9A7F57EC912143FD234749A0E5FCC131356B53F800ACFD24051EB3 4E162C74E0A43CC809B4EAB2421F585CB10157C34D1AFAF627822D788AC8F9B8 D4E22F82DC50FE2D3AFE6905B6E2A816A9D0A1C9E380057CDFD381EDD7BA7F81 29D5290E5C58EE121EBBE886862A99B9B2FD81CD3A0AC96991E364F6A3CEC723 AB5E24969077F127B489FE21CB99D9D7444179C3A8B6586A618CDC8AABD3C32A 13C27002D6E91ADA890B584A47B542EA1F39F2FBE0FB159CFFFF1353517372DA 398BB2EA8C7FC27674BA8DBB1FB792D1CC49F58C2C2CCF393E47912500384A2B 539E0EAC0F22A3663C14EFB9FAC20724CB7AAFC08919638728913206725623A1 D7993CE3A9DBFD2EFB631CE90A18BC069DB72A81CE42F1324C6B06A4F98989C4 4C0A2BC870582AB1DFC4830E5473B30C026CEA8C2C7D1C688609E79C1E5328B9 C0001833FE9B4E46CCC74BD1829508DA93A0A8133E3506E9264762B54436A20A B7B789DAAEE741531062A82B1A8C1510F2B9479FBA7872422AD6C6D2AD8F9AB0 F63F7E1416F128BBDCA13429E7A5021E3ED829317082D101501380FC25EFF2FD 434CFC51C5A2742FF15BA2660AA831819791930B8F35E9A36DB5FC0158F77443 E2C39B1128B641D93A5D95EE838821D4A4D1B9FCC71AB6F8222A30836DFAD511 980B5484B6496C0C0FC50D2F0A2D5C2F92587DD91960D07EDB79D251DB5C143D BB0C0DEB45080BDF16907F25EB2770F22ED84E05274868828E29C3A98F69430D A69D2F77A9A96375D98E1CA81E34B1E8A8A68547245D0CF58597E09279F62FB1 32E064E5D174917F74D44269FF381AE980A39C66E7C5E5DD8DDDB960326D9706 8483D77D25953E6A57641BA51AEC10502736091A5C821C61D6B7A2975332A2B2 BD22E82AD0108740624DC1975F5A72BC0544739FAB2BD6A6713AEFECC4B4F591 79EC7D91A9535433B45422C828C32AD38E75018E57FFBC47CD41A966800E40C3 4F3CB39529737C9CEF3DE61E32933ED91AFA45283AD9789B222738347731F8B1 EBE350321B6F92A561262AEA2A8DAB70DC27509E11106C68A94E0D627933DEDB 311978546436CE372A76CAB3248BF4B4D0C8D0E80B4E4ACD516F5180FD9B5207 51497955BBA21E4004ECEF19783D9C320EC485C20B4D5B10E7384E7AB3E26ADF 754156B979BCBDBA55C03E6787BFB2936054191EE53F463CEFB3AD50732A73D3 9DEAE5512523E71FA201E6634F5052BCEA48C6A090EF902ABD5D62417C3CAA21 FDFBC02E6EE63C221B8D6ADEDC61041F7F7EEE4DB4823F2AB718E6A573EA6AE1 0F9190912CDDB7B7E8B0EA20B6AD731788059ED2213F8080AC198E17875131D4 076B1D246362AC85405079F93C0CA7B1710D2FBD9FD161B1AFA88CB126E05D89 6092AAEE66C4D2991FD8CCC05A5F9BB3ADFA5E6CD41A8F18B45CE9CCF9417AA1 AE6564F7397DE49AE3A29E08D90D9AB23382B9B9297A90D287EF3F541E9B9790 DFFED4397BF9B115E689F5276743CA0DB9A953AE142FCD8CB8F53079D1616293 CD4F0B90EA9A5E233AED52AFF8FD167B376ACD9FB0ABFFACB514A8198E8DC444 8CBE65FCC1C2520C6D6FD34F78D88D2D1049314780DDC2C935B2FBB260284971 A2EC7E47D092CEA1598DEFC33624D6213CE724EA7A759C04B1A38B608F8F0C9F E7320DF18664703F2EE7C60EE98619DE02DE456C6B210F44A35E728C5C11A5A1 F5A6D8483C807A2EE7FC9576A615A8C88A2FC5F4C9D010C12993F59BF2E3079C DF483C3432E71587F2B554A2A49F98D91CADA05E9448A4A85201DADF96598D6B 59C6BACCCC799C54F7E5DAC12E07059A570623496F84FBF9591B5E96731B3491 771E1D2435A81FE990E190FA3004708A07009087A2754B813267DCCDEFDB5DD4 07AB7B7BB2EB66DF2978E27114597BE00453AF8B09C0C9F8D6C0DAE70493A86C 7E0A9FC87686FC22C8310C29C74B46535FEE9AF2CB6E7B5EC09F87994C9BDE45 BFA041201CC19E49999C76AF4D883276052A36208C8C1886BDE066E6F377959D 68516E95373866F20081AABE2EBC0AA6C1639A36F5628FA55FA087D1DE3E7B43 7911B3FAA12F2C882A2DA07C3A3022BB7552164822BB4CC8E304C019E033CA17 45F67D55258FCA6E2DA15FD49938A24D0D43CA2E64E13AEBBB63C6E279DE9827 AB5C09966A9A24826331F6A9BE330B69261C3F3DF122DBBE358DABA384426DCA 103B0F2C077AA5646A8AE4A0BDC673CEC39F6D59D069C803B20CE226289D451A DC2C1B22CD472B935C80698583B2B97C4D495A3CB30A772392C4263188C49894 FB43C38A75BA17962817FB9B37DD79C4B268EA37838437C31064BC025F2F2151 628A347D1C92DA0036ECC44B058BA50A2D4AD98278C5377B3CD61D8AD1DF29DA 1D88874364F35EF2AA3A692A6F86DD1E5BA36B4BFDA4A5DFA77E34174144F78A 8FCB44ACAC0D58E25D25163E663F24A9F4D98BE2C24D77716D86A3F0FB546A31 2D9D3E41BD75C93E38A792A88A85A0E9D0DB2B33718FFDC142926DC1B98B9C07 6532E061A867D9FA221AF167D4F6A27EC3B686731BA25D4612D0178631B33DF8 C3CCD3CE8D7106EE84F14C509AB596D1766F27D9187DEAACF78F129C49E2C363 7AD75AA70359AE45D1F4C23FE20D43640BA9EB15E000D1679A68ED65A11E07AA 172BDF07EFF0EEFB485BE9D89406664B4F1363AF06F2BEE44C3DA4EEB3F435F4 8D37657CCE05E6E8C17006237ADE1D234A6B9C617C37A83C97FCC08A6E679779 172E6CD830051D1E8C678AD633772EBCF0CD7EB7C3194AE76E05E2944A3D3065 B886C9AB250575A51DFED425607AD001A2B21DF924A653582C30BC4F6CEA3D4A 9CD556F1DEE32450E5D5148FCE288D99165DC73ACB6541AA0249CAC58E46F99E D5054B2EF5995C5480D9A348AC48142DB661C3056E083BD186CCC18AC7764FB9 1C24BB7BFAE5D3D42E4DD80F27782BD1521055CC2BEF4F60413678A70D6755BD 4DD917B4DB1A48F8459585CAC9D62770D10F7123D2B65F401ED58115B098EBA4 C2049420BC540FB053EFEDF1AEB7FF1C0F479890A0740FA85B60545509CB2191 022E4F34CEAC1729E3224B4B77E88F53F52B6BEBB68AEB2B559509A04103B282 2182A04C2DEB5E656D879FAE7D064D2F21DD9D4F97B5A63D96B1F47E96140CD3 CC6BBCFD4E79A4637241B06CC2032295BCB11EB0DD36E2E70887CEF851B3FF16 A03A42710E614718DAB4DA34CB4930E6C3C27C662B6DD248F58505EDD9630AC5 556E8D85E2AB640214E6C90AAB7A66612D670A507A5B2C576698850F00CCCBCE 4662126000C2016971BFB71C6A3A95CA3C23A429D616DE9BA1939D7E997D0DBA 3DB42B83E69D870718476C55513C3BCE24807B2A3163AB4034EB98FA2750557D 1525CD375312FB3DAAB84A13F8137173430EE922DEAA72966A95A11BDFD5A3CF 8A7BDFA31B490AE6436C82EB4D6B7E12A9DAD07427E57A8EE3DDFDC2B1A283CC 3E1AF80CC9A4A9C0F28B63EE21747B4913E31561EB56059C04E4B875A3A870EA DEF7E262E32940DBF26E49D330BB7A62FA06E92A8B8CC881889AD8F8FB186CA6 0C60BA667F74AB571CFB4AB97FA3AE24D5864EBAB27F8409F482718048EC0BBA D06DAA3D8A9277FD58E7B29AB7E6FFA089F157B86AD831359A189E21182564BA 610E8BC08D5B408811E2AB6248340AEF2CB60ED7B44F2E880F7E7EFBCC6533F8 249960361DBDCB3497A084A94BDE6B38446C790FB8926F7F44FA70047315FC89 64EF712BCD8731A7214B3E2D3E667B7AA02791A5E0454792F7028B2720AEFB22 53BDA7508497ED61BCDD3B81B95165E90D29D1E58B423281FE2325B58C5D3CD0 305DB75310E0AE6353DB15615A1E3D4896529D57C70EE2721F2C12B22DD6D6D7 5772775C6C80E3DF7166561A8942AA55A62B47BA34B315C3EBFADA97792C96F7 1FE5E3DD952A10C76099D78A48FA037234ECED88FFA5ED2C21F98B97CAB7D943 D27F039EF867A1143A0C9D64F3EB076361B9FA9BFADE2BB745201F1E8CF6A23B 2AD2EED9F403F7AE7C1340030D607367EAF9F815443D5349E71046A3E80DEDEE 8DB2E9F71C3525D68D043829EFE98A60F233328DE98EF20880FDF4E76A37883E E8A12CD1276B56D86153939B6CF413589772F01C4B9A710FDBAABD8CA3B8081F 21880C535A304AE494292DDD547E97228610526C2C23D4D81C9F53B73C5CBBE9 1D2B70ADC9CA0C170DE4FA1DB24F5FF27E2AF75DD73BF3A884656CAE90663E46 65A8355E165BF29BD7E3229002BB2789FB8AC667BF4E1A36CBFFC71DCA934874 69004D3E57249667EB62B54E033ED29A37D4D6300A692BBDA79E3D9FE8D029C3 63282CAB5DBE5CB78BAA50E711F1A8BC3CDED4EE9ABFE81BF5B0082A81460CDD B240C450AF4841609044DABF503CDFBDE97A24D3CDADB8226E12AFCE7A56E56C 3A329E647F06A405EC3A341E5E2C9E2576A9A2E454662D7B4272DD5EE2395CCE 50979232D9C6F0FF244BDF1C356331865B488EB0A5708816FCE0E930AEAB1A7E D95FBBE4D76C587105675EC927F11EE368D0CD9654E090BD31E307AD8E3F7BB6 A37006BB78A9915B881764DA9D66C2EB9E732EFB9E51F5021B7722263A1AB141 02EAF4BC5C15B164C4EA7549C27594E986A9D6F8CD9507DF7FABD2586F3D7144 2DBE81E9DB54C7351F85094B6EBE8EC9F27C2C79208CDCB71D8FBD4703084936 89ED493F8189CC00693E7E5C6A7376FDED37171B6DE30D9102EDAE05CD2E2E0B 42B6AEA7DBCC217D80386C179592588C92E5E3C7AAA1921DDC5A2BD1073B25AB 39B73460F18C5E91B6CD6249F99183468299AC69F47ACFD098329D6E9E0287CA CC98B7D34F8E8D726CCF01E07CE8235B48E210AD60FDA96E8452A9910E8620ED 7B61890493525259811DE6CFAFC1C64ACB9073D15D4BDF254211866DC307B08F 8986A0F171EEEF58BAB4113B2C53439A420C4EEBE5AEB4D60B2399D3F0E74929 3F44ED6DC0FDBE5BA6368A3985E526FE1A3F789BA58C723E5938C0B9869FE0C7 EC30D3544F234D2915BC03824AF65E86A0C79A2674A87FD75C5FE6DBD4B354D6 96EC9C5F751F1CA7B396AA5D3A659D16C7BCC0F032385274CA36D36AA65B4997 5F0A2C548B13EF339654E1163347697926ADF15848EE48C8F45C87CB487C99F4 9E7649798F7779252CDBEA9208173E29D6D60714F18E55F1F7FB48CFBC5C9D76 096BB3A9247B7DC7135F8049CAEE554AB010E42C42E5FDBE6F87B3D5F911C994 E7B51B95FB90AD07D54AB5D2986C80C0016088FC7028FB5A8EB9560069EF71EC D81461619360DE10EC49CD56A9ECACD10ABE3F69AF1B101B6894C1550EA8BAA1 44774795D54611DCB09B3E390A94B661CE5B76E73FD9A9CF648031B331B29640 D058CAB9C0D0C434BF1970072CB07EDB9FF9F2CEC0B16334B40AB8C2E22C4985 CAB875B375FED6B293669B9E9623F80734CE7E1305F4FA862DBCA2B347D17AF7 85A794BC01398921F80039EDB8B783CB7786D3409858C9B23AF13E0A63D048EF DE6C5868452069F07DDB27B240A0F655C0C761176B9562C88F46DA90D6D3F761 32DB523FDB09A70E5294B476157530F45F76F1B34CEE50D6B947C633C5C80443 47E34EA72ABE3F0C2BA915D38F12F634CE52CCB4991CD526B8A10ED5D0818BE3 E0D72ED8B9113828C0E1F36A3FC591148641D57573A1BE6FFB62F9B340ADDFED C40960B788FB3C4C4D9359AE847015A0C725C083747632D68647E620596AF6D7 85828F36D3EABC3BF017EAF03A2685ACD2DF45F4535CCFA9515107CE6E150211 E116E610DA4B5019BF0C8E91F32403DF2C864EFBC006535EFB81716D4F4C58FD 8CB535C18A761A2C8C1B8FA19518F846A805E5115DC9D56AB964294137AAE2AA A331DFBE226809B75B96F396601CD592E53B986D0A77D101E1F4A98DC6AAB99C FFAE180EE465DBBEE6C91C924A080149989CA9F9AD682709C614FA6E2EE89DA0 F29F39C634EC4240549B032E9A3892976E3E5628DF93FB3816D6DB511E596399 F28BDD4102E827EF980017CBA6E23EABE4F24EDCD8B728A8A553563A29E0A4FB AE8788315C7FA7EA515ACD44051376170E24A496EDA9CF2C6EE9A6B1C442075B 6C9D7B056E9B87B19B270A7793A814C7E3B9567314C7248EC176285525B92695 C7A6FEF1FEB8E00CF7E6A2BCE38CE4E3142557BF5C61B43178B965D3A38C6182 54BD577167DB31D5F3C7E5E9331F8D743D92F657C961B5610796F5DE7C9AD2CF 3FDFDCDB74767689748E88566A81C8AB4DDA4B378CB67795764009981761010C 818CFA18C35E39146339EDF4327D7DB8E36CB092326F68167CCEC586BB11C17F B2929D3E1203EC3CC918B3FBB82D276AD8266A05352B4B2F05F1705C04BF847B 9E2B3EE5E6DDFB29BB8D83E3986CFAD1EFD32434BE97FD375D2C70161B8226CF 819B89D4045633B415DA5EF275D83758F1023180646ADCD819EF2A6EA31621C7 E246547C9B492CF616B8E2E3FCFB0D14BECC9E61C71B15E83BC832D0802D165F BE6B4DB4E93CF31130315E6BE9CAE9611B98FA1A2D0A2EDF098B738C9774DC7B 3611DF2B27C567CE36DD5F2872ECC24106CAD6F2138D8AE7B63D270D9DCD967A 61942421183F55F14EE424CF63C13B40CE2165C00852818CFE2CDB4297B8B17F D44F0D5CF6A81991067863345709B0731D0B45DA91DD17AA40CBE50968F760D3 0EDB43C24F10406D4EFAF256EFF84DC4ECFDEB9A6D93F751AE3CA3F1E8A3D27A 23CC4DD0002FA5F16A8C93AD9210481A13CCB3E56E6737AF387DCC05B58CE6B1 5EB7BEC3A667F141C01355F282FB095C07B06CA90ADE8D71E9D1F9C9846C38FD E9598F40C9DF8BAE848CFC4426F81F3C6C61200659F02F0649D824DA6F2E1D87 FC35DD186B10264EB51EB6E52C68409942365A94FED0DA1746B36BA78E9FAD5A 5B708F92CC9B589BB534DE3B1C91714A90E333993513FEC835C7E9E1A02B40A5 E10F9D56463E60032C7F539BA6C9BCFAA7A7D5C3CCE61C5F3AE36BDA33295AC8 C6BFB6AADC206F7605AC974324FC13DCD00D69F19BA2CEC66CDAB61E2CE8F890 F1E0AB251CA63A73DDD60839393BB492EECA9FC5C15890A51451F30F2C159EC9 587DEC4A9D5BB558478823DDF43231A9C2E948C3A4B63897915066C1B6D9578F 910839412C057CC7D241DC17747AEF094EC1E1BD5D9B47A9C13A76D98F8A4524 719D169E2474F5DD18C436D4618DAD870186DE2F22DF5678961A3780B4127641 A21CE0E90425FD69A0FBF28D3DB6B83C2E21BBC6E4AB5F1C84BFB7EE3DCEDFC0 BF831FCB2F040914451A48677A71DCABAD7D2E6FD944B24F6A66330FD9AB66A9 6ADC71F9D8FCDBA03BF1CF388381A4533B4868586CC205A5CABC583A484634A9 FC98B660A99C52B097FF56B170138E4700BF034BD32503FE3C1D2E8D9E99DE98 265A5F0515D4FC9BD1BD12F51BD64714E7F7985102658AF235B5BE1B87431AF3 15164E0F80D847B60708430B97F5A29A9861B65420D02ED5C12F31C3EEB10AD3 57E7B0CA838A9535FCC69D89DFDB778D65757FAFBA9A1ABD80399C9138B1D80B D7C006AC2E46EC2C102EBEECB1623FD2D7E0852AB883217B41519F1F58CB632E 173456F3B2B832F29E946A09015192FB2F15317E992C797DE17DC21F1F8DC532 6F00F1BFF78251A41BF1FBF97C4BCF819B504EB0D8F3D794E70CF7EB96985543 1F0C2D28D81DD7C1623210E54D90DB4A8B650FBEAD8B7BFFA496A7DC3322D577 8415008FA6BB194AC4188E8CA04ECD2028C18554A19C5B22987A261F7BDC0F4E A1D7B3EAD0553745F056E0725D8B9520C3B39969B0F60079370B7F658D2ADBC6 05BE15EB19DD973D531C50911B8DED445EC863143E0E22E7C121EC96DCB6FB31 5FB586A212CD7A886988420CA889FABC5F83512DD49C03E111D137F69C94DA29 F1FA1C6DB3BADA1E1CFF9320944D2E36CBE8540C705E4526F5803A5FC5EAA0A5 449C8C4B05C2882A569A53624795748AA6C0735B3D1CDE3E44987EC22D09E1E7 64A12E44E9DAEC109E00062F52C24806D4B849730C857516AB6D71E4B0AF9F9D CFCEA52A2DE7A80F5B280ACC5316C24A0E19439432684D91FE004D75B721944A ACCC7221CD18B3C4DC7947A772A2AE95477F7F051208A21E30D5359058F84AD2 BE831C2DB70B477FEF5502BFAB16E314912F3892708DCF486BE5B3B4B206C6C6 7B11F798BC8BB67F62FCCF83C4A232915F0D7DEFC9AFCF0BE141F39BD0599DD3 4EC12EF49A19423421328264AB0DB263C1DA7930EE85FDEE2996FBA4F1A14E38 44A11E9F5F2D70180DC09432CF9093107D3101EC96A81F1AAA05A92DEF6CE6D2 096CC717ABD41F3A37C942036474B7BE7B5268A8D63E99B78F84230EA2C70A32 0782 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMR10 %!PS-AdobeFont-1.0: CMR10 003.002 %%Title: CMR10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMR10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR10 known{/CMR10 findfont dup/UniqueID known{dup /UniqueID get 5000793 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR10 def /FontBBox {-40 -250 1009 750 }readonly def /UniqueID 5000793 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR10.) readonly def /FullName (CMR10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 11 /ff put dup 12 /fi put dup 13 /fl put dup 14 /ffi put dup 19 /acute put dup 22 /macron put dup 33 /exclam put dup 34 /quotedblright put dup 39 /quoteright put dup 40 /parenleft put dup 41 /parenright put dup 42 /asterisk put dup 43 /plus put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 58 /colon put dup 59 /semicolon put dup 61 /equal put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 74 /J put dup 75 /K put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 81 /Q put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 87 /W put dup 89 /Y put dup 91 /bracketleft put dup 92 /quotedblleft put dup 93 /bracketright put dup 94 /circumflex put dup 95 /dotaccent put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put dup 123 /endash put dup 126 /tilde put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9B8591E5F01442D8 569672CF86B91C3F79C5DDC97C190EE0082814A5B5A2A5E77C790F087E729079 24A5AC880DDED58334DD5E8DC6A0B2BD4F04B17334A74BF8FF5D88B7B678A04A 2255C050CB39A389106B0C672A1912AFA86A49EFD02E61E6509E50EE35E67944 8FC63D91C3D2794B49A0C2993832BC4CDC8F7BD7575AD61BCDF42E2E421AA93E 3FF9E4FAD980256D8B377043A07FC75D6169338028692CCA8CD1FE92FD60AD26 D57B7519B80A8F8DCE9CEE5CDF720AF268D3C14099498A843D76E3B6C0328F24 D36EFE7F5C4E5B5C612786200C8DE3A41EE5F1FFAF4097653CFCDC8F4FD32E0B 03EDB3E413283B9EFB0AC33B055617005BC9B0057FD68C52D1B0E67F0C571685 767F2AA85ADE4E0104A1C777733D5E318A22A9944336E5B98D965E50D31F357A 8B6EA5A0EA98E1B027CE68C2EDB149EDDD04ED74A1B3D206D471A0C11C11449B DE190BBFEBC08C9E1B7513B43DA3134D6B11A2516E6E86B67F68C970A320D05E 94FEC57FB347606DF89989C33482BD09D011C55AA920319E7B26A205D3D0F004 22466F09C0482A164CFB27EF6ED2B040ECCC3DCAF345B5A73676F193D43123B7 72FD6CFC5E37930E61EBD5A6307E4DE70194E6384EC0D79DB6AD86D3B319A31C 8B0589D0FE28241D8ACE280D0530EE99C80723E560BB72AE9D53F4713181F491 344B06D3027BA4E9E94D4305BE1D817197C54C8FF56CD6964165F6448ECC8A8A 64B48B4F0FD69299A137589E2491A283509B21A3A5772F75B7602A9F60AE559B 07A58436D04222C73EAEA72DE9A5A441F88D27C11F4F91255EFE280E91A4ACAC 1E98A4E5E6C57B9AE86FD218C3CD8F24A4104156A80F13821384E529783C52C8 78B94AB3A0096090867ED32E8A30980E737922037F75F062BD83BF4F5929BC51 CC22AEE2DBBAAA001CFFBFF41D258424FAD888FFF1BEAB796A44E3126159E120 7E4025C676CF94888A1971AEF8B6764B3AF4A92D36FAF6FC56FD049710EE3782 BC2CD84FE2473F133BE03C1346B875463F126DCAB15C7A9BCC9A727D23611462 4E8D2BFD2466600285D79518712B8681ABCD69608E6AA9578F7BD771EC36E01A 5A17BC17E375020ECA59B43790ABEB9DF5F4FBBEF807E5699EFEAC563E1ACC5D EFA336E75DE6D8248E9381BB110884FDC89C2F9A41EBBC9A8A1F98E6A41F68BE EE30E25CA148C1EFF42DFF8C214A6537AB11F260B8C329A4947B5FC8DC9C5622 4DF7BF4FBFB00380D47BABB03BC30627AA74103E553F55278F538EDD8C1E64CE 0F1398CA0AB5A86630139B4A7E8FC02804CAFF3830114640AE50D2FDA3B561B5 C63AD7EE3347804CBB40FB1E77A6C89735DD870351C3A1811591AB493251B904 314F65791963C0412377C1D02362C5E9655F1C3D4803CD379A8EF24C48218C2E DF1165840462BF37DDE1B8D5FF09FA2C3B261E2F1A65ECFBE5D4EAD43B52C029 EEB3948CB8A252CBAF545C8FA1C31E920E23A12DD7222CEF2D2A513BD758EA13 DA33BF5FBF1D734653EB83DA2D374A5B9A0CE316F24EE375D6DF6BDA49954C2E DB25A88821193636119D469BA66E5DAA9C92520FD4F84426A4E54273FA469084 7517817A6EE3E21176D333825E88046F50B3CF6938AF9BA79A2F51398239EB91 1A2D07F7FCD948427FF62F40FF95E39FE1A1AA8451411563FD5388472251C155 69BDE9283B41900B21EB1190D06E6B13B7794FED020D2C1BDD205AE77B084BCE EF628249398B496DE85B406FC2E1939EF00DFC84C07E26CF72EC401BAAE756E5 7F6673216E7560D1C2A723CB405EE5CA474A07F61B81F8836482F73DC9516D67 CE0CB770EAD755B6B356198B4B97EBB29C63456953270CCC8D5650C1D006E69D 38DE2DFEAB27DAD50A817F0D645D30AF5B75A7B53CBD3D2B8D87BD0A7E525AF3 22F7ADDFCE31716914C2318260C2E2B4664893921B68C5A93334A361D94A759C 0D7B146D6FD94F0442D672BDA0F6432E18F3C5DFA37ADA378D95B75F413C9ED1 BB5C606A3EC7DFB3F796F59B0478C13FD1900381EFE0BB5242D5B5D34D03AF1D 4BDC93EAF8020E26CA23C8B0E7DDEBBC6762A557067A4CE05A524188A8F02E2F 3625DA38DFCF381727887F5646A3995A8A38A5FB1E5D5EBB395FDD0B7C8E71AD B48EEDB62AB2CE99D121435EFBBFCEEA69AE9ED8238B60CC7288DE33C766CDFE 15B767B4AE2E6CE0965E77272AC9F86023DA620548CFAC85BC751C44218A29C9 849F1C2DCBDFAD895B54E51A569952ED50F82DC8A19F367E7E44643854EFD6B3 FCAEB04E55E4661C82D31E2932611748480EF61FB2FBFB0CFB940BEA81AFCD84 4C6A6332D7A600170E38A8EAFCD4F93DC153C43175434C86BC747348FAC61B76 1FEC9027C1A193E55C80F1F20B5317AA0A05AAA36AE235F6E49F06E570FEE798 84857D7552EA92EF3EFAD52DE39C2F8F43C59E3A957B7B926FC95FC4B60186DF 7F3523EE2AB74E294C8C4BCD8B4975E84849E0FBDA6C0B0F24A636DFA578B122 CF97BC5089E21E9F5298D1C9F30CB8BAFF6A3A11BB4D9A0A5CF2B18D055C44CA 4FD4D8FE1AF3630907DE7E585AA811F9CD11FB2C8FC791851D651009FA5DF20B 3C33FD2FF848A9E3F5652BD294965A332DD3F246C91B0ADA34017FF2451D1394 F9C3C95AAC6EC8062BE98E8914D51DA6A164AD13938693D446044859D03A949D F9AC5DF4A000CDA98BB516D762CB9F6D44B5268FD0C26E88BC4A760C0F75A140 DEBDECA4F511128B7D2805872160C55236F0A0FA7637FF0D4E94AC079CD3C8A7 D03A5A56F26B0438B577C46011A10532FEBCAD14FBD6032E224F45691A726886 56F305231EB2FCDF59C8BBFCB5DBD2D093A0E84D62AC93A2312CA69295E937C4 8DBA1802B85F54B5E7E6D6216A918F911FF705D3B5CF055F1D873B96283A0B53 59344D910CD396D883F6F7836BA65FAB4393A773A8F6BC298069E5BA38210EED 49C9D920F718E3FCE692527DC7CCE6963BF744F2C91BC5952564196D60574E86 87A0FAB21F2DB2BD5A51D7FBD8FC19946D24E5A228462C4772F978E650ADCE3B 8D66B9C21279C531CA1C3A8ECE3420BB65837287A7222CC3673A2A5F8BBFDB60 C719CD073EF9A23675198462C7C87B24CC92D6AEE5C25AC63855CC3281494342 D28F3D2FDE0C183486769A4FD5B0143193D31FCB2C2A14E487BBD96D0BADBB64 D1B56021C363A795BF10E2DB448261C363A54A4AC1182B470C457AA82DF3F5D1 F4B329806141EBD53CAE309319B94133D7EBDC2D0453A905ADD207364371E178 0A95C2686E3B34C4A978BFC0EE968C39ABA00889BC5149162C2B54483D44FD3B 5CFF41F611C7E03B94945F414560E874D7CF27FFD0630890D7D7EA66CBD15448 229059E1C436BB33D69552B5367AB5D53591C4678D0C704DD3EA23F5D9E8A7AC 17D003C19E333E726FFFA2961F33C70F429085F7BFE3E2510F59B78F58B19CB4 01B48E184BAD9020FECCE3AF52048A056981DAEA02AE78197E65855DDB170616 F54278395D9EA50DC83761AE759F9CDEF9E1948E7002414FC05286ED793E6662 3347F2A9AF8917493D7305B92CF93E8E9185F70015F5594084298A6C2F9FD3C0 689F262AC9FEDC9B89577ECDE92F08D3142209FBCE7B5C0A840CC767BCA56C20 4E4E545E2BE4D21C53855CEE4CD0AB35D1A604C0FFFF77DBAE4289752276559F A05FEE65F45ECAF44E95E23FAB6052195C7948AF0B1126482D4E02D72BF8AB03 DE0F1A632F7672AD9DDE70EDC82AA993678A82BEAD0BC2649C4707FD8509810D 364B5C6FE0E10772E95288C622C2F06C634F4DF8C7FD1432BC9310D5F24FEE3F 7AB324863D6DABAA1576E70643CA79EF4D7DF4105093D66CEE0F3B87D2164A7F 26EA05F5C4645B22D3E1BFD2219657712C168FD90DE801FB0F32759E80DEC1E1 43CEEB19FED12D757205043FC98FEC62D6A8D8B97BC083B4A0E985AF7850D6FD 8716B9957C1C35A0675BC53DF672C425C79F43FDABAEE7D63F092CF271C9A9D7 C41F40C4189510987887942E60A412B3EEC84C9A6E1AC7D54D528F5604B72C08 94B7882621A5BF1F325B92FF96B80878CC550D1AE4D8196E41CB1251856609A5 C4D3BD05A922D0D45E039D9450DEF8490A3E924E41434194910BF60BA1B08BE1 B41824345627745541A4F1703E956328F6227D11C74946B38CFB096139979E56 4E723B889B44C6D78673868C89912F8B4F0B4B485F1587A637B630F92E6072D5 7F3B44EA6FD96BBD4FC28A6C1D90805E3BE3E42A7BC9C880762966C55BC04E01 204D083AE976FAE6F37C94F27E68F8C0F28D52B17F6C0FD7C9150701FD78F8CE B8E8DC9260E3974005EB5CA728171F482D765016C94D4ADFE4A42EF42212BC56 7E4EEEE8B0D2A7856CD4E44F55C0BAB762F92CB8D64C17022D4BF3A47C12F5E6 279FC23101FEE93753653CE8CEDC3B75C9CCB29BF1D4554C6120DE8EE750FCBB E38B5D915206974962E320362E59B3F21B3AB1875703191043D03284D4467346 CFF2F98CEB4845B73ED8E003E0DC94251B73E13A9B51A3F1430BCF6A21EB9B7A 65E17FA411F53BE6432F1506232B8159E008FA257F884A4A01AC53BE91754D78 BF14A5B0FBFB9C31BF4908355F8A762052968DF526D118708CCB0B7CB5BEE285 6DAB6CD2E3934178E60BECB11AAB5478623CF6C50C92F8BB5D1A583609028FA7 B8A53B791BDC9EF76A124F3F7641857E4BEA0837CB36176EC9A522EA7F41B8D3 63C37D1145367BD300F17B54522A834BBB74DE12BF9EB26ACE6F24A046D58F89 4D4B7DF74875F1A0C1C9D97BE0849593D7B398EB4B00BEBC8C8D1497B6EF831A A35380FFB7F1AFA4D888AA52C9482E8B1755CC209905F98F40D95B44D4DCBCB6 67423D1BC2F3560FF0A8B4F0CAC352A4EE2C1D946E45AAEC8A6AD40303F3382C DF0756BFA3B1ED64C169E56ED1C760F2FF0E24DC5C9F41306EF8D2628153D30A 5DCB0791126BEFD4947D7EF08301FE015F2B0008DFFCBF9F2D4D859FD43EC7D9 C5BE237E9BF6665B7B1BEBB362F0C0C3A8D86010B9C97FA741C97C2E0513386C 9C26C235B14DD2A58BFDAC7B5F63DB4DA6D5D37D0098175A9071590E1DF66A3D B8173A047C29D7D35557F06132CC920B5460B8AFC11D23D09A4E45D089F5EB51 963FA1A6256E359D485107FD143B2BF21FDE9DA5744BC2615E86C31C89470CF0 D06C6397D9FCCB316EA9989430240759D2C4945D941F159FC02327F34B042BAB B5C3A47C78E8C1A6FBCD396B1A51CC4B020B8AD401841EDABACECDB482D6EC5B 72D2BFEB4556720FADD49D07307C8B22ACB7E310CA4151A85C71EEF70E8D15DE B3B00F26E0E166C14647A65ADA228A3D1C89025BE059306565DB1B1EFC37D358 8C1EB024254AFD049BA977BD4C2C605050E17940A89D0D4C5D963E792320F5DB 3706682E03D25D9E02487247819551465092CC22B6B56E93F3AB528038FEC3F0 668F866707A19B0463BE706EC729D2EE1653AAC7E29BD25BFB3241D4792F5152 ED415B4E7FA92C2EE5A22E27E8B75542C492E56D811C192E95542A6FE0BFE5A5 69273C2ABED4300D491B92D2AECDD278404CB84B1BB1BD7AFEC858215837D118 C0E928BE7E07CFEEB51A6D21375B772B8248C994564014015232A0DA4BEA1754 3274F407FED0837A236371F1A32056240F2015B1E7F4B2CA72C6B58610A66F13 407CFFBA5E0A2893C1F572D50F51286E9133B5A84239C9493B0574E77D281D01 11D00683354A000C9700EAFBC1FD104EA19DFCB87470190E7E2CE26E3A6FD0FF 2620B87B82AC8686B6206B530F17E9348BC7D04B948348802CE53A312443DB87 4DBBA5313A6A2A8DAB8A1CC9A594FF8C299281C0A261C8CB2226B732FBEEDE40 2C6ACC74A1A61379E2E1CD5548CD908268A32FA83D8504C442EA0E183ADBF7FF 9FD09C037AB03516ECCA93FF048235BD11A25DB07F164512A079C5392AC7F889 CE96AE5C8D9580BCAFCC087C35E76EED1A671E87C12E3045E15A687134736DF8 DA984772AFD189D68571A2ED7256F1E204230E41D3D9DD876F938951714A3973 0CA9310489F8E807C1C7A4E51AEA5BC030610A5D7263FF7E0F9FDE3E5E37A362 5B919000BD94D978583B942EB79CF2BEAC33FEBC9A67272EB10865BA8FB75FD7 9D280AB59F91B96C16C982DE848D76D8FA8620DFD7C80B7DEAE7264350D6FB3A EF04794DA3305844A7CF718F6D1A4A3AFF6826173A076A1372ABFC54ED3AC6C2 09C9287FC830556CA694E21CA5342ECA7B10C90AFC4783D841D7B1E34FA3DB7A 2B706F3E21B0FBAB23E7257962FC3BC309CEA2C7239A9D6B44CC96825115ABD2 AF9A2566D2F3382C01569FBDB94C8D664A5DA0F7DC3DD140CA77C743D7BC1420 324ECF9E4780280EB119885E96A6C619CE3C0C8E1E264E2DEB137E5DC8149786 486D65667ECF47B1A1E20E9E6E4FC8323E0BC8E61BDD3BCDFC6575C69C03E31A EFFC290472CBBD049DE3F840AEE37A2486034240F80E75D8A79E0762377DF660 52B12EAA16D678990B11A9BFBC03C1D4FCDA9FD4FFBB3E88352438102F10B7C5 9F04C013B6575B5E948FAB58EA691984A0E54E6B9F3F505FFFEF74D06FA1CDF3 4B8A95904C8A2763AA8AF5B71D00F5DE09DC1CDF87A08B6D181453063E14C12D B7BB3775A6E2A901636273D9EEB833EA8CF20FD83AE899E28DADE10EEEC20BD7 BD93085A4B1AC80AC1AE8280C14767F1A487BD066007A0D050317BD081131A14 6EA0898ED59E46DA7B6254BDCCBC660686E2EDA0E77A705A653733BB5C5497D0 B130359F866CF293FB6EF0C2AC5BAA2DB0DED045E2DED3A2612D078333260359 16CF0CCB272D34767EA069E0F0B0D42327A18529D72E890EDA6195C2688438ED E9ACDBEED41E81CA8EB5E43C2B09CE266EFCA03F2D7FF57F12B06F9E54FCC6A6 546676F6FFC5B8B7D3F0982B6FF0D21D949309F0C0B175CC1D0976F8C55C6AED 6E821C39041E22D91AB30922F2B2EC2746BC7DAB484991542FBC82D87B487507 559AB466F73EE23C2D3194DC5CE4C9AE66D3164613AC5CBB3DB501B64DA7C91B C7ED2EE9027FC0906820B35D4F2CF66C4F9CE4A884B7C07155BCA884ECA5EB3A ABB83F84DB1F5639599DC7D3F51241AB5D95C3BCB7AB1EC90B4BC989F74FB354 04B2D7366A34D335A47B8C00C05CB423482BF6C7970A95545424A08AFF9A035B 7F83F52B65A9799CE76E303B85664B624C65E9CA58184C7BE2BB9D9C86A4DE5A 8165EE3DA2E652B5022EE7893896BABD88931DE1D538F615787645DF5ACBBA0B A8E5B899A37321AA7D4B283AC9234978C2DD81813A1EE5DB6EC170DAC1B6EF02 94892635B498765C07A38D2E9DB0B7581B11056C28278F89B0E60998379C07EB C0EAEDC32AA69B8B836F92A61AFD35688315B2C3F860632FC13E4BDFB63214BC 41CC6859EAB3AC3034449213CAB99FA1D216563419CD6D6CE4E1B56F33E6C654 7AA9DCB5B05FC068DF02AC32408C8010AD004F6CCA9887830927F8CBCD49CDB5 18CAC1EAFF815FF2F6F527F936948201565003022C6C7390B4E3C2B219FB4F76 9F12BD25CA7B3B61D1A2F8DFEE795D04D5428B42FB66E0C254AF7B7A10CEF7FD E5ADA5E217BE24851180E9A1700FBA66C7D2B0D7BFDE4F4EED1D24B821A40947 5620363657F6D048E651A689822CF815E72FC8AE9D835BE31D1DD8B54C9A717F 4DC319B4B59AE073936EA40B070524C7E71D5A7B64436DA107749746B516E29F E3BBCB8F8C473E706670E11E5B221716F315FF097CD1841D0069FA69EA1898FF 9F9EC2518C77806A19730C97F54BEAD604548D553D4A6EDB247853225E24E7E9 89D71F6BC94DB986467E755CCC99069B313F5745B02B4BB608A39F0A0A732B87 7EA2DED68219754BF1FBCA350327572D769C962EF9242132D93A5C8E9725D8D3 AAAEC15ED0F362471AA58488620156F3474FA59CA080EA96FE995D2B3DEEADF3 3141D157481C66507725ACA5953CBBE1ACEE7E3F02C72C6552D15EB3D612730E 61A06A43575568DC3CF3844BABF04CA767E2995196097015E0C4F622C4356B6B F41DBAFD797A4B9D7AC22332C552043EF98913D0D9B50CA6B7CDAF903BC5C04F D20A952BA5CC35B646ACD0A287C956B98C450051AF6AAF79DF37F8954473F8F6 652BF03AE2AE82B99D820CF93F5FC0BA17EBD7AF90313E70594EB5C354023BFA 07912408F1757319C7288E99872B907D5AB583B082EEED8AB079C63E38B07D11 6744856E689A479CB3A8BC081F33CB06755926204981DC0A45B3ACC18F6865BB EE2C50DB43B62E3630FC1D9B1FFB3BFFAA6D0A20C0381ADF48E4D916BEE85BA2 BB40F538F55C11D50F882B73913840B45161262BC8B0012694C3EF26452F9B77 2CD7C7AD6BFEEAFE31C8A721C2D46AA00C10681BA9970D09F1E10DDC250E2AC3 9A160EC8C9654FCEB36AC2B586E978D54744FC8A0E963D8EF6E228ADD22D093B B889C940206F504F14DD921D909BE06EC9BACBC23EB9E9D137FBC983570FFD2E CC5D2EB5D2A4A8604A4AD418B800EDC6B89809E00091A2315EA8C071AB631CCD 04C3EA77541646B7F9D70B7EA564D92A65C4DED8966517660EFB9F77E172CD8F 1B5FA83270898C3709DE964B0C4A899418435F92C13E94F5C1C5B9D7DF3E8793 5F9E83CE1430E3EF275A5169C1005B864AD5B7ABD694E7D77B43D157B6070EAB 843B16BD639F53C50A48E040D063779B47F67AF0E115947CDE6A0C9DE8196D3A E61C1A57B150A5B386F71C863ECEB8ACAAD9A9B92C336A7B118D8D5B1FCBD698 2637028A7DB25D4314EE94974E09C2413E9C51A2504CF5B4ACDA26CE82FD1900 CF01D52F946CDA5F6434B8BD541503B1A1BDA72225592CEA5B55ADE52666C150 B0FFD1DA9BBBDE3C40E443C917C0A91444CD19BA8FC48C88835F09F35C6B43C7 C81B914BB437E99E48FCEF5984A0E10096DE7CBD0AFBD750D7BF11B5633DC364 6F547C1BB5DC55F4F2108D1ABAAA7CE8CAA45AE2984FBC51954AEBD3D188916B B0C5FF9339A80310E4A90B3E8CD587CDABD9D54EA413DE4E7B777779C2022362 96A9052378EDD3DA31F05B94979170169F1B43C60BACFAD96C76BA86B66DC30F BB57A48CBCB99683368A8E087D65343CD9DFD9B28DA91EAA3BC9FAD76337D87A 047661444966D02502C915E2823AEAE71C7640BCC8AC451239E34711D34A753C 44D5DD5647148520F4B28C97D8FF00A10B1D34592A32E90CF70EF4A01F9CF8AC 5EF9C240EB792EB337DFED508E5C91D91A3F16D2E067208120CD058F4EFB98D0 3C634F3DCF13881E7135C3FDC75362064CBC02FE1DFB6F49557DE90DE0C12A1C AA5F609267E04AF24404E050CDB6C3D6BC5DDB715621D4315D4D30E900EF3A5B 03D6524107544DFAF0ACE84F19C2119ED9CA58E88C81FCB5C33A327A8DA8CD1C BC87E83C7AEA2E430ED13B6F1B9E6045FA02C88B025D5CE7D6D191883B928672 AF8E7B0467A90A15680C1610576D93E6492A99787D4E0D49A5306DB04502D5BA 2E9DC1DC55365D68F27B9FCC33D55FF35C41EDD546F479E7D69B54B3BE72ED0C 62C80AFB76758B53337424120BBCB1872EFF9859B2BBF5F9B82BCB01902D7268 65B72FDE5A7C8DB2A7A03C9E8646AAB65F552E9342902FFD80972B325816F999 AB36938B6B88F8D84CE7EC8B95C459191023377A30F50EE2D9C8C41FCF685389 1F4BA89C1547A41B767259CF565ADA5011FEA13A782B5668D9FB215FAAFFCD09 DEC9B740E2A86055486476BDCF80B61524827F3870095BCD16CF26E00CD6396B B45F44BE76CE28AE3DC8D7BA4181106C9C1CDC7AD5A0EB51966A04C709E61F83 00B5BF8D4BE40C36AB5AC1B1AD1EBF980096ECCA942F2AF8136D70B78DEFD4E1 D59097AA1AC1D5C4C87B5870BFAECCC6A0737B6840DD148024FB2170D6B2B5BB 595517E22D52DA45EA252B5451ECFCA7EB8C93EF02E633BB56EA0B1727F613D5 9B4FD6036DF8929437C666E99131D128DB37141ACA92AAF934839EEF9F5C3F9C 1E9D2837AC8FB624CB271E530F17B048D5F934748C1531C15276590ABC4663EF 32032CD5D20002B64F49688F9FE88AE9D411596960C5A566F79114BD0374A7BE A5B305B1BCA2F2E37CC25223D2E47DEDF3718C06315773808D3F30F55419D085 FEEC2AB346696498E911D855A87CF141A4F54AC20EB75E7EF41A4D5992E51666 85C3FDC27532C9C11F899B3BB65867B929A093D71B98DD6C57621626FA4AB3FF 004F9290CE0383232143F849713BF232F37CE6947E4F61E7EC67CF0689D172E4 4F4904B8067F383C6B8F3164795E36491D94F0A487F9B4CD388958C874CF7ED8 92F1A55E037E39FDDC7414008661EC0DDE30DC291D93A30271B470B60FB75F74 913724D73B1079F7FA07AC48FA34D3BCCF435AA6701C975C2745D46E9BFB841E FD2393734F99B81B13D33D91A463A0A7EC240177392F60E826BC123684FED356 959CBDD22B57169EAD82F807CEE69B5523212FD125A6023C4B88777F963E7B95 F45D17A13C41C69F3BA48249ABFB5B5A0B823E2AAD687852FB98DE11640A9342 23A46C18168DBB0A4ADD4F4245DCD8BE40617E42D59AA5F34150729F1258A6FD E68672554A6F152ECEFD4621C895ADD52C206F1EA8DE78580D8CB49817539090 C1ED6B5BF9F0750DC171A73D1C8FC7A1AEE0A56BE808D6CDC7D822A920A91E4E ACA64086BA62D6C36EFA1C0316E0640F4BF22DA41325876BF20CC62995D43756 9345F676ECF89A89738AF302FE9238C42FB72B3FBB389E5B0D0C6A44B3025DA8 28E382F7C728EA2757F34ABA4E91E3DCE92DA8F3231CA6D86156AB372F1BBFBE 9272799EBF4C9FC600AB3CCFD6D4F314B4595C18B7A24B58F3A32E102E245A1E 3B4BA9FC45968F30D3D45B9E0A9745747E0FAE6E4942AFF044845F16B02CDAB2 34FEEA0049DEB4520AA0C29FD983EB2AE4BF2323C750C674154CB22304209F30 FED66BD9299101AFAF200ACC9384D4E6FBD48405DA464C860C3B015A306F1EEF B66B2CA786FA1D6678376BA32ABB58A3B89485A5E32ADC30AB11ABF593EAE39D CD8D263C9A3578EF055D43C9234B4B3B7961171D67F87D2F8DBD834FF1E9FB43 E654CCBBF4D14051EE6BB37DAEEA82881A909ADED8CF71D86F6321DF5D4136CA 42F7098EB04C36023F571B855339C3006159114D5D58C58CADC62E4F31EC6785 7D585ACE25A1A89240EA977FA6CA5F47827023D0FB668FE30A6108420F045A86 9DA29B49C2FF1894F73302D4425B1CF5565A0DCA7826A0F511381320CAC5A1B5 A433989251F163F48F0E53B6E32E8071551896F2BFDC6EC5CCBDA463F3F2DC46 DD4CF8077DD54F7BA8C674164312D79083026E4E0F84259EED363BF789084509 58CBC3FD7EF650C5F47ED7F8001B7185C04D031151BECADFBAF2B8F2B50B673C 69541F159EB60B4908540968260DF02B8583EC31F39882E6E81911419B3D51D8 BBDF288FE7AC7559D8CEC02E259221D66F223A6ED2EAE1A36DAF24E051E2DF07 AB444174DBFD566D2CCA1E97D4E38DED2AC8374CF75353E175546AF3EDE43B35 79AD4D1AA767FB31984829F71761B883DBD39DCACAF6F08C1C16A1EEBF1C9E35 81F9A9A50CBAF55D61D0FADC09E2106A8658018111DBABC2472C9022E32CE054 93847D893790E845B809F2ED78ADED5AC70E49CC26E2AACD2A0B0118CEB771D5 46608D763570BF5120A0CD1C7FB810E57E992303F818258EBD0EAE00A3CF0A30 D004A186071464EE07EE936EE644F634FC4E903FC910C22D0F098A4AC2C8C6CD DB16AE3DB4CDFD2D0B45B670FDAAC8CD8150802E397A002E6E10D5505522337C 7F6A820DDA476D33098383D12D92AB952673F177A238168FD327928052B0D981 F7703CE2AAB392A305E1648BE88B5B3A58733804EDFE67DC9436FD3D12A41041 56A8436A56F800C6576B9697457E6F098F93A336904C322BB196E5605D7BD7D1 089AE75E596E08D144D08B34A2B5DEE056258AA295803CE0C45220ACBA5A4640 189452E2D0429A2A9E1CFFF12053445D6FE25B51CD9F07BD438382E9406A6649 B98ACD98A7499DDC8509B88B642CCEBF3BA5B667DA575221F91A0181155AAEC1 1229708162E175E86EFCBA5B77F418D4A2A876EDBE85632DD122067C92094F00 C582E7F48C34DE8B5874229192430BF5E63DD8CD3EC75326188E24F5BC34A9B8 6BC3DF5CC35CC5AEDAE190BE782E9AD83F57F39BCCA255C17323912234DA320C BA7A7951CE86D4E2DB76077BC72103245B993F68ECE07BDE489BFEE038E500C4 AFCAC36E1C7EBC14B4C59A1AD1EFBDF8C1AC247499FFD5CEB461FB5ADC1C1DC9 E4C214326C3EF753F804E335F3DC475FE7189E5AE5BC49266491D771B345503B EF36D63F81F93E257D3852CEFCE83B2032266AA7BBBD271AF1B6A8D13F6A0D34 2715E7C5A40E6CB11C31D9C26C2C0928A872CCF2BEF0C8449BD221ACEF728264 2DBE1931913E937E2E67723D5CD9160D6800FA73D978EAB02CFB8E6044E309C5 8AF1F30F8DDD0DAFD15A23647503A4C27393D7AFF5149314E37391C0EDE9EF97 5D15EE7201192AFE1D5D69AD676FBDCED62765E4D52FBC3B768A8FB6611E2097 179D2F8466421A8F3A70237FEFE7AF8BB5042264B6E07A335F25074B68019136 7ED26A0A689C6F5F5704A331A694CD19F12EBB16F64AAB9756C5E10B753BE80C 567698C7237D323DE605D53B513E967C303E570254AF4317D6A3C034771FD02C 7C4E9569AA1EBF87F75FD4FACE6AB8A46C5A7A31F4D962275C90080E783C7A56 426E4F0B2AC5312E8CD308EBF48E17A1D55EEDEBA0A9235B9B13ECF1D03F5749 82EE612C8E72706B290B8C9EA92563AD473660C6416B93AF9D2314A03AF74172 5B3398A243496E2B8667236850D34F9107862710066B5AAEF438748E314691F9 8E8E954D297432F49BDEB64EC77F5542BCCC7D3A683705F05C752E2CD594D05B 15173D5A85A7C58E0A058ACECD87A377ADBF20271877738232343CF3F0145748 C8913FC00A089F58788F4E68833BA0D64D1D3367849BED9A5B87EE0A257F9B69 189FA89CD86B363FD746159C6CC239B7453F4033E429911917E07ED917C68EE8 A37C569A4DBF140B80566568B6BCD6483AE9ADC39A0CAF0B2941AF8A11C64787 B612DD3A2FA8AF15665EB01F0D51ED6C3B5C2EB58FF2636212D444154FD5A7D8 E671EF68C7F3ABAD00F6B8B666924FB31C5AFE1DE505CB2A3442BAD0210F1F61 98FBA48564E7233421FF99BCAC2D5483E5AD13754BDFCB339D3194CDC6315077 18C732AFF5B65B71A4680A72A9B058DD3F9EABCAE70FA5BCFDFE48BD51586ADC CDCE052642CBA0F06819DDBAB360E0C14F484EAB63D5191B658CAB5AD61828D3 A0CE95C522541E880CFC7FBABEF437F3B2845EBFC436BE8F9C63C67A7631123F 8519276EC4AC5EE6B7DDBFD6DFE901A678FF94EB1B66ACCB0BBFEC20049C15D2 285B0F8FCA7FF7BFAD042C34F196C28E966DBE07EE7AB9FAACE23195ABC45B22 E86F33069E46F3D95921A773B10DA74E2876723F4440533E7B8D2198C0757752 EB9720EC5E4A1302E4B6910AC28973985EA8BB3123DE34DC05459B6242C1A89C C31CD894E9E79D222450D2271EE74FCC797FC6E337BECADA2832CBF08068553B C390DD286D67520A5BA31E4FA5C7BC69FE11DD18115AB3D9C588296E31384CB9 0758A21F64C0B26A798BB4E7553EAE988F74C13F38BA26407FB112D04726F17C 9895AC6695A81663D3ACDD0FB579F0DA6E2C0C27FE7801D5AC3A27EB6A9D828F 6CC9D53484DFFDDC90104B7D82981BC81CF70BD01830D0172F697E1D7C26EB63 E6DBCFA11763A813CEDDC20B1416799E21930FBA8D9C9A1774683DAF9F8CEB3A EF1F6C7A635308AD334FBDF5B4B360C6A6602C3CB13BF9D41FFA49D06B5E205A 283B93847994404C5A327078E7E1F3FCD572873727BD0F83D2B1310039D88441 6BEB25A0DA44351DE02EC20CF557C659F25F551A645F3E52FA2A543D122355D6 1795F465CA8CB326945BBE370CD8BC001ECBFA7314BDDD917FEF552D2E8DB7D5 9BB0EA11E76136A8BEE34272123EE482717F07C0FA0E5FFEFDEF88F074152709 357BEC18E04372BD2059519586DC5291BEAE8F8F2E4B3313184B28DCFFEFB7F6 941D8118A0C001B61F211590E0AE899256F7F7D1FBC0E60455F907B02ABE7CE2 BB7147EB5190DD3491B307DD20A22E8BB63737B116D9082657BFC8D4F71DCBB4 9C6FD2F4F443ADB0A1B76F35FE4DF977B1F6F1B87BCFD236DC8A4D94F14FBD18 E777F7286B6F6140BFA560ABBAB755DAE734DC22F468EDFD5B707F860F357DB9 D506BE97CE85AD731176B89C84400F9AC9F012CCB565AE73ADC4837F3EE3B441 504483852C2D7BE7BD884A4117B54CC3F3D15CB9FAA111B0185D774FC1129A8B 2BDB0321911EFA333405ADB307F40C6A14A5BDC776A416991959143971B47DFB 8561AF7BC2CD59496852D08347C21FE5B9FB6875D7AD09D13C9219F7EA9E3D9D 1F4CC0730DB03ADA622327CEE9829A9BFFB9112CE8DCF0F443D96B6D23EEEE50 771D9032DB8FF7D7C30786E557F2EEE0B8F5D9A503EA827BFA5875AB920F5315 AF2370D59F5064A7FD898EC3ECCF564FED91AA957B94F57B49D80F976083D61B 1EB14E6A54A4501AFBBA0F7AE077057262C3F8F368BF2C85E412A0402F48CA6A 636CDA96CBEEA3BB38750B581272EE992DEE58E5CE6CDED5E004729E51AED26C 4F977E797F84ABE62BC2D11804F8DB614521A7C0AE0E25A5BF2692D70553B4C3 A6E959D80C9D210E917A5C64FDBBDE5D3C9F73EA06CA14C237708B0A03A6D503 7A8B2B938AAD4FA18DD3EEADD41EB44E2FC048EEBE987FB26DA3444238CCCF49 53B92ACC99EEAF3C927986F077001F5347EFE71E30C4DB0F1587A6A9FDFE204E FEF3DB697024F81DBDB42C131EE252715183B7D0B21937087388238F5DA5939B FA435FE5BB50EEBF0A239E1CAF4AC943DB0CCB30096DC141BC1E08A22C0E5258 CEA66C29BF916CCCC2E1216A2FEA31E90BB97520A9148109FC7CB1964BB5922E 72339CFFDDA720A55781B51D90B03522EEB97388121C9600B056DF33F03CC092 902A380C7D1C6F2DD09DFB16009E210C3F02679CC1FBEDBCB339B6D259F2E8A6 DC5EB9B67E00A899DDA0E6A1CE8240069439082599BEC6EED69D0D8AD5CFB59A 0F5D980569E506A66DF807F6AAD2DE8B745E495B6D7B5EFFA8D2E8E09B567BC5 E2EFBD318D1E62CC7B9FD7091A02A4A7AA475FCFF49B3E7509D2D288964F930C 3272AD3E637D4A0D1C672892975660970A7631CB114F4F7598980193A36519FE 9B0DAB3312D0AFC29346B4DAA65E11CDA16CEF67F4C146A19F123DEDCAE24F41 0F45A2F246E17077012B2206191C36D1CADEAD445BBE7096AE246091DEA5A9B6 7169F9F4011DC46264DC48664B163AD8F6187C98F92E3A81C8BE23BE2BBA1130 CCCDA14EBA014BEAB3ACC53E35E0BB2065DD0846421B25B61BBAA300D9A3D0AC 8BEAE0598A2EB28047F046B1873EED98A85343BF69CA7069F558C055E5068371 5E3BDDEE52F5EC94F3ED94C8DE03CC8B1035ADA794886F9A2B9D29B5003A635F 21A6A30D30569B8D28F2D08944FFA31271356D2E02D65D54DEE6E4B503B2013F 4FBFFF945421ABCC34373321EDCE94C7C752BABC096BE3185E2D6633E5840B61 495FFEF994F1CFA2D0908B01F2ACA38B680C0E35A41C822BCD0E93759A46190B 65EF4DE07BDF4A550588FEC4FA551E6E8A783B8D8CD3DE9F0675C6BBE2776B5E 671C15B3EDDFC9581845BCECF0C2CEDF660017932F8394823D487CF114CA38EE 1DBF931383D44B36CC887ADFEF2F293A8BADC605B533DDF370DDA4688A0EDEBA 6E8F0DD5FD6CA0F308EDDB1B5DEA54A9EEB07F9C018523BEEAB969326DC20F41 4914D698877BB20232AA52C5F3FFB898C2B9BD7C21BDF9BC0D0D6D4239F6C511 A17207648360F4B5922206D5996E9D246D3FEF232C780CD14F3374D9ED58F0C0 8D1727FDFC1AD0073A7AB1E962B91C7DF3A953FF92A5A105C4D667B971D6C341 D13D16DFC9DF0991E7D15DCC11748F360F959F36034271B061AC3DF617C803D5 823542F109F02DC58468AE9633466523A72981D0F026227FEDDF554F6A18233E 4B08373663B65B3AB7E92579F84E7572F11F702BC27E34AFE7A17900E42BE476 BCDCE3E9C940E4D5D8FBA663C5DEFC5FCEB68557BA705B61033929A8F3627857 BD900FF0C057731EE70F8C93383E68C187E9C43A8669A2574CEABFDC6F93147E 40F3C563189E89E7CA99899A0FBBE55933AC404E800DCB1D8F14839262F6EC13 7ABC56B0BFE6539A3B2980CB33E0FCBE74C9113EAAFDF4D4DAC09C498ED381C2 8A2CD132C28FD0ED8D01A243DB7590FE9A83B2105786756F043F42A97C1F50A0 645E4124677CA479FFC23E7C9C943E5CA7554CF291EBD6782BC656F93EDFD4FB 544DB1E1735715F794F6521AC19ADC2EEAB0B67DD5AB69CA7A56B9B3D2675CAB D035DD4331C5B01A3DA0ADADFFFFC2CA92B2E126348554E7C8EE871F0359B120 5C6E9CFDF7A6FAD01F389D058BE3FFBE5FC6868ED0629C6D1799B9B386274304 21EA8E1577311F3A56C9B829C025A67ED9A4841B4E8950BB2C2A5B63978E50C7 A32E592C453783F896262AED35BAB81010D2011D03660BE234D90E378D59B27F 2A1549BEABD05B06FC3C098370010E8D46FE1009ADDA3C25E0FF208515BC91CD CB23C90F04BA9AE65CC1C148216FA938BD36C6B100419BBB96EBB172D6279795 8913A8EBEF7979382FF34180F84AEE1466E8F246E9D7E19303E223532E845586 E3E2EC973FC20F616624FE3B10361C70CC18749D83507504D0EC62B5CDE733CD 2E2BEB8E449C0EB79D90D1B62F2AB3BDF45024DAAA2A0273F3BF034DF110453A BA77B81FCF05DCFDA1CFC80E1DF93DCAF0A5413CCAC61D396E15247E15E797C0 344726B2106DFFD737B9D7700FAE6D07194464809BF848DCF0D8B40A42350587 37F071ED56BC95D02D7F1A024EF4D133E48E35958BA57B6A50CC59C6026F99A0 9A54561001D8009DBD001A66B0B54262E735700725EAEDEB9B9FD182072719D7 F8D023984E17A187CF37B3E547B5E722BEE692568F143A8F1129CF5D2E36E485 AE6BAA9FE5ED59D62D9882C0FE820709E1923E3C81F1607B0E825316A1A23CBB 76333976B92AFE36B0EF80CB3319F368A159FDC4313CC00C506096EA16DCACAB 93FC5D27F9990E24F69836A816CF389FBA35F97749D9FE414721789A75F64FBE 816D912289AA431B603BD5225846C1D587D9B36C923A4C4C54DE37DB751B8FD6 98039C8935DC37093CCA44FF6231E32A83012D8EF3AD8865DB55B5BD3F8A0829 4E8EB63726CC567806ABCE12478BD238D760E8699BECF8B9F44CDDF54B89597F 04FBA46F6013EAF91799CC2DC99FA174BC972BCB04146B3B1D60996639BC18EA 497483AF6C10CA8CC28D740380A6BCE7A2897E69408B699395425F82CEC9B5BA D85F44429E239F2C082136F0D6F1B446D92EB281F9326EF18FDBD4782A447E17 6DE69B956998AD2655780C3B1E8C4B65ECC31D9B7F123AA83A129C39509D564B 2960AC8D61754B3504AF6646832045148E0BFC4242195BA944C155D598FD8F56 6A0D49A8853C36923B81A6A4EA5F983C6B7A9A3E462AD7032F4528957EC37835 9AD9CC9D0B0643D7DA646C891E50BD49C52EF40060A53105BCCAB703B6A92323 6BF8857916E4B4C78666AAFDA3FBD5C401996D74D4838E162D13926D3FBE13D4 BA8774F1E4EC208463A900F5BE24AEFA22399D1B5763E0EDCB9B273F5A18526B A721F131459CEB90111E06D4597648DB8E0ED5DDF3D66495C7A1A8A85F1613F7 E96F595137ED0CB83C6FAFECC5A346800954128DA177294A4AE4616EAF897261 18471A762A6491028E6695C0A33FD05BB89321A47AF629DB95518862EEEFEDFE 886E419A8A73CD52AC20037F5AAE7FF77FC5952AADCB94B4B5C37C0F8965F869 7ADC8391728B958C686E7FEEB778309C82385DA157C66308A5E628BCB3BE978F 1901AFB2DFE0E4E8C55186B3456BC6B7F30353C72A5ED0BD2E29F91D491A302D 9ABCC36CC2366508893EBE75C0678863D9779B1A94D9C9D25E5C6CC66C43294F 20600D9D9D081A25192F084AE8A575DF94D7F8DAD2E9BCEFAE47CDA55B8C7108 1A7F497B40E1D4297E2290E0DA3648688666055029731A30C0FDD4398F3C3ED2 6BA811AB4518D7C62FC31056E4B08C3B01712BEC258AA34A91369488FC43F016 52FC8C3E70CB3F003A747997A94401A2E669F4A2BAAB1ACBBFC265563DAB2C4C C89277F897FCDDDFEBC0C186C90E91F62311A6A3E66A939FC7BAF0090E225504 B182590544C1B5C6F80997EF22270B70A0E5F38CB41C0D2A8703D676FD697009 29419DF3986E99374770DF616195FC7143666C823AA591C0C914AB4784B5577C 535BD2303F67C057470640B5C20EF492ED1EBB694118374EDFC503C010785269 09DB38D9179352421D593D191691B90C95E030C62302245AFA0A6B71C0919C4F DF94DFC90B49AF6734FDB1959B7991C804AF08632A553314019A56711D2E4719 363E05EE6CA371C07C9DD791FB1F5EC018A615B3A6190BC3423E53802258EED4 7FAE2B3523AA39BF0B81187B46A5E94E12003ED61FBE2EF0CBB0139A42115FF2 22545204899CA6A7C5206974597719F7E5E3AB4F8256DF5C20AE651F1AEEF646 7B755636910F7C7AF7F466F4B72086C8B8490DED6FE6565C079D553A795C6978 8B90DF374CFC007A10A1656507265F96699A91D1C29ACB20A9FEE389DA7914CC 390C5376DC93ED949644D011885F7AF869AB26A55AD61A0ED526FC85BEA3B9A1 5DBD97C78DB11D5DC82583BF241953C3A1B6B4B92C791036F89E6D7F949DBDD9 3BBF7C61BBC51D8CFEAEE36744A5DDA49E894688A86AE4C59242EF7E76631101 A01FB2E1072BBE37C89ACB82ECE27AB62841E74541D0B7D76B292A4D7E1505BD 76FBB32AF1876A9144AB5ECC0158100758D314352C2C7AA560884A43E9926528 B994EB6E04E0874964C6BACFDA564894DEEE704E26A36B54B64B7B8AF4CBBA5C DA4A522C04D4340B44EAC9974A59906A8C75FC77DA26CF665A12482576ED2738 79956DAA7A5F8B6E09B9414A9227D3A2FE4116CBAA8130FA6649AE5228C3E337 D314BF3371000A34A8F91EDC5D97AE3EC32539C20D79C4C15827A72F51384C74 EDB5DA7A4EC81509C3CC6CB4321B5BFF351DA79BE6F5D022725020FC149E1128 5F550F6C5BCE89611BA3E74F02DFACAD04DCCD63C7C8892EBFA298E9DC4ACEA2 A1D64ABB59B8545324270D36C623F4E4DC622CD3CC3DED0D7693E9D629F243F3 DB6146A3A7E4710E5F9906D1AAD8AC28FAEC9E3CA40E0D2A475F9D2697649E7E 73B8D63731807DC290AA0811D97917DE951A5E9D1BC29CC49264D6E33FDE0CE7 47E537A293B09F6E4C44FF2EB34D7A0BE786FD2FF915E04FDCB040D2D7E3D849 D6DB29357FF249CD5FCEA58530976A287643DC069BA92CDBE94C04579A84DB07 A2AB496A09FBCFA415D5E7CCE68F15A60A059068EF2D098A81483CFC282FCD7F 87517A68F1CF68757E2A90B4746910139D0D579614D3C39FA7B9516C114DF4D3 C065C19B8BFE9ABD817546CC464B5860A2DC54F91A0F71BF58E6DD73F102038C 157AC39A6A7C5DE93EE17370FB5096B9AF1D0462446442004D78C5612045869C FDD8F48B86B8080E54ECE96FC20760FCBD4BFEA8FBDD07BD8E52B112E5D32DF5 7AAB1979FDFF4E2E92D5C8C03ECC9297AC2B941D938982E007339D2318B94225 0F3AE34E9F4B82F6E69A982EF8B08FE58310DD2CA11F91DABDF9A81AB9CE652A DAFA30A27F95B14D21BA043CDEB21A5C6567B0372B4030A9C3C923396646BB54 34D7FA7188BBBE8FBCA23F602FB4F636131D125A91EABB8F82AAAD81AD19F4BC 9F476267D5EFCE90A1A8B25F3D178EE11777D455403F4A67037538CCFD024808 BA91550F867020C88FFB63052A69482092DCA88A384C87632B477FFCE6518AC2 4B2660029D269FA2EDC2D8127FA7ECF0E2499BC8A79797E995328FA42ADDDB95 325B6955C3EA137E8041BF2F33778065F58DC3A03077C0DD2417D60DAF7877F9 B2740C712A2696186F4EFBE242F0BD2BA00C33DD5885ED30D7CE4D54D34F8ECF 22D9C6102C28D6431A9A06242C4B98807DDE644182FB2545FC67BC0FD5B523D6 70B7489CC3A31EBE8C8954A9851BC8A14BCC936D9FB8DB42715A2588C4AF73C3 154BFBA716FC655A731DB59C87749AC561F324E307DB441962F69211B2AC479B CF62D1D9641F28028A1D9994A0381EEA8A750891ABE2EEA9D57310E37B20357A 26EC05A09522881A486272393B8F51227D87A4DA51627A696FFADD91DA41D8BD 059BCA4656485F1E7D108E468779403416C8E684482C7CD71756BBB6DE7C003A 42916B6D771D14B32AD9BFAC414671040756A89B112B51874AA5A7D93BD0576F 35E5EEEDC1E7F0DFFC2D9127A5B63622DDC6586D28FBF3FC4849F461AF985A14 7E690DD28F046FF5DB85C5ED0DB019EA3AB8156282AD51C731AD75792D6CDED2 C85D5AE92B0A71AD767B68A8C8B90A45D6122BFF35FB0F74678FD9F043A710B1 48439D8902C34F06BB567BE7C96B81A9F8D7C0F31553B6AC3535115200C6D6D2 1B79E91121372AF6F17C5EAE84EA61EC440BFC765D2F2A45CA6E048DCCBB7695 C8441B7E1A356D0D152479FCDEA00B4DB508471342CCBCA4A49A2BB10FD65C06 9342B6E5069EE4EF9078328636C209BF5227D66D4A84A8822CD4E3095AA68B8F 5951338906DDF5AE68B3AE19D1CC5324D0AA613B37A47F8EFBEC73CDF84CDF9D F8A73E7736A2729E007875561CD1BB75067206710B2C6633037F0891452974B4 34F1B65E01D4AE589D8C623365B0D585B1B43D06F1AB4F3ED1C674D3CAC07C3D 2AC46FF73FBE97CAAFD8D5DBC6669259B1A9CD3AF50C8B31398234A0879A1EB6 152F158E92CB9AB8191FEB17A88CACBA1381D1C7634BBB8A83BC2C4CFE8DFF11 5C9220CD61F0EADF4E9EE8E04C34B2FDE7C5EECCBC0B80711CCE330021ECC68C AE3F98EF2AE0618A87D011E76CE365C6CCE8C4FBB626339F0570629D51DBD141 B81B33693F72372401D9B4EE163D1B99DAD1F1E57547F87D37857424B5AEB046 3251705421A955E183019C6F9BA013C75265FF481FABA56EFB7805598D1B1C3F A6BDCD1852A4D5C82C1B0F37BA22BEA1F6A81720F59D8A311350BF41FC6CDEFB F333C6D95E914999E88AE57B660BA1D7D125B0D12F32AA5A7C6EA26F12302056 30164BE06C9B2572AC6F96AA4CDA5A12B666049D5CC53D0F7607C5D1EEBBB58D B6B877E3C58B941166C15039E4DCA210CCBEBBBCD3F45255A493883265D54FF0 2583BAB07F5B331F4160E59E8D17995BA904853C29D481E0B1111C8367574968 CA4D4C6ACE74C45A2165A4CDDEF5C164EEB5B893C648F4AEDA63A3CE847DED8E A728572ABBF20C1952F8355D5A1966049019875F399B3926BA42E0A9F68126A0 A1797CCB86AF773D702C2FF7A41BF360872312CF6CDE0D4257BFBE47CDCF7E2A E21B2B2B48FF19EC87A7B980DFF032E70762251791EBB22D4AC6DF72D4C19F08 CB70A57695C80A8A6DCCAD21D3C29C4332D005428C993BDE35D126B6FC82AFC5 67E7B0B9C5AC594F1CF651E8EEFC830F0BCE2206FC9B000E86E957BDBB89845E B56BDEEDE370D6B285F8101CA962340C785E84527A41E969A79C17DD6459DF31 E49E09CF63618B49DD90F9558DB93E054FE53D47F1370B5CA54FC364429DB5CF 8960F778714D202A83A82D0119A76F281987BCC1CF7A56F8D2A6929957C7E4B6 7584113516AE7A7B0FAC703B2D7DF2011EFF189856BB858879C190A93E593BF3 B96694635B5B5ABB4B3D4FDDAD0183490434847914416D21A1F999695D2ED912 B1B5ECACF84975DF535FD97974F432A4D185D5CD1A26D5FE9A97CF23D3E11F3A 8F1B0184B7B5DD929B9D22526E47B472BFC3FC2EAA55F976EA3F03D7A1E4A2A4 97F7A2B04700C5F89D2BD4B50E94D207123A5BA2E70C80B5E27FD7EB830F3099 77FB9E841F19E4CCA9B03978B9F2A520F6EE1ED227532D929FF8F4B0381B612C CE878BCD8C7CBAA6E8C7AE8CB5BABE0A19A0C6B0A19413305AA179AD159E6A91 C0B59A9337469D2518F4089CD6A9C8553F2C6E425D47640426F9B57DABB6EA66 3BE37D7EC2BD182013A307E0825E50B565E4E62E249D25CD356DCADB2CAE933D 86EF556883750E15AA4B2200C5C6ED1523A8B85F6F397ECBC1AC7D1750AE8834 3E964D23891F71597040E6B2837219524BA7DF24004EF56E0C7B0D0F1E567B8D 095938D8A25AC6D4F11AE9C187D06A3625CF7BC37862169B44079CB1F698415B 2C304A1BF80025F0259B8987680C6ED6118BD0CEB8FBE3B12E798ADF0082C434 5FB98D4805BB0F715A5B1C816B0289486556CB7A4F30CCF1EFB028BE2BA9FBEE FE599BEEE56AD008C7EE3AF5D577A306645512CC12CB85CEA99963F9895FFD3D E11A43E2D6520B63B60D3514D51A1A7608AE0F920904302EBA39044250B127B4 EEB5A3576CCD0479CB7FE2D4C5C6574A1BDBFA6B6816C5B0312BB9AD73629641 F38D3C3F930B4522019984923B13644F21B87E91485C40C683132CB1722B3017 144B9FBF7D86705330E201978B2A8ABE8EA8B3B21E096946AAC2BF0BAA465D1E 5276D211456D52AA477A0F3C0A97069E4F17CCBBC694180DD59A12EDCAE18E25 1FD76F083F4C98D969BA60FD34A942A44D9A1A5E8A1ED0A9A560D8BA6BECFFF7 EC4C044A0CD7015D7917713F67485D2CD9BF894DBD0988B3E7B9BC67AADDD817 8BF6D5CB0BE48A233F5809C8521C8F254620280B9FC9DDF41CFD105A942588C1 0A5389B4BE842F0399D0D49CDD80A4B28C2EB6DA0EA3472267A8593610ACF767 9EF3C946732F20F0E505B06E20FF2F535EE17897E3046AC7F99F60F572E4AF76 CED188C5706EA426214282076F11C9DEDB8A88300F88727007042999ED7FB8A0 8CAAC84AB583421EF9F6A256127DA9D7066A794711215786727EF8F458A5EB43 DA9779448AD2D2C2E914B6F58DAECAF591161799E17B8A7185149B94D6CCBD1B EE9F62C8ECF13838F0D2FCE58473EF4EC335551D792A087F429E7BF33C25E89E 4C47D85E22827CF13A5B584699107B03665B94AD3DD8D1E46850AC587F46F1B7 B4C824F4829227E5C197B7AFEDD85026A5081EC00902640057ADC7715E317B88 431CCEAE28DD5D37E0ADD8AC4B24A8DD84E3B77FFC585AF8E7E5E41ADC038F09 A75EB0A0BA5A59BA284011DA87F424D78762B2694053F2D2895B3C8C0C36D4D4 BD5EAFD92026FF589BE05A8E827BDD8BDB4D0FEBD1B4126C7619CAC7165FADB3 59BA01E9A8F8BF9BB96904B013754A6BA20A621C2955FB06F0BB8F22E8F07BA8 8D44610515D779BA74E23F763A71566570C28B5A3C032C95381616964A363E8F A5707E5BA36EFBAA4A162E9715F3BAF0C93A05879574A1E44D8101DBD85A0012 3BBBB884C1FEA15A992DCB14F9EE817337F5D1E2FB148F3A722F9C942F5D97BB 0A5DE456AD4847B6A8AFC995B81D09E121C350D61FDD8DD9C5906154FA71B282 9BBB1B97B28874902CBB4928ECA65EF95665BF74D31FF43CFC2E9A18C95DC70A 668B7BC746B2C894F966C1A0F0502D158A8ECBAE05BCD3A101D600C507C34E2C 3AEAE479FE6A6F30D7892907751206B68BA73EEEADA64311E3AED15C680096B2 B1A22466A3992E482467E7FFA8EC6429D5C497031758B45FF74DD7E7C3063068 8CB9A872F042BBC40D4D46162900682CFCCE9324098ED9FBAE56F66F6396CF2E C0A669F8685735AC29BA7C679B7B8FC48B6D7BF6472B94B6152177EE05DD03CD 20842B335DB77ED3E822AAA51B3E0B2E549E361F4C348CFDBEC4A5CF9DAAB34B 16DFFE5072229CDAB33795221E047856249D939F3D069FEFA40620A215A94BA9 118DD5EA8400A1CE7B9D6074EF1AE1B3E0F4FD38D0C8A10DD16BC61274B44AB5 155C2EA1BB28E41BB539979369AB80D0F6E136CA3046932B53E2708B09410D66 A7BA9E7DC19FA9019B46FBF28FBECA4FB3C8400E4290D041F5A63A06B1F9130C 20C34CB8A3971CCC402B29863FBFE7E65A0DF9BF9361685474DC71E6CA0B577E 04559B75FAB1A3902EFC3D75839F129A102D85699E2670CDA0B2363653E9C73E 7E491DCB6536070E61A068EFC631EBAA5536F9C1EEBD52BA84675BB6EAB2F0DF 1B68ADD0C8A3CE7042FCE7275BDD480CD5C4BC6A011035A7EF8ADFAABB9111AA F86F9906AD4CEE76A65DF956CA50C53504CE517822E7A02C88D17858F1962994 30BCD8ED0E45385EE58B69CB7C68BDBCADBBF874F7CF5F7A038D75D4FFAA1B9C E6CB173AF037C1113AADB22AACD650DA8506DC938FB62D757F5FCC5CEF977F62 19FB3257EFC44EE130D21E62F9407E8B06296052C122FBA58C07A1D6C19B6539 B1D63B8CCD8B56D5E5B25C9D1ADE8304C152A3DD47F2683A0AFEFD4B088714B8 1BFFAD3913CF0A438685C6112C0B5701CCF621850CCE31131AEE292EAB1311FA 3890496B0D4956F92CE6FB0B64019BA014DC5227839C8680013C176394FDD6A0 F579B31074F31C574FC1878013BD4B4FA3012AC876DC69A3CA1AE0CE53C5A0B4 89BDA4476962CBFBA39786F8F7BF4BD2781152ACB12B0F2ED4680030B1998DF2 33EAF83BE079656C5C99BFAC3E43D2E56172393B8F51227D87F9C1D24BD3E2E2 CB4CBCCA9B4D329B1D8CB7E065F6E4E30DA3EB29EDCE270C87302CC653F8DAB1 8AA31CF094A0293F99DAD80CB15EE36111301BDD4F8B678AA0CD2E203630249A 125C9A02FA34080D6E4E40798A5046D4281EDF9E2AC85CCA8EE141EE32853BB6 B9423EEA777D23BAB524A96E35DC86C8F1CD344C22F2163EC98D72457B6BA7B0 02CB4672D6B03B29B8E26F0863EC365F99D3319773210E489D2864A2E22BE4ED C6B79D241756EA977E0D8A884682C6A81D242EC99A885C7B398E71E7692136A8 1DA64411C9FA4E613FFD353BF95D86DF542B036B7E70D159C7926E414D84C79E E533505EFB4E9B84FBF4EEB9251F10F92E727EDC3F231DE9BD6E2166B9EAC9AB 860C82A9DC70F66326E14FF48542B5B90341C64F9F49D4278EBD72253DCF62DE 6E28111A2ED99656BFAB77C84FB7D3CF4BB70A6B138DA7EAED4E1E4411D4B329 5A648906265B933F5760600E56FFC42F2E27982459341018B82852E7637ED9B8 CE03F0619B0A58B2D9CE7A9D3775099E81B8ED2E4B3C338F07CFA23495FB20AA A2BE499A4CFE3B50A290020680E72FDA1224F5751EBF1CF9963BC68E04383BE2 897A6F8EC8960F71AE6591EF8DE957AA0A41C34B9CB5D90FB251EC05C08C31BB 362EFE00D2D2168145422411CCB61CD3C5AD776B213D999399DCA3A83ACF2F89 77A2FC30231079ABEC718EEFDF3175DA9FD22ECC8BFC7E107366EB908CD982DB C6EC304E5F4A32DA91F9D65A998A2E7F025DE600585D553FABE925AEE5E81326 657FE34486F24A696CE1E10986C168A716BAE66B77522B651A040D5663D9B61D 7B0D7B430827EB280BF1EC7C5769D083613445BAD7AC08FF0BD9D4AAEFFFBC93 C2DD3D8B070DA45EE51755F1F0C681660424B5D05D06C3349D5C970A35DBD982 C5EA1EDAA74D63D64AB074C69A0F9BA1143E3BAEF1DCDB712B67E501189E3760 F43E6F9697E5D54530C69F0A35C20E68BCBBD4270C167D1B39BF525002BD5387 5FA5AA6DD211C3DBA7276AB08C91FE728C2294D7F9BCC1B4CC9CB81CBBE909FB 4EBFAC95B347E1DBB52F2379FA60E92D03F4E551CA19176A52B9EE1AB6FF45FE 1E2A7D777E8A10DB921C7A83BD30C53F00A2C70385346A5CBCA353DED460CB85 CE58955D70D61DE96385889749966CE4AC1F75C8858BA04397F167AA2D3256A7 A50DA5BEAA79E1A1C18C8CF9E9596D5D18DC6EF1AB83ABCFA9BB9FDFE37900F6 DC9B2450D4F565B0A5B25781B660B0F81CAFD4A545DEC2CA07A8866B21B9D92E C2425722BDCE150BAF7BFA3F45F64645C808774F6A13939A3C26D1DAFF3B55CF CFC5907582684EF80C55CE686D74F40E9A21001DBE186B7308CAA90BD20054D9 CCD54E167B8EF753D62841874EE4F13A2CAA5EE8176636182DA15A95BBB720F4 CC21186772FF1380DCA4915AE759173C2F9DF0274F3A23B0E9748D1F9BFFF791 C452F09818E43ABBD0A339B8D49A195AD6A9B439C758D3F56605E4781CE017C7 92FA6298ADB9BF16897FA3D3DDD98D9C6C7BBDEEACBE2D711F4EB2F0C076BFE3 AEE56C0F14BF8FDCEFF14D41F06194DA71752A8A48298668F266B4B666A216F9 E06ABB0335C00117D858AC175605B38915FEE9E0060D8EA55639AB2274D0F85E 0D1DF3243B23B50ED076E14C25B3E946124C8917515736B1117FCFF2F6C55F5F EDF52B9FDB316699ACC308D9C91E509501230DB1DFCB40C6D25D5D29DC21B291 78D63DF35A97EB04F5F809B57BC01D7E0A5314D4B1A83EB71072CE6F54108065 5BC2DD63FE6E83F81BDA4D9ABC52B44168448340D4E03320970347655EF9B0AF 2B52634E3A93D8868AD269F7608FF68B6E4E78E0B1532C716DC2F495D9E9E0F4 0800952DBA139B79905321E3EC251BBC8A1825C217CBDE9B678DE9D1C0BE7517 BFC47BFFDB58CDE227C6F1371A683056B60C532F66E314A7C229A3321235250D E5EC5EB12412DED7ECD125B0B88CCE9EC7EC910AED1DBF58F5013466FE35AA58 8173056F1341CA2753BEE2BDBA4139B4E14382289661F64E67F0851F1C531746 54791EDC513D1EBF9E51F9BE0D272AA390B58BD7F409B82A4AB83484126D3382 752BCA3B7EAA8EEE54A58B04055E471BCB69240D4B6E9FC76537898B7A5BB7D9 EAF9EEFBAF272FFDD1AF677D2F4080B95AFC6AD4127429C6D15D095640B0E218 CF1C0A620BBF181C31FBB68EE6C297121D0CC941E04BC41AD4B59924D84625FF 955732E175195365D92EDE3A206EB181E0E1086B939EF87DE4DAC478BD802590 1B54C49064CE5B0BC73281C646BE6D88B002797E191165EDF18D93C267B42B5D B6C3E2EBFE44297E67F83ED18B04EDF174714207AB5922E0B0742D5A7322A83C 05484F356CFBE7F32395F26F7848E0F9CA568D45B8ABAC7531EA0A8FAEB223F1 1C69E68FDEEE17CD270623A1217E6A7D03959B55893D6480B1F655256FA5211A 493E5D57E31F55E61D6914217CC8AA256BB113D36888F9EF9B3F03E11738512A 4CC799A0A554C4F7EF32121215AC2EDDA6A7064009530A24C5635A9C8C882A12 2CCAE48794D0E9C44E878CF5E2C20443B4DCAEBC1C78E238CB5CCC1B82C6BEA7 4BCCAE6AEE85119D7C4A12AFCD59DB81644115A4B1DE347E26E48D93AAAA45EA D3320B35809A02D71918FF15F56EABDAAFFFCB6566F6D76D6758AADA4FCDF2FA D17C74CCA0EB00DA2CE252E845D0A93FA7D06620D96853AB61F8C860CB97F058 7E16C45FBDDECCCCDE16A3218B97769673E05FE0666D9E24994EEAD5EE166E25 68CA083B603321108D5488EBD295A2551C07CDB9206CBBABDE8C4EF274FB0D61 8DE9312F7DCCA8F63270B5B7CD183EC469110E1680059A264DE63593E84640CA 7005395424D83423F75055793B7196254A3B9F309C99E7B11CA6803D409FE6CF 78975C7F0CB29121D547DD75D0546FDEE153E1371C790B6F0A60284E40A9C16F 5EB8CFD296D26545F7038C2A492BB50281BEFDDE449AEDD3CAD49BA6A5B230EF 7D6D02E74B6FD7A4140D548A5BB7C966C9474694863D43B0BA59B7605D07D334 0420B79435165D375C16B911D10563FFA02D603AE5CFE04369A766B8A3C0E75A 430B60C7774BA470C916920798C93BE0C8BD029A6D8393D34F53A471B011F084 21D49BE15C76CADDB90EBD6064F6B5D2C015354533AE5B6CEB2B2A3C2AF033A5 C3418457DD0AD2C257E94F46E1BBF7BB64EDDAB2864CF320B47A56EA07579837 856E6FF0FD29C89586D24F0C6F826FD73BD380F7F8AF6C6A5CEF8426FE5114A3 7A730108183FE5AD0AEA32AF7D8D50E3FBDC2005B765EF0E8F82F046E9C6D8E4 F0BE382A76F802F45BB3238DB184A0CDCC05A274A6C11A3BE748AB39DEB63E09 F48450E47491F7A2D6FF21CCD96236170A694DC0A968291C4DEB7AF59D309745 B096C379E5B6D591424FAEBDE3E27B1B9A256D65EB4D0E05F24A159212AB33EA A0EEC350B85EB35934F298EEA1FF370EEFBCD540398721CE6E4CECB6FDF7ED56 E4CA24AC6C57BB4BB2B2929193A1499312D9D5D60988EF9FDDED1485F28CE125 24F2FBC764F86E28C6166E42246934DD00A82EB879C9DB26518D53423A31B22B AE3D6DAC2CBFF58DE0498962ABBBE97339255A39A7FD55D42E3F53C2DFE9DA57 100A7E59562061F36A83AD6DD684937521F99ED59201B714CD8DB43491CAF456 0B256569512C7FB1FFB998C9E1A916B498DD6AEB5A7A09E505E7797F5263BA80 FC980C868D31516F7305F5017B569615C343376298D554253D05537F2F2915ED 65F5379F11BA1D5BE74F35278B9F8F433DC3BA5522ED8DC99D65817FFD960814 CB6D34187163892FC934870354F37C9F74DFD56A44C1C638C9F9CE89040C7007 B5D0A7EC93994B9F88B7A7BB69CBFA90385F17781214691E3C87BA48F0BEEE70 1293FA2B18F0AC3C6A243F8D181CC489789288069A4A19734C3821767E7BC46E 888A2D31A6C79C2632D0A06436B3FAE57ABD2CC8F5895E4E0BE34E4D3A9C4033 ECDD7FB8F0A3A9C9211DDFFC557CFD673C036352AFBB34CE4620074A8FBEB951 25B77F0C064BAD19E1D44B861A2CC3B1DE1F7E46A92E8B215FE532A4F1558A04 9E508C2AEC5FF185FFBBC318F217DCBDCF2171C232CD9F9C2306363909459DCE 7B27E3D03F7CF38174A1F1E507B62789464913CB7DBB37B63982514CE404B2F6 6BA4BB50E1F8EDB4EF5D48ED0A09320F3CE5574A2A7134711DE08A7A8120BADC 18DD322DE78C60221B70BF38940FD1F10DC5D487D7446E5F8CF989D076496C66 69DB1A99FA54F5B6A0484889642606648DF0BCBCFF3E062B3B60BECA528FFC09 247179EFA0E310872F53DAA9485D32BCF5B204B0E71C6D69B5FAEE71E6376BDC FB1431B8AAE2DA427B90A62D55F1556BC7BD613AFFC403AC5E9FF301802DA7D4 BB53FDAE336076F0C9F21BEB56275CFECB1C3CCEC28EF1F67EEB9B2860EADC59 0396E1B6A734D12926B836F2F39C42FEE907D1591BAC1FAA8277A9E455BEE290 8578169E0B8786E5F8B90862FEF0D55A7475417DF6CE7D750956CE66396C642E 54E0A6BFEFDA5861B9911087CB0A26C8C8F611CB208AB85D31A6DAE26BADE0A6 4FB79C502612DA58C1232333E48AC0DD4DC51BC8E048835A261C690D6DDD8D7D C7797C3AE559545E053B31605A198B8783AD4553180173AE8566BF36464DF04C 93C6825E26C374063972950975CD196EBD0DB8D65C0AF81418769A4AC74FAF6E DBC6876C6EA1C562D7F620087D6005C81F772D75AC558BCB65AFF2D1444DE78C 399530DBFCE26A22FCA458369C877EBD46C68F34A35D445C7E3DDC1B934E72F7 D653B2C0E9D925FD51C7A77462DF007195F3D2DBDE32E0AB76640F0988858B2B CAB7D11A872CE7713D393598678351E7264A0C07FD784FCADB59C1947249A019 A982866DBC56D4571D727527EE60F638EB6F837F83AD34FA6BF27FA622665FC8 30A13484456798EC058BB2A10C1BBB3173B881FB0BC9C31D598F9EBFEC0E8476 21EAB7D3B13E404F7A8D3C77F25C46222562BD81EBA3E1A78A2F22CA86A1ED55 469FE999F73DF2A466FC082BDE9FAF2BD300218B8737CFA57D676712DCB2003E 115D55CCF20A62A78E2E1544785378318343B31F06B09A747CA01E1D60CE3EC3 99A19CA3A3FA2141827056F7A528C9BCD1A69C09FF607FD675F1FBFFB8E02A1A 454EC54FAF8EDD3AF0F6619483EDEE9E4B44004C1F949C43DDEA2D002EBC6B70 E1341AB53ECDA0192FA4A7DDD67F0D0E1A0FAA8F09C3C05A826E2C54941A6896 1BE0CD4D64449346EC7CEF53EA31894AE5CD24BCEE4D24B82EA30EA909E4F7E7 CB48DD029A9FAED038236560F6A9957ED799494C9AB5EC0B22443429B5162990 E8E432E8AD8E9A45E80E53AA4AA6E8EBCABE1C04EE718786B64D9033231F2DB3 13B0DF86EB0BF4B99683FC8B727475825687ACDB1A13E3BA92EE828C64106516 27A706B8F622998CD391A6174CA1B81FCD991394540CB15489878FB96E3598C7 3EB433F4D8D707077C5C9E876168E9C71077CF11B34879DF9B9588C520D8BD51 B08B078BBC374A6661022A2B2ECD3DE0C8A7B8921A9CF99917A1902F53E487CC 12278489333969C87715AC95AF5E787104B08981A241FA92600F199D4C170E0D F9A2B030118EB85BA0C374D619E74ABC9881669BF3A9E718DA3891D7D850BD63 C879FA0132F9EBDDFFCA9B4732763EDF2F62C940DE8A6CE6816A25D20426ACE2 F04FE879F57CDDB7C27BD12F48C6261F9B8E97E70626032170BA7DFE9A1119D3 F15668AC28D6AB568DAFFF4C70B9ADBA8B152C3331D28A53CED4851DDA788D03 C4D8CCA532FC435272CAE62D51BFB245999A3833D7EB56398D9C73A14881BE53 A1DB07651DAA0F9F87A6FBE49A306838D33514B3ADE25B6ADF3496F7D1FEC5CE 30FD9E67C7D02EC53D5F91246596D36F375E23FCF3A2D988AD45003D2595E3DC 645C20098E8E4DE44E6D057E7C570FD4CEAAE9170BCAC903DE3D684E5DAB454A DA9A0D743AC610578843B5F38E0FDB6B61FEDFA746C06DAFE4168F92445833C7 81F38D10D4DAD6CF1EBC31DC78FEEE810F5E51A5845C0DFBCBE11A1017DB919C EAB5100E1E6F9DD9DAD6E5A1671585A6A456BAB30E4875B2C4176181E31B768B 85C166A49D86DADB3A64232A73E315D8273BA642314D23CD403147E51025F1BB AB3F340EC930C38001E95D2B631C37C20FD0977B8F2B305B3517B243B95A5CDF E32C5ED1744D95E2567C11447BEF50B5AEA8BF368A5E5893592031690CC1AED9 58E8103DB2F5EDB993ECF01C2E8DCDFD5E12FEBDE6956BFD096131650C24F007 EEA624C932BD12C4C071D52EA2251EB2F6CB877A19BD61174C38B09A9602ADF2 654D67392D54D3D6116848359F8BB6EBB0684B510D6837A5B6A639D828AC5918 9B3A132C03762A6005CA7A75BB5DB2E3D263145A845E1CEEF09796D96D65F023 4C70DC6D8DBD81070FF61DF778C157DE5FDB62149D286982D3C6ED734D223F8C FCDCFAC04812B2F426A29C10613B88E6E5DE8FF330640C2D70B4D116F68E3F5F 08AA86215BC0125A597EF6EDC3087D5EE9AB6EA899FCCEEA1C0FB5AF218B4A1B 889CDFEB97CCDB00D9E6CC257BA95405D08A42BA234B1040E69AA40E052BE6E4 B080FBE0CC4103E23CDBD12517B2D4C3458E327CB756A80AD700AF9BC17825D6 28D109CC923091F110000E85FC3C31EBE4D05554E9FE17C61C91C1BCC0CAE5A0 26831B51A4D81B14004FECB6F45A209C6556145D689D8BA6504B61BF04770086 9556D16C55B2969E31D3409653432458D7F06F9DC5C297EFF64100E4B45D0987 A6595A697FB3D75A6C168963D7EC4A342393ECF381005741866BFB57A9B7A327 9F90F798AC522E98AC37B6BB1C13BCF940400A3DE7D12C836A118CA6D4DCFF3B 70297F2C51CFA0E821F26E62BAD8D03842FA539A9D97E33201D2A2AF50D5654E 4D64801EC16A8DFB3B83EE14B98FA75CBB2A6C1A52EFD481E72F220E8CF82F2E FC8E20C1249213C6E268CF67D6F87BAAA7AE65504BC048280A7C44EB1795D881 B102ECD7CA04BC7E04E8E71B8B85B53942A02A3B1E7B555587A3C710B80EEC55 BC4B499E248A2B305D4E416C922E5D54C8528E8AD759A66405E61637D70776F6 EFFCABFE14E1272EBDCA91C41108F2598EA08BE3BB2F8D16F569C4E8A99AF318 4AED6BF1CE8D2FBF518CEB29E0FB8BF0F8488B3A03B80344CEF14E62A0F55CA9 E9BF635CDAB4524D0F73E2003120287F3D71A47513246280C27930A47C3D3D86 30F959DB5CEF74B1080E36927FE225546013D64201FC7528186FF76760FC7863 A342E5DEC496E0B45A135DDF317C2C1CA9386E24EAE3364AE7746CECA236AF6E 516ABFAF58C19C8052354F3A0AE77FD25F8EC23EF6F50049E382D64A56841AAC 26446705421DBDBC69F60671E520F61380F2DAEE2CF595D5197B089A739BBA57 8D5D8F54F339FB9FD361A98B545635598AC3F4DB4B69FA4E380655F9413CD04A 02BF77A825157F22B018C698D5F680F1900DA7ED089A58BBD74EC14D331FE677 6D053CCC0CFC498897E59A40A3D6C2BAF485A8A4B766F3021F1CA6ED971FF8A0 C0AC392A2F772A0BD8527711AA9879373BF8EEEA8F1B46105F41B107FAE4527A 6E12D593427AE34F745BB86B2C712B6805802336ABA80411E8ABFD0CD16EF588 2BC94C312FCE4C61BF1F7F783D96B1D8ED72ED1BE6EEB48E1F7CEB71E4EB5725 7B3FBCAD029B56ACA16278F7152F997DB48ED4CF50C369B814FD1F010C02673A 0FF35456D527B7DD061C35BC036E8EC7326B9415A8D4F4183AE2A3A3010CDD30 9190535FE96EAB09179A49C56F1F7F2931ADD9CD3269540DFE74E856D214C1A2 3BD39BB15B861216F8E30EC8F028CCCCB11E90E9C9440D47C34DF5B2E62A563F A74ADCAC039F6A3BA82E77EA3347A0C9DAE1B5E17D319A7EEBA7767FF876CBAB 48224D93524F58DA4FE540D1EF04244EFBE2083C5846D3EA18DD14E6C0598566 766DA2B3B2AD38BDEF10D93B12CEE6F9223451D36FCC8762D53273B157A47C47 177BB05E0A135DA8176C09303A91150DCCC80A7203E4F00AF1205C576E371F56 F07D0CDB2CEEA0D20F55666D0C135730B6F4FDB9F6035762958E0D81C2E22AC0 9B30C7745D1B41DA7FA5CFEC8C0A1F1F101EEF48583DFB20D792FC6BA87A0CBC 2796BE9661DA8B70B8087E2D9B563E5378744DE61A407B42AB13D18C466E167B BC3DBF692434D305C7CA4AB1E2AFCE6AB8AEB884FCA54A48B22AC7B0191D4780 DC83B9D4FA173FD9F93B51CCB75BAEBFDC65E95EC2DAB3F70730BCFD3A097A6B 8F59952D4A4FB4664C599A70430DDF658C0C09E5DA54EF848B3618E016FCFDE8 C00375461508A40DA9854691A4C8C7C35476D23940BAD21F312048DD9B7F9FAE 1B6769 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMBX12 %!PS-AdobeFont-1.0: CMBX12 003.002 %%Title: CMBX12 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMBX12. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMBX12 known{/CMBX12 findfont dup/UniqueID known{dup /UniqueID get 5000769 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMBX12 def /FontBBox {-53 -251 1139 750 }readonly def /UniqueID 5000769 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMBX12.) readonly def /FullName (CMBX12) readonly def /FamilyName (Computer Modern) readonly def /Weight (Bold) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 11 /ff put dup 12 /fi put dup 14 /ffi put dup 39 /quoteright put dup 40 /parenleft put dup 41 /parenright put dup 43 /plus put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 58 /colon put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 74 /J put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 81 /Q put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 87 /W put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2D43A151FEE81296FBE 0CF37DF6A338C826464BA5198991445EC4BE80971DB687336AE8F74B516E333D 2D8AB74D362C559AAE6ACFAE49AEEF4F52E28C869222C1301D041E7A0BC1B608 1BF728EF9E98F3A12EB2714E7F16B14E055FE1FA0EEFB058860ACADEDA9D0E4C 42E3C6F1E4869471BFAA3760175F3FBD842755A9D7847EBF605F18293B42F557 FBE2715002669091BB033E1AAD657532F34F7C66E4F04D63ABB07E6CB9D9AEAE 78EDE8B79DD9BC87A1FF445EAA05B5572BB880E69F4DE1F82D7F0E9980AB0C18 22C448B0B1722D3CC33C56FF287CECB80658B3AF5E7675BE82CEFF3DAD5942EE A03C955FF979E41E54BCFB5316A9AB8945C403A73180D0961416EC9C92F49811 4B91BC4C788392994587517718521E416D469F69952149FF7F9224377EBA1065 4A727BF806A112A7B45B0A1BA1D5A23683960575368D9EAC8C04753BF7465AF7 95F25C258C63E4FDFFD0B412FD381946AA38C0B961652BCEC30322C47BF4755D 9F91880688AF066E32FFB22E1A52DE741307AD3ED830D6BAA1D1F562919666DC 5E8FD9862AC8600B0AE0BC7FC779252AAC57248744ACC8A8AAFA836BCF09B0DF 9253DFBB1CB77EA8A59D42D1B18FF25E9AED72FA62FEC3F126F030F5D7DED9C3 CF60FE890BA4A48E39E687BFFAEAB96AE542A6387F6624486037C8924002A511 BEE5FBFD780AC1D4BEC3FBC47A930BAD0280D444259528B6C565DE11DE36BB65 9BADC55C1EDA1A80458E98896D782DFB5C137897419602809F9BF8CA39F00C68 EFB9E076FB324C2963F23CBFED28B9EF70EAA4E4B903225D1F199A7162AB239A D92D71C18B1B682D04C6A48926275BCB16D413B2A0E953E1257E0B12D8B717CE 2EC84CFBC046A4338A69F454A469B12118E562B4F56C5FFB3CA5D357513E6FFE 947A564B229C7FD873057D5C7CDF03E958294A1003B37D8DF565A70A00A3734B 0138AE5277D383D10C2BD853EF806D3CCDC47739F0E374A3DF3B63638B949ED6 4EC25869DC1C0B1F4DBDFFCC97382841D8F10F3635C792139A1EC462FDBA379C BE0990CA2E70FE73137AFBBF30CA54954D7E7377CC50BDD780DDD4C7FDC77AD2 F3EB1169F14A0041F18160F43C24FAF556DB5D621709FBC544CE55424F7446D4 6AC07A51C8CD5161AB0AD5084A96FB35D77F1CA155147DEF8D7A590EA6939514 D4A226588295CE0007BA8A550895511C8D80BBE5CDFB8A50D249C3BDCA974415 F5557914A9B805782F399E4078DDB6264F1A49A9A5BA45E284A5196E9828EBA8 481D357B8D9E6ECA631A6204439FDFACE7D7E6A2392726107CB7D2517CD19A24 FBE592C119626DB221BBB635B6EB84845C16A9585282E34958B961F4A543AF9D 419B6A9105BF185FC767712D923437BE08A9C0EB92AB6792DBDC671029B6FCA6 7F717FCE379C0F3B51C6CF042A762ED04898FBB4B0105C3C4ADDDC18C51BAA3B 70A93666669547081D9246732CFF74C83EE90DA17F5B4F8BAF47FE4D81590988 2858C9B96071341FA0A0D23BDD4947FC9BC2297913CFBD4FD6CA4303AB3179AE 0203F1BD502065F90CE9BEA3B52DAFE4A29446082EA0E6B1D7AF1F31D0AD02CC 9A7FACE2CA86E5FE0F6A425B28A5940ECA306891CECDB3CFC7A5BBC76B5D9E8A C754379ADE80B4D72CE493010317BF21A0CF4A0A55C1246218839DCA3F4D626D 1F4161D38F54AD5142C1CEE95C61D8BB10FAD4B772F4955777AFDE8AE5A837C2 A2BBB11D0BF5DA2E63D0B75ED421DBA9C789B281B01846B65DC572BA69591969 21265DB722AE86BD8CAA3D887C975A617ACEDDFB7AAB341F47532AC0F354A530 7662C089DA3939588774FFA16FC4A52555DED6D6F51DE718BF5F345C23C90198 17B77CB8B5D53A5CE7A79F3E286B6A59F3F6178AC8BF15C0A15C1A8A95D03B60 30EBE53DE328CE085CD9A1D49C69AA299C5B58B24334A546F6E274C1B534DC8F 3289553F560C2F81E413ADB92FA0E7DD1C2F39D5FD268EBA97AB7335ECF28257 96B4EADB7D0778706CB41C7E9C882760E7670936774A1088FFB2011115FDADB3 B69EBD5108760762521C25C968C3E282DC3400001AC8FB1EA27FF643E3025950 1D617BB8BB321281708E496277E11DD3AE0023DA9F25AD06B39C7CF527FED27B 57397E88D3DF70EE4FCCEFC8A0927D6B05517E571B3E70ECC99F3CBA32CCD4DE B8BF22626B6C94FE65598A88AB90D238461EBD9A098DADEA4091AF1CDD7560EC 8E1B9BC2321686E1759E6B8A270C8CB4A254F7368039602EAEAB86ED21CDED91 8F2DB9889F46981C494C7EAF5E819B91C129F0740B8002B510014985E5791F59 B16879CC6521D8E9F1C4C1890AC85A78022BE614BEFF318AB2616F0C3F02405E BB425D1555472A2642BA7686E431DC3FB8A1688B76660D9957C3FDE8D58109AC 21B1234C9DDF3F0FAF93BCF7B2F88A001F23162E1A13E5E9118D51B485B70A91 D0CBC39CF44413FD8686D9030782DAB58064F5B987E0402AF5B264B17BD31BD4 FDF63951BECD73ACA6138854EF35B062D01F33073850D9C09A818828C581241F A625AB3638081DD0F00F946BE5450D38489CECEA4E66B4D85CC8AE0157E2AEE4 A22A9313829F24D573101D84CC1784D1CED7DFAD5DD966601370C6CCBB723082 A86BBAF0A5D867D0D2E3CA16E14E5109A29EF02649C47E12E88B3B397D65CACA DEB9940B92100744D686066F8250FF30E5F13D81428EE238A2E4E07ACE0F5C38 7D79D4A336D0D26AF9C2B84088ED8ECDF94A1E3FADB45AFDAB46CAD6FF950B0F 07AA2CDF82374DA76C56D29C80138841EB13F0D02ADD32F88B23E282ECC845F9 BB9AAECE9CDC644AC2D49577A92307A83A99434F6493156DF25DBF0FCF2EC21E 8C50A312C3D19E0609C0038554CF4FEF3ACEB7A833FD54B06EF0D617C2971C89 E4C06075B09B84A4F78A82152B9A9C540B1D881313C2C74F20ED064A9606EC2C B56D7BB4797F1EEF4A9B13579CCF311FA4A4DFA62D80FDB7F535CC6526D1AAE5 45C008EAF024B48C377522F74D939A475970533E645B1BFA81997549AFF26F67 2AAE6C2EFA357DB3B525276EF330905688777057F4E4CBF584520A534A8587E5 5A8360891E75A15205E8ADAC4A4E5A6E27D0C4A7D492216E4BC023AB027F37AF A8DC7579BA50204D5F45A51460C5BD8A5A7F87668CA6451137F2F59E117BBE28 5C40820882A5546FA76F0CF49F8A6EC445F0647CC3227C400F56E7E9B84A6975 E85E243CC1666DBAFF4E07EEAF3AF71BDACB30DAEA792F2B8504CAB071544F01 5D66243D529C479D276FE22F7E275D9E7FA9C6EECA18716B2F213916E32C1D94 6E32397B41AC6779543218E506569E3544803BBF9B404A983EBA62A494187B30 8D3DFA4E1237A2E5E08224A60492C09ADAD8775B7CDB830520829BA164209ACB BCDEB2D574CEBFB7AE4BE72DF4EB1945FEF2458761AD8DCC0D378AEB7DA002C6 9C14A665DAAA532B0ABA98D7BFB5A6151FF6703385AF7AE8FD315A492FCCDBCB B825707F9566B3B4943A3C61C3DEFDC31A843A2D67AB06891F3E110DD8C73D3B B5E4151B51D9F13905D7D94DB9ABBFCAF35F43B6EEE256B1A80ED6D1739D8D5E 8C767F6F0E8704C5345D028A2A6DAFD9BB7AA048B8B895FE9423A7ACE858BADD 595CB074A128DAFE08FDFFD6BDAC0114159A702FDCBF8013804B0CAEAD7AF38E FAF086A3248AD4FCA1401A85AE2F72E3E6956DC0996FE8ADB18F89B14A208A15 13F81AF73D0DB72F78C4DA634ADE3C73756CAE6AF2E149C26316DFD93370BE1A FB4A79F77A67C07CB0A53C78367F21661D4AFE9E27328E077B522B50FD9AE2E3 DA087BE481515B5DD7BF894A96A84A6C78874100505B7DDE1D22EFCE8D58B3AB 313AB5495F72E2CA4E6AE22C0CB854302B9990372F1661D9F0A517F90686F248 C5643008B3D29F7296E5C8FD4049886662EFDD4106E17C879F5D41CE84F87E89 F6A3117C968B95A35940CC29C43E1E0DEF51C1E46B676301F40D59615C3F73DD DE37B72FF7105DB84227DA5241583272AB1C3CD97AE11C1EE98FFDB5E5F44844 8FC41BEA5C54B26341AFF6830D9D0A5A2901B0653D8BD0746838194D240FF753 E99750D3383373F453723D86BE97B571B8B84D8696089B5CFDD53E6C562A2197 A8C4FB0CC690C27761A816B441029D3D306245052E0C41B53025D8CB7267CFE3 C17FDFE348E765326F91AEB700CC49162DF748171214252CBC821493DD01AA20 417D66DF47EBEFFF3E9BB2B0A2BE7D9B8C68BD570FC2EB0FA54CECC318F04C43 19598BDE93F2F13DC7847354C99059AB20593EE51E94F9D4E9241869D605AAF4 9D9B5FD88C3798A039A67993C5EC68B6326B132E647F67EACCA7F7AE7F718D85 12666E90D7C73EF210E344964A38228B236679A2B18F5E081234CAA2458F8D83 3F0CA308D19663CB12EB904076EF88E556407C33C9380A6A3D68A9EFE65387C1 A1BCD2D26DFD2AC0881EC30E81C0A4E76C244A2BD822EE88C4A60B480D107E68 90E419A1F512E865BA922A7830909BC2611A80931CB2E9344529586726614D94 3AC5200FB9FF68AD9686506C5EFA8788C0AD0251AFE7F95E84683380CDB421C5 B1A783B6D5F3A6BD1BC1C14B363DB01C87C0796DCDD5BECF41A1A9F43183CF6B 82C2AE49F0BFDC5DEF7729F2E638EE6EA9E4D059EB9BB1B992AD8C82D501A550 1BF73CBBFE740179B54E193E84A55DCD61B343C1852780FFB44248FC9426AC94 AA2B3FE20FBA30F6C4D1E0FF3EDCDD8C0F57CCB50CDB0EFE2E04A8927E239C1D 9B026C7929BB48461D4D695FFC766C8A0E545B1BCC2AA068D1865333108E7985 2D93F9B00EA0A90939D0D3840D59B6CC0CE2C147B2E1A9A4F14270FE3ACF51D5 99F7349106165AD627CBBB0ABA01ECC6D3A14C1DC1ED23A9DB9865BB4396C51A 31ECD001EAC94B33C34E29C5611148EF3E55DD61813470B8F3CE32564C749414 3C93C77EA5A3538A0B5AE3FC4DA32813B06772E0E48E25BB39F3F6FDCC077E86 F86FA50E18FD19EB2F37311CE87F18F3BC85CE7FD71CA92D5C3264E34E04A2E5 70C79D99F54D6C6D9D527AE45EBB48411221134587D2253E7C8ED7658EDCA34E 5E768DD14E0200470F73C44D006CE8CB35DE1CA3EC10ADC668B0662A7774C891 84EC95A31DD872F0728D9F65CA80940080E04630BE4DEC77A2C49E3913C39978 BF145F8832AF2C4385EBCDB15F9D32C22CBA0CF950877717D6F1591D7C0B8047 8C9BFCB16AF7124ED83137695F3D69228DB633053208C29E0ABA1B06A7FB3EE7 5625CB44927E2DA6E038A6E62DEBDA2D96A03177982D8FA33BAAF4426E05F4B7 9C1748B3FF7691F9888E7FF864A10B9DF761A41E6B5CFAD2BDD7E1C4924AC97B F4B352705316DD1A58637CC12D71C18A5CA691AB2AA8F171590EC24582B1123E 94D4DC587D8F99E18A711776BF4013C96446BFECFEE4C809EA94B169088024DE 0CBD20199A915AA406F0BD5F3D63D1467C49B4691AEBBB35ED6624F2D7BB74BC E80FD92B9FD04DD9C2BE9B6FD29EC7EC07FAB447511C61DD299C783BC09AE2A4 7B3CBCA6A20C6631D06D0B2E2482A50612BB7C29B7E7D0A205EB0E8436702581 596BC996ABD58CD8D5BAAE4B1478195CAFF98FE0141287296C4EFB8D2E7A8442 F0A3AA9F9264329982532295A176BA1867EF732BBAC49AF485D9D0F7130F617E 7F7DEEF935874D55A22240F8EDE4F247D5F73481373A392D40A8076BD91079E1 1CE5998BA13D48D56B49A92B4A18430E316405D2E2E391B496A1934671FF1785 AF42BA3B2D14B8E04014437FD194455C50289DFBA61B5C377BCBDADA48E82DEE 4E70EF5E9DC03064907BCB8BE4D59DE069FB0C0CB140DA54708E630767313F9F 744594AD8A499CFEF733E640A11FD74E46A749F9C7D18D49251BF85C6EB4668D 67598C31A8F90922FEAEAD4B83B6E7184567DC798E4BA1C4C9B3461A478D63CA 054F13B502DACB674EB49D6BB935E5EC82BF99FDA7D47C581AD7F940DF4FC6FA 6C6D25D647033AC69505F0CAC58DE99087F365531A6283CB89CB644688963C3B 8B2203A94294E58739EF23C7803630A1F9121D62BE1977DE2F41687C8CAF87FE CBD7AD3B98E0D95C8C6E1A7CCB0E09465AA874DC90A0F5DB2C5E7C130297FD39 EFE63B0350B5139D09E6864D22C3F1150B29196E40EEF9723E71158B7ECFB8E4 C426FEDCD439420B7F1C251FADA347C9A2C49738B5A17922E1EA93CA7B125B76 57449EAA9C1D591CAD327D0E98EF2D44D614EE9ED49DD31ACAC0B956620B6BA5 5BF6D08CA7541059D5ED2EF00AE2EE95488F5645BF6837D9241C0D3959B7580F C9ECB2BCF3E65C07D52EC9CFB21C11CD4C883E44C173214C900C44D2E1E43DD1 CE8DFE3DA93C38B548BC4EC46FF91F30CFB97525E1FD4E77686433B20BABF8D2 848C1CDF1BCF185CFD7A81D2D4BB826E837E2AF35CFC4F419F698DB0C43E9F9C B0FB628AC9A3CBE9B1FF4A067016E70333E78B32AB2D89C483834B31F5808FDB 77492E099F1504DABCA5722C7860CDCEDB2DDEB512FFCC7D287F4945FD711F28 87BC3D36173566B81FC2C1290C717A09697DAC6072408E20926D39270121CE58 3EF97CE12EDD7F87F2C8CFE36C3C0400869C0D813B71C425343EE0CDF717BDD8 409D5297D0F8F7FDEB0257C0A391F5635E0DB1116058942FF3E7C94D5F2873A7 A3B0ADAFC3835AF2BE474E6741319BC6695FB37F59AEE388F81F6E66F910000B 72E6BA7531B4378CEFEEDC79CCF4947BA1703823B5AB4F4AD73D9615C66C489D 99D68E49C9BF765B7FC547BAB9640D51D5A7A2396507AB5A4DFF3D14F52422CD 8FCFEAA06A56C6C7FFCD29C9A7A59DDD2A909A9363FE5F1E9629616D25ED38CB E754C059E4379318CC491C3B1A90128693AC53F80F8210FAEA7EE638902A7D3C 82B95B3F5AE340EC1B648DBB9FB679D6E80B7F426D8671FE7136D97F51E2D2F3 C9CE9183E4061CA40091A2A70DBB9ECBB19CE3F65ADD0FB346B54BAB182E2CD0 EAF4C0F402C25573FB344EA771B297BEB615FCD0595172E84ED2A62FF8962634 23C19076C2A9ECEED5135994EB397303A9619C76DC55E032DA83FBA441BD484A 59F70A5110A8927F6239A14D4E223E189A5462E4A92EAEFFA4B961A2A32B320F C2B4E8C1821FA67A655B5042C15E4DE1FB3652B55078DB123573C4E986B19DB0 1C5131F3DFAB271C30A5476B4A19D8FC922E31879C34BAED94C07A4841B8209C 403369FB8E842610D1EB4662B6171A4465FD0E819964F62EC5B0ADC92F08CF90 1DE0B410FFBAD16F6D355E8AD72CCF67961EDB6CDA82398021007C2D0462E893 75EB0710AE4A6CDD15077C9DEFC5774EF4A657734D703CE42174259B58E5277E 0DF26BF59AF8D1A3E7DC12E3C12AA4B67CF35B19962F6950C2020B698D971B35 82FF84E72F72FBB0C54A112BADBAE6C4CAA358BDE6A705AB59332C3850CA3D25 C7564499BC1319121CE0D93218210C68080AFF33420E3CB3A48BF9EB66BC07C8 A79D8CD8E78C200FF7CFA3DAED0B9E87E6141C88B436D8FCBA50AC195FCBB9BC 9512B95FE3A37FFAAB39850FCEBD4D50A243EA416E73F53B4B00F3B6EAE0CA06 0693AFFEF215D00BFCAD02E45496D7C8F5E99EB9096FC4300D038C1AFD31EC4C 5ACA6B72C1BE7204E37A4CBBCB1EC26AB87F2FF82DE20601025169A5FBD2D060 62B5B2DBC288C79C33B596832AA18D730AD572C6EDFABCBD36DEA87C0F323C3D 6E537AD3B43C6F3A905597570A8C6B0B4A5E08C08EAFF9731E745F2BA8ED0C0E 1ADF7821CFCD4E38F3F4C243CAD31D9F8FC68B9043740852B4CCBDD37BF728E5 648215961FA82A0C847ADCC5187331D0863A4573BE520C02CAE14AED4F06B3F1 FB4A318AB54CD86DEC824707B29F858FD726A167F2333855C0575EAF4EBEA0B6 754B1775F967140641FC06F82B191244186FF347A351FBD8FA62E8C978B21F6A E124929876488AFA97FAD1A68A0C3496BCA768F4AF8016D7A65BBA3AAFD7F5FE E75FE714FFF3D54D09C9747ACA01CEFD260985C6E87477C9C7843343C7E9E3F4 0537D461EF019E046DB8A6F08DC7B007337B688E610C55A35496196C01E6F8C3 C7ACEA49F6AFA7FD9CC809E9916813F64BB5704664DD21422F8F32477EB874E4 D86593B4D4050C116B8861EFDC6BE1ABCBF942F0BBBF4E4241C418DD1263F252 B16F904E5B650CFC5763390916625B28ECE4C39C55CA937E28093E66A9837BBD 98666F090E8E06F1934736F800CDD0E78706E3F1CE6D2EE55CC48D1302770DDB A139EEEFCF8353D4473D89EAD552B810E0F1737A6636D15265E0FA2699BA05BF 3C7C6AC979C1AC6BD4F619F53D766AAC07176E0AC34857846C6735AB339ABB48 DD4EC03E17E90C052E117DA3DA5F60DC47F38C5B690EDF00F3FE94B37E81A7A4 9A104B833BB95F6A8640E4D2C6B11A1AA4FE35462654A72E5D4ECFCEC28EC1F6 13167DDC19D24E6B9A3F82127A24829D28A652654699D664C9E14E57ECA63CCF 80D9FCD3C4B63BFA7AA5B31046B14E3FAE94233181B239BFA99F019B214AE3F4 D89B62FB0DA814D96AF84DA4AC6825B41560387334A664DBD19654C43FC277D4 4EE4D57BFE501D9798543F0B0853CA03E7734FE1C65D214203659F4361871E3A 201BCB2F3203A50F5BE9828F0829E34AB6F1E46CC86AE99E4152800BF62C2447 15458D5CFE5AAFABAB71C351A034996AF6809C208CF46A5E08ED6A79120C93AB BA4373ADD2B0AB9464FAB4AC973F968DA99EEAC045FD0AB1112574164D3BDA8F 379DBB568193A3EFE0AC225952CF508955B9048EF259E60868BE6E8B79CFFD00 425C4671316459EE609C726A80D2AAEE6EDE64F32B70AB559E7BA4E705477B27 B85F065AFF7EA11ED5F69A0164E1C56CBC997B76D9BE411129B55DDDF355C807 C1F8499DCDA76CD40E5A57365D715332EE0C6355AD62AFEB89E09AD2F444FEDD 3148B020130D47330B4DC511DF621C8F7C6A7F64B747C9E57DF7CCC94C0D3B0A DF855FBF3A101F67D106E264CE5F0045DF568CA83236A5A69D356D65698C1805 F2256B1EC57DD6EC92662F7401403EFC15D1E831B1C481373FC9C09652E26AE1 9685E413376B15D8000507F536390D07FC88FC73A3CBF6AA3A6F5F1E07791446 5B6710B3317DEB20050731A7DE6F78E680093A763837DFF31A350FBAEBD4E628 4CC8CC7CF81431D146033F4B6E1021AA830B813C187BA2BECD2557E3BE49EC7B C1CC72B53E5AC0BAF1D7D3B798AB9261992F9902FCA15B20878084C4E32C832E A7DAE641940D7C9050AE7C25747863DC1D70CDD34CC0E50345AAA6E104C9A9E8 DED5A41F6111D5587B2758174B268AB16E573FBC1F3041FB1D66D7019AB812FC 2AC061912E110A1B10D32CD81BB580EC101CFD50AC3A6E3FA9BE1FFE0F4AFFFA AE7C94156E80E3BFE98727A8921DA3AAE0E0EBD1AB334CEDC602EE21A336C607 902189D10CDF3724E803084858852A75705E7C77531EE893FFBBE34A8D6D63E1 8CA66C40DFB01B9BB81BA6F1AC788C330837BE0784149C91F159C992220FD655 F0B517FA07D50D8E3C57B5681592B2666BFE0CC7DD0B9498B20B3DB0F5C617BF 591E50553C8639260735EDD4672D448D35E971D3D08D9557304AB9F69CF7A9F6 85F2DF49BE615A93C3F2D185F7AF089579CEA49DF1E69731DEF0871EC7A13401 859F6D8A1A1F208CBB3A11A1EB5B489D1D3D09D27EA8C1315C8949D54C2559E4 791730AF930B70A1DB8B39FCD57C71303BFC695ABA57609341EB23799FB5B8B4 CB30415E8A054FCCDB588F1953B1FBDA4085BFCD6AD3940B646CDE186F57C234 14A1EF67CBE972F4DF6C02F5D17CF9434CD45E414E1C341BB6C746E63F791B48 74FA0782F304F81BAAAE2F7599D745B0AF2371D5B1373A39BA5EB0EC7550898D 3031F083C2CDD68301BBA1EAE88E1A3A90E8F31C3AA01F513EE1E898AE95DF90 E86D148655353A23BD63D96EBD846439B7A34132DB19C6E43058EA0910C80837 C1D9562FD05A4A5F78188087C0EC322A32B7E7AE21D17A20FEF7C009A2DB4C25 AF1DC7232FFED6BCB56A2D1108317A847C6B8E6B2AEC3E5582F681732524104D F962D58E7D30B77C0CB09FBF077AB89280353D563904BB16D97859ECA4ACACF2 A36AE31223F537473140B85D5936669D2A801E2EC34DEFC31FC233D2D2187B95 88CD5E4021B00C8E12575551A7DCF2E70664BCE0EE2FAA043A7A2BA5C6C3A49E EFF019DACEBB035B995CE999B701F8D462003A17E4CE6B20D20E99AEB869EB3B 7D58A7E92CA69BCFD8D593313E4570D0ED4E22AF1DBA24AE0BF0E02DAB36F9CA 49960C5981FE120FD526E04FCCC5A6DD960A8E237A67A507E93022A0609D842A 5637A1129580E3D21FE2CECF0B5AA8A7B8B0C3DC2719194B2FE3F1D9AB492698 547BEB6D0BEE5087694C7D16511F02FBA2858E2780BC2A6F615E297DE8E3506B B4937A56D1D946F271DE9C099B73ACAAF2F2D2652AB0C84BA9F7B4A71D0B6162 1D5998D528B3F35834C32AFE44A9793BF7A0EDD5D0E73415AC731E2D8ED42D81 9D043C8CA71CF577BF84E8CD144BDDF96D58D61EB4D0E9FA93B69B344FF334AF 717EA791A503CDE266019B71FAAC43E72E0AB34379E0386AF071F2B679A878E5 B8F204BD86D315FB6F0A1DF353A4FE9477A0F24448CD7691239040B4B52EA970 A2F7505CF27E612B20FBD4505ED830E40BB45D53DD97FF667A632A33BFD037DE 9AEECD6B39E84D19ECA0ADD86C81455AF0A843402F1F6A431ADCA668F548A5A2 67391E12D7395AF21E716243E8E3BA1E4E2F9D8E072D03D362B95F87621DA009 8B82C8A6191E58C2421B976B6B295DCFA79723A99663510B5863BB86869E8318 E9E90CB7C0BD873EA7A25B0266B16DD20371EAC31A0903CDA31CBBDC5F3A513A 6ABC56879B70E5F70D2272B00FD054FCD4BFAD1E9798178F4C72C8EE3C3DD46A 13F04DDB0AED395C71DD43EC65807EBB23010FE335A9550EAE2D5685225845C8 AA255B0D1D8B552A80D817257D16E2CA1D57A45613E7E1C862C36566BDC23D3A 1556C6BE1F1FBCA2C3A706CC67CABEFE50052AFEDAD384EFE0D3F17C59EDFBF7 EAE2D5B7662224AE94EF9BC8490CAF3E5B12DD75189732745635A4B9E47E1D97 42678899705EF4F87BE27E28A246ED6BB636C420D7DB7A1BE65C7245CE7BF4EC FEFF7A097F4880C49BD3EAE4DE0A8330DE5383FA380A5C51C9578D451C07CCA5 7C83FE2FDA551B3A78D6EAC6228875FEC28642176D5F0E3880AD8B077D1BA5A9 B8607ADEF68FD2089AF2B1E63FC20085659B236ECAA7711B1F9AB49275E7F0D2 1EE23C26611FB7072E532BD2B2644546DCA0A021335838EF43144C3F12652A13 D44C26FE447C64BBA54EFC65DCDC125CB666B8DC0AF06A476931CFA1CDCBF663 08E4FF503B41DC949D4A05BEC1AEA660E4B7ED93F537B27952DB0195C3814DFE B1E8006EDCFDE140EE6878F4F3152766F1DF68BCC50EAB2BCD89FFB33BA12BC0 9941F9EBA9E28A03444E5433BA2FAA4E455F7E2D326DF8E5D25512035A16B2D2 1A59B443E55A0A45683B39439E16FCC12199E7E88C594AECFA5EE0443786293B 0E1775ACBE0C03207DB5CA4CA331D97BD1EA99DBE68F2D32D0820E1690DAC14F A069C4E9D8E3F8CFF88A48AF001919F26EE6D8E7CA4137476338AB99DBDE10A4 EA7FB6A1B2A56B2C172B4E14654C56B98E69C2F39408C33D552567F00A635C58 27B2C965E965856C9F6E09376C6C449CD111039A43555033D3C2E178EE716919 B0700B50291173DE00CE5E6E950DF08F4166FFFC46C87308F3AB3452ACF79E30 AF140484BE74F1BC6AACD1AB4770972C86F41169A31382275137136FFD867E66 4C01C33B18C2BE6BF9E7772848B14EBAD1FA2147A3BCA90B0AB801CE51AB9D46 AD23D26F0CB8FC2236C443BB4B96B4F32424FED99074F672138FA4957CA438CC 1912EF538D5DF59D64E32197B85088749F3CAF158ECCAB506976EAECFD33E0B4 E906407618365EE9DCED74DB7BF7B0D0FA6C62EE5B5F3ACBC9B5556A324F88D9 BCF3556585CA0AD0603F093928184EEF8861C784A8AE2C172B16C187F379FCB5 AF678709478D26B165CC9CB9FC523A0E0B5A367E288064C4A9699F08D83F376B 7C2B52C866B76C92EDDC622E97C3EDA0B79D158B9207BF92075DEF40CF1A1CFA 44714D9C74B3E8F0D129BED0486DAC21B857A145F660107B118BE4F2D2F5B4D6 179ED5776DEAD213FD982E569B1331C73EA667D6306BD958AD66A3361B20382B 29CC4D4FA54A410589211458F86C340D61FFF2B39FE8125B39DBE53D9BDB579D 633FAF7EE7A350DFC90084708E181EF4B608D8E798EE80D0CF446BC822B25012 978FD1899017B14C242679B8A94C96FEC85CA7E51C5F6306F24DEB4BCFE45612 ECCED1FC85D6B92AF92E492AFCBEF4C8E96E54379380751C0AC6706998AAE58F 7CCB543CBB34FBB76DC0B07DDEDA60462B7D0B767D1822B7D2394D4142C9B70F 562DA0B58506C4D84B75DB4518C118972723244E2957FBFA4ED8F1A4E3BB40DB CDB2A9D5B738E7B1491BD9103FA7C5D24C82D53A7CDBB08AF8BC0944AC69172A 49C51C9EEBA5BBCB3F518A42483ACC228BA3AB87054FCBABBACBBAC0E6AB3F7A AFE0DBEA925290792CBCEB452BD96F2191AEB4D4EDC13F507465D88C7BE5B943 2682D5ED5DA3108195D102F0F142A3D0BA6E3FC00330DF6E177EA25650EA4C28 43EE28C843AD2EB2A93E742713863BEA83D9A6051F1214DE7CAE17488BEAC6FE 2490B9BBD7B980324677D2477B64B357E85FE2B05AC36996F9F03FC5E88412C6 CB8D58659DD5DF8D986239934527BD392674A3FAE3AEB54C09A55681F8B8F511 A1CC4FE554A2FFB02CE21E4165901D8A0DC8DE04B0436433CDF7EFF26EC84C63 9612188DA7E2D4D49066897725B7FBC4A3725CD8C8E141615D569915FA110BBA 1EB035C42C067B097E311F7C5D5A1384691DA5811B47B165ED0C8B99033985BE CABE0FBCEF8B4FD8A8A3CC86FCBD9D11C791902707E5D34A3692CABD05753713 3F08E5F8B70F0A83CC39131B5CAFA6A9B912AA0DD6499C3DC2D48DAD06404E1C EBDB1E566D6319DC7F74A63127BDAA82A64DFE8B8F8EC7849A63210A24067D33 428313F100CA10DE8937E057B40C4C309E3D1D5EF9463624BC7606C337AE2886 FA63FF14F9D59C84DD80652BE7724032413050FB7AE4BF0EAD666C4BF072F821 FED228D219B9ED53E464EFC46BEDDDEAA73D0F2C3AAEE66D4E3A5D9B158C28E9 915308807F3C04D6EB43F236EA540C05668843745EBDC63BA87112031E71F191 0A4129890253F3663CA81C4AE5DCFA67AC3C87C2954A1DDBD6AD656C8C7E3549 CC2F8DA776B058C8419A7D4B94991AD22D526FA879D9EAA89E1432ADE4D12E8E 323AC8550C4A5DA2E2DBE1CE3123B3060AE012651E3046E8EFD30A3DB5BD8242 C5045A537C3675048CB0F1712FDCAE714D171CCBF43946E008E097E2D8098740 ED832720DF1D6C2B0DFF963386E1204DB9536705B4FE18E336B0E28BD90904D2 63140337073BE4182D72A60C6F2821E7A4CA1FBF82DEAD78F66F12F766E9DE05 618E0E7598AEEBBB47B2D50CDE014092459702FFE545D3CDCFF0D072F7D0BB49 1D1C6738A7E0CE5FFA4C2E997E9F587B3B0DC5612954EEA8C9FE4645D9625CAF 6A57B2B3CFA0F2E38E993B049C0178B96BE4B401A17687FE2B0D6DD8CFA6D990 852F14AA5AD1D25E746719D52F9C792DFFC61E815AE7E3C13EB4C3D0FB74E942 BEB1DDACF21F982CCEB84253AE283BD27AC4DB2DBEC16C09DEB5C633C428154C CA25AB0C9DFAA3B0999AC380700D2F819CC9BEEA1EC3255F73D9C87145B9C3C3 C5CEB581DD77D568166AFB99A61558C36EE5D5E4F4E580DEFDD0E2267B1531E3 3FEFF9A6DF4E399E83399CB337944F402398060756115F58FAD5F213C876AD04 C533AF4D86E751F205083871F750B74AA876108E806D4E125C46F37B59EA212F 92C43B1739125A49D69BC8BCB401C6F9EF3D6144C442294D69198995C75E075D 01DB43D7359259906A1BBB443399921342E95BD1C667D0889B6CDC38A90F6C78 605161C954B6FFAA31D44F66EFDB2DB695003EF65A0EB5E5A772141BBBF31D60 5ED677884338FE71B8E4239917B4BA3713CC91813BD6DFB708E2DEED919E3F9C 4250C13ADB5BCBDE9D48A8C1963A9B1D57EF0157F8D07A30707229EBCBA60819 02A165FA4924D34FD325581626FBE2BD0629040B2BB976220778AF44410D1E98 273D1C638E73AE51A7BE16DA1B7AA869552F72DFBBB393AED72C046F00CBDB8F 51ACB0A45E8096B5E38F46CC66C76A26E62BF18C56C447DBED3E2A8BB61812A3 F7A8258E8341B3D70EAEA0E7B273CEE821C82BA095B4F380D8F7620C28FD91F7 FE231D33DA7D60F7AC7A73A3992BEA5D711278D1D593BD6896217C2FA7E73964 01300C02E518D642226B44B29C58F12001CA93DDAC56CBA99EFF3ADABE52DE23 09777A7DCFF726368C943C52D90B195646A456FEA2DB56BF35DA59897899FB96 17BA2D1BE1708F96352AF52EEE42079464F393A6187502C4D9BE227618F46AEE F606C8CD98CF834BE0D10DE1329C6E6F8EAA733A78453D9B0E1A5041D6C20E31 9BE9D46250CBB309B583515EEC7F6518CBC4E7FB8C2B501835776B1A775A6AA4 907D5914501B763E4FFD79D1061302765E224429DBF013FE7D968971E058F72C 6E2066A7EEB996027B8170208A2963BE3D2C9EC7BD5AC71199CD70883FBFC7D5 4FDEA9FA4B88DFDCDCDED20CAEE4BF6049FD965334BFEF4E2730F7F27DD8F835 CEBBEF32C44E15BD4568FE6B05B24611B675829EC45E34FA8380BABCA22564E9 413FEE6FFFD0629D8EBA6297523A4D2D88C77F3CC5EC0B971E673272D3249D67 F16C91C8B78B42699711CCCDCADF1D5249BBD181E43B2FC092EA0E6EB74D3FCF 66E7B5D771D1861C9C1C356E826E97FC91A0A25F66125777F6577152C8A69CF8 4305D0B6AA921595BE8A83A06C31A71975C881315A1D2DFB2C0589A7B1A0A1E7 F260E1E13F4B56FF2AAF136B04F232B5809F926D01A898D347C33528A0E10F5F CF75B9CEEBD6F142FB3810CE37B235E9BAB5EB908B518CE7E4022F3BB4777FFF F5F653B085EBD1D715ACF2D01B618AB37B4567B4064038E29A730119D2E19872 E0EC22E027A5283F9CE523D03C84D0C0756B501C6925E3B19475279E4D27F8E3 827F873935DE9093EF48E3D2FAA39645B095D8FF1E4EA123B2762505473DFD08 F2CEBD4C28B16A17514C96A730BCDD755A6A12E662AA8B43C6A2791F60CC1408 C9A53C67960E00A88E5328764C0FCA037AE8325BF9E10091BDAB6FEED0F6E0D6 15A9D0801AA2F7776C385CEEBC56D7215624BC5DA6704868FD80633B9D1051C9 4D2CEF5272EFEA680F77F3896CD2410A9782A31A46FF172E9EB4240506798F96 10A71348BDBA59119E784801894814157C9F9C5ACB0C3AF2EF6AD41737454E72 D0142B6F3AD9824B9E15FB2B4D3E64ABB8649D0DE0AF4EED5488DF23A7FE7B67 F01BAC44F0A4E0520BF8F41BEC25E05CB354E301EFE2B853747CA670FF873699 9C262F10D36BA1002221243D954769073B278356AF558C57B48F3C17DE3D290F 76223817D54035E603874AD06E72F6E26E1CD86711BE58923A9E8890C5AEB72A 81ADBEDA8C7A65BC6482F08669A65DFE6EB567ED04FC819A27C5D6E3591DA5A8 F24ECC54770AFA4323CE712515289A89EEFE18A0E54288E10C19A029E3F86C88 0B94F90AF8AD9383D8688D4E959562C9006A2DAF3B2E58102C797F6B4F571699 D926330C5A5F9AD474F9D964A1D1050A1ADA49563B22CBF2F7E6AB4F479150DB 05F8E4DE96B891A76DB6C76D2AD238DF15A467BF9B760A7D80B9B13C5D7896D5 4FE39756FABCB6D0BA96255C4E37B5A08E55E6319B5B095F9A166869B235AF59 FC19CD5CC2C38998C749FB273F9D2D8B391FDF8A0D203BFDB375B4AFECD10A15 BCC70CC321A63F1DCECBCA64FCC28AB5DF14B2A3460AA5AB895E1EAA55E9568C F24FAEB5D2E52C33BC4EC01CB0899D087FF294FA9B6C7CE8D821B7D2B68A02FB ADECE26F2643E50F3808FDB07E34A7F9C82DF841AE14F1D269A092F6BE9A0906 632876AD739D222A2D41DC07EF57962AEF04590620FCD0325DA9BFFEFED48899 DF87836A521E75F31460B4D83EAC61546AD582BB6FA8B5C9719F3F07D80264DD F51E1437427A2B6841E32589D3DD9AFD31BAC78E6A78E0D373424B5CD0E08FED CF550963DFB9D3F72A9B0E0760560F02F1BE89FB4A88AB658246AF7FA0BE6E0A 44DCC418D3FE28C7226605E5E573E0DE42239CD95457E94C5E8344AFC1EAAC03 33532EA5680544C65DFE9AA6475C838F35DC78BB88B70168C8C21D73DE7743E3 448C408936E58BD503CE9A5E2899F79C03FE034F568CC38E97202FB621FF8B03 11C2B8AD5B82F5EAF91A8D818CF2A464717CD376EBBDA80AC0E8C402C551ABB7 03B45C55CBE634EFE1C01076820D67AFBDE425490EB5F927B4D9A506B90F8AD3 6022852F813175BCBF71C8DF2A6E0D8FD3AD04D38707CD4E5802F66C75682B61 9E20F594A397FAF8B4465474C28CE676F69E20F12C2628C9C4A1187A54364A21 B9F0E83BFD7BF6F251F1A62628B79278CA1F50FDEC28B37BAA75CC341DA7416D F9A189312F1BE8F83943A743146106BA16C420CAFB852EC4C0E25B4524459A71 E63DE6085F3206FA1AF694EEF2BEFD885F32794FA670AE8043A0EF8CA049C758 B563CCCA7723C96CE4488CD7ADD352729426DE8E2AD89B44397BE625E9946343 0C14E0DBAB249B53460D79532FB027D941BFD5D92C466DD49FABC16F4E708489 D021BFA29A8F8B96339E3B369BD7D078435694C29864F7ADC34F34E3FC092DFD F8D879CE5F2DB0CDB210F3EFAFC398F679901ED3FC6EC6CEB184E0D06A4899E1 9F1AB8CC7677C2C889B3527CD0ED8D0429300D4897B1E2BCE352E70602946146 E4C0025E6341886F9513EC71D4264C47375FA9AFC0184475C628B400DF06C703 975087DE5E152053C46CDA5FDD1B90BBAD327615A6C58834A04DD4574230FED4 DB729DD9E39F7603FDC4199F2C83E21387EC33043F6D9384C5346C1DEFD057A2 DD07744CC4B588A26A8A3C728A8511B094B1032784CB8587F0C9AA9185600BD4 6ED32817725BC61BEA765F231875620DDE94693582B8B016C86CA28A49E0AE8E FC87A1A6C35B53BFCFD7DC1963FCF6FCA9EB420A6C26AEACEB3556BCF7EDB0C0 959068FEA2847A4AC1D6B27C07E788C50445FEBAC50CEDDFB51B6F900B4FDBB1 37CE1D0DABADA2CA9229B7CDD236B2381E5807203C5389F9A2D1F8374A26F2F2 CF71E969C17E396A944A1460FB4E75BDD5395112EEA9C63FA9AF286CA32E0C28 5C9BC8C1E3BEA3583FB6C1DBB6A0B5A5301D2A1D3B42DF303B7B8410C26CC597 BEC662C5408F6834AC531074DC2EAC662B4D6A0C629A6249B2A1447782D40EC0 F3F5C31D1A524B849D0FAAD35C465DF0E5A91D4B3B02F256D8DD0C80DB591A02 7B56FD56311A77517854F340B511BBBC3EA838D41F499F9A7D424781705CBE03 84D01E82B19EDB03520BC9A249997A7C1C978FB3BB406FF7233D494A8BB20939 EFAC81F69F53B7A8707A8DCC9767C093EBED0CD407029D58F46BE84488D9F4D6 34EA41986079C55A22069148DC1DF4415427E4A5CC1CB25805C1FA0F309E6851 873A2280349BA2632D25E37CFE86917870ED4D4A240477B102BB222A2D44AE17 D8198283350B4F333B4976D748C4B2E9185E7E552103047B32DA6EA7051885C1 213CF390D34D66C2FED66CF8FECC627FA383B4103099C06C6F17D6218DA7C4D8 05C7DC6D6F12B284F871E7867B3B61A272602973A3D66D7307B37F785D90A662 7CFBB8B1A583320E10F3757402B8611417185AC0A41CBC421D120D3663DE3F13 6C557579298BF65A549B5DDC9D526D0DCC8602A82FC312708AB751EAA6791325 9202AF395969EBEE412D1558BB54E193E2EC6972830DAB89C71AF7D23CDBC759 9928983E6EB0DD4F0B06A718ACB705DDC2A953DBD330FFD2867B8BB1FA81498D 3FD62A05C76E1149E6FB3C7CEEABCCCB1E125D3C95C9C7145EA15688A9482F58 808AA83A8A9B1DD46252E5A68984B148E60E05EA9E1B5457E3A344FFF153B8A4 029444D0A71DD335958B67C3C5A613FEC39E0AD03112D09C8AFFBB53DA16C393 AF0FD4C1ACD6B02FA424794D2958F4563CEB2F857318D6F5454D8DA75560A486 486E32D2E47F6E41D6AF87F09F6D5F35F62317C927D7C18911F787AD5C358012 F3418758129E6E8B56D14AD021FBF9BD294ADE3AD949C2512A8753CA7EC16851 C94109FF392C461E0730E096CD1EB2F1819095E15FBCA9AEB5548FD229220F21 8369B5FBC3902A6D9FBEEADC2BD4549C36189CCE6733E3F3B7AFBD294AC1FB2A 694BC308C32EE75EC66C19E872BD26FAF9D78B2818D412250945AE71F5DBFC96 4CA7E41FE4110B9BE2BC0D28D8B3AAC40A70F91B6C743A1C1F0EC5F761969195 93921F6EF821CA0DAF57CB06E4DAD470590E92431DD289051D5FE8751FC643DA 8AB6365B77F32ED5761DF2A8698659338762187C952F2885F324BCA148A3C86D 05F454B136E5A488A4076F776E6E1087C3E0CCBD0C66139883BD6961C774E76A C8CBA65F9341022EEECE6E28D4DB6795C8933479A98597AC6DD949A96C85A55D B5D5B49B561D35DA6A9A5D4C832A38647236FA72307140865E373894F7E51EE3 29D38DEEF5004896B51F410D78556C3FF445B08FAC37BF3589E6648996FA6CCA 0FA102355BEE00A6E7F1D917FFBECF77F1B5A50D2ACF01176F6404E1796E7CA1 01CBB4868FDC7E17C38E6B3DBF5AC7A4927C20FE5285BC5698806C14148BDF13 BAB578527D5721817BA1CFD856D7AADBC53B284E029E838316E78BB3BB8AF3BA 9BDD25A7823AF127FE7922B4B92C01E9C32F4D9C27E86859FC8F54FDE0C35A21 ECAC5361521494C50CF77D548B5D7B21A1979C1AE02943C193AC16383215FB89 BC49D2F6C23571EC729973CFF39BD16B0AAD578434E89BB21DDAC48FB21B1C06 3241C3DE6B1493A2B129D7EE314568BA70113E9E397EDC6F364A148C8E58CE1E 6CFF6BB393944DC5F61060B67413FAA2C26314A43E5576C19034AEAF1B84ACE4 9478B4116E7AB378E303488974311A6CE2530AF72F4BA2089B587BEBECB25E8C DC098821E3D216D228F63163EF9DA876E2EDF4BC61F69ADA6A97A17FED5B60F1 6E1BAA91C37927DC1F7AB2BCDEA39748B9E0B721C2BEEC24EDCE788D21D1A734 782D517085F00CC68DFC4BD3B8C33C709F8EA5612A6ED043DCADA864794C4361 988BC2F7BA3993F0A2ACDAC826177F5F10FF65C87354E257B8A4C8B8CB8BD59D 6DE0601144B6E3AF22F147A4F07795BC996826DDE90CDC7389FB9574F6DFA72F 455749A0C9920340C770957CEAD36FA66E7E338859E5B082C722CFCAD64AB78F 45CD08D348A29E4E41E0F063998FE8FC9B98EC191592A6038D492F6BE43C5DCF 81158FADF0A110D444056F8B428D0D64DE222160827DCE683E63F995171214BC A69A085E89D055698F6786BB17174F416C45ED4A730B66F160A023C5C11D3921 6803CF213EA41E2DD1E3ECAFE388FD5891D594F73B85984C70E1D1648CADB82B 9351A3138261D422A83900957423FCD88ABD789B542B864A6FC6CFE597334F8C 55B64C252D3CC88699E25A9F0ADDBF09E14E23B858266D4F3E22DE6B76178837 27A64D37BE438DBC6E71F830F2EFC0B7CC80197A09F7301BB0BBCF2E9E2E5E8B 74F348237AF5F8E093D9168FC4E6C7AC1683986F87EA01A70CA9B8FCA051BB86 727F42EF3C515B1D4A8F730C92B9EE541E8AD31DE5E14F0B55AC815660BE5DB0 0EDF1820E7AB71E0089752348BB76B1129358B9FB1CF648E42C1D9B2C81390EA 09881C067CEEF4768495F651DB1F8554D43F50927C0C96E4F0C060F888E5768D 0B1B1040386D45255282A224C946158CCD754C832684A54535D5BD235F3E6AB7 9D37E3F45258F2B036B90AF4D989C6220FBE4CE89EA80626AFD5DDF37353227B 1A9DED093FD6A37B45EB082D9CF345FF2F875E908B2B77D302CBE35B6C3863A6 339275BE11ED725941B28E89AAE5F4BF0E6F4A306815A6D4D6CF08055A07BA86 4E39EE904A0420862CA6A059C7C15AE3BC07EADCB2BE02E2ED9A8D25C11996E0 9805A2AD255C666980FF2DC660EB2CCC2EEF0BF177A0ACAFCA6E2CA8D8F1C020 8EB098FDF4AF24E849338FAABE6D632A12FCFFE8445D74340D08B0146C89523C 603E38D4F1DEA719CA7CD35C46495CB1CF98F67B2724B42E03980E1FAD54739E 54BFE59112D6D4CDC8A1B3A4F207F3CB477231E8CB43EDAAB8449EFD258C8D14 003D16210D6B3A50A2761C62A152FC9D1FB7522BD945DCE72834C1655DA64851 7E9F80A0C870244BBBCCD5A71EF413D8352277743C2EF765457AEB31121030C8 656494032C0DD1E306819DF09AD5A9F55CC4F8B1FA3E3A930D5DB0AF1F76811E 3373FC15AD583431224DA52B8639E5090A1865B54DB8BDA81836D9FBDBA796AC B449577BBAD5094157D8846ABE2E55446D03BCC83C8A254479BC74D46041A156 E380E3B33B178B22CF76BEA69352B2352F747EE1C6EB4FABB6C7400A956A1F0E DE7D41FBB12CFF132CC01B2D9443612170A6DE0941121E2EBA9B8DB79346B274 EA3E83B25B52E6F9495DB415C617F5113665484F8225878FDD899AF418347A7F C6F566617E018EBB63081EC80D576FBB5A31145EEB819BE4C24A005A9D52A1EA 7CDB5B9AFF457636C3CF2F5A311E3473F70FE1CA74A6017898CD4ADDAC3FEA29 CBDD671ED9CD7362AB2F9488EA7B1344971DC9033C506861A491FD7B18A34E58 DB7CB49CEC63391467F2AE06CBC62FBCCE73C98FF4C8AE0836C092AB921144C6 59687F39A637533602CD17F172B8C3F99616AC64AC5AD1849DAB6BED97A4E6E3 21FA1E2AA313E440A14CFE662FFA297517FE682258C035F8BA9930543E95286B 5B6A68499A837D55FCDC67DCF70CCB27E3458C2C8B3F6EEE851773363793D34E AAAA7CB765826E531A220ED8AA8E44A4F90E9E55A34FC065EFD6BADD0A169399 3088552DDD4C3440E13A76E153F2ED7EFE58CB2752C43CFFE8716C488DF373DD 9DE10ECAB17578D2144D8E805060FB14A8ED77B8ED6CBF27297B87CEA5BF5055 6472903907AEDD9BABE1139B9B4B4370307238D303ECCF4BA5BE015EF0293FE2 7E698D4B4215CE941BFBCC7422E1690B14BCA1406A9E139815F191D4AFD5EED0 656D109402F8C1C0FC9C1ECEAA855EC98096AAFDDCF3A44CD6AD9500122EB057 D6624F99EB8DD923CE75FA741634FBCBE10845B1FA837399A94E05961F461E82 31326893ED76F99070AD3FCD95328EA03B1A58AF696C9B0D94EE99292AE96309 374AAAF9597CD7B1E435CDA2AABDC315DFFCE82F564B4029B8E37F5E00C27290 A12F062FBF44CB20D8926F07642D4FA2CFCFD7D114E1626E546DA6076B41AD38 41D1FC479AA509A89840CCFDCC269D498BF925AD0F4072A7FA2C9254A2F415D3 9EB8EE6D79C90A060E7754B0DF64EAB1ED64798F7D19A7DCC1FC49AE03C4B0C0 4E5617B1906D3E52A43804ECB3C49876739AA66B3853B8C2F805EECB11A97A70 DE60B4BBC4E3331C2585FE64054B565E26DEAA1FA563363F2D11D1CFAAA4827E 3BBA6EDF1205C0BEE778B1A4B5946CFFD9EFB3A60543A8467C47C3D0FA35B788 B2A50C5CB0F91174F16702EA5FD8B36871BD8B6826537574F6F85C1C9A039061 06FF4605247509EC6933D74DD654C660C354AFE0F32D6C0BE5B4D2A63A5DF487 A4B559B787D893BEEAD6BA13D79E6CF33941E50101AAAD420984F5CC851CFC28 4C3CDBF72F7120DC15AB412E7A0D36032F885453738030052F2617089FBE3723 87E1B8F607419DA5BE3CBD1D79044676742121F9D17CA9F5EE501810F2FDB232 B0E68EB9291D1BA65F3FB02301545DEBDDE7288706002C67994E47C2F15A2DB7 D7D21A7EB139CCCFB702B86C4CA01C280FFA1E9869D4302B78A863A7B0D13848 31994B69FB44E0740630CFFF16DBAE0E82AEA753042CE71C7E44FE6F963C31C8 0808570318041A50E28927DD18BEA4B4D9525835B34237A1CEB6B2636EBADA89 758FC7B8EE3F81D0648BF9CCEF41ABD66A70D383B40EEEFFAD9BC8FD0768FDCA 5032E6ABA35070444C73B7CEAB31BE047C51BA5A0293FE9D6D21A00F28EB7CBF 8DCF3F5864E1E2B38C26133AAE5F5FA73AC6700E0D275AB9589C2F8DF458DD68 2EAE83E4DA78B0C4482DAEBF805807DF2E433DBB72B71EB5D176E079CFB28A07 AA9CB9780B0EB7B78016BBEDEE6EA1DF160971BDF39308A8BCE50532BEA0D3A7 2982243449E6E8B6C4F20B92347514CF6D1C794A0EB4355B9C829B13DBBC8146 B445FC9CAAF449C1A30900192DBD58CB4C9096306CC2A291F11601EE9D763F45 273E45596F9B22C6440B75F613F9642BD5E77DBF7B2461AB528877C71C56C6F9 7AC5A0295E6ED3A4EFFDBB7BB94C56A5F12D699C20574B688398F78AFD3EA945 936D2AB8FAB7E6830D44D7EC32A19E1B11036C9833C1A8753B20380C24FA2C2A 659E96E407C2068EFF13522C0C502878EC4E6815AE813B5470D3D7118076B8FA 3DFD1E22DAA48986AAB5434D842A244D2FDF4F7008E521300317867E4284B6FC BE11FCEDC5E2232A02B7363F355EBA7EDC7B4FE4FAF3561CABAA4C65F169BAE1 A8FF89C44CE09234F6617B447B7BF0AB383D69965ED8291CE38087964ADDD7CF FD92781EAED2A8A92FFC8635845A04A31F716829514750C3D0CBBEC279F951E3 EA88DDC1737D4EA067B7A7953C99FD08F76832BC2B56D885BB67DA86470A9FCA E73A61FEBBD60D762E18A6576B0C5AF3F34D3911CFE32F7A451F29A4D1599A46 2FA30BF9E24F5CE35C12C35C9A0CD12104C8D81FAC551B3FCBE862384A1449C7 AF64CAD90388765CA87FB905CE6C5289C6932C40F09AA506AFC1EEA6EA933A7B 0D1CF41A46249CADC952EFF95AA20DC5D99A394FFB90D3CCAF0B4ED71BB75CCD 168B08FE5BE279C507C635630C00EB634C5DA73D8A1B0EC097E9945C5257A26E 64D61BAF1DC7CAB1939C1DC3213D27BB68A8876A18EB6BB11BCACD65D34869EE 20ED370052514C5EB82339A8A6467E0C847D76003555689C3687E800D5B74CB9 4A7416F8DF1A7DA0CA4B0AD72A73B2541FD3FDFB16ED4623FFDFCC8077AD05D2 FBAB8B93E3313BF9CED6D71C9D37999208514799954C8F00E10E5F70EC3ACE81 85451E616688235DB418FFD3AF293983E312A176B00B1CC2A1D92CE80F228E39 89CDB1F4F609E792AE416340F4FDBB5AA1ED4DFF05414F6803A2696A8A04EAD1 565FD6036D25BAF6AFE28F93217BBDB1AF1D676BA270D5C598FBB5EF3B69E2A7 B9C59B48EB84991134C7E362E1F437D8FCF9A1FE41A81C362C6B7B17084DBB73 778D3AF07AC3DA8E74D38387F9896999D3F613F0FDFA746E2262AA278845C790 49E26699E3B1BA7591ADA518B59BDAECC087BD36A3BB2B258D47CBD73BF4DF0A DEDB3C56816862CCBDD3046669E8551BF817CD0D50D016EF8428C42CBF1190CF B69B950E7B38416C24E71F9B8C4375A4CD0DD6B9DFEC5A96C41254E53D004DFB 0FEA9BFD62B898EDD9B24AE6EBB1EAA66DA31E09B737F0C0B18F622390CF4EB3 AF24B7FFC5D70C9A72BC930A353382C63C568243CE60DD62C5CA1B4E6E056F4B B962F91F4FBE6D207D77B3A55B3354B7C5042F198365851997F37E100C9618D8 248739C6F898AF5891402BE583E8AD7FC67F96E21C19A34DD846E0C66892CCBA B6FA3532D36BCFA7BF955C1EB3415C9AA7FBC9C0117E15F9E0D1306B678083C0 226B2AB088D5652C1AE8E1AA71A256226A7AA6BC7DB602C71C5210A22E9F2308 050F0FC9C59B89345CDF50C281EEDE0E5346B72CE4CA84C458915C17C7ADE1C6 CBA76194A7F5E0DA232A7D183E91C6D48060BB1C2978CCA2BCAD8261A0A399F6 352D5276EF2F6C6F3EA6B8CE3A4870069C27DF4D73DC8DE3763E97F276886829 30C62EC1F83DDB25D48E5FE17976583583E49DDA0D2C77727060D189D26C5711 6BA108DA7FA90F89FF9C5AB0DA9142AD67DCB848252B578E92F0AB20ECAFBC4B E7BCBF537A07E17C11D53F6B376001CDD11CDFF1D9327BA5CF6D2B97AC3E1918 D27E04D43434A949BCF4CBEF77096E2B2ECB417A3026E4C4954E03FAAE7C0195 6C9A59132E1F181D1BF8E91972839E2C28D263F44404AADD9F6C02B4AE1E1184 BAB4D94935A8D183537A970A15617412DA40767C323F50C175DD2064E7291AC5 5625470E63278017D5DF5C7C30DFBADB5B053738253744696DA1400B154520DB E3AFF7A52E0E9971BBF79C8D3347B63EF2DE9B79AD7AB964486F84B2C1D3CB5E 608A2733C3DD192A5F4AAE620337727F7EC971E753F2DDD1351F8F9674B4D0C0 3171DC14CF11AFB524C9665654D6024B9E5FF60053232622ED213755263A071E 04E806E27700EB465017E83AD8980FA75AC30CE5598583EF9769C96A5D4E460E B366716B711863360C5EBC15E07793E8C3FDE485A5B879C7815B646A39628EA8 9E849D2160B29801D01D355A5FD18D3D27B5C3D536B87307C25B821882136449 7F3CFF16FC6B057F95CEE63DD6D2433EE822286D043DAFA6AAC2224EDD19D6CA C9699C76D627B686B5765820A6405A18407A3647B87FDD2077E0FA5119CAB973 333F515584F3CFCB158D4BFF887405E0E4C2D6DC1A7FA79E75143022AC945ADB C48566779E03C9927358FB3772999456470D2D845289A18F647AF244ED5648D1 9ED095934C521083ADE4BF6E8DD2C63842F6F75B2BEBEBDE8D48AB4EE58F65C5 36C9D2CDB7191BD6151A989B3DE3614B558E0CB69FC5B15ADA99189CF5A34CA2 3FDB1F25073DD10A36C8C96E720CED32629ECFE76201B40407019A2817EF57A3 86EB6DC798FF7A2EDD237831183D868E5C8798FFF51E97CA042E0521B954A64B 3A7FCDE7207FBC00B839E3DE532E61DF46A9FC21E34EB7946DB7F5F4872ECCE9 2F712EFC314E8405D352320B5AC1707AE91067B07C9E01D34C3E4C3E01F18C84 E3A41C74E411E0EED88EAA173ED9000B2986C49854C71933F73062CDFF70BB05 3F282A558DA81A4243F373DFC56C853E7BB5992B238910BF7A46D23B3CD0240D 5A5DDF1074BF7CC9FD024A3F1A3A9D151148 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMR12 %!PS-AdobeFont-1.0: CMR12 003.002 %%Title: CMR12 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMR12. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR12 known{/CMR12 findfont dup/UniqueID known{dup /UniqueID get 5000794 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR12 def /FontBBox {-34 -251 988 750 }readonly def /UniqueID 5000794 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR12.) readonly def /FullName (CMR12) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 11 /ff put dup 43 /plus put dup 47 /slash put dup 65 /A put dup 67 /C put dup 68 /D put dup 80 /P put dup 87 /W put dup 97 /a put dup 99 /c put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9C535A5E57376651 F6823308463DC4E0339C78699AC82C769542FD3B410E236AF8AF68CF124D9224 FD6EE92A38075CAAF82447C7AF41EF96F3ADF62F76FB425BEDE4C4124E7B1E0B 8BF254D91912D3A99557F5427907A56514C5A3EB961B94112077FE9417B70DA0 B2E1C1FA3E1D6F01D11F640CF848E45BE3E205258E64FE36AFBD4DF4E93F6B1A 966C8E7FBE2CC8FF43C1F67BF6C361678B5E90F4BA524FE8A4CAD6AB28183E6E CA6C9636E884845105595A2E40CDBE8D4807A81AF4DB77B31873FEB221BCADD4 2C4669459704CB58A7BC230FC59F867EEADE660E49AEEDEEB042BA9A7DD8193E 56C3A36A1F639F7EA512EE4BC6992F52C2FC82A890EFDA730105B0AF7B819295 EE00B48F64C2B5BCB275B1DD62F289CDAD4AD9B7EF057684642FA6FA6322C277 E779CAC36D78F7779CB6DE12638B3C65B70C6B5F8A8C6421A379719B8DD44973 5F52856A4A29B2ED37F2B1FBE6EF4B79B7C0CD6395C756A00FACD763C235914F 847D1D99831023CE1FD89EFEC83AA7E313131C0C197248605EF5BA773D0A4000 72F607551A8EA6F0FF19441ACA179177D1FF7B423FEBDF58B0C19CAE3C10EEF6 3538D8FC4762B77C5AA023A8186C40D0365A4487DC3564265B3DF908572DEAA2 57E29EC669DD72974F806EFF5ECAFA9ADF1F9D2A63087FB7BBD100F0F81C6FFB B1EA1C9DD46548AEDD147EE64B1B4894972DAE1DC3E8569D6A3CEF9F9E46DEB7 547E10BB2959D374A33E47C58F1B20419920AB485F166062FCCC08EB5CC9AC88 F388F0C0155027B727729488E44CCABB7064A1432E179189C4627453C5231535 47D1F2B8BA43069696830CBB6E5F9A135CF22D3D1FE490A3A63C088EA32FF444 24A2427BBA63033DFE2E06DF8CE67949B6AB02F26335A376B57376814D2A7DE7 64A4347577EBE9A6E33DD2FC214A09C6D889C8FFBF1D567032548851B8F97204 49E215CC7D222F593E1EF1439ED60AD922D41E0E9EFB5CA48F2FEFF75AC5FEE7 FB6676D8B8D4DB6885FBE8B61B586313E4DAFB09D94CEDC0507E93000104F3DD F83865A2C6F6A7DA8562BF86F5DB233CC9B53391273A1462E40876A8AC2B098A DBADD5A160DEAC061F86A5FCCAB495EF8A9D121AF07928EAFD56F618E4EAEA97 CF89A3AFD406FC9DE1E9769C1E1EB83BB883786BC075EB5DA2692CD59C4DD7C1 7FD2FF9B18AC740A390C1DB38670DEB18C67721A1DCD502FE7368F47DB4281D5 459B3F020595FA3B10544AAE9EF786A0645FB7C9BB29D091E1432CD878A05918 1665643005BFD9A4B0FFD347ADC84CE22D6F9AD4EDC05E8C7179DCB360AB57D1 6ABCD200A4B4AD56825DC345984D9A3DE11CDA5E9EC1E5006EE4181E4EFE0846 67D8C27BEE8F84A1E01947E945BBE988702DEB2240C4BED952E433E5305484E5 71965D3DE95C4115FF78CE9EC18E323C599727C8B93CDFBCD1CCA780DB8C81ED C4B5E596E1603624308972FFAE9A57B0EDB51FDDB6E23EDE2946F61BEB241345 2A192D8CAD53E823D687F9C64A70A4B4B703291FA6317C051DC6A44BCCE0288E 3839D726A8F2E39BFF429865E95C726E808E02CD06F36C1CC9AC77999F8E28BF CE9D74B699CA982479E9D0DD98EAB24D29C981EF0349721D6819549A39413801 F80182D567EE316E2F0AB208068E15693E4C399A381BF9BBA625E597E6E109B8 16F3A84C8EC92F2ADE288821092A421A8D3B907048FE947230810F0777EE2542 29A3485223FEA079B359034F70464DAD2F0E420271A4E0CCF57A0ABBC20AB327 0CA71B292126D395E0D083B19BEC6B48A9DE2BF470C3D01A8C3F52075BD4BE02 A0C518355814478202FD4762EC542F8E7B9B1F7824F0554660CEB83E35635E1E DF0D03C94C903ECB36B4948ED98B6324E0094EB1DF70863142D4ED3A932D7346 39D69F8F044B6084482D7748C27328AFD24A3A70B99D1F7D32CB984488672254 28B6A9E9DCA2C9FF6A1B311D72413404B3CE5428BDB7FF3C36357D7975184F56 FA6B32AD54C37D0AF7576663AB1397B80D4E998F0B4C4F6D90B483029EF2EDA9 D4C4204C1546EFF3100629453EAE01918D09FE104E626ABA38646F17B6A94CE8 116BC7A8D9C319434CA5B830859B4164DFADF1D7C3ECA5C78D8DEA930EA4AC3F 59DBBF3148C91A2E807FB934E3439D4F67C6DBBA9972854E6E3688E1E0A34B74 482217CFE031CD7B5DFEF727C3EF8DAEEEDA08F4C90289E62FB2AF2357EB2E45 4BC547980FD479101FFEEE477AAC6268DD659E8DD9E244676FD3C6909713B71A 323B211E571BE711D103FA23B5B9AF077D84E2D20FEE805E81D20C03501F0F17 C3B081946CD0FD577F00E50B76CC37CFA97A61B89C25DD43911B28857284BEBB 5BEC61FFE3A14C64BC5425A7A82326617F6F1FA4FEAE56071C9F559F91568179 46369B394A5CE96FB7420FF8AB7C61CB83492FA5AE4A4B0799578594C9EA67E1 E54498AA5CD6ABA34AD3417F04F5D8D664A7EB39D41E2D17643CAEBBCCD9C38C C5C9541641A09335EFBCE0D276A54253EFD68141807A66F1DFEB4BEA5889FFA3 4D20BD52012206A9F8D3E0F6AFC03FDBBDF3E51506EC6336E249CEFB571AB84C BDF8E471E3795C04E38A5306BA6D450D72E50910D1AC385BB06CCD4B8E433A32 5A4B7FACC976BB31FCAA1E62DB2C4FE06DDDE7367930E336B49F47DAD91C8735 9A35D80CA2E117E86B52E41E9278046ED923454989E48610ACB3B1663F197117 52659A9D7BFA561C7ACE0771794FC778675F83C5EDCB132AF124C7E6540A140B E0A268836C73A3C746DC964E482E63C56C0D396515283970FBFF182F9F684FE2 655FD8F5D057D22246DDC3FD11B77552DB4D90ADBAB77BBB1FB1592129DE0AEC F822D7D36E52BCDABBD560B403A5C56C5E1BE789C3AC049318C7FAC5E5861E42 FD66C3C0F46361078D7E036281682BCE9BBF77983C93ECBBEBA9B359769CA442 87FCA1B98F4EEC4935CC93B08AAADDF355C99816453587310F08C50B9BA3D107 5388A1F3AED2AE32BEFADF0285DA90436D1D7EA85D7B9B6DF2AC4B778CFADFF6 6EEE54D1A1C5DEE3CCA7EFF57A7C2931933CEED90CA26DAAB45E4388EC4DC366 B9E88518D6CF094861D2A59282044CC06E63EFB390A6DF4BA5EAC7CE39E1EE03 3D84099F5BE96612789AF3EDED07266EF10A0FC23EA1EA97040B6BAA63138B1A A9CB8F5DED781260962D7618EDB200C3ED976033E8967A8CC676E9C11F74BE34 343A7ECE7EE97E8F76F7E95517A6D6163527406EF5A669535CB2BF4031F29046 BB2D0FFFB47A576F5EAB1D00A582965C56F28C00B3BB7BE2CC8D8391F789070D 775EB775437F0CD53DA840BB3575104B63E4B0BF14E3F14B320EDEF65FD4CAF5 8596DA491BBCF3153DED3B718F833D106432DF8DB8B8E6B34D5308C9010A5DD0 7E0E53260BB84BAB3EA748E8D72F75901604F80F4416920D69B4B983DCDB72C5 E9928F01A4A85954FD74578AE336C782CDF81D1EB7EBCEBFBAE7ED8AB4862584 397928F502D65139CCD582CF0723C5262EE54B9D2B8C39614652A8A90E1C3B65 7D26B99DA298FE4B9A7E98848F619C9BB4FF9FD215B72F99506F06355B332689 37D80AFD9F9ACD8172CDC51FCD3A759ACA0F7D4EBB07840840EE42C2D5B8B257 2C6DB3A7657B75F2F0B9730A20112745703E2D0FE709436CA6A5F36F59E64D9E 37C0A23D6D289E1AC1DA273872F5FC5C3DA2B127F078A4D7AB3FD7E124455817 DDC796D54EF26A1FBFD539D3A21B86DD4477DA49213259ABB3FF241424F2BE5F 89151E02FF87E0BEE26E85C0E518D8BE7CC9214B8E9A9EA1DBB49C6C212CCF08 90C0F23E9858947EE344062EBD9C574979087439975EAD4E85CD7BFAD3C91CF1 EFF577843AF1427D06CB2F3BB519ED1591974218C43F0D2038665F9E2E3960B7 FE68CD3CB2DB6B36C7997C6B21EC11CF1DE049541001FFF26D14C255E3AE862C 5A5701292FD2FB3D04523D6E2F3547923BB117718DFB6E6520F0D0B5450C695B 8C9242CC8671B7284CB2E1E9EB097A3DB1B4D5E8EEB93B4DC7E38C0A10474665 54DDCBAF079B92EA494F6FA75A84C5AAFE280284D0823D7C22249A21044BB0E6 4062074ECD17B62E03EDF4945A294BFEFB51F5FD870D9D7230FC91B83C1D85A8 86CDDF326FC90E04362145D6E8630C50594484FB829DA18F5C078F2EE67D2F2B 08DFF39AE2E8C9741FA989AE494C7166F122D2C5F71B97C973B7CE8500E9F87E D59C30F2E99CC4D34713DAB680598F41955FBDC26A14CF1E73D6BD6B9AAC8D3B B998F2D0D647356CD236DEAD6561389ED3A6746221B0CF15D6648412B35A6B54 6A0EF5BBB34AA376D9BAF025BFC650C1B74333CE85413D0EBB2F4D082A26A5BC 3C0A25D2B12CB159F140E00E262F1CFECCB2C802FF94CD34DA0CE9B4B3830FB1 DA85B9B670D5169928990A2E9CC869891CA2FFAD9774E6B92549644DAA5FE00C A5BE4F5FF91A0B6D2FD8F96121D766391EC4ED3E73DADD476B7DAE1A50AFCD98 DB7E27E44D30416088D9BC07D4661D9ECEC0806830ABF14CE55AA3CA2DF66E8E 748B8ED46466F1EEB072AC0674FE6FED231E0DDA59ED7C42BC05EF00E176050A C4834D893DE42474EA20DB1E25059E84BD137EF65A02CC295B0FFDE4CDE95879 0FE88BDF2519ABAE7F8CC3E6386ED35E04A14F1E3861922645E3A3F43B48A5AA 1999A5EFE192515FCC625C829FF5A7B337AA422F5E920545F9BB269C869A821D 6C4C26DD2AE746EF0F0B4C1E7E9871ADB5270E1CA9BE28225F7A0370D4C52422 E25263EE101C4EC1C7811B05AD42F364844A56BB91EE72FC8ED53CC6954D2BD6 F945D739BE4C61E36143CE890FC0CBF2F610018D678ECF7CEAB18FF5A0E48F76 FDE2463D40A99380D679B3B76D39C664F4992D23E5988B0D1AF33DFB04894016 E852EFD1EFFE586153C0F31ADBDBDE3F73FB49C5EE64D0D02E1504248FAFAC3D 903FD44679BB09C30288139B41B1E90A10139CA3172677250B16535A1F3E5E4B 6F4264DE58896E66051FC677030A121C5A285C47B6129CB5A3998830CE070D21 2F093FC1B44089F603A21F45F60960F134A47226874C737EF6C085634B0A4A66 139420501351F737A73F39D960EC38420BE46E5B09D298E7C16B8E32F01507D4 0141FC52DA1DE718D634AD9C8B00E46EEEF84356759324D2B9A3473C5DA38DE9 E30182B87F91B6A7F7BACF29A93B44C879CCDEDB063F9D2E51E0F1FC9F018FE1 2433D85AF24B55DE3A61C4D0A2DA4FDE933F5F6FDF17E9FA9932BFC46E2D71F6 585EEF5B2E4E89E797A24B799D7F064DD1A817A53677FC9EB8CC3E7F93FE50E8 D50E3191052943FD6C98B573BDD1F6D70349E1F8011599E3F8FDF1D6E80A710E 51E434E85801617C6FD8ACCF1B77B4BFCCDD35CB4C0367F4EB4D8D9DE8284D5E B4F43E2F8320C2C5A9AE90ECBA7E65D377E91DB69FEF27069235366AD3E126C3 A73CE97F4C90BA00D206FA012C327FD69EE59AF4470A315B1799CDC0539BF90E 512C8FC3BEFE4D1B01D969EA9E3FEF976CD6E0FA4C9ECEC955B265CFD58AB8E5 F7371E479279EE14B689269205C5B506940606CF3E24A1E7EFF3CA96ED30AD6D E243DE57690C3D69A401AB3315FA49E4BF4ACD4DD1CA39272533E82EFDD508E5 1C2CD286CCC5DE1202C7C7F654521750632EB637F918667E2233A43DF75239EB F28F3129EB5DEE2FC5BFC331FF709B0FE9B327CBBCE98BCA2C861C6547E50407 1218CEBE6EB5F9BABA4F2E11BCC6FB553A544A567B459E06375102C69F8018DF BA6A227CFB13E2D74E6A521E01B74F2963E9A0A1C9FD87A88EE6356E3BFABF55 BABC751D2BF85E6712E8EF57914920775906662E4BA68FFA21AD422D34E15578 43CA0568B431101A1194F8AB1EF25E886BFCDFC10F4A5EBD9530816548BC298E AE4A0B6B52B8B59C644C409B4191B6F4203F52314F2675F02AEB65A72C66E92A 2AC703E15D8D381522C0AC30C165B822A9B8D18CAECC094EDE020756018DCF51 D0701B507519C4270B70D8CE94B436F640C15872F9B5B77892AA3D110E4D6A65 8F0815C61A5127BA25815378683F46E69E54A391A8675977E7DF9C2D4E6FA991 9F029E50CC2F266B31EE9F9F24452D5838905F330CB7E416B8AF836C5AC26AB8 BE2ECC6EA4BDAA08C30995709E225C21D35DB6369167602CBFA8DB2697635925 969002CD1BEE745DA2E56C17EF3F0C05E3847147F86963C37A221C8827195A8A 3D38993E4939AC915BFD9A212F5FF3F826F742B952018986F9FBDDB69C3AC65A 845F7F33C55D4BE60A1817EBBCA7E1538E8087E1BD5C083A320D52953BE65F31 E8339C612A510B59CE48D2EF7061560C4AD258E7DC59694493E3AC878246F37D 6DE89253EBC8830C6B209E818213C4AC4CF1F391AD91D57BE76FB0E2924A1407 E4A949C905E44F54EAED6419F13D59942C8079336A172D4758BEB5D3E786FB93 3CBE4FD2EB53E4E1DAC34E821EB30FD44BC6CB4298242C38F848FC23AEDC9733 52BE6F32E31E25F18301370F8936810B0566B664B042C7AE0D78ACF0A87E5BF6 F9B66E358168B2CEA30DCD940074F3ADB793CDB136161FE2522905E87B8E463F 95D4DAB7E14A3DF7BCCE8141C5A08FCFA2BCE9F2D1B05A7642E75877EB840149 AAB007CD239AE47AD115929427717F219B0A8907F0EC79ADE1B901DAEE87A2F8 39361DAB43DFFF69650F601B24061A9353CFD619FF9626F63275FD09A5B13BB4 8B3379EC4D147C41197E8387FC04DA7BE409524CEF74EA91DC066808A7FD0EF3 957A44E2503EDA67B1C61827479486134E922E560A673BF314D601C66003CD07 55569085AFC8428389A140EB976CCFB8F29E27587E46C413ABE2EFB51AF5913F 53EEB74063162E0BA1E24CEDCA320377D3E11BD374F0B44E132A5C35835B6E2C D32948EF9DC7931D104C1385709DA882DED6458319F21C2329938396BC074106 CB9CFB9E0A915F8DBC8435F386917AC87A2BA45D857EC30ECA66FB4044F5439E CDD556B82A0E43418D179AD883C85AC276E1190CEC242E3E1D86E725ADC39E46 BB6C47FE9E17E29F8EA81E870302A00D91434F3B7A05F243176E6EF1082541A1 B9052191EE5C2B8E94A2E02DB65FC769653CA8D1C07A13CB853544AEC7FC35C5 218DE3128AA31952DCE19C55C23FD69BCEA2C661F57B11B8F9E86BFA718D1521 3346E78C701A5E51923D6D937E62FDE3669B214D240538F069A100A542720A86 31DE88116DE775F7ACC2A49EA6C02A24408271A846990669F2AF60AFAB4C16F9 7F4E88E917F0FFDCE68F22998AC0AF2A60A73258C3A4BBC42A2F918123128195 196D0E150D79AC3CF4628503D1F3FC528265ED8324E56849A47B3B07C29940B9 1BC270071E221D355EA51E9942D3BD7F99816304FFFC8F5B036C953B38759341 ED5D7B9C8E6B70C409DD8362FD291201CC385E4A98D73E8518A4C0E544152563 82032FBD2FCB6E403D34B85ED4053A8CB619BDD4DE001F4C3007B1F317579651 E6D6662189CC2D95AB85D7473F65C5D7B4AC63B0FE928F3400035D5A9D443D0D F3532B99F3AC26CB25EA3CD64C341159061E02EFBC7C033C05CD919BBD827A6A BFCF3BD739E32E7FE909AEE068D50FAC33605FFF98C7D0115FB860178FD03DB9 7985B78E0AC21F2EA065FA841F5928FB85163B2E2D8F850DC7EE313912C45C28 2783F6762C67882EFEDDC7E7567F91C16B16FD8D5A1ABF35B5586307701B91AD 54984598F2AD46FEE3D68A2731BEAA754C8E730FE0E84952EF77930E4118F8D7 2F3AD755280F260CDC2CC1849CE52FA724CCE85B1E92D0C946712076A74FB2F9 46795C131C157205193A7B6C88FD9D42B1F0459F8F23371BEE01DA1A65D57EA3 B8A6FC358B3492C66D5FDEFEDCCD4D9F9D410432FAE6D62C955FD362E6C44911 7E177BF690C9086CA8C061792228328DF86819DE6D6013828889E779681E0F3D ECCB22B03269A52FBC34040545BC919856D2E279DFAD1CE0973BE88488B323EA 7B8923C4DFC66837AAA5B7481A741F3D7276DCA3D4B1F00C6954B5F3522BF258 E7549560A156F2E5EE583B581ECB6E46DAC8514EC05BB2673C2D71B3D3FC73DA AADED1AFCE69D521D4709F6F1AA6A1587FC350DF274B3FF2F05F9D987A8A0BCD E032897A57AE4CD958992717B4A0D97056EC36A1DA9990C0EBE5CF8370258DF0 045736C9FCF544ABD2933EE433D8CA5ED1FB4686E01B3AF9A51C95CB3A8CE07E 570208CF8D870CED5FEE79A5C8DD70DD9E8852774CE4E4A15F30CACF73230EF7 F1415F81A93B0519E271339B2425B5AA818D0B19DA994F14F27D0A8B529995D2 D639359E1AA3E39E18594C18BD5786DA5F8EDDD89CCA0CE0D176F9F469640110 0202527FB7A010A288937AADA33B68C62C13C8DE2941AB427AC2A4A363D8F7B0 AF6AB9FE5381BB0094711F02C1DA26438259A1AFAA427993D4EAC9918AEA60C4 A4F599A90C6ABCBFB2AD9ADB27924E5FB12E4A2DD8D1D497280099B856EDFB2D 16DF718E1BB26E9D831F0ABAEAC3278D276E88311D8FA9F8DE8888FA54109326 931F784F42F625DFE33350DD39FD4576C7D98163201B48BBC7E2254BB81AB8F9 D120C5A9EAA98F4E2A3239FFB829EE7048DB22E916445864ADCAAA61DC814F89 3C2959673837E9A2D82C2558061AC447C3CA012627B061B8D8103206A16E36D2 71733D5201EC6CD8CD13529A206AFFEDD00D0131E0C7AC1DE6E75592516BFCA2 AEBE22FAFEC62F48A560F22350FF0F04A188426588F018C26F2572FA6B5FCB40 8ED42B657076EE86E9570E99C110FE312F8CC4DA33480693D9D33205B7C57F56 FA7796FCDDD4D11A0C3BE3B9E93078022CE894B5732725C02F5AFFBB7F0AF2A3 D16F24E2DCABD9248548A7B57328914044A521E1D7FE555E1B667E5A8602EF36 9CD12FCC80575FFE91CA50A713B055CAD7064342429F5B4574DB3E3E19C223BA 79BDA5210163E5E02F7D0C40080521192F92979DC8951021F9F12D1E73F7B078 84D37EA6B1B67B0A5DEAB7CC9353C416BB190633DF74BB5A85658FA8341C2301 621AA2E8AC4E19C1434C2E16B640991069CDA2F850B1D1FE8C62A6E727684E42 F65284062B7F4C695E9DCD3623FAED3858B6179AAAD52B83F441505CD875EE77 55E65FD7C8366A13D62EA7A014710CFA76C81BE726C0831F2479704812842C5D 6DD7AFAD5B391A2F1B68C4096B27F8C33267CDE4445B769F567F6F4F246DFF2F 68177A905E3E8DC4B95A7BB91B6C4AA171DDF27841AF31E9B33E4C1815BD5302 F647D0BFA5CB5DAED42B724B6EED1ABE8F7C300F013459E559C4EFCF0210C91E 839592412941187C3EAE92942F7596E942B87272DF8037471E76DA0C1C876685 31B899EE3E27FF24DB0130D673C6903EDAA930B046DB025C4854FB0471873D0A A250F07826011C50E16DCBADD71D67052FA3E2A54894114FA8C2D179820BBA73 B6E6F4A3AE4012A4F581526262A75BD89C082ADF75AA0F54A0398B33B5A32132 50E4B40A06074EB43CE6DDA29117E5ADF556AD9302F0B259B6E987FFAEC300DA 5790CDA3AB110A83AE34D73139DD1BECF879671D1861AEF9FCCE09526EB67C2D E47A05530509C73D7E53BFA03578B8EACCBD89FE19CBB7A41F8438B4F6181557 EA597CBA544E97B31195E1660854789B0186E3344EF4EF9DF0A7C2ECFDE3682C 7EF5D88E8ACE435DA4A6C829A78BFB5029EFC7E61A30F1C7FEF403393528211B 76713E696D6F214622DBD714E1D850EB046B199B3EB16F7A6D2ABE0319E59EDB CAF76446D7C81642DCFFA3D64F6754F96A9FE30365E842B59040B7FDBCD0F559 93D73845264805D0EB64D189843C5BCD5914B86AC72332CB3802C4421E68163A 74E8407B419315C5FB71514EBAFE9965F578723820050095AADEB351A0EC3724 85D894693568907E1EA7BBA407D745251F7E806C8BFA1344A2C5487F807D8956 7FC44A28527A3D25E82AC346213348003B798B31B51B4BAA4103C9D01624335E 61465B72C1608B0BFD1FDBB88BF0E4A1686472D10FDB6FFB8788C865AE51E8BD C85389B8199BC89C7BF90BE33511FECD2325D47C2116443E25A4FD7E22C3CB38 39B2B9CB4E3734B22E5AADD14480651BA7F68FF62669497E4AC533C34E17E699 B07C45791401691AD99F2E2B17FE83A9DE4FF2E6548ACE97840FDD94F50CFAD2 3BF82AF0579C86603949396632ADE22E9D516B370F4680A3839BBB4613EE9E2B 406A51B6774696F121E6811951A6392B1A392530C7248EBC0776F348AA44643B 69071126F2592F3BE3F083C914A0D4D912E17A474140995C3FECBCA4F89C495B A452C474E39511C2E1189AD6F46C77DA78014A5FF07481BB00501C2B1C5479E9 1A6EAC65E305DBCA5692D92BDDC4CE14F7965223514E4817A99534478BCA3A1E 7F975A7514B75894C6229D18146D0E056CC46F639B8252A524CCFCC716290C81 C20287D9FA4E4F4295CC30E68E0643393F8B0E77589AD9FB17544A9746151F3D 6C794E53FCF340A562FC9EA6022056BA56E04B5D2731963FEC3E59B843572353 ED2E01FF4C3FF4617D563723969526CA3AA7D6BFF7AFA63623AAD3EA2319D39D 7AB354C7E093A0A2D0F3DF66085AD6B116B828319F975FA1B8490AF1C1166B50 E631B1C9C4261A237AE51A99C1D2100F4C3AB0C796459DA39A2271C28E12D46B EF624F24B4B05A08127C56552CB8A0C99DF5B8B063E1BEA80490A32613FA8A3E 7CA674DB569631FDE3B34C566EEDA0E8A58D6BB1468F581348F125984EC45844 A411C90FBFD6298970378C087FAE5248A72B221137E95B148E2E4FEE9454F15A BF57E7A8134E62E31910EF94E459AAD7129F55B31322EBDF0FD503096A78E575 AF994C9804D489868FDA043ABE3BEE83A8D2395564BB36F4862689095777FB6F 7D067CD3FD2F1ECF917DB6F06EA2EA23FAAA019BF743B76991C5803BCE79EE23 4F7B29F65B0E80D2F51E7000773D4A5015BFD5DD9FC4EF2DA66497F18F015B75 BBB8626738AECF77E212D94BA4DD5971C18A21328E024688C662C0F6DA2A499E 1907CA627DC0553EA6959C7BDD4E8ED4DA91E2B7C27B56FB3860D1C7A4899C75 B40B37AAA6A3982020AAEE4C15D0F92FBFD20DC33B0EA9EE2E7E2D472C8D37A2 083001FF2A747BAA45A4D514C5BA6F18498ACA5C41359D2A887A1FE14BF14933 2E7BA4F23F9497ED45997FFAFC0F740731D2744C8923C35CF83D624742F396ED 0C888C1581DF5149A3F5E56CE05505F478038C898448236826E2465322D2CFD5 FDED06AD2A9FE64ED4507DA013387039E7C440D74B45A15B61FD5E911C44ECDB A8FA76F5EF68756333075A255F4FCB62F6C432F0A9AABCEA9D7611260312C9EC D77EC11E6CE3ADCB21C03E1FA439AABA33E3792D8E1055157FD46ACCA197F9AC 6E7169A1BD1D3FE5764ED1C7114C341FA93F30ED8486BA2A2C146A703062A8EC 7F8EAF984DF01AB24CDE94261BEA55A169FCBC4A4710EF52148F72E6BE860A2B 46225D1784CE8EF49097B77932BE502D0616A32F3D270A9F20C22F6BD09D7FC8 4484A0AC7D8BB62C82D6415790652484222BF29A04DAC8BD0419CBD986DC3943 F49352D13FE69909F60847586F8E5B9D15FC4E269867BA9DD3F909E298631102 A60B34C6DDF42E51073D4DE9AC8300E700637934A70CA44FC068748F46429404 91F695404F68206E0B10BCD386D19E8E47F5C47AFD272A28284C8AF4FC26B251 9EF7EB570A4CEB25E98F98C1914B9DBB0BA481B9747B37398EF15764BD437990 77151F086B3CC765D8599CF5E4A90670B006A5C3CED3BB1886CF2F2630585999 180C99400B7928D0DC5CE91EFFAC708F2D57078E1A7B247575D6104FE37C0108 69A5F80233AA2DA73344BB22918F77F83364B33AE148EF1EFD9F13EDC1D77A2B FD6C2567A41B7B4BF2C7847D5F21470B581EDCDAF1A0F8C20F5857B17E6181E4 E1B629B9F28D969E9312D304B463660B0A29169072D5071FE4BCDF85D713D993 3E7B78E643E05CF35AD1FCA1BA6957F395A0A2CA6849C31BE83ED9641EF989AD C61B3954C2DE5044AFC4D425785A3CC671A1CDB5725ECAF2BAD308FBE76C51D5 41D23F9D2694BAB97B780762BBDB14D7B70376A3CDC4B33919EF43050F0AFF42 4C2887C40F5429D7C1262A2F66BDCB1C72545BC6F8A36C7E925895F5D2918AAB 6B9BF1066D161B2260057E1A684B0148F6EDD249B51286DA1DED7F1C31FBAFE0 D8BDE35EAA567421009FF3BE6C97FB75F4A3B41E694B0950E0CBE331BB863144 A6BC32FB05678F3AC38A6E66B15798EEB813F8E3497E6D7C5735A3794C7F40A3 4E1EBCE51929696C18F4942CAE0A853CA9C4FC9AC4458171BD69CB2AAAA38031 E08F21671F113B934ACBC761F602E6D937B2D5652E1550ED93158D73C8383316 962346356036C0A8004FA41F1FEE77B67943BD50C4EEE507032E47549151C82C 21E87060BD6ED60486560E752BF479C26FD56E65288CDBE158C2D936B43176D9 564D13B1723C1F2343EE6D2BBF42DF70ABADAA18EB0B46B1B490512C13D99A2C 330A177982CBAD82F3345B63A47E9DB0BC2A7D456CA845C5730EF3690A2B6F90 0E888FED30507832A3CFEB7D299B7ADFF152E6BAC2687D48C83A1199E94FCC4A DF4332D1759D1ABF57E368590C638AFF9FBA978D8E8E63DE7044C8EEBF650CFF 75BDFD5B8B63C59469491CD7EEE1271BC4BC03E298BBA5BE96EA4ED39A27BE22 5F159D3FE61909EEDD9F68D1965627241C893B55826228E3FAEEC66ED14FFF3A C58C9027D43A94498D0CE2E575AA3676B45249084A6F7ECE3E63EDE5A5D75B48 C6234294C688358AE4C0DF2A487062AF9244C3E2D7980AF914B68A20793D90F6 4298040AA179F54897C679D2F78C5180CE46BEE81DFB579AD6290F9D81FB34EF 8297708F38F22B3F34C409235751B2CCADC5BC330C5A813ADE5E75AD85AE2873 5EB4DA3D02368222C8B8E24C984D61B19167BADB76741F115B15915E5E2A916B 05B6BEDC1F0948CF5238E5C45ACFCFDC32AECE4EA5B8CB2C1D63A87645C47A40 F244DDC330A2F04E9B4D167084649B6ABAF00856AD38A4C9F8AFEAAE5934CD12 73A31D7CF548474AF166A1D7EE736251A7F8DDA05FB4F4C50359F069C1B0CAE4 D950512A5FF9AB0B9D2A6CEBD05D23925BB6DBA855946B0BE70D115CF9C3E937 B85CF84D4CE524D698A936DF45AB567F084F3EBB690C1BCCBD05A34D932B58DD 51FBEF26618D221F1D565C0E57011CE687FB75BB98B992D061A22786FAE84C9C 240A30B93B681F8CFEC933BEA47E03BFE58C05EBFA30CA9238F0335606586718 0314E6DE0F0A4E56F72A761F3232913148A4E065EE7591198B400F761DB8E304 64309D8BC15E84CC1B8551AD81CE2862DDE3219DBC7DDA91785A7DE0BE15C471 1484075AAD246655ABC56FC29642BF0133C2F2FDAD8EB580C45BB03D8C967CE5 A713CE85997B38272497DFE808C3ED0F5A23862F144FEBE5F15594AB0220A64A 96AABA30A463589BF11D42276F64C2FACF8D4E454DB874293AB95D7469BFFE42 13A2E6C62E5E2472A0241EA6AE0B1F775AD11C67CEFEBE9E0B8217B9136FF91C 7A0DF3BC2AFE2959BCAB20EAAE245C01612DF4B9E9D001082E41375D3128EF6E 36584F1ED7E8E2C39F07B14AD486F61A177817963759D012E68B3EC43E289459 0D5C80F49E6A866FB89FC1896FC5BF776DB24668665533BC0FB0F25B27625FC1 6583C1CC10443B74A41C7DF2682B46CF1850829C5C634396114ECA2670DA8AE3 AF91410B33E6510CFCDADD409A1443B4ED8E43ED593A81274D6C474B22F002AD 79EDDE6326AFAF076DC69BEC5776F74803F748014CD294E91FB9469B97960876 00A51410973FE9626A794805EC371CB81E3973D1F066A04848EB0871C49D63D8 F51E7B7EB2DD396FC2B7E18619EEB7193A9854204BD917B518DE642717A4CFD3 D95FD2CA060E93CDD05C7F3A31D1B16424ECE6B41E4B363C36F0BE5FD12B34A8 478EA0E28136AC90DFB34D754F04737DC03BE9ACE43A4F730F5E9736683E7374 8E0DCA7036E1C92973DEFCD306BACCB26EB98A053A6E059366BD7F2ADC10A405 06B29A0AE8386F28602A7F3CF2A5A1317727EC4E3C1715C75503DE79B7B165BA 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMR8 %!PS-AdobeFont-1.0: CMR8 003.002 %%Title: CMR8 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMR8. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR8 known{/CMR8 findfont dup/UniqueID known{dup /UniqueID get 5000791 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR8 def /FontBBox {-36 -250 1070 750 }readonly def /UniqueID 5000791 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR8.) readonly def /FullName (CMR8) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 40 /parenleft put dup 41 /parenright put dup 43 /plus put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 61 /equal put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9928A7C95D3A6E9B 8E92F84CA0AA44461D2F4FA0F8B81C6F5B7BE98C9712BE166610465CF689DFAF 27C875C029C0116DE61C21DA0092D029E7DBEDFDDEE3D67E6936623AB53FA2AF 18BEDDD7AC19A19CADB6ED6CA7A26E6044BE414FFF59C0B98D5819A6B881F9AB 7AD0D03BDD5CD309C67811D5CF0B93F6FDC9AE64F74ED4E81F2E18D880BD842A DAFD0BDF06300201C6946087FC0B999447BC370200BFB8CA420B668B32EBC242 6DB1546A7164CF55B332FE9D239B65F532B69EF9F4F93828A44C8F5C526126F8 B7A369114CA68D4F98638121F4E17F351723D9F1A902FCF087F94AFD23876517 2D15B482AF2D68C3F31FFA864E031596E597882578AC7FB0DAE2A713B065B374 3E2E72519ED6D50CBCA40A7275A7109A4F3ED8A4566AD8832890D3D1F4899850 9B757442B7EA355175CD5D6D8B4152ED2D7EEB4CE30F174FF672140354046A45 7098EC45B9DF3DF5CF7B417E201DA88308CEF4CED8E8903AF24FB8DD0187352D 25738519ECBC70304F8F620CC45D2586619205DA3955696FAFFE2082402B3502 CB682F410DE5FFE80A4DA3D3BCF02E35BD577D0DE55E7B8A33B7A2FD5136B5DD A0BCB61F8E7F4363C21F890CF287304DDB8FCE7FE207C0D160B81E7EA662BED2 DFF8C444E19C91E72254257CD87240A70F1A964FA54ED9ECF27E27A57DACC3DE EABB92C085030870C6CF5C40B6E47F5C0AEB30E84A73ECDABB2D754EF6EA28BB 16EBD6636BC288E62F4A38BFB55F5F4DD20FDD77D767F6CB52F9513E8EB75413 07F1877B2C01278675177499E4E8EB09F2657821613F5C7643FC064293EC6E9E B519FFAEEA36B19C9D1302CF91FCBF87FCB57C5F995CB6712BB3D8681EB6F05B B2A4195A3C73CB4ABCCFB958EAC533BD89560D2790CDE1444C0F2E4EF27A529C F01052964E56F6D76A190E5FF45934BB711A3406284AF130D4DC0D8112BB3752 762CA0200CA262359D4F54C0CCFA9A50DE18C7DB14419E2990ADDC4A54B94978 D9174CA39434022FA77FB30179EF805E2189C35919F5EBE215EE2A00B4407826 CE56329C5586D8B414770BA5D45513C3AF1931D632FCE69B4CA504944E03362C 74A1177C6398A61A12DAA0F156543E2A8E9969C4308B7ACC21A5ECAC8F172541 1B1316A88C0C163E574FFD3CD22FF08488662FCF2F9344BC25D02146F36CA6F9 E2D0130C654B7485EEA9A110A33AA0C769121F81821E9A2BD062FAC158359D44 3F9D9947200EF1EDDD5860F10438B162A69683957300C75AF7546C70C97AB2EE 37EAAF0089E2623F787F252569B06C665FDB45EC9681C0774ACFBA76B98C4E89 7EB12AA5F8798FFC110B49C25E3A483ABE83B0BCC6DF0578403ADC369E013762 C9D08FC94D949BAE636ACA9F36F4E3F02296775A062077B011A705B6F1784D36 A926622CB3847533D7ACB24A4EBABB14593B5D8E1DAE2BFEF8A51835C8D4E76D 7543C126A4271C59A5881A5AF89331694F84489CA66725995DC3070F306EA447 CF30F63CD476A46D528EC1FFBFB8EACFA2BEEDCF54C92CE2BD26DEA5827186BD 3A4D1709415CEE7D51D671357B4A5D11E835F63521B9824EE5282E58F05A8ACC FD249461181A38C2F47BAC4E79BE368D64F886AA493C61CBCB2ED401C8AFBA61 59CA6F6216D941A92AC52ACB3D7ECC28D6A58EF4CC70BA6DE23E80937AB38E89 6F05FDD15B954C0826636267EDAF9F2BB466BF79D2E10EED9B04297E6BC93069 79581ADD1A9D9FAE9306F46AC95B98C60A2E53D60CF1AA4069BE301E17E25070 F98DD67BD8642B1D07571A32766072E48BF27E1576FFEED300D7313A358A823B 49C8F135961B7E259095C9BB67F996CE0B90E95344F203922F47E11753F70D38 2ECB615403490310CEE6C03AFA97DA2F47ED47125D110FA69725BA0018F6A40B 29A307FDB3E52322A77A0102E6F57654CF1E96A134D13860D83AFA0A41112D3F 2247A09ACF7D06713BE443FA27C7E7220E875965D53030FE7D2D62EFD2F1DB87 5FB091FEAF599BA8C5167525899E578AB341BFE2BC4E53A047093168AE189237 EA55F055514EFA939DAE9E859CB5FBCF37D99484F44FE5AA5FA386B28BB642F5 5DBAF059A50FE96C7C6D834531D64F1F2E99AB2E96EE74D149178B1C0618495E 293973D9A03E1790654B67C0882376ABEC17D74785B3737D81644F28B3BC6FFF F92FE29126995A07E0BC5EF3A4B93789A103C428943E045B8D1A5063AE71E806 568D48072E53DEA85253B01DF0BB7367A6BE4DD7BE514AD74E3F77C825ABA405 64DAFA25EAFF8F63344B5F6B523629776CEB090B546469F6A6008DE43072DD3C DEF51F62731037D1FBD0C038A1E9B669849EB3BEBA281624F13D20B61917A109 A0A7871A73F7BAA18077360B38A4625C5DB9AB9E43BDEEB856FD0E2D3AA2E075 267B978B9EB47F2369302E87DBD5D5B422830BEC32411FE75D584C58650EFB1D 136FEB92B94BF8939FD63AFB7349C7511E5E46AA7324F8B1FFCA9C2A9E9720C0 A720918E8E860F137567D386AC29870FD990BD69465B3A3D2A0ECF2753578AD7 80DC87EBB319EB5AFE0B6F6FF8616EA30C51425FE3ECBC5F8D0B0BEFDEF32FA7 D168B4E85C804B7326A0942CFDE732B1171C643452B7099B31649CA2C38B62FB 46EBDF7180004C549B53F88021D029452C2B37D8C565BCDB0B11541039A13C0A E45D4B68C7907B8BF08C6F41F564B62BB554235D50330E78DD02795516D969C9 66119D718798120442CB7EB9877FF84EC69DAE25F8559DCE3BD8042959F695F8 2F99845B1B5680DDCF181D806CC4903E077D1FF5E60918EB34C0B1E028422B71 CA63EFBF3F4F3CD813CE831EB54265A555BDD35AD7D723F9CFBDAB29C54F8AFF 2D35C6A3299E0A2DB470C7B141B1E3E10DABB7873AE302926BA8743278FAA8C0 DC6174501D6A289CF980A3F55F2DD5C3A514E7E7F13133C35D2697D64C25130C DB78FC997968D6B3BC929E8A31B6D212C5128E4412632BC52B3A1049F7F2F61B C74AE9A6AD19B9E2E240617E2882F7D29ED3A4279439107AF9AEBEE47CE85DE5 CE9595A96A118ACF1EB1F5929930321AF7732E351E18C6AD378508E37B4C327B 0E06AAE21278AFA9255AFE5C022034DA2968D260879B4B38E7EE2E11A593DC3F CE71ABA050C004473324CAB6F3C50E85DEDA3E9A27388D8FD3A8F6E42A79670E F7549CFAD4CCB337A6E0BAA4846ABCA059F1E1933CF11DC0FFBFF550CC4A1B47 CF7BCE0875FA747AA854534960F757884505A5AEE0330179A9547A4AE3E68479 7A457DE83326DC30B67F27CFD4AB697601CEE352F72F0966B3CEE3EA24683BEF 6D23AD51B8432C3F0DD0D0F80791E1091F38988B7A54E466A9AC7810DE8B7893 6B0AA6356597891D56190A7660BC7F657BC559E0525D41EC228078F2FBF89C6C 72D666DAD838CBF0861FBF0A1D4ECC069AA49DFBAE5C56B781A1D5D79DAAC256 13E3F9B928A2394FC71691E4355642764459714412D6F8EF803FC5F7353822DE 6CCBB8FBE5AA1F2C7F4D384039D85E7728527DF9FE0239E2CF8BCB7411C000B7 1FE660AE6A2A19229E5E8776CC83EFF3C27403935756463EB4721C51FE0B1197 86C2F17842A0FB639F28083DFD4F1E86D7D3BEFA922514ABF489C5CCE93D6F72 D2EAAE14F6CBA2BE4BBE7D7EA8EA19DB3A87350D4A52064137C3D15A5B05B03B 70B1DA7328D10713B83974C390C3270AF5A9A47C0BFBFABB9F31063B0CCFBB10 0F236C74446688198EFF039110F6FF42FA9F82D463AD3958B5FD205BDF85DE20 FE3F0C7AEEF350AEE6DBC1DE2E2DA4F4599956F59D6F121F7086DC120416E180 52DBBC4E56C09746938698860F30007091E1CC0351B43990E47208ED495310F5 7BA9C6AB3CA10A3F1B318FD47C1CE3B9FF1304321F9623E32D315AA9CE64B35B F841E6C62B5B2488A311C94937879E5E0E170FA77AF0AC75C5E6E9F3E8F825AA 09C1702682E14FDFA72D27901C5BDE009B1E52E8C4511C6F6336251BD45261F7 401CA3DAE7C4B0CAEB91B9954BF4A97C48ECE7FAD401351D59DDAE9DA94E2335 74A2B880E4749D3D7026CB5299F16C204B6E00A20A6619C34922C7D3FB50F127 3157CFC08DCC5164C8023CD1B6C3556C73CB8E4ADA845339CA9BABA1457ECEE6 ECB9849DF1F0FEBC89E5F97C92978A500196520839CEBA6C0FD2E3D27BB4B4F0 93CB2BB565F4627C6DB62DD0E084E627D69B5DEF42EF094381B62C0D67EFD197 301B132420F51A41561E6106870147E0D597078435BE3819ACF0DE28AD779847 F3D2CF667DA06955D53E0204CEA2935E9E984E76963D3079EC092031E2A10E61 1227E5EE6770DD4D745A52655369EBA06A19BD7D95BBA271E488241199D1008E 36EA99F8DFD2A9F87B06B070158B466AA4C6EA3BA77DB0F853F0BF9A304EA291 34069714368E0B94DFCBA3BE5EDB6C8204DFA7EAF5C3406F60A7056407D1BF6C CB85C1F432F97D821F5518BBA79AF8453A568FB2C2D025A70CEC75F46C545011 ACE3A99B2582793BA1DC655230AE2EFD24DE20A01D4A441AFFAB7771F223FA6B 9169849E727E494247F67D6E1EA9DCA06A082FE2094BD548AD7F08B565145634 E7ED832FEC1378306DDC796303392ADB0CBA130B63B38ED57B7828B47732853A 893E8836FE19CCF27002AE92C2B2CACFDF8A42F1B8066E033B965D2E9157FDF8 E1264B40813C1A4CE424274AA3528A4F09B3B53DD4D23789A68B3D17BC1398AE 0ADA2C2168427A49846DE0216908C2FFFEF4F13C1ECA12AD341E238EE46E6DC2 B71B54C52659632911F901660261E493AE2483D64E119D9924489779B62BC9FB A052E822FD8D83178E09ADC825DF0DA07FCE7AD68EEB29FAA275A13691B4A5A5 B0BC0499CD6307610CD6209583C1152C559A2760823F8DC0B9B990BFFE7B7E9F 3969B968AFEAADB9FC0F1410EBBAA0DB979CF153F0B8C978405F8E6F2B6406D7 AAFBF4A655A15DD6D1E9A7EAE10EF89264659B09283F50B734236885FC09FBE5 98D780012FA77FCB19F15BDC522CC7312546C0730EF5225DEA8C22A3BC6554EF 4FE73B9AEB5C2F7DBD474221760E5F539A064AC450591BCF3499E3968F2CBD6B F15BA2B37080A4129B66D4C2188524F025414F14DB3F96049A8B0E5EB2BBE7A1 AD64A988FE875FE4FE5186BB4F5DDA16983CB052D474B7D72F3E8965663EB50E 015C72407C3437142D3D7DBC055FA627139488DBC5A0F98D805C2143D99F491A 167E07AF60EC9F17C36289368D740B632CB919A0E74C412B76CE7A5906D5200F 9E79CEB9C65ADA3A0F23E8947E834AE7A329A9F0AA7A6BF545B1D7B4666C6522 CFF268634EA06DB3A82D91A4C0A9B227E79961212881A54A6762C335DE7E0831 130C45D94394D21C049B9D189ED955438C2151514F17BFC67E431DD9A8349202 2F616AEC1C7B19F63D5000EB4771370924BD4B9053FE78B5E4A244B9A149D66D A8BF3B398396D2233E92E4A5FDC70FAADEADAFD255193D688842DBA865CF6154 C9348D590F3FEB135D4B7BD4D76A52CB140888247CAFAB25ED51F4D187041CA0 ABD956F83A5661CEC171B52AF92F9ADE27973B560C802E1E0FF51C4003D1289A CDD09F8EDA8AFDFF666D35418CEADF3B0BE298F0D1E5C8E024D6A2017A7E71F3 3A9FEC9930F1118101E040339F9D41379170928DDF5B5875212B271DC843F612 E0C21C67263186E3D6929160464D4D5C8928E14D0845762C36FFBDE548188E20 3B6BAFE5EECA0385142F01216FB8A90C43A472C1D4447FE5C7C78CC088FC72E7 3FAFA062C338BDE8A430FDF1951B107D8D73FF9376FACDE5900BA362C66F8C1D 947F9545C5C13A53E4479B1C1A50472C05E8F8C266C6D4F4EB08E97B3B1BA972 26973B844545089C5732322BCC9A5A8FC972FA0D7DB8BD85D2F515ADE65DA479 0224F7EA2276CFED0B75B2C23AE7377F86F1F6F205D6FE19377D87E782143697 984E731F83CA888199CEB425643C259D4FB8B58DD69A96085198306494BB497E FE7C9954EF35B679BBE3847A9C73507874F71FC97665E2A58BA41407A1745247 44A79B588D969D11CE4B863CDA655DAA53CEA5C3C263B345E782006CE9831D49 603D2D95DE9E370D617F5928BA416C362BB2B4DEF16A5D44BD24B34257765F3B 6223B3F9B54DAED69A90C7050AB97B06693D253C6894CBD7B497DA449F1D9B7C D91B421891EC0724F59C82B9CB288DC42F2D2D7A7F22EE3D910E15953D7766AE 276DABED3820390BAF2700C4653E1C77FE63DB71A66D93ED293E25B8412A1EFF 809554BF04ED0DE83F7F190883ED793803CAD2C34A66524D3A580ACDF3C13B22 08F18905E7A4A16DA9ED2A112462FB9FFE481EC2069E484E8BBFC19D594153B7 3DED4C11762223B7586483B06BC164D824D1A6FCAE80A35DE0DB8B33396771DF 76DC5C05578EF1BE00A70BAF3D951A01C87328DB2B0DAD6E1B4C21F37D1BC0C5 A929BDE5EADF20DA60C4DE2E3C151005814F24824D33B95F700E09A0207EB602 3EF60DEB1622B91DB99A855A8F1DA96358F05CFCEDBDDDFC8446AE3391BEEC41 966E594E28D052DD5ADA49DFF65E79540EBE5329DFD86C23CC800F95221B9C18 CBBF941D2FA47EF1EF59A89DB5DD188E75EE94AD2A79E2221107E5992C00D531 2E00B544895A9204656867E3DE9D4CDB64B920B5CCA9A73E6514B36CABAE01BF 94C15603B86780190595560F792E5EF01650074EA4A9BBC6ED284B9AC2020641 DCBCEE0ED27FE58171DFE104EEE4202759E594159DF45113C00236127A46FB35 9EC705F21C0E456C1F0F924594C09AC64D4377C5FEEF764BA4A09ABA8D09DEB1 FC13B0CD202B2F04CF5D73DEAB65C36C2FA7C0DC236BEEF6D23BFFC9C493DC8E 1831F19EEF81EEDD976E43BAC6B5CED13F901DE59835FC75490EA528A72CEB77 24C38B258EC38B9E6B97F85CA8C10D8809BBE55A6FAA12456FCAC786942E123C 06D1E55F7ED04400088BEC968BC5081DC7A1B1B65166E7821679F76694F235FC 6854C8776AF855B83445D9FF919B1D80E98DE0741D06D6C5EEDB3E3EA6392530 F1BA817737D8162F7B3A36AC2A03190CDEC654383E31934C3E0A012B639532C6 26FEBE9B412F1C92D1943B7C18CEF510729D501349644C97F087F2F840074AE6 D8CD0FB2E620FFC908BFCD938B675A0A4A687F7FBE8F3DD06A62D7B6DE7DF3E2 49D367D60B10061EA86CD512F5A1BE8950D83C62695E130128E0037B62552D17 064319BBB9B1FAB9D79705E5D68AAE9B36EA14BF1A59A863BDB8DAD9AB5D7B8A E30E2B499F952D65877C8E38EDD7DB29F9579D09E629AC188DB6A6403AB4BA3A D358B3770D727A2B77D84B6C9EC17E29D88E3421F9B7D2D822EB78BB8BB50692 8C46DD6F9BBEF2E848A2B5669B200019802AD19661537A84D3514AEC5AA47445 2C791E01DCEDF18D9506367241255FFADEEA6183F51A9F42448A7DE413C08359 52DAD2A60FD606AFE14702BD3B0EC448720FE63438D020DEDFCDE3582FC31DF1 17B25FC152789D2F17FD60B8209D292D2152DCF8D28B5ADC04F6659BBB746CDF 145163361823CA343763AA951C640B5D4A99B7787105A1609EDD6A596EFC3F6F 2FC33D0D499DBE56C6668E137715D435D6B683E0113647B2765AB0F3D98AC717 5B33C3EDDE18506E73B4E392B022F30480BD30F59B2E3A59D93017296C3156B4 B5722E1955777716388AA987B2665669716F866FE6BDAD5E74A523CC03915F26 9B7B231F5D9B1F61DF7CB01ED3F27070E36547B263855DF5B2E3ABD2ACC440B9 0826E1DCCD4528C76F40A7D8EA25719D6355B6DB1CBC54708B0B4101EB2C417E E7AF00BC8DA24BDD1904114AE15540121B7F47CE095BD1E4300C27AFB027F1D1 A6D28C2DFD763E68EFBC9917D9EEE0BCE49C3D004AADD65FF16C8F295BABC732 9C3DC8E0054D7F6FE5CA2A8C80A9CA5355AD5C636533999BEE95EBD0A73CA361 B4968F5F166A4D667CC14E657C20DEC71181FD2EC5B8F36A858D1D2D897C7552 E5F49C892BD8D24E71084F7699A0E6E31202FA00B64CDE416A1BE2785C542D8B ADD4BD7F7132D8A7831090DF6E46A601250542D74483F98DDB9518C4634FD1C2 391090AEB81A9357485E3610FBBA6C607921D81CF87E61B53930B7638BAD46A1 6209AAE8F30F72DCC1C33AFCEC43481428520AECC06095A65C2C1AF46AD97DFF A1F32E84C36363529DD3B55EC0659ECE622F091CFB2CB3BC13A03E16859C24D1 C569684CF5296CB85EBF76928FBE8D18EF8A396EA7C6BBC17B7C219249D6AC97 DABCEC554B3B48CAAFE470331451261B2A892D56755C707858970A941B0EBD8B FEA5D64561708050A021F932C0DBE82FEFBB377F69730C478339093944B8B2AC C2214FCC5F1DC74900EEEB848D56C6B8CA2CF43DA8E1ACC9D9D8F17734AA4FF0 92D8FDA81A93699D58D84B86BA7B381833FE7DDE35757F151BA7CB42CA2DC580 5376A6DF8B24779AD362885052FA2BAE92D38B0E568DED173B714C3B2848AD6C 5BCA7CF9A3C50467EB352A36940187318011527815D3C9DFCD4FFC0AA0AC9236 426D6057A9ACDF36CD02EDA7CD516A45BEC30024C3B8CF44E4053F913F1B0027 DEAEADEDEAE8FD8460550DD93AEDB83B3D04631D7B3E2DC5F22216F9654F6773 7A7A1653871FD23E756C715A867A930A6CDD0BF61EF1B433E4A6D1249B511B96 93E202D5593476077C31205DAAA184B7DDA723DA24E346243211478660A85956 A6D29EEEE7E15C1C351168C6D6AC0730D77F41EE2590D27F8646565BE204F6F4 82DBF306D862B9C5500FF2F234B756AE4D572319B09624517893DB2379B93642 246A8A9E5EEE5DC1E0D84AC063D3982158E8A9DD54BF33519FDF4BCA88815896 C8F286D66DBFCE56E10CAF2044A0BF41D87CDCD9424A06F6C258E4664EFB38DB 794761A9FF03397BDC5FF92DE9DE6A855F76F50FFEC51F0A8606C5ACECA07478 3AAF7EF2B03D87445C399ACCBE1FEE1EDEA8563EB603FECE8F64F970C9178C28 E8014A70AE3DE2DD58BF7E49CE936B0FCC1E2A243E105042D76FA808879E293E 76E38336AA331EC5EE33C91330B553B0A7EB6760725A0B68246B0EA23F1C42D4 98106890F3E14E4F8889AD663016F4DE43A5990CFB40F2B5EEEF34CCEC915EA6 2CBBDFF4061681E0A4FA5580E91D192975DD4F279D0B3130B6246FCCE103BE57 9D487A589EB9F35AFD17973F57D0D4A83D5FA6353ECDA77C38BB633D63D2B53C F815F6EFFA295EC48BAEC5F69145DC4ABE809375826B436EC21EE46720667FD2 C6AD06B69C2D1731508101CFB98F4A97590C1B0E4FB5E64FDC136094962B643A F011A3F73F23B5924F33A8FF6B8AD2C6719AFEE9700231404BD2E1B54DB46EB4 F6751F7664E4A10C3522B7150C36053C3950673FFB1A52F54BFA46E827174A81 1997BC1E158A07023CEE7026A5A47D11E564232F1E7DCD4B33D4E960D0ACCE9A C3F70CDEECB8022C00ECCDEDF261F9F42E67FC528044470A1999DB84BD30A9E2 E746D44808FD7A03054E3C420BBF10B83B6DFD1E47010F74D339289E2526DBC1 9148E1DF0E165808723552120C26E3F802F273F22AE32C04EC31D91D6D108960 C0304793DFB6263DB43A347F9CC5FC5B0D87120B91A8DD5EA25F5CEB81C5CF28 ABCA5EF57920DF8AE42FEC219D9478D6AB40047D09E3405386162F0DB149C784 C287E12DCFE5B2F6373B45F364FB0CFF3F9B1ABA604023278823E19101808FD4 844D2F4585FB2198D5952520F8A02185F8F9DEB61C60909FAE37FD969EC4748E B0D26D527A76A8754663E7C5B3F5645B18A671823064AD2DFE505B3F38ED1EF1 64DDF3BCCB93CACAFC26EA732C1529B5A039C8FA8857C053C070D4E902D2BB1F 166934B7D9DDDCA5B81786895AADE5E57E57112F102A09FC8BE8D2133B6BC3DE 05AFC289CBD79941D5702C8FED187B8716284D9EF70110302F39491E81970102 EB441D0893EA6D2F1BF538F61A4E9EDBADB22849AA5079FD34CA0A48809A9523 715669C287BAE8C783B1F8EAFF62 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont TeXDict begin 40258437 52099151 1000 600 600 (adolc-manual.dvi) @start /Fa 135[51 51 2[51 51 2[51 51 51 51 51 2[51 1[51 1[51 51 51 1[51 50[51 46[{}16 99.6264 /CMTT12 rf /Fb 240[42 15[{}1 83.022 /CMSY10 rf /Fc 222[95 33[{}1 83.022 /CMBSY10 rf /Fd 134[44 2[44 44 44 44 44 1[44 44 44 44 44 2[44 44 1[44 44 44 44 44 44 1[44 32[44 1[44 12[44 44 3[44 42[{}25 83.022 /CMTT10 rf /Fe 173[66 82[{}1 90.9091 /MSBM10 rf /Ff 133[40 4[47 33 35 31 1[47 45 2[22 5[28 40 101[{}10 90.9091 /CMSSI10 rf /Fg 148[33 107[{}1 49.8132 /CMMI6 rf /Fh 133[33 1[40 1[34 1[25 33 32 32 36 1[43 62 1[37 29 24 3[33 36 2[37 12[41 43 4[56 7[45 9[55 20 20 58[{}23 66.4176 /CMMI8 rf /Fi 135[38 57 38 43 1[32 28 2[42 43 66 20 2[20 2[25 37 43 37 43 40 51[28 23 2[32 32 40[{}21 83.022 /CMSS10 rf /Fj 134[33 121[{}1 66.4176 /CMSS8 rf /Fk 142[91 22[51 116 131 22[80 80 3[81 1[81 1[81 6[80 80 21[68 6[67 67 5[30 10[42 42{}17 90.9091 /CMEX10 rf /Fl 207[19 27[55 16[35 55 1[55{}5 66.4176 /CMSY8 rf /Fm 193[81 1[81 60[{}2 90.9091 /CMMIB10 rf /Fn 141[76 6[45 25 2[45 45 46[0 4[61 16[91 11[71 71 2[71 1[45 8[71 2[45 71 25 71{}17 90.9091 /CMSY10 rf /Fo 226[105 105 27[81{}3 90.9091 /CMBSY10 rf /Fp 133[40 42 42 62 42 47 33 35 31 47 47 45 47 72 22 44 24 22 47 45 28 40 47 40 47 44 3[26 1[26 56 61 61 1[61 63 62 51 59 67 58 67 64 80 49 1[43 25 64 61 52 54 66 58 61 61 1[43 1[71 1[25 25 3[45 45 45 45 45 45 45 45 25 30 25 71 45 35 35 1[69 2[76 45 20[49 49 53 11[{}77 90.9091 /CMSS10 rf /Fq 134[44 42 60 42 49 30 37 38 42 46 46 51 74 23 42 28 28 46 42 28 42 46 42 42 46 9[91 2[65 51 66 1[62 70 68 82 57 1[48 35 68 70 1[62 69 65 64 68 1[46 4[28 1[46 5[46 1[46 1[28 33 28 29[80 1[51 56 11[{}54 90.9091 /CMTI10 rf /Fr 133[42 45 52 65 44 52 33 43 41 41 46 1[55 80 27 47 37 31 52 43 45 42 47 39 39 48 6[62 53 75 1[53 62 53 56 69 1[58 69 73 88 3[40 1[71 58 3[69 68 48 1[71 45 71 25 25 23[42 3[54 5[40 7[40 16[{}52 90.9091 /CMMI10 rf /Fs 130[48 1[48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 1[48 1[48 48 48 48 48 48 48 48 48 48 48 48 1[48 48 48 48 48 2[48 48 48 48 48 48 48 48 48 1[48 48 48 48 48 48 1[48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 2[48 48 48 48 48 33[{}83 90.9091 /CMTT10 rf /Ft 133[40 48 48 66 48 51 35 36 36 48 51 45 51 76 25 48 1[25 51 45 28 40 51 40 51 45 7[68 68 93 68 68 66 51 67 1[62 71 68 83 57 1[47 33 68 71 59 62 69 66 64 68 7[45 45 45 45 45 45 45 45 45 1[45 25 30 1[71 1[35 35 25[76 1[51 53 11[{}66 90.9091 /CMSL10 rf /Fu 128[38 4[34 41 1[55 41 43 30 30 30 1[43 38 43 64 21 2[21 43 38 23 34 43 34 43 38 9[79 1[58 55 43 2[52 60 58 70 1[60 1[28 58 60 50 52 59 55 54 58 7[38 38 38 38 2[38 38 38 38 38 21 26 21 29[64 1[43 12[{}55 74.7198 /CMR9 rf /Fv 203[30 30 30 30 49[{}4 49.8132 /CMR6 rf /Fw 132[52 46 55 55 76 55 58 41 41 43 1[58 52 58 87 29 2[29 58 52 32 48 58 46 58 51 11[80 73 58 78 1[71 79 82 99 63 82 54 40 82 1[66 69 80 76 74 79 3[81 3[52 52 52 52 52 52 52 52 52 52 1[29 35 29 81 1[41 41 27[58 61 11[{}62 90.9091 /CMBX10 rf /Fx 133[37 44 44 60 44 46 32 33 33 44 46 42 46 69 23 44 1[23 46 42 25 37 46 37 46 42 4[42 7[60 46 3[65 2[52 1[43 1[62 1[54 1[63 60 1[62 5[23 23 1[42 2[42 42 42 42 42 42 42 23 28 23 65 1[32 32 5[42 19[69 1[46 48 11[{}56 83.022 /CMR10 rf /Fy 139[37 38 39 14[42 53 46 31[72 65[{}7 83.022 /CMBX10 rf /Fz 129[45 2[45 40 48 48 66 48 51 35 36 36 48 51 45 51 76 25 48 28 25 51 45 28 40 51 40 51 45 1[25 45 25 45 25 1[68 1[93 68 68 66 51 67 71 62 71 68 83 57 71 47 33 68 71 59 62 69 66 64 68 3[71 1[25 25 45 45 45 45 45 45 45 45 45 45 45 25 30 25 71 45 35 35 25 4[45 25 10[45 2[45 4[76 51 51 53 11[{}87 90.9091 /CMR10 rf /FA 133[50 59 59 81 59 62 44 44 46 59 62 56 62 93 31 59 1[31 62 56 34 51 62 50 62 54 9[116 85 1[78 62 84 84 77 84 88 106 67 1[58 42 88 88 70 74 86 81 1[85 7[56 56 56 56 56 56 56 56 56 56 56 31 37 31 87 1[44 44 31 24[93 1[62 65 11[{}66 99.6264 /CMBX12 rf /FB 138[65 46 46 46 2[59 65 98 33 62 1[33 65 59 36 52 1[52 1[59 9[120 6[80 11[89 85 1[88 17[59 3[91 31[68 11[{}24 119.552 /CMR12 rf /FC 194[55 7[35 35 35 35 35 35 4[55 1[27 27 40[{}10 66.4176 /CMR8 rf /FD 134[71 71 97 71 75 52 53 55 1[75 67 75 112 37 71 1[37 75 67 41 61 75 60 75 65 11[103 94 75 100 1[92 101 105 128 81 2[50 2[85 88 103 97 96 102 6[37 67 67 67 67 67 67 67 67 67 3[45 1[105 31[78 11[{}52 119.552 /CMBX12 rf end %%EndProlog %%BeginSetup %%Feature: *Resolution 600dpi TeXDict begin %%BeginPaperSize: Letter /setpagedevice where { pop << /PageSize [612 792] >> setpagedevice } { /letter where { pop letter } if } ifelse %%EndPaperSize end %%EndSetup %%Page: 1 1 TeXDict begin 1 0 bop 0 0 a SDict begin [/Producer (dvips + Distiller)/Title ()/Subject ()/Creator (LaTeX with hyperref package)/Author ()/Keywords () /DOCINFO pdfmark end 0 0 a 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.1) cvn /DEST pdfmark end 183 199 a Black Black 191 515 a SDict begin [/Count -9/Dest (section.1) cvn/Title (Preparing a Section of C or C++ Code for Differentiation) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.1.1) cvn/Title (Introduction) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.1.2) cvn/Title (Declaring Active Variables) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.1.3) cvn/Title (Marking Active Sections) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.1.4) cvn/Title (Selecting Independent and Dependent Variables) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.1.5) cvn/Title (A Subprogram as an Active Section) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.1.6) cvn/Title (Overloaded Operators and Functions) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.1.7) cvn/Title (Reusing the Tape for Arbitrary Input Values) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.1.8) cvn/Title (Conditional Assignments) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.1.9) cvn/Title (Step-by-Step Modification Procedure) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -3/Dest (section.2) cvn/Title (Numbering the Tapes and Controlling the Buffer) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.2.1) cvn/Title (Examining the Tape and Predicting Storage Requirements ) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.2.2) cvn/Title (Customizing ADOL-C) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.2.3) cvn/Title (Warnings and Suggestions for Improved Efficiency) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -5/Dest (section.3) cvn/Title (Easy-To-Use Drivers) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.3.1) cvn/Title (Drivers for Optimization and Nonlinear Equations) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.3.2) cvn/Title (Drivers for Ordinary Differential Equations) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.3.3) cvn/Title (Drivers for Sparse Jacobians and Sparse Hessians) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.3.4) cvn/Title (Higher Derivative Tensors) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.3.5) cvn/Title (Derivatives of Implicit and Inverse Functions) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (section.4) cvn/Title (Basic Drivers for the Forward and Reverse Mode) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -3/Dest (section.5) cvn/Title (Overloaded Forward and Reverse Calls) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.5.1) cvn/Title (The Scalar Case) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.5.2) cvn/Title (The Vector Case) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.5.3) cvn/Title (Dependence Analysis) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -4/Dest (section.6) cvn/Title (Advanced algorithmic differentiation in ADOL-C) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.6.1) cvn/Title (Differentiating external functions) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.6.2) cvn/Title (Advanced algorithmic differentiation of time integration processes) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.6.3) cvn/Title (Advanced algorithmic differentiation of fixed point iterations) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.6.4) cvn/Title (Advanced algorithmic differentiation of OpenMP parallel programs) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -3/Dest (section.7) cvn/Title (Tapeless forward differentiation in ADOL-C) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.7.1) cvn/Title (Modifying the Source Code) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.7.2) cvn/Title (Compiling and Linking the Source Code) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.7.3) cvn/Title (Concluding Remarks for the Tapeless Forward Mode Variant) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -5/Dest (section.8) cvn/Title (Installing and Using ADOL-C) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.8.1) cvn/Title (Generating the ADOL-C Library) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.8.2) cvn/Title (Compiling and Linking the Example Programs) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.8.3) cvn/Title (Description of Important Header Files) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.8.4) cvn/Title (Compiling and Linking C/C++ Programs) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.8.5) cvn/Title (Adding Quadratures as Special Functions) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -4/Dest (section.9) cvn/Title (Example Codes) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.9.1) cvn/Title (Speelpenning's Example \(speelpenning.cpp\)) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.9.2) cvn/Title (Power Example \(powexam.cpp\)) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.9.3) cvn/Title (Determinant Example \(detexam.cpp\)) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.9.4) cvn/Title (Ordinary Differential Equation Example \(odexam.cpp\)) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/PageMode /UseOutlines/Page 1/View [/Fit] /DOCVIEW pdfmark end 191 515 a 191 515 a SDict begin [ {Catalog}<<>> /PUT pdfmark end 191 515 a 191 515 a SDict begin H.S end 191 515 a 191 515 a SDict begin 13.6 H.A end 191 515 a 191 515 a SDict begin [/View [/XYZ H.V]/Dest (Doc-Start) cvn /DEST pdfmark end 191 515 a Black Black 1658 606 a FD(ADOL-C:)2254 606 y SDict begin H.S end 2254 606 a -33 x FC(1)2293 606 y SDict begin 13.6 H.L end 2293 606 a 2293 606 a SDict begin [/Subtype /Link/Dest (Hfootnote.1) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2293 606 a 853 839 a FB(A)39 b(P)m(ac)m(k)-7 b(age)37 b(for)h(the)g(Automatic)e(Di\013eren)m(tiation)1129 1012 y(of)i(Algorithms)e(W)-10 b(ritten)38 b(in)g(C/C++)1351 1245 y FA(V)-9 b(ersion)38 b(2.4.1,)f(Marc)m(h)h(2013)1160 1457 y Fz(Andrea)30 b(W)-8 b(alther)1799 1457 y SDict begin H.S end 1799 1457 a -33 x FC(2)1839 1457 y SDict begin 13.6 H.L end 1839 1457 a 1839 1457 a SDict begin [/Subtype /Link/Dest (Hfootnote.2) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 1839 1457 a 30 w Fz(and)30 b(Andreas)g(Griew)m(ank)2782 1457 y SDict begin H.S end 2782 1457 a -33 x FC(3)2822 1457 y SDict begin 13.6 H.L end 2822 1457 a 2822 1457 a SDict begin [/Subtype /Link/Dest (Hfootnote.3) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2822 1457 a Black Black 1808 1706 a Fy(Abstract)p Black Black 543 1883 a Fx(The)37 b(C++)f(pac)n(k)-5 b(age)35 b(ADOL-C)i(describ)r(ed)f(here)g(facilitates)h(the)g(ev)-5 b(aluation)36 b(of)h(\014rst)g(and)418 1982 y(higher)24 b(deriv)-5 b(ativ)n(es)23 b(of)i(v)n(ector)e(functions)i(that)f(are)g (de\014ned)g(b)n(y)h(computer)f(programs)e(written)i(in)418 2082 y(C)31 b(or)f(C++.)46 b(The)31 b(resulting)f(deriv)-5 b(ativ)n(e)30 b(ev)-5 b(aluation)30 b(routines)g(ma)n(y)g(b)r(e)h (called)g(from)f(C,)h(C++,)418 2182 y(F)-7 b(ortran,)27 b(or)f(an)n(y)h(other)g(language)f(that)i(can)f(b)r(e)h(link)n(ed)g (with)g(C.)543 2281 y(The)38 b(n)n(umerical)f(v)-5 b(alues)38 b(of)g(deriv)-5 b(ativ)n(e)37 b(v)n(ectors)g(are)g(obtained)h(free)g (of)g(truncation)g(errors)418 2381 y(at)31 b(a)f(small)h(m)n(ultiple)g (of)g(the)g(run)g(time)g(and)g(random)e(access)h(memory)g(required)g(b) n(y)g(the)h(giv)n(en)418 2481 y(function)e(ev)-5 b(aluation)27 b(program.)35 b(Deriv)-5 b(ativ)n(e)27 b(matrices)g(are)g(obtained)h(b) n(y)f(columns,)h(b)n(y)f(ro)n(ws)f(or)418 2580 y(in)h(sparse)e(format.) 36 b(F)-7 b(or)26 b(solution)g(curv)n(es)g(de\014ned)h(b)n(y)f (ordinary)f(di\013eren)n(tial)h(equations,)g(sp)r(ecial)418 2680 y(routines)32 b(are)g(pro)n(vided)g(that)g(ev)-5 b(aluate)33 b(the)g(T)-7 b(a)n(ylor)31 b(co)r(e\016cien)n(t)h(v)n (ectors)f(and)i(their)f(Jacobians)418 2779 y(with)g(resp)r(ect)g(to)f (the)h(curren)n(t)f(state)g(v)n(ector.)48 b(F)-7 b(or)31 b(explicitly)g(or)g(implicitly)h(de\014ned)g(functions)418 2879 y(deriv)-5 b(ativ)n(e)23 b(tensors)g(are)g(obtained)h(with)g(a)f (complexit)n(y)h(that)g(gro)n(ws)e(only)h(quadratically)f(in)j(their) 418 2979 y(degree.)34 b(The)21 b(deriv)-5 b(ativ)n(e)21 b(calculations)f(in)n(v)n(olv)n(e)f(a)i(p)r(ossibly)g(substan)n(tial)g (but)h(alw)n(a)n(ys)d(predictable)418 3078 y(amoun)n(t)26 b(of)g(data.)36 b(Since)27 b(the)f(data)g(is)g(accessed)f(strictly)h (sequen)n(tially)g(it)g(can)g(b)r(e)h(automatically)418 3178 y(paged)g(out)h(to)f(external)g(\014les.)191 3415 y Fw(Keyw)m(ords)p Fz(:)44 b(Computational)33 b(Di\013eren)m(tiation,)i (Automatic)f(Di\013eren)m(tiation,)h(Chain)d(Rule,)g(Ov)m(er-)191 3528 y(loading,)39 b(T)-8 b(a)m(ylor)38 b(Co)s(e\016cien)m(ts,)h (Gradien)m(ts,)g(Hessians,)g(F)-8 b(orw)m(ard)37 b(Mo)s(de,)h(Rev)m (erse)g(Mo)s(de,)g(Implicit)191 3641 y(F)-8 b(unction)31 b(Di\013eren)m(tiation,)i(In)m(v)m(erse)e(F)-8 b(unction)31 b(Di\013eren)m(tiation)191 3854 y Fw(Abbreviated)k(title)p Fz(:)40 b(Automatic)32 b(di\013eren)m(tiation)g(b)m(y)e(o)m(v)m (erloading)j(in)d(C++)p Black 191 4788 1440 4 v 295 4842 a Fv(1)329 4873 y SDict begin H.S end 329 4873 a 329 4873 a SDict begin H.R end 329 4873 a 329 4873 a SDict begin [/View [/XYZ H.V]/Dest (Hfootnote.1) cvn /DEST pdfmark end 329 4873 a Fu(The)d(dev)n(elopmen)n(t)f(of)i(earlier)g(v)n (ersions)f(w)n(as)g(supp)r(orted)g(b)n(y)e(the)i(O\016ce)f(of)i(Scien)n (ti\014c)e(Computing,)i(U.S.)e(Depart-)191 4965 y(men)n(t)21 b(of)h(Energy)-6 b(,)22 b(the)f(NSF,)g(and)g(the)g(Deutsc)n(he)g(F)-6 b(orsc)n(h)n(ungsgemeinsc)n(haft.)34 b(During)22 b(the)f(dev)n(elopmen) n(t)f(of)i(the)f(curren)n(t)191 5056 y(v)n(ersion)31 b(Andrea)g(W)-6 b(alther)31 b(and)g(Andreas)g(Ko)n(w)n(arz)h(w)n(ere)g (supp)r(orted)f(b)n(y)f(the)h(gran)n(t)h(W)-6 b(a)31 b(1607/2-1)i(of)f(the)f(Deutsc)n(he)191 5147 y(F)-6 b(orsc)n(h)n (ungsgemeinsc)n(haft)295 5207 y Fv(2)329 5239 y SDict begin H.S end 329 5239 a 329 5239 a SDict begin H.R end 329 5239 a 329 5239 a SDict begin [/View [/XYZ H.V]/Dest (Hfootnote.2) cvn /DEST pdfmark end 329 5239 a Fu(Institute)25 b(of)i(Mathematics,)g(Univ)n(ersit)n(y)e(of)h(P)n(aderb)r(orn,)g(33098) i(P)n(aderb)r(orn,)e(German)n(y)295 5298 y Fv(3)329 5330 y SDict begin H.S end 329 5330 a 329 5330 a SDict begin H.R end 329 5330 a 329 5330 a SDict begin [/View [/XYZ H.V]/Dest (Hfootnote.3) cvn /DEST pdfmark end 329 5330 a Fu(Departmen)n(t)f(of)i(Mathematics,)g(Hum)n(b)r(oldt-Univ)n (ersit\177)-38 b(at)24 b(zu)i(Berlin,)h(10099)g(Berlin,)g(German)n(y)p Black Black Black eop end %%Page: 2 2 TeXDict begin 2 1 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.2) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fz(2)3038 b Ft(CONTENTS)p Black 191 606 a SDict begin H.S end 191 606 a 191 606 a SDict begin 18 H.A end 191 606 a 191 606 a SDict begin [/View [/XYZ H.V]/Dest (section*.1) cvn /DEST pdfmark end 191 606 a FD(Con)l(ten)l(ts)191 882 y SDict begin H.S end 191 882 a Fw(1)84 b(Preparing)36 b(a)f(Section)g(of)g(C)f(or)i (C++)f(Co)s(de)f(for)h(Di\013eren)m(tiation)3000 882 y SDict begin 13.6 H.L end 3000 882 a 3000 882 a SDict begin [/Subtype /Link/Dest (section.1) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 3000 882 a 739 w Fw(4)327 1049 y SDict begin H.S end 327 1049 a Fz(1.1)94 b(In)m(tro)s(duction)1034 1049 y SDict begin 13.6 H.L end 1034 1049 a 1034 1049 a SDict begin [/Subtype /Link/Dest (subsection.1.1) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 1034 1049 a 28 w Fz(.)46 b(.)g(.)f(.)h(.)g(.) f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f (.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)p Black 183 w(4)p Black 327 1216 a SDict begin H.S end 327 1216 a Fz(1.2)94 b(Declaring)32 b(Activ)m(e)h(V)-8 b(ariables)1593 1216 y SDict begin 13.6 H.L end 1593 1216 a 1593 1216 a SDict begin [/Subtype /Link/Dest (subsection.1.2) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 1593 1216 a 35 w Fz(.)46 b(.)f(.)h(.)g(.)f(.) h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h (.)g(.)f(.)h(.)g(.)p Black 183 w(4)p Black 327 1384 a SDict begin H.S end 327 1384 a Fz(1.3)94 b(Marking)31 b(Activ)m(e)i(Sections)1509 1384 y SDict begin 13.6 H.L end 1509 1384 a 1509 1384 a SDict begin [/Subtype /Link/Dest (subsection.1.3) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 1509 1384 a 48 w Fz(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g (.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)p Black 183 w(5)p Black 327 1551 a SDict begin H.S end 327 1551 a Fz(1.4)94 b(Selecting)32 b(Indep)s(enden)m(t)d(and)h(Dep)s(enden)m(t)g(V)-8 b(ariables)2441 1551 y SDict begin 13.6 H.L end 2441 1551 a 2441 1551 a SDict begin [/Subtype /Link/Dest (subsection.1.4) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2441 1551 a 35 w Fz(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)p Black 183 w(6)p Black 327 1718 a SDict begin H.S end 327 1718 a Fz(1.5)94 b(A)31 b(Subprogram)e(as)h(an)g(Activ)m(e)j(Section)1961 1718 y SDict begin 13.6 H.L end 1961 1718 a 1961 1718 a SDict begin [/Subtype /Link/Dest (subsection.1.5) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 1961 1718 a 91 w Fz(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g (.)f(.)h(.)g(.)p Black 183 w(6)p Black 327 1885 a SDict begin H.S end 327 1885 a Fz(1.6)94 b(Ov)m(erloaded)31 b(Op)s(erators)f(and)g(F)-8 b(unctions)2006 1885 y SDict begin 13.6 H.L end 2006 1885 a 2006 1885 a SDict begin [/Subtype /Link/Dest (subsection.1.6) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2006 1885 a 46 w Fz(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) g(.)f(.)h(.)g(.)f(.)h(.)g(.)p Black 183 w(7)p Black 327 2052 a SDict begin H.S end 327 2052 a Fz(1.7)94 b(Reusing)31 b(the)f(T)-8 b(ap)s(e)30 b(for)h(Arbitrary)e(Input)g(V)-8 b(alues)2321 2052 y SDict begin 13.6 H.L end 2321 2052 a 2321 2052 a SDict begin [/Subtype /Link/Dest (subsection.1.7) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2321 2052 a 85 w Fz(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)p Black 138 w(10)p Black 327 2220 a SDict begin H.S end 327 2220 a Fz(1.8)94 b(Conditional)31 b(Assignmen)m(ts)1527 2220 y SDict begin 13.6 H.L end 1527 2220 a 1527 2220 a SDict begin [/Subtype /Link/Dest (subsection.1.8) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 1527 2220 a 30 w Fz(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f (.)h(.)g(.)p Black 138 w(11)p Black 327 2387 a SDict begin H.S end 327 2387 a Fz(1.9)94 b(Step-b)m(y-Step)31 b(Mo)s(di\014cation)g(Pro)s(cedure) 2011 2387 y SDict begin 13.6 H.L end 2011 2387 a 2011 2387 a SDict begin [/Subtype /Link/Dest (subsection.1.9) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2011 2387 a 41 w Fz(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f (.)h(.)g(.)f(.)h(.)g(.)p Black 138 w(12)p Black 191 2663 a SDict begin H.S end 191 2663 a Fw(2)84 b(Num)m(b)s(ering)36 b(the)e(T)-9 b(ap)s(es)35 b(and)g(Con)m(trolling)g(the)g(Bu\013er)2578 2663 y SDict begin 13.6 H.L end 2578 2663 a 2578 2663 a SDict begin [/Subtype /Link/Dest (section.2) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2578 2663 a 1108 w Fw(13)327 2830 y SDict begin H.S end 327 2830 a Fz(2.1)94 b(Examining)31 b(the)f(T)-8 b(ap)s(e)31 b(and)e(Predicting)i(Storage)h(Requiremen)m(ts)2898 2830 y SDict begin 13.6 H.L end 2898 2830 a 2898 2830 a SDict begin [/Subtype /Link/Dest (subsection.2.1) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2898 2830 a 73 w Fz(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)p Black 138 w(14)p Black 327 2997 a SDict begin H.S end 327 2997 a Fz(2.2)94 b(Customizing)31 b(ADOL-C)1423 2997 y SDict begin 13.6 H.L end 1423 2997 a 1423 2997 a SDict begin [/Subtype /Link/Dest (subsection.2.2) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 1423 2997 a 63 w Fz(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h (.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)p Black 138 w(15)p Black 327 3164 a SDict begin H.S end 327 3164 a Fz(2.3)94 b(W)-8 b(arnings)31 b(and)f(Suggestions)h(for)f(Impro)m(v)m(ed)g(E\016ciency) 2534 3164 y SDict begin 13.6 H.L end 2534 3164 a 2534 3164 a SDict begin [/Subtype /Link/Dest (subsection.2.3) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2534 3164 a 84 w Fz(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)p Black 138 w(17)p Black 191 3440 a SDict begin H.S end 191 3440 a Fw(3)84 b(Easy-T)-9 b(o-Use)36 b(Driv)m(ers)1270 3440 y SDict begin 13.6 H.L end 1270 3440 a 1270 3440 a SDict begin [/Subtype /Link/Dest (section.3) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 1270 3440 a 2416 w Fw(19)327 3608 y SDict begin H.S end 327 3608 a Fz(3.1)94 b(Driv)m(ers)31 b(for)f(Optimization)i(and)e (Nonlinear)h(Equations)2541 3608 y SDict begin 13.6 H.L end 2541 3608 a 2541 3608 a SDict begin [/Subtype /Link/Dest (subsection.3.1) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2541 3608 a 77 w Fz(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.) h(.)g(.)p Black 138 w(19)p Black 327 3775 a SDict begin H.S end 327 3775 a Fz(3.2)94 b(Driv)m(ers)31 b(for)f(Ordinary)f(Di\013eren)m(tial)k (Equations)2257 3775 y SDict begin 13.6 H.L end 2257 3775 a 2257 3775 a SDict begin [/Subtype /Link/Dest (subsection.3.2) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2257 3775 a 78 w Fz(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) f(.)h(.)g(.)p Black 138 w(22)p Black 327 3942 a SDict begin H.S end 327 3942 a Fz(3.3)94 b(Driv)m(ers)31 b(for)f(Sparse)g(Jacobians)h(and)f(Sparse)f (Hessians)2500 3942 y SDict begin 13.6 H.L end 2500 3942 a 2500 3942 a SDict begin [/Subtype /Link/Dest (subsection.3.3) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2500 3942 a 47 w Fz(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) p Black 138 w(24)p Black 327 4109 a SDict begin H.S end 327 4109 a Fz(3.4)94 b(Higher)31 b(Deriv)-5 b(ativ)m(e)33 b(T)-8 b(ensors)1570 4109 y SDict begin 13.6 H.L end 1570 4109 a 1570 4109 a SDict begin [/Subtype /Link/Dest (subsection.3.4) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 1570 4109 a 58 w Fz(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g (.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)p Black 138 w(30)p Black 327 4276 a SDict begin H.S end 327 4276 a Fz(3.5)94 b(Deriv)-5 b(ativ)m(es)33 b(of)e(Implicit)g(and)e(In)m(v)m(erse)i(F)-8 b(unctions)2323 4276 y SDict begin 13.6 H.L end 2323 4276 a 2323 4276 a SDict begin [/Subtype /Link/Dest (subsection.3.5) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2323 4276 a 83 w Fz(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)p Black 138 w(32)p Black 191 4552 a SDict begin H.S end 191 4552 a Fw(4)84 b(Basic)36 b(Driv)m(ers)g(for)f(the)f(F)-9 b(orw)m(ard)35 b(and)g(Rev)m(erse)h(Mo)s(de)2587 4552 y SDict begin 13.6 H.L end 2587 4552 a 2587 4552 a SDict begin [/Subtype /Link/Dest (section.4) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2587 4552 a 1099 w Fw(34)191 4828 y SDict begin H.S end 191 4828 a Fw(5)84 b(Ov)m(erloaded)35 b(F)-9 b(orw)m(ard)35 b(and)g(Rev)m(erse)g (Calls)2113 4828 y SDict begin 13.6 H.L end 2113 4828 a 2113 4828 a SDict begin [/Subtype /Link/Dest (section.5) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2113 4828 a 1573 w Fw(40)327 4996 y SDict begin H.S end 327 4996 a Fz(5.1)94 b(The)30 b(Scalar)h(Case)1183 4996 y SDict begin 13.6 H.L end 1183 4996 a 1183 4996 a SDict begin [/Subtype /Link/Dest (subsection.5.1) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 1183 4996 a 91 w Fz(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f (.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.) h(.)g(.)p Black 138 w(40)p Black 327 5163 a SDict begin H.S end 327 5163 a Fz(5.2)94 b(The)30 b(V)-8 b(ector)32 b(Case)1198 5163 y SDict begin 13.6 H.L end 1198 5163 a 1198 5163 a SDict begin [/Subtype /Link/Dest (subsection.5.2) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 1198 5163 a 76 w Fz(.)46 b(.)g(.)f(.)h(.)g(.) g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g (.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)p Black 138 w(41)p Black 327 5330 a SDict begin H.S end 327 5330 a Fz(5.3)94 b(Dep)s(endence)31 b(Analysis)1377 5330 y SDict begin 13.6 H.L end 1377 5330 a 1377 5330 a SDict begin [/Subtype /Link/Dest (subsection.5.3) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 1377 5330 a 39 w Fz(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.) f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)p Black 138 w(43)p Black Black Black eop end %%Page: 3 3 TeXDict begin 3 2 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.3) cvn /DEST pdfmark end 183 199 a Black 191 307 a Ft(CONTENTS)3036 b Fz(3)p Black 191 606 a SDict begin H.S end 191 606 a Fw(6)84 b(Adv)-6 b(anced)36 b(algorithmic)g(di\013eren)m(tiation)e(in)h (ADOL-C)2574 606 y SDict begin 13.6 H.L end 2574 606 a 2574 606 a SDict begin [/Subtype /Link/Dest (section.6) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2574 606 a 1112 w Fw(45)327 769 y SDict begin H.S end 327 769 a Fz(6.1)94 b(Di\013eren)m(tiating)33 b(external)f(functions)1855 769 y SDict begin 13.6 H.L end 1855 769 a 1855 769 a SDict begin [/Subtype /Link/Dest (subsection.6.1) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 1855 769 a 56 w Fz(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h (.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)p Black 138 w(45)p Black 327 932 a SDict begin H.S end 327 932 a Fz(6.2)94 b(Adv)-5 b(anced)31 b(algorithmic)h(di\013eren)m(tiation)g(of)e(time)h(in)m (tegration)i(pro)s(cesses)3158 932 y SDict begin 13.6 H.L end 3158 932 a 3158 932 a SDict begin [/Subtype /Link/Dest (subsection.6.2) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 3158 932 a 25 w Fz(.)46 b(.)g(.)f(.)h(.)g(.)p Black 138 w(46)p Black 327 1094 a SDict begin H.S end 327 1094 a Fz(6.3)94 b(Adv)-5 b(anced)31 b(algorithmic)h(di\013eren)m(tiation)g(of)e(\014xed)g(p)s (oin)m(t)g(iterations)2955 1094 y SDict begin 13.6 H.L end 2955 1094 a 2955 1094 a SDict begin [/Subtype /Link/Dest (subsection.6.3) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2955 1094 a 87 w Fz(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)p Black 138 w(48)p Black 327 1257 a SDict begin H.S end 327 1257 a Fz(6.4)94 b(Adv)-5 b(anced)31 b(algorithmic)h(di\013eren)m(tiation)g(of)e(Op)s (enMP)f(parallel)j(programs)3209 1257 y SDict begin 13.6 H.L end 3209 1257 a 3209 1257 a SDict begin [/Subtype /Link/Dest (subsection.6.4) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 3209 1257 a 45 w Fz(.)46 b(.)f(.)h(.)g(.)p Black 138 w(50)p Black 191 1511 a SDict begin H.S end 191 1511 a Fw(7)84 b(T)-9 b(ap)s(eless)35 b(forw)m(ard)g(di\013eren)m(tiation)g(in)g(ADOL-C)2344 1511 y SDict begin 13.6 H.L end 2344 1511 a 2344 1511 a SDict begin [/Subtype /Link/Dest (section.7) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2344 1511 a 1342 w Fw(51)327 1673 y SDict begin H.S end 327 1673 a Fz(7.1)94 b(Mo)s(difying)31 b(the)f(Source)g(Co)s(de) 1625 1673 y SDict begin 13.6 H.L end 1625 1673 a 1625 1673 a SDict begin [/Subtype /Link/Dest (subsection.7.1) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 1625 1673 a 74 w Fz(.)45 b(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g (.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)p Black 138 w(51)p Black 327 1836 a SDict begin H.S end 327 1836 a Fz(7.2)94 b(Compiling)31 b(and)f(Linking)g(the)g(Source)g(Co)s(de)2139 1836 y SDict begin 13.6 H.L end 2139 1836 a 2139 1836 a SDict begin [/Subtype /Link/Dest (subsection.7.2) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2139 1836 a 54 w Fz(.)46 b(.)g(.)g(.)f(.)h(.)g (.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)p Black 138 w(56)p Black 327 1999 a SDict begin H.S end 327 1999 a Fz(7.3)94 b(Concluding)30 b(Remarks)g(for)h(the)f(T)-8 b(ap)s(eless)31 b(F)-8 b(orw)m(ard)31 b(Mo)s(de)f(V)-8 b(arian)m(t)2959 1999 y SDict begin 13.6 H.L end 2959 1999 a 2959 1999 a SDict begin [/Subtype /Link/Dest (subsection.7.3) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2959 1999 a 83 w Fz(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)p Black 138 w(58)p Black 191 2252 a SDict begin H.S end 191 2252 a Fw(8)84 b(Installing)35 b(and)g(Using)h(ADOL-C) 1700 2252 y SDict begin 13.6 H.L end 1700 2252 a 1700 2252 a SDict begin [/Subtype /Link/Dest (section.8) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 1700 2252 a 1986 w Fw(59)327 2415 y SDict begin H.S end 327 2415 a Fz(8.1)94 b(Generating)32 b(the)f(ADOL-C)f(Library)1853 2415 y SDict begin 13.6 H.L end 1853 2415 a 1853 2415 a SDict begin [/Subtype /Link/Dest (subsection.8.1) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 1853 2415 a 58 w Fz(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g (.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)p Black 138 w(59)p Black 327 2578 a SDict begin H.S end 327 2578 a Fz(8.2)94 b(Compiling)31 b(and)f(Linking)g(the)g(Example)h(Programs)2400 2578 y SDict begin 13.6 H.L end 2400 2578 a 2400 2578 a SDict begin [/Subtype /Link/Dest (subsection.8.2) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2400 2578 a 76 w Fz(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)p Black 138 w(60)p Black 327 2741 a SDict begin H.S end 327 2741 a Fz(8.3)94 b(Description)32 b(of)e(Imp)s(ortan)m(t)g(Header)h(Files)2057 2741 y SDict begin 13.6 H.L end 2057 2741 a 2057 2741 a SDict begin [/Subtype /Link/Dest (subsection.8.3) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2057 2741 a 66 w Fz(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f (.)h(.)g(.)p Black 138 w(60)p Black 327 2903 a SDict begin H.S end 327 2903 a Fz(8.4)94 b(Compiling)31 b(and)f(Linking)g(C/C++)f(Programs)2214 2903 y SDict begin 13.6 H.L end 2214 2903 a 2214 2903 a SDict begin [/Subtype /Link/Dest (subsection.8.4) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2214 2903 a 50 w Fz(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g (.)p Black 138 w(61)p Black 327 3066 a SDict begin H.S end 327 3066 a Fz(8.5)94 b(Adding)30 b(Quadratures)f(as)i(Sp)s(ecial)g(F)-8 b(unctions)2191 3066 y SDict begin 13.6 H.L end 2191 3066 a 2191 3066 a SDict begin [/Subtype /Link/Dest (subsection.8.5) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2191 3066 a 73 w Fz(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g (.)p Black 138 w(61)p Black 191 3320 a SDict begin H.S end 191 3320 a Fw(9)84 b(Example)35 b(Co)s(des)1037 3320 y SDict begin 13.6 H.L end 1037 3320 a 1037 3320 a SDict begin [/Subtype /Link/Dest (section.9) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 1037 3320 a 2649 w Fw(63)327 3482 y SDict begin H.S end 327 3482 a Fz(9.1)94 b(Sp)s(eelp)s(enning's)29 b(Example)i(\()p Fs(speelpenning.cpp)p Fz(\))2369 3482 y SDict begin 13.6 H.L end 2369 3482 a 2369 3482 a SDict begin [/Subtype /Link/Dest (subsection.9.1) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2369 3482 a 37 w Fz(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g (.)f(.)h(.)g(.)f(.)h(.)g(.)p Black 138 w(63)p Black 327 3645 a SDict begin H.S end 327 3645 a Fz(9.2)94 b(P)m(o)m(w)m(er)32 b(Example)f(\()p Fs(powexam.cpp)p Fz(\))1784 3645 y SDict begin 13.6 H.L end 1784 3645 a 1784 3645 a SDict begin [/Subtype /Link/Dest (subsection.9.2) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 1784 3645 a 56 w Fz(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.) f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)p Black 138 w(65)p Black 327 3808 a SDict begin H.S end 327 3808 a Fz(9.3)94 b(Determinan)m(t)32 b(Example)f(\()p Fs(detexam.cpp)p Fz(\))2044 3808 y SDict begin 13.6 H.L end 2044 3808 a 2044 3808 a SDict begin [/Subtype /Link/Dest (subsection.9.3) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2044 3808 a 79 w Fz(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f (.)h(.)g(.)f(.)h(.)g(.)p Black 138 w(66)p Black 327 3971 a SDict begin H.S end 327 3971 a Fz(9.4)94 b(Ordinary)29 b(Di\013eren)m(tial)k(Equation)e (Example)f(\()p Fs(odexam.cpp)p Fz(\))2722 3971 y SDict begin 13.6 H.L end 2722 3971 a 2722 3971 a SDict begin [/Subtype /Link/Dest (subsection.9.4) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2722 3971 a 37 w Fz(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h (.)g(.)f(.)h(.)g(.)p Black 138 w(68)p Black Black Black eop end %%Page: 4 4 TeXDict begin 4 3 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.4) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fz(4)231 b Ft(1)91 b(PREP)-8 b(ARING)31 b(A)f(SECTION)f(OF)i(C)e(OR)h (C++)g(CODE)g(F)m(OR)h(DIFFERENTIA)-8 b(TION)p Black 191 515 a SDict begin H.S end 191 515 a 191 515 a SDict begin 13.6 H.A end 191 515 a 191 515 a SDict begin [/View [/XYZ H.V]/Dest (section.1) cvn /DEST pdfmark end 191 515 a 91 x FD(1)135 b(Preparing)41 b(a)g(Section)g(of)h(C)e(or)h(C++)g (Co)t(de)g(for)g(Di\013eren)l(tiation)191 722 y SDict begin H.S end 191 722 a 191 722 a SDict begin 13.6 H.A end 191 722 a 191 722 a SDict begin [/View [/XYZ H.V]/Dest (subsection.1.1) cvn /DEST pdfmark end 191 722 a 143 x FA(1.1)112 b(In)m(tro)s(duction)191 1088 y Fz(The)31 b(pac)m(k)-5 b(age)34 b(ADOL-C)d(utilizes)i(o)m(v)m(erloading)h(in)e(C++,)f(but)g (the)h(user)f(has)g(to)h(kno)m(w)g(only)g(C.)f(The)191 1201 y(acron)m(ym)40 b(stands)e(for)h Fw(A)p Fz(utomatic)h Fw(D)p Fz(i\013eren)m(tiation)i(b)m(y)d Fw(O)p Fz(v)m(er)p Fw(L)p Fz(oading)g(in)g Fw(C)p Fz(++.)65 b(In)39 b(con)m(trast)h(to)191 1314 y(source)29 b(transformation)g(approac)m(hes,)g(o)m(v)m(erloading) i(do)s(es)d(not)h(generate)h(in)m(termediate)h(source)d(co)s(de.)191 1427 y(As)21 b(starting)i(p)s(oin)m(ts)e(to)i(retriev)m(e)g(further)d (information)i(on)f(tec)m(hniques)h(and)f(application)i(of)f(automatic) 191 1540 y(di\013eren)m(tiation,)41 b(as)d(w)m(ell)h(as)e(on)h(other)f (AD)i(to)s(ols,)h(w)m(e)e(refer)f(to)h(the)g(b)s(o)s(ok)f([)2945 1540 y SDict begin H.S end 2945 1540 a Black Fz(7)p Black 2991 1481 a SDict begin H.R end 2991 1481 a 2991 1540 a SDict begin [/Color [0 1 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (cite.GrWa08) cvn H.B /ANN pdfmark end 2991 1540 a Fz(].)62 b(F)-8 b(urthermore,)40 b(the)191 1653 y(w)m(eb)31 b(page)h Fs(http://www.autodiff.org)25 b Fz(of)32 b(the)f(AD)h(comm)m(unit)m(y)g(forms)f(a)h(ric)m(h)f(source) h(of)f(further)191 1766 y(information)g(and)e(p)s(oin)m(ters.)332 1929 y(ADOL-C)37 b(facilitates)i(the)d(sim)m(ultaneous)h(ev)-5 b(aluation)38 b(of)f(arbitrarily)f(high)h(directional)g(deriv)-5 b(a-)191 2041 y(tiv)m(es)27 b(and)e(the)g(gradien)m(ts)i(of)e(these)h (T)-8 b(a)m(ylor)27 b(co)s(e\016cien)m(ts)g(with)e(resp)s(ect)h(to)g (all)h(indep)s(enden)m(t)d(v)-5 b(ariables.)191 2154 y(Relativ)m(e)32 b(to)f(the)f(cost)h(of)f(ev)-5 b(aluating)31 b(the)f(underlying)f(function,)h(the)g(cost)h(for)e(ev)-5 b(aluating)32 b(an)m(y)e(suc)m(h)191 2267 y(scalar-v)m(ector)j(pair)c (gro)m(ws)h(as)g(the)g(square)f(of)h(the)g(degree)g(of)g(the)g(deriv)-5 b(ativ)m(e)31 b(but)e(is)g(still)i(completely)191 2380 y(indep)s(enden)m(t)e(of)i(the)f(n)m(um)m(b)s(ers)f Fr(m)h Fz(and)g Fr(n)p Fz(.)332 2543 y(This)d(man)m(ual)h(is)g(organized)g(as) g(follo)m(ws.)41 b(This)27 b(section)i(explains)e(the)h(mo)s (di\014cations)g(required)f(to)191 2656 y(con)m(v)m(ert)g(undi\013eren) m(tiated)g(co)s(de)f(to)g(co)s(de)h(that)f(compiles)h(with)e(ADOL-C.) 2849 2656 y SDict begin H.S end 2849 2656 a Black Fz(Section)31 b(2)p Black 3212 2594 a SDict begin H.R end 3212 2594 a 3212 2656 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (section.2) cvn H.B /ANN pdfmark end 3212 2656 a 26 w Fz(co)m(v)m(ers)c(asp)s(ects)191 2769 y(of)22 b(the)g(tap)s(e)g(of)g (recorded)g(data)h(that)f(ADOL-C)g(uses)g(to)g(ev)-5 b(aluate)24 b(arbitrarily)e(high)g(order)f(deriv)-5 b(ativ)m(es.)191 2882 y(The)31 b(discussion)h(includes)f(storage)i(requiremen)m(ts)f (and)g(the)g(tailoring)h(of)f(certain)h(tap)s(e)f(c)m(haracteris-)191 2995 y(tics)d(to)g(\014t)e(sp)s(eci\014c)h(user)g(needs.)39 b(Descriptions)29 b(of)f(easy-to-use)i(driv)m(ers)e(for)g(a)g(con)m(v)m (enien)m(t)i(deriv)-5 b(ativ)m(e)191 3107 y(ev)g(aluation)23 b(are)g(con)m(tained)g(in)1264 3107 y SDict begin H.S end 1264 3107 a Black Fz(Section)31 b(3)p Black 1627 3045 a SDict begin H.R end 1627 3045 a 1627 3107 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (section.3) cvn H.B /ANN pdfmark end 1627 3107 a Fz(.)1690 3107 y SDict begin H.S end 1690 3107 a Black Fz(Section)g(4)p Black 2054 3045 a SDict begin H.R end 2054 3045 a 2054 3107 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (section.4) cvn H.B /ANN pdfmark end 2054 3107 a 22 w Fz(o\013ers)22 b(a)g(more)g(mathematical)i(c)m (haracterization)191 3220 y(of)36 b(the)h(di\013eren)m(t)f(mo)s(des)g (of)g(AD)h(to)f(compute)h(deriv)-5 b(ativ)m(es.)59 b(A)m(t)37 b(the)f(same)h(time,)h(the)f(corresp)s(ond-)191 3333 y(ing)31 b(driv)m(ers)g(of)h(ADOL-C)f(are)g(explained.)44 b(The)31 b(o)m(v)m(erloaded)i(deriv)-5 b(ativ)m(e)32 b(ev)-5 b(aluation)33 b(routines)e(using)191 3446 y(the)38 b(forw)m(ard)g(and)f(the)i(rev)m(erse)g(mo)s(de)e(of)i(AD)f(are)h (explained)f(in)2585 3446 y SDict begin H.S end 2585 3446 a Black Fz(Section)31 b(5)p Black 2949 3384 a SDict begin H.R end 2949 3384 a 2949 3446 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (section.5) cvn H.B /ANN pdfmark end 2949 3446 a Fz(.)64 b(Adv)-5 b(anced)38 b(di\013eren-)191 3559 y(tiation)h(tec)m(hniques)g(as)f(the)g(optimal)h(c)m(hec)m(kp)s (oin)m(ting)h(for)e(time)g(in)m(tegrations,)k(the)c(exploitation)j(of) 191 3672 y(\014xed)28 b(p)s(oin)m(t)g(iterations,)j(the)e(usages)g(of)g (external)g(di\013eren)m(tiated)h(functions)e(and)g(the)h(di\013eren)m (tiation)191 3785 y(of)39 b(Op)s(enMP)f(parallel)j(programs)e(are)g (describ)s(ed)g(in)2131 3785 y SDict begin H.S end 2131 3785 a Black Fz(Section)31 b(6)p Black 2494 3723 a SDict begin H.R end 2494 3723 a 2494 3785 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (section.6) cvn H.B /ANN pdfmark end 2494 3785 a Fz(.)68 b(The)38 b(tap)s(eless)i(forw)m(ard)f(mo)s(de)g(is)191 3898 y(presen)m(ted)32 b(in)708 3898 y SDict begin H.S end 708 3898 a Black Fz(Section)f(7)p Black 1071 3836 a SDict begin H.R end 1071 3836 a 1071 3898 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (section.7) cvn H.B /ANN pdfmark end 1071 3898 a Fz(.)1142 3898 y SDict begin H.S end 1142 3898 a Black Fz(Section)g(8)p Black 1506 3836 a SDict begin H.R end 1506 3836 a 1506 3898 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (section.8) cvn H.B /ANN pdfmark end 1506 3898 a 32 w Fz(details)i(the)f(installation)i(and)e(use)g(of)g(the)g(ADOL-C)g (pac)m(k)-5 b(age.)191 4011 y(Finally)d(,)516 4011 y SDict begin H.S end 516 4011 a Black Fz(Section)31 b(9)p Black 880 3949 a SDict begin H.R end 880 3949 a 880 4011 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (section.9) cvn H.B /ANN pdfmark end 880 4011 a 28 w Fz(furnishes)26 b(some)i(example)h(programs)e(that)i(incorp)s(orate)g(the)f(ADOL-C)g (pac)m(k)-5 b(age)191 4124 y(to)39 b(ev)-5 b(aluate)41 b(\014rst)d(and)g(higher-order)g(deriv)-5 b(ativ)m(es.)67 b(These)38 b(and)g(other)h(examples)h(are)f(distributed)191 4237 y(with)31 b(the)h(ADOL-C)f(source)h(co)s(de.)44 b(The)31 b(user)f(should)h(simply)g(refer)g(to)h(them)f(if)h(the)f (more)h(abstract)191 4349 y(and)e(general)h(descriptions)f(of)h(ADOL-C) f(pro)m(vided)g(in)g(this)h(do)s(cumen)m(t)f(do)g(not)h(su\016ce.)191 4506 y SDict begin H.S end 191 4506 a 191 4506 a SDict begin 13.6 H.A end 191 4506 a 191 4506 a SDict begin [/View [/XYZ H.V]/Dest (subsection.1.2) cvn /DEST pdfmark end 191 4506 a 149 x FA(1.2)112 b(Declaring)38 b(Activ)m(e)f(V)-9 b(ariables)191 4878 y Fz(The)34 b(k)m(ey)h(ingredien)m(t)g(of)g (automatic)h(di\013eren)m(tiation)g(b)m(y)f(o)m(v)m(erloading)h(is)f (the)f(concept)i(of)e(an)h Fq(active)191 4991 y(variable)p Fz(.)72 b(All)42 b(v)-5 b(ariables)41 b(that)g(ma)m(y)h(b)s(e)e (considered)g(as)h(di\013eren)m(tiable)h(quan)m(tities)g(at)g(some)f (time)191 5104 y(during)33 b(the)h(program)g(execution)i(m)m(ust)e(b)s (e)f(of)i(an)f(activ)m(e)i(t)m(yp)s(e.)53 b(ADOL-C)34 b(uses)g(one)g(activ)m(e)j(scalar)191 5217 y(t)m(yp)s(e,)42 b(called)e Fp(adouble)p Fz(,)h(whose)e(real)h(part)f(is)g(of)g(the)g (standard)g(t)m(yp)s(e)g Fp(double)p Fz(.)67 b(T)m(ypically)-8 b(,)43 b(one)c(will)191 5330 y(declare)d(the)g(indep)s(enden)m(t)f(v)-5 b(ariables)36 b(and)f(all)h(quan)m(tities)h(that)f(directly)g(or)g (indirectly)g(dep)s(end)e(on)p Black Black eop end %%Page: 5 5 TeXDict begin 5 4 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.5) cvn /DEST pdfmark end 183 199 a Black 191 307 a Ft(1.3)92 b(Marking)31 b(Activ)m(e)h(Sections)2375 b Fz(5)p Black 191 606 a(them)27 b(as)g Fq(active)p Fz(.)39 b(Other)27 b(v)-5 b(ariables)27 b(that)h(do)e(not)i(dep)s(end)d(on)h (the)h(indep)s(enden)m(t)f(v)-5 b(ariables)28 b(but)e(en)m(ter,)191 719 y(for)h(example,)i(as)e(parameters,)i(ma)m(y)f(remain)f(one)h(of)f (the)h Fq(p)-5 b(assive)28 b Fz(t)m(yp)s(es)f Fp(double,)i(\015oat)p Fz(,)f(or)f Fp(int)p Fz(.)39 b(There)191 832 y(is)i(no)g(implicit)h(t)m (yp)s(e)f(con)m(v)m(ersion)h(from)e Fp(adouble)h Fz(to)h(an)m(y)f(of)g (these)g(passiv)m(e)h(t)m(yp)s(es;)k(th)m(us,)e Fw(failure)191 945 y(to)39 b(declare)h(v)-6 b(ariables)39 b(as)h(activ)m(e)f(when)g (they)g(dep)s(end)g(on)h(other)f(activ)m(e)h(v)-6 b(ariables)39 b(will)191 1058 y(result)k(in)g(a)f(compile-time)h(error)g(message)p Fz(.)62 b(In)37 b(data)h(\015o)m(w)f(terminology)-8 b(,)41 b(the)c(set)h(of)f(activ)m(e)191 1171 y(v)-5 b(ariable)30 b(names)e(m)m(ust)h(con)m(tain)h(all)g(its)f(successors)g(in)g(the)g (dep)s(endency)e(graph.)40 b(All)30 b(comp)s(onen)m(ts)f(of)191 1284 y(indexed)h(arra)m(ys)h(m)m(ust)f(ha)m(v)m(e)h(the)g(same)g (activit)m(y)i(status.)332 1446 y(The)h(real)i(comp)s(onen)m(t)f(of)f (an)h Fp(adouble)g(x)f Fz(can)h(b)s(e)f(extracted)j(as)e Fp(x.value\(\))p Fz(.)54 b(In)34 b(particular,)i(suc)m(h)191 1559 y(explicit)25 b(con)m(v)m(ersions)g(are)g(needed)e(for)h(the)g (standard)f(output)g(pro)s(cedure)g Fp(p)m(rintf)p Fz(.)38 b(The)24 b(output)f(stream)191 1672 y(op)s(erator)38 b Fo(\034)f Fz(is)g(o)m(v)m(erloaded)j(suc)m(h)d(that)h(\014rst)e(the)i (real)g(part)g(of)f(an)h Fp(adouble)f Fz(and)g(then)g(the)h(string)191 1785 y(\\)p Fp(\(a\))p Fz(")24 b(is)g(added)e(to)i(the)g(stream.)39 b(The)22 b(input)h(stream)g(op)s(erator)h Fo(\035)f Fz(can)g(b)s(e)g (used)f(to)i(assign)g(a)f(constan)m(t)191 1898 y(v)-5 b(alue)27 b(to)g(an)f Fp(adouble)p Fz(.)39 b(Naturally)-8 b(,)29 b Fp(adouble)p Fz(s)d(ma)m(y)h(b)s(e)f(comp)s(onen)m(ts)g(of)h (v)m(ectors,)h(matrices,)h(and)c(other)191 2011 y(arra)m(ys,)31 b(as)g(w)m(ell)g(as)g(mem)m(b)s(ers)e(of)i(structures)e(or)i(classes.) 332 2174 y(The)f(C++)f(class)i Fp(adouble)p Fz(,)g(its)f(mem)m(b)s(er)g (functions,)g(and)g(the)g(o)m(v)m(erloaded)i(v)m(ersions)f(of)f(all)h (arith-)191 2286 y(metic)k(op)s(erations,)g(comparison)f(op)s(erators,) h(and)e(most)i(ANSI)e(C)g(functions)h(are)g(con)m(tained)h(in)f(the)191 2399 y(\014le)43 b Fs(adouble.cpp)e Fz(and)h(its)i(header)f Fs()p Fz(.)75 b(The)43 b(latter)h(m)m(ust)g(b)s(e)e (included)h(for)191 2512 y(compilation)32 b(of)e(all)i(program)e (\014les)g(con)m(taining)i Fp(adouble)p Fz(s)e(and)g(corresp)s(onding)g (op)s(erations.)191 2655 y SDict begin H.S end 191 2655 a 191 2655 a SDict begin 13.6 H.A end 191 2655 a 191 2655 a SDict begin [/View [/XYZ H.V]/Dest (subsection.1.3) cvn /DEST pdfmark end 191 2655 a 148 x FA(1.3)112 b(Marking)39 b(Activ)m(e)d(Sections)191 3025 y Fz(All)31 b(calculations)h(in)m(v)m (olving)g(activ)m(e)h(v)-5 b(ariables)31 b(that)g(o)s(ccur)f(b)s(et)m (w)m(een)h(the)g(v)m(oid)g(function)f(calls)p Black Black 1076 3249 a Fp(trace)p 1269 3249 28 4 v 33 w(on\(tag,k)m(eep\))244 b Fz(and)c Fp(trace)p 2598 3249 V 33 w(o\013\(\014le\))191 3474 y Fz(are)34 b(recorded)f(on)h(a)g(sequen)m(tial)h(data)f(set)h (called)f Fq(tap)-5 b(e)p Fz(.)52 b(P)m(airs)34 b(of)g(these)g (function)g(calls)g(can)g(app)s(ear)191 3587 y(an)m(ywhere)23 b(in)f(a)h(C++)f(program,)j(but)d(they)h(m)m(ust)f(not)h(o)m(v)m (erlap.)40 b(The)23 b(nonnegativ)m(e)h(in)m(teger)g(argumen)m(t)191 3699 y Fp(tag)33 b Fz(iden)m(ti\014es)g(the)g(particular)g(tap)s(e)g (for)g(subsequen)m(t)f(function)g(or)h(deriv)-5 b(ativ)m(e)34 b(ev)-5 b(aluations.)50 b(Unless)191 3812 y(sev)m(eral)43 b(tap)s(es)f(need)g(to)h(b)s(e)e(k)m(ept,)46 b Fp(tag)g Fz(=)f(0)d(ma)m(y)h(b)s(e)e(used)g(throughout.)76 b(The)41 b(optional)i(in)m(teger)191 3925 y(argumen)m(ts)d Fp(k)m(eep)h Fz(and)e Fp(\014le)g Fz(will)h(b)s(e)f(discussed)g(in)2022 3925 y SDict begin H.S end 2022 3925 a Black Fz(Section)32 b(2)p Black 2386 3863 a SDict begin H.R end 2386 3863 a 2386 3925 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (section.2) cvn H.B /ANN pdfmark end 2386 3925 a Fz(.)68 b(W)-8 b(e)41 b(will)f(refer)f(to)i(the)f(sequence)g(of)191 4038 y(statemen)m(ts)31 b(executed)f(b)s(et)m(w)m(een)f(a)h(particular) f(call)i(to)e Fp(trace)p 2333 4038 28 4 v 33 w(on)h Fz(and)e(the)i (follo)m(wing)g(call)g(to)g Fp(trace)p 3664 4038 V 33 w(o\013)191 4151 y Fz(as)k(an)g Fq(active)i(se)-5 b(ction)34 b Fz(of)g(the)h(co)s(de.)51 b(The)34 b(same)g(activ)m(e)i(section)f(ma) m(y)g(b)s(e)e(en)m(tered)i(rep)s(eatedly)-8 b(,)35 b(and)191 4264 y(one)c(can)f(successiv)m(ely)j(generate)e(sev)m(eral)h(traces)g (on)e(distinct)h(tap)s(es)g(b)m(y)f(c)m(hanging)h(the)g(v)-5 b(alue)31 b(of)g Fp(tag)p Fz(.)191 4377 y(Both)c(functions)e Fp(trace)p 993 4377 V 34 w(on)h Fz(and)g Fp(trace)p 1506 4377 V 33 w(o\013)g Fz(are)h(protot)m(yp)s(ed)f(in)g(the)g(header)g (\014le)g Fs()p Fz(,)191 4490 y(whic)m(h)k(is)g (included)g(b)m(y)g(the)h(header)f Fs()c Fz(automatically)-8 b(.)332 4653 y(Activ)m(e)46 b(sections)e(ma)m(y)h (con)m(tain)g(nested)e(or)h(ev)m(en)g(recursiv)m(e)g(calls)h(to)f (functions)g(pro)m(vided)f(b)m(y)191 4765 y(the)e(user.)73 b(Naturally)-8 b(,)45 b(their)c(formal)g(and)g(actual)h(parameters)g(m) m(ust)f(ha)m(v)m(e)h(matc)m(hing)g(t)m(yp)s(es.)73 b(In)191 4878 y(particular,)32 b(the)f(functions)g(m)m(ust)g(b)s(e)g(compiled)h (with)f(their)g(activ)m(e)j(v)-5 b(ariables)32 b(declared)f(as)h Fp(adouble)p Fz(s)191 4991 y(and)i(with)h(the)g(header)g(\014le)g Fs()30 b Fz(included.)53 b(V)-8 b(ariables)37 b(of)e(t)m(yp)s(e)g Fp(adouble)g Fz(ma)m(y)g(b)s(e)191 5104 y(declared)30 b(outside)g(an)g(activ)m(e)i(section)f(and)e(need)g (not)h(go)h(out)f(of)g(scop)s(e)g(b)s(efore)f(the)h(end)f(of)h(an)f (activ)m(e)191 5217 y(section.)41 b(It)26 b(is)h(not)g(necessary)g({)g (though)f(desirable)h({)g(that)g(free-store)h Fp(adouble)p Fz(s)e(allo)s(cated)j(within)d(an)191 5330 y(activ)m(e)33 b(section)e(b)s(e)f(deleted)h(b)s(efore)g(its)f(completion.)43 b(The)30 b(v)-5 b(alues)31 b(of)f(all)i Fp(adouble)p Fz(s)e(that)h(exist)g(at)h(the)p Black Black eop end %%Page: 6 6 TeXDict begin 6 5 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.6) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fz(6)231 b Ft(1)91 b(PREP)-8 b(ARING)31 b(A)f(SECTION)f(OF)i(C)e(OR)h (C++)g(CODE)g(F)m(OR)h(DIFFERENTIA)-8 b(TION)p Black 191 606 a Fz(b)s(eginning)26 b(and)g(end)g(of)h(an)g(activ)m(e)i (section)f(are)f(automatically)i(recorded)e(b)m(y)g Fp(trace)p 3126 606 28 4 v 33 w(on)g Fz(and)f Fp(trace)p 3639 606 V 33 w(o\013)p Fz(,)191 719 y(resp)s(ectiv)m(ely)-8 b(.)191 861 y SDict begin H.S end 191 861 a 191 861 a SDict begin 13.6 H.A end 191 861 a 191 861 a SDict begin [/View [/XYZ H.V]/Dest (subsection.1.4) cvn /DEST pdfmark end 191 861 a 148 x FA(1.4)112 b(Selecting)38 b(Indep)s(enden)m(t)h(and)f(Dep)s (enden)m(t)h(V)-9 b(ariables)191 1231 y Fz(One)37 b(or)h(more)g(activ)m (e)h(v)-5 b(ariables)39 b(that)f(are)g(read)g(in)f(or)g(initialized)j (to)e(the)g(v)-5 b(alues)38 b(of)g(constan)m(ts)h(or)191 1344 y(passiv)m(e)22 b(v)-5 b(ariables)22 b(m)m(ust)f(b)s(e)f (distinguished)h(as)g(indep)s(enden)m(t)f(v)-5 b(ariables.)38 b(Other)21 b(activ)m(e)i(v)-5 b(ariables)22 b(that)191 1457 y(are)27 b(similarly)g(initialized)i(ma)m(y)e(b)s(e)f(considered)h (as)g(temp)s(oraries)g(\(e.g.,)i(a)e(v)-5 b(ariable)28 b(that)f(accum)m(ulates)191 1570 y(the)j(partial)h(sums)e(of)i(a)f (scalar)h(pro)s(duct)e(after)i(b)s(eing)f(initialized)i(to)f(zero\).)41 b(In)30 b(order)g(to)g(distinguish)191 1683 y(an)g(activ)m(e)j(v)-5 b(ariable)31 b Fp(x)f Fz(as)h(indep)s(enden)m(t,)e(ADOL-C)i(requires)f (an)g(assignmen)m(t)h(of)g(the)f(form)p Black Black 1022 1905 a Fp(x)g Fo(\034)p Fw(=)g Fp(p)m(x)120 b Fz(//)32 b Fp(p)m(x)e Fz(of)h(an)m(y)g(passiv)m(e)g(n)m(umeric)f(t)m(yp)s(e)76 b Fr(:)191 2128 y Fz(This)43 b(sp)s(ecial)i(initialization)i(ensures)c (that)h Fp(x.value\(\))h Fz(=)e Fp(p)m(x)p Fz(,)48 b(and)c(it)g(should) f(precede)h(an)m(y)g(other)191 2241 y(assignmen)m(t)28 b(to)g Fp(x)p Fz(.)40 b(Ho)m(w)m(ev)m(er,)30 b Fp(x)d Fz(ma)m(y)h(b)s(e)f(reassigned)g(other)h(v)-5 b(alues)28 b(subsequen)m(tly)-8 b(.)39 b(Similarly)-8 b(,)29 b(one)f(or)191 2354 y(more)i(activ)m(e)j(v)-5 b(ariables)31 b Fp(y)f Fz(m)m(ust)h(b)s(e)e(distinguished)h(as)g(dep)s(enden)m(t)g(b)m(y)g(an) g(assignmen)m(t)i(of)e(the)h(form)p Black Black 1195 2576 a Fp(y)f Fo(\035)p Fw(=)g Fp(p)m(y)121 b Fz(//)31 b Fp(p)m(y)f Fz(of)h(an)m(y)g(passiv)m(e)g(t)m(yp)s(e)76 b Fr(;)191 2799 y Fz(whic)m(h)30 b(ensures)f(that)i Fp(p)m(y)f Fz(=)g Fp(y)-8 b(.value\(\))31 b Fz(and)e(should)g(not)i(b)s(e)e (succeeded)h(b)m(y)g(an)m(y)h(other)f(assignmen)m(t)h(to)191 2912 y Fp(y)p Fz(.)57 b(Ho)m(w)m(ev)m(er,)39 b(a)e(dep)s(enden)m(t)e(v) -5 b(ariable)36 b Fp(y)g Fz(ma)m(y)g(ha)m(v)m(e)h(b)s(een)e(assigned)i (other)f(real)g(v)-5 b(alues)36 b(previously)-8 b(,)191 3025 y(and)26 b(it)i(could)f(ev)m(en)h(b)s(e)f(an)g(indep)s(enden)m(t)f (v)-5 b(ariable)27 b(as)h(w)m(ell.)40 b(The)27 b(deriv)-5 b(ativ)m(e)29 b(v)-5 b(alues)27 b(calculated)i(after)191 3138 y(the)34 b(completion)h(of)f(an)g(activ)m(e)i(section)f(alw)m(a)m (ys)h(represen)m(t)d Fw(deriv)-6 b(ativ)m(es)40 b(of)f(the)f(\014nal)h (v)-6 b(alues)40 b(of)191 3251 y(the)j(dep)s(enden)m(t)f(v)-6 b(ariables)44 b(with)e(resp)s(ect)h(to)g(the)g(initial)g(v)-6 b(alues)43 b(of)g(the)g(indep)s(enden)m(t)191 3364 y(v)-6 b(ariables)p Fz(.)332 3526 y(The)34 b(order)h(in)f(whic)m(h)h(the)g (indep)s(enden)m(t)f(and)g(dep)s(enden)m(t)g(v)-5 b(ariables)36 b(are)f(mark)m(ed)g(b)m(y)g(the)g Fo(\034)p Fw(=)191 3639 y Fz(and)30 b Fo(\035)p Fw(=)g Fz(statemen)m(ts)i(matters)f (crucially)h(for)e(the)h(subsequen)m(t)e(deriv)-5 b(ativ)m(e)32 b(ev)-5 b(aluations.)42 b(Ho)m(w)m(ev)m(er,)191 3752 y(these)35 b(v)-5 b(ariables)36 b(do)e(not)h(ha)m(v)m(e)h(to)g(b)s(e)e (com)m(bined)h(in)m(to)h(con)m(tiguous)g(v)m(ectors.)55 b(ADOL-C)35 b(coun)m(ts)h(the)191 3865 y(n)m(um)m(b)s(er)23 b(of)i(indep)s(enden)m(t)f(and)g(dep)s(enden)m(t)g(v)-5 b(ariable)26 b(sp)s(eci\014cations)f(within)f(eac)m(h)i(activ)m(e)h (section)f(and)191 3978 y(records)k(them)g(in)g(the)h(header)f(of)h (the)f(tap)s(e.)191 4120 y SDict begin H.S end 191 4120 a 191 4120 a SDict begin 13.6 H.A end 191 4120 a 191 4120 a SDict begin [/View [/XYZ H.V]/Dest (subsection.1.5) cvn /DEST pdfmark end 191 4120 a 148 x FA(1.5)112 b(A)37 b(Subprogram)i(as)f(an)g(Activ)m(e)f(Section)191 4490 y Fz(As)30 b(a)h(generic)g(example)g(let)h(us)d(consider)i(a)f(C\(++\)) h(function)f(of)g(the)h(form)f(sho)m(wn)f(in)3264 4508 y SDict begin H.S end 3264 4508 a Black -18 x Fz(Figure)i(1)p Black 3597 4428 a SDict begin H.R end 3597 4428 a 3597 4490 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (figure.1) cvn H.B /ANN pdfmark end 3597 4490 a Fz(.)332 4653 y(If)41 b Fp(eval)g Fz(is)h(to)g(b)s(e)f(called)i(from)e(within)g(an)g (activ)m(e)j(C\(++\))d(section)i(with)e Fp(x)g Fz(and)g Fp(y)h Fz(as)f(v)m(ectors)191 4765 y(of)j Fp(adouble)p Fz(s)f(and)g(the)h(other)g(parameters)g(passiv)m(e,)j(then)d(one)g (merely)f(has)h(to)g(c)m(hange)h(the)f(t)m(yp)s(e)191 4878 y(declarations)29 b(of)e(all)i(v)-5 b(ariables)28 b(that)g(dep)s(end)d(on)j Fp(x)f Fz(from)g Fp(double)h Fz(or)f Fp(\015oat)g Fz(to)h Fp(adouble)p Fz(.)40 b(Subsequen)m(tly)-8 b(,)191 4991 y(the)41 b(subprogram)f(m)m(ust)h(b)s(e)g(compiled)h(with) f(the)g(header)g(\014le)g Fs()c Fz(included)j(as)191 5104 y(describ)s(ed)35 b(in)711 5104 y SDict begin H.S end 711 5104 a Black Fz(Section)c(1.2)p Black 1145 5042 a SDict begin H.R end 1145 5042 a 1145 5104 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.1.2) cvn H.B /ANN pdfmark end 1145 5104 a Fz(.)59 b(No)m(w)37 b(let)g(us)e(consider)i(the)f (situation)h(when)f Fp(eval)f Fz(is)i(still)g(to)g(b)s(e)f(called)191 5217 y(with)27 b(in)m(teger)h(and)f(real)h(argumen)m(ts,)g(p)s(ossibly) f(from)g(a)g(program)g(written)g(in)g(F)-8 b(ortran77,)30 b(whic)m(h)d(do)s(es)191 5330 y(not)k(allo)m(w)g(o)m(v)m(erloading.)p Black Black eop end %%Page: 7 7 TeXDict begin 7 6 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.7) cvn /DEST pdfmark end 183 199 a Black 191 307 a Ft(1.6)92 b(Ov)m(erloaded)31 b(Op)s(erators)f(and)g(F)-8 b(unctions)1877 b Fz(7)p Black Black 191 518 3600 4 v 191 2122 4 1604 v Black Black Black Black 530 722 a Fp(void)30 b(eval\(int)g(n,)h(int)e(m,)361 b Fz(//)32 b(n)m(um)m(b)s(er)d(of)h (indep)s(enden)m(ts)f(and)h(dep)s(enden)m(ts)899 835 y Fp(double)h(*x,)433 b Fz(//)32 b(indep)s(enden)m(t)d(v)-5 b(ariable)31 b(v)m(ector)899 947 y Fp(double)g(*y)-8 b(,)441 b Fz(//)32 b(dep)s(enden)m(t)d(v)-5 b(ariable)31 b(v)m(ector)899 1060 y Fp(int)f(*k,)578 b Fz(//)32 b(in)m(teger)f (parameters)899 1173 y Fp(double)g(*z\))425 b Fz(//)32 b(real)f(parameters)530 1286 y Fn(f)1148 b Fz(//)32 b(b)s(eginning)d (of)i(function)f(b)s(o)s(dy)696 1399 y Fp(double)h(t)f(=)g(0;)514 b Fz(//)32 b(lo)s(cal)f(v)-5 b(ariable)31 b(declaration)696 1512 y Fp(fo)m(r)g(\(int)f(i=0;)g(i)h Fm(<)f Fp(n;)h(i++\))69 b Fz(//)32 b(b)s(egin)e(of)g(computation)816 1625 y Fp(t)g(+=)g (z[i]*x[i];)372 b Fz(//)32 b(con)m(tin)m(ue)696 1738 y Fn(\001)15 b(\001)g(\001)h(\001)f(\001)g(\001)h(\001)f(\001)g(\001)h (\001)f(\001)g(\001)559 b Fz(//)32 b(con)m(tin)m(ue)696 1851 y Fp(y[m-1])g(=)e(t/m;)478 b Fz(//)32 b(end)d(of)i(computation)530 1964 y Fn(g)1148 b Fz(//)32 b(end)d(of)i(function)p 3787 2122 V 191 2125 3600 4 v Black 809 2280 a(Figure)f(1:)1207 2280 y SDict begin H.S end 1207 2280 a 1207 2280 a SDict begin H.R end 1207 2280 a 1207 2280 a SDict begin [/View [/XYZ H.V]/Dest (figure.1) cvn /DEST pdfmark end 1207 2280 a Fz(Generic)h(example)g(of)f(a)h(subprogram)e(to)i(b)s(e)f (activ)-5 b(ated)p Black Black 332 2572 a(T)d(o)33 b(automatically)i (compute)e(deriv)-5 b(ativ)m(es)34 b(of)f(the)g(dep)s(enden)m(t)e(v)-5 b(ariables)33 b Fp(y)g Fz(with)f(resp)s(ect)g(to)i(the)191 2685 y(indep)s(enden)m(t)d(v)-5 b(ariables)32 b Fp(x)p Fz(,)g(w)m(e)h(can)f(mak)m(e)g(the)g(b)s(o)s(dy)f(of)h(the)g(function)f (in)m(to)i(an)f(activ)m(e)i(section.)46 b(F)-8 b(or)191 2798 y(example,)31 b(w)m(e)g(ma)m(y)g(mo)s(dify)f(the)g(previous)g (program)g(segmen)m(t)i(as)e(in)2660 2815 y SDict begin H.S end 2660 2815 a Black -17 x Fz(Figure)h(2)p Black 2993 2736 a SDict begin H.R end 2993 2736 a 2993 2798 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (figure.2) cvn H.B /ANN pdfmark end 2993 2798 a Fz(.)40 b(The)30 b(renaming)g(and)191 2911 y(doubling)h(up)f(of)h(the)g(original)i(indep)s(enden)m(t)d(and)g (dep)s(enden)m(t)h(v)-5 b(ariable)32 b(v)m(ectors)g(b)m(y)f(activ)m(e)j (coun)m(ter-)191 3024 y(parts)c(ma)m(y)g(seem)g(at)h(\014rst)e(a)h(bit) g(clumsy)-8 b(.)41 b(Ho)m(w)m(ev)m(er,)32 b(this)e(transformation)h (has)e(the)h(adv)-5 b(an)m(tage)32 b(that)191 3136 y(the)25 b(calling)i(sequence)e(and)f(the)h(computational)i(part,)f(i.e.,)h (where)e(the)g(function)f(is)h(really)h(ev)-5 b(aluated,)191 3249 y(of)37 b Fp(eval)g Fz(remain)g(completely)i(unaltered.)61 b(If)36 b(the)i(temp)s(orary)e(v)-5 b(ariable)38 b Fp(t)f Fz(had)g(remained)g(a)g Fp(double)p Fz(,)191 3362 y(the)42 b(co)s(de)h(w)m(ould)f(not)g(compile,)47 b(b)s(ecause)42 b(of)g(a)h(t)m(yp)s(e)f(con\015ict)h(in)f(the)h(assignmen)m(t)g(follo)m (wing)h(the)191 3475 y(declaration.)e(More)31 b(detailed)h(example)f (co)s(des)f(are)h(listed)g(in)2377 3475 y SDict begin H.S end 2377 3475 a Black Fz(Section)g(9)p Black 2741 3413 a SDict begin H.R end 2741 3413 a 2741 3475 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (section.9) cvn H.B /ANN pdfmark end 2741 3475 a Fz(.)191 3660 y SDict begin H.S end 191 3660 a 191 3660 a SDict begin 13.6 H.A end 191 3660 a 191 3660 a SDict begin [/View [/XYZ H.V]/Dest (subsection.1.6) cvn /DEST pdfmark end 191 3660 a 149 x FA(1.6)112 b(Ov)m(erloaded)39 b(Op)s(erators)f(and)g(F)-9 b(unctions)191 4038 y Fz(As)37 b(in)f(the)h(subprogram)e(discussed)h(ab)s(o)m(v)m(e,)k (the)d(actual)h(computational)h(statemen)m(ts)f(of)f(a)g(C\(++\))191 4151 y(co)s(de)45 b(need)g(not)g(b)s(e)f(altered)i(for)f(the)g(purp)s (oses)e(of)i(automatic)i(di\013eren)m(tiation.)86 b(All)45 b(arithmetic)191 4264 y(op)s(erations,)33 b(as)f(w)m(ell)h(as)f(the)g (comparison)g(and)f(assignmen)m(t)i(op)s(erators,)g(are)f(o)m(v)m (erloaded,)i(so)e(an)m(y)h(or)191 4377 y(all)39 b(of)f(their)g(op)s (erands)f(can)i(b)s(e)e(an)h(activ)m(e)j(v)-5 b(ariable.)64 b(An)38 b Fp(adouble)g(x)g Fz(o)s(ccurring)g(in)g(a)h(comparison)191 4490 y(op)s(erator)44 b(is)g(e\013ectiv)m(ely)i(replaced)e(b)m(y)g(its) g(real)g(v)-5 b(alue)44 b Fp(x.value\(\))p Fz(.)81 b(Most)45 b(functions)e(con)m(tained)i(in)191 4603 y(the)34 b(ANSI)f(C)g (standard)f(for)h(the)h(math)f(library)g(are)h(o)m(v)m(erloaded)i(for)d (activ)m(e)i(argumen)m(ts.)51 b(The)33 b(only)191 4716 y(exceptions)42 b(are)f(the)g(non-di\013eren)m(tiable)h(functions)e Fp(fmo)s(d)g Fz(and)h Fp(mo)s(df)p Fz(.)71 b(Otherwise,)44 b(legitimate)f(C)191 4829 y(co)s(de)d(in)g(activ)m(e)i(sections)f(can)g (remain)f(completely)h(unc)m(hanged,)i(pro)m(vided)c(the)h(direct)h (output)f(of)191 4941 y(activ)m(e)35 b(v)-5 b(ariables)34 b(is)f(a)m(v)m(oided.)49 b(The)33 b(rest)g(of)g(this)g(subsection)g(ma) m(y)g(b)s(e)g(skipp)s(ed)e(b)m(y)i(\014rst)f(time)i(users)191 5054 y(who)c(are)h(not)f(w)m(orried)h(ab)s(out)f(marginal)h(issues)f (of)g(di\013eren)m(tiabilit)m(y)j(and)d(e\016ciency)-8 b(.)332 5217 y(The)29 b(mo)s(dulus)f Fp(fabs\(x\))i Fz(is)g(ev)m (erywhere)g(Lipsc)m(hitz)g(con)m(tin)m(uous)h(but)e(not)h(prop)s(erly)e (di\013eren)m(tiable)191 5330 y(at)38 b(the)f(origin,)i(whic)m(h)e (raises)g(the)g(question)g(of)h(ho)m(w)f(this)f(exception)i(ough)m(t)g (to)g(b)s(e)e(handled.)60 b(F)-8 b(or-)p Black Black eop end %%Page: 8 8 TeXDict begin 8 7 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.8) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fz(8)231 b Ft(1)91 b(PREP)-8 b(ARING)31 b(A)f(SECTION)f(OF)i(C)e(OR)h (C++)g(CODE)g(F)m(OR)h(DIFFERENTIA)-8 b(TION)p Black Black 191 518 3600 4 v 191 3590 4 3072 v Black Black Black Black 461 722 a Fp(void)30 b(eval\()h(int)e(n,m,)631 b Fz(//)32 b(n)m(um)m(b)s(er)d(of)h(indep)s(enden)m(ts)f(and)h(dep)s (enden)m(ts)861 835 y Fp(double)g(*p)m(x,)497 b Fz(//)32 b(indep)s(enden)m(t)d(passiv)m(e)i(v)-5 b(ariable)31 b(v)m(ector)861 947 y Fp(double)f(*p)m(y)-8 b(,)505 b Fz(//)32 b(dep)s(enden)m(t)d(passiv)m(e)i(v)-5 b(ariable)31 b(v)m(ector)861 1060 y Fp(int)e(*k,)686 b Fz(//)32 b(in)m(teger)f (parameters)861 1173 y Fp(double)f(*z\))533 b Fz(//)32 b(parameter)e(v)m(ector)461 1286 y Fn(f)1286 b Fz(//)32 b(b)s(eginning)d(of)i(function)f(b)s(o)s(dy)566 1399 y Fp(sho)m(rt)h(int)f(tag)g(=)g(0;)552 b Fz(//)32 b(tap)s(e)e(arra)m(y) h(and/or)f(tap)s(e)h(\014le)f(sp)s(eci\014er)566 1512 y Fp(trace)p 759 1512 28 4 v 33 w(on\(tag\);)696 b Fz(//)32 b(start)f(tracing)566 1625 y Fp(adouble)g(*x,)g(*y;)648 b Fz(//)32 b(declare)f(activ)m(e)i(v)-5 b(ariable)31 b(p)s(oin)m(ters)566 1738 y Fp(x)f(=)h(new)f(adouble[n];)457 b Fz(//)32 b(declare)f(activ)m(e)i(indep)s(enden)m(t)c(v)-5 b(ariables)566 1851 y Fp(y)30 b(=)h(new)f(adouble[m];)432 b Fz(//)32 b(declare)f(activ)m(e)i(dep)s(enden)m(t)c(v)-5 b(ariables)566 1964 y Fp(fo)m(r)31 b(\(int)g(i=0;)f(i)g Fm(<)h Fp(n;)f(i++\))717 2077 y(x[i])g Fo(\034)p Fw(=)g Fp(p)m(x[i];)528 b Fz(//)32 b(select)g(indep)s(enden)m(t)d(v)-5 b(ariables)566 2189 y Fp(adouble)31 b(t)f(=)g(0;)669 b Fz(//)32 b(lo)s(cal)f(v)-5 b(ariable)31 b(declaration)566 2302 y Fp(fo)m(r)g(\(int)g(i=0;)f(i)g Fm(<)h Fp(n;)f(i++\))268 b Fz(//)32 b(b)s(egin)e(crunc)m(h)686 2415 y Fp(t)g(+=)g(z[i]*x[i];)571 b Fz(//)32 b(con)m(tin)m(ue)f(crunc)m(h)566 2528 y Fn(\001)15 b(\001)g(\001)h(\001)f(\001)g(\001)i(\001)e(\001)g(\001)h(\001)f(\001)g (\001)757 b Fz(//)32 b(con)m(tin)m(ue)f(crunc)m(h)566 2641 y Fn(\001)15 b(\001)g(\001)h(\001)f(\001)g(\001)i(\001)e(\001)g (\001)h(\001)f(\001)g(\001)757 b Fz(//)32 b(con)m(tin)m(ue)f(crunc)m(h) 566 2754 y Fp(y[m-1])h(=)e(t/m;)677 b Fz(//)32 b(end)d(crunc)m(h)h(as)h (b)s(efore)566 2867 y Fp(fo)m(r)g(\(int)g(j=0;)f(j)h Fm(<)g Fp(m;)f(j++\))686 2980 y(y[j])h Fo(\035)p Fw(=)f Fp(p)m(y[j];)554 b Fz(//)32 b(select)g(dep)s(enden)m(t)d(v)-5 b(ariables)566 3093 y Fp(delete[])32 b(y;)853 b Fz(//)32 b(delete)f(dep)s(enden)m(t)f(activ)m(e)i(v)-5 b(ariables)566 3206 y Fp(delete[])32 b(x;)853 b Fz(//)32 b(delete)f(indep)s(enden)m(t) e(activ)m(e)k(v)-5 b(ariables)566 3319 y Fp(trace)p 759 3319 V 33 w(o\013\(\);)812 b Fz(//)32 b(complete)f(tap)s(e)461 3431 y Fn(g)1286 b Fz(//)32 b(end)d(of)i(function)p 3787 3590 4 3072 v 191 3593 3600 4 v Black 855 3748 a(Figure)g(2:)1253 3748 y SDict begin H.S end 1253 3748 a 1253 3748 a SDict begin H.R end 1253 3748 a 1253 3748 a SDict begin [/View [/XYZ H.V]/Dest (figure.2) cvn /DEST pdfmark end 1253 3748 a Fz(Activ)-5 b(ated)32 b(v)m(ersion)f(of)f(the)h(co)s(de)g (listed)f(in)2795 3765 y SDict begin H.S end 2795 3765 a Black -17 x Fz(Figure)g(1)p Black 3127 3686 a SDict begin H.R end 3127 3686 a 3127 3748 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (figure.1) cvn H.B /ANN pdfmark end 3127 3748 a Black Black 191 4038 a Fz(tunately)-8 b(,)44 b(one)d(can)g(easily)g (see)g(that)g Fp(fabs\(x\))g Fz(and)f(all)h(its)g(comp)s(ositions)g (with)f(smo)s(oth)g(functions)191 4150 y(are)32 b(still)g (directionally)h(di\013eren)m(tiable.)45 b(These)31 b(directional)i (deriv)-5 b(ativ)m(es)32 b(of)g(arbitrary)f(order)g(can)g(b)s(e)191 4263 y(propagated)e(in)f(the)h(forw)m(ard)f(mo)s(de)g(without)g(an)m(y) h(am)m(biguit)m(y)-8 b(.)42 b(In)27 b(other)i(w)m(ords,)g(the)f(forw)m (ard)g(mo)s(de)191 4376 y(as)k(implemen)m(ted)g(in)f(ADOL-C)g(computes) h(Gateaux)h(deriv)-5 b(ativ)m(es)33 b(in)e(certain)i(directions,)f (whic)m(h)f(re-)191 4489 y(duce)37 b(to)i(F)-8 b(r)m(\023)-43 b(ec)m(het)40 b(deriv)-5 b(ativ)m(es)39 b(only)f(if)f(the)h(dep)s (endence)f(on)g(the)h(direction)g(is)g(linear.)63 b(Otherwise,)191 4602 y(the)28 b(directional)h(deriv)-5 b(ativ)m(es)29 b(are)g(merely)f(p)s(ositiv)m(ely)h(homogeneous)g(with)e(resp)s(ect)h (to)h(the)f(scaling)h(of)191 4715 y(the)34 b(directions.)53 b(F)-8 b(or)35 b(the)f(rev)m(erse)h(mo)s(de,)g(ADOL-C)f(sets)h(the)f (deriv)-5 b(ativ)m(e)36 b(of)e Fp(fabs\(x\))g Fz(at)h(the)f(origin)191 4828 y(somewhat)d(arbitrarily)f(to)h(zero.)332 4991 y(W)-8 b(e)27 b(ha)m(v)m(e)h(de\014ned)d(binary)g(functions)h Fp(fmin)g Fz(and)f Fp(fmax)h Fz(for)g Fp(adouble)g Fz(argumen)m(ts,)i (so)e(that)h(function)191 5104 y(and)j(deriv)-5 b(ativ)m(e)32 b(v)-5 b(alues)30 b(are)h(obtained)g(consisten)m(t)h(with)e(those)h(of) f Fp(fabs)g Fz(according)h(to)g(the)g(iden)m(tities)582 5330 y(min)o(\()p Fr(a;)15 b(b)p Fz(\))27 b(=)e([)p Fr(a)20 b Fz(+)g Fr(b)g Fn(\000)g(j)p Fr(a)h Fn(\000)f Fr(b)p Fn(j)p Fz(])p Fr(=)p Fz(2)92 b(and)106 b(max\()p Fr(a;)15 b(b)p Fz(\))26 b(=)f([)p Fr(a)c Fz(+)f Fr(b)g Fz(+)g Fn(j)p Fr(a)g Fn(\000)g Fr(b)p Fn(j)p Fz(])p Fr(=)p Fz(2)93 b Fr(:)p Black Black eop end %%Page: 9 9 TeXDict begin 9 8 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.9) cvn /DEST pdfmark end 183 199 a Black 191 307 a Ft(1.6)92 b(Ov)m(erloaded)31 b(Op)s(erators)f(and)g(F)-8 b(unctions)1877 b Fz(9)p Black 191 606 a(These)30 b(relations)h(cannot) f(hold)g(if)g(either)h Fr(a)f Fz(or)g Fr(b)f Fz(is)i(in\014nite,)f(in)f (whic)m(h)h(case)h Fp(fmin)f Fz(or)g Fp(fmax)f Fz(and)h(their)191 719 y(deriv)-5 b(ativ)m(es)31 b(ma)m(y)g(still)g(b)s(e)e(w)m(ell)i (de\014ned.)39 b(It)30 b(should)f(b)s(e)g(noted)h(that)h(the)f (directional)h(di\013eren)m(tiation)191 832 y(of)36 b Fp(fmin)g Fz(and)f Fp(fmax)g Fz(yields)h(at)h(ties)g Fr(a)d Fz(=)h Fr(b)g Fz(di\013eren)m(t)i(results)e(from)h(the)g (corresp)s(onding)f(assignmen)m(t)191 945 y(based)30 b(on)g(the)h(sign)f(of)h Fr(a)20 b Fn(\000)g Fr(b)p Fz(.)41 b(F)-8 b(or)31 b(example,)g(the)g(statemen)m(t)p Black Black 1448 1157 a Fp(if)f(\(a)g Fr(<)g Fp(b\))h(c)g(=)f(a;)g(else)h(c)f (=)g(b;)191 1370 y Fz(yields)36 b(for)f Fp(a)g Fz(=)g Fp(b)h Fz(and)f Fp(a)1090 1337 y Fl(0)1146 1370 y Fr(<)g Fp(b)1299 1337 y Fl(0)1358 1370 y Fz(the)h(incorrect)g(directional)h (deriv)-5 b(ativ)m(e)37 b(v)-5 b(alue)36 b Fp(c)3061 1337 y Fl(0)3119 1370 y Fz(=)f Fp(b)3272 1337 y Fl(0)3331 1370 y Fz(rather)g(than)191 1482 y(the)j(correct)i Fp(c)707 1449 y Fl(0)769 1482 y Fz(=)e Fp(a)922 1449 y Fl(0)945 1482 y Fz(.)65 b(Therefore)38 b(this)g(form)g(of)g(conditional)i (assignmen)m(t)f(should)e(b)s(e)h(a)m(v)m(oided)i(b)m(y)191 1595 y(use)g(of)g(the)g(function)g Fp(fmin)p Fz(\()p Fp(a)p Fr(;)15 b Fp(b)p Fz(\).)70 b(There)39 b(are)i(also)g(v)m (ersions)f(of)g Fp(fmin)g Fz(and)f Fp(fmax)h Fz(for)g(t)m(w)m(o)h (passiv)m(e)191 1708 y(argumen)m(ts)28 b(and)f(mixed)g(passiv)m (e/activ)m(e)k(argumen)m(ts)d(are)g(handled)e(b)m(y)h(implicit)i(con)m (v)m(ersion.)41 b(On)27 b(the)191 1821 y(function)f(class)h(obtained)g (b)m(y)f(comp)s(osing)h(the)f(mo)s(dulus)f(with)h(real)h(analytic)h (functions,)f(the)g(concept)191 1934 y(of)g(directional)h(di\013eren)m (tiation)h(can)e(b)s(e)f(extended)h(to)g(the)g(propagation)h(of)f (unique)f(one-sided)g(T)-8 b(a)m(ylor)191 2047 y(expansions.)40 b(The)30 b(branc)m(hes)g(tak)m(en)i(b)m(y)e Fp(fabs,)g(fmin)p Fz(,)g(and)g Fp(fmax)p Fz(,)g(are)h(recorded)f(on)g(the)h(tap)s(e.)332 2210 y(The)j(functions)h Fp(sqrt)p Fz(,)h Fp(p)s(o)m(w)p Fz(,)g(and)e(some)i(in)m(v)m(erse)f(trigonometric)i(functions)d(ha)m(v) m(e)i(in\014nite)f(slop)s(es)191 2323 y(at)44 b(the)f(b)s(oundary)d(p)s (oin)m(ts)j(of)g(their)g(domains.)78 b(A)m(t)44 b(these)f(marginal)g(p) s(oin)m(ts)g(the)g(deriv)-5 b(ativ)m(es)44 b(are)191 2436 y(set)34 b(b)m(y)f(ADOL-C)g(to)h(either)g Fn(\006)p Fp(InfV)m(al)p Fz(,)f(0)g(or)h Fp(NoNum)p Fz(,)h(where)e Fp(InfV)m(al)g Fz(and)f Fp(NoNum)j Fz(are)e(user-de\014ned)191 2548 y(parameters,)48 b(see)865 2548 y SDict begin H.S end 865 2548 a Black Fz(Section)31 b(2.2)p Black 1299 2486 a SDict begin H.R end 1299 2486 a 1299 2548 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.2.2) cvn H.B /ANN pdfmark end 1299 2548 a Fz(.)82 b(On)44 b(IEEE)f(mac)m(hines)i Fp(InfV)m(al)e Fz(can)i(b)s(e)e(set)i(to)g(the)f(sp)s(ecial)h(v)-5 b(alue)191 2661 y Fp(Inf)28 b Fz(=)g(1)p Fr(:)p Fz(0)p Fr(=)p Fz(0)p Fr(:)p Fz(0)j(and)c Fp(NoNum)j Fz(to)f Fp(NaN)f Fz(=)g(0)p Fr(:)p Fz(0)p Fr(=)p Fz(0)p Fr(:)p Fz(0.)43 b(F)-8 b(or)29 b(example,)g(at)g Fp(a)f Fz(=)g(0)h(the)f (\014rst)f(deriv)-5 b(ativ)m(e)30 b Fp(b)3666 2628 y Fl(0)3718 2661 y Fz(of)191 2774 y Fp(b)g Fz(=)g Fp(sqrt\(a\))h Fz(is)f(set)h(to)1408 2997 y Fp(b)1455 2960 y Fl(0)1504 2997 y Fz(=)1600 2811 y Fk(8)1600 2893 y(<)1600 3056 y(:)1722 2884 y Fp(InfV)m(al)153 b Fz(if)50 b Fp(a)2246 2851 y Fl(0)2295 2884 y Fr(>)24 b Fz(0)1722 2997 y(0)332 b(if)50 b Fp(a)2246 2964 y Fl(0)2295 2997 y Fz(=)24 b(0)1722 3110 y Fp(NoNum)85 b Fz(if)50 b Fp(a)2246 3077 y Fl(0)2295 3110 y Fr(<)24 b Fz(0)2548 2997 y Fr(:)191 3261 y Fz(In)31 b(other)h(w)m(ords,)g(w)m(e)g(consider)g Fp(a)g Fz(and)f(consequen)m (tly)i Fp(b)f Fz(as)g(a)g(constan)m(t)h(when)e Fp(a)3038 3228 y Fl(0)3093 3261 y Fz(or)g(more)h(generally)191 3374 y(all)f(computed)f(T)-8 b(a)m(ylor)32 b(co)s(e\016cien)m(ts)g(are) f(zero.)332 3537 y(The)37 b(general)h(p)s(o)m(w)m(er)g(function)f Fp(p)s(o)m(w)q Fz(\()p Fp(x)p Fr(;)15 b Fp(y)q Fz(\))27 b(=)e Fp(x)1997 3504 y Fj(y)2072 3537 y Fz(is)37 b(computed)g(whenev)m (er)g(it)h(is)f(de\014ned)f(for)i(the)191 3650 y(corresp)s(onding)19 b Fp(double)i Fz(argumen)m(ts.)38 b(If)20 b Fp(x)g Fz(is)h(negativ)m (e,)k(ho)m(w)m(ev)m(er,)f(the)c(partial)i(deriv)-5 b(ativ)m(e)22 b(with)e(resp)s(ect)191 3763 y(to)29 b(an)f(in)m(tegral)h(exp)s(onen)m (t)f(is)g(set)h(to)g(zero.)40 b(The)28 b(deriv)-5 b(ativ)m(es)29 b(of)f(the)h(step)f(functions)f Fp(\015o)s(o)m(r)p Fz(,)j Fp(ceil)p Fz(,)e Fp(frexp)p Fz(,)191 3875 y(and)37 b Fp(ldexp)g Fz(are)h(set)g(to)g(zero)g(at)g(all)h(argumen)m(ts)e Fp(x)p Fz(.)62 b(The)37 b(result)g(v)-5 b(alues)38 b(of)f(the)h(step)f (functions)g(are)191 3988 y(recorded)29 b(on)h(the)f(tap)s(e)h(and)f (can)h(later)h(b)s(e)d(c)m(hec)m(k)m(ed)k(to)e(recognize)i(whether)c(a) i(step)g(to)g(another)g(lev)m(el)191 4101 y(w)m(as)h(tak)m(en)g(during) e(a)i(forw)m(ard)f(sw)m(eep)h(at)g(di\013eren)m(t)f(argumen)m(ts)h (than)f(at)h(taping)g(time.)332 4264 y(Some)c(C)g(implemen)m(tations)h (supply)d(other)j(sp)s(ecial)f(functions,)h(in)e(particular)h(the)g (error)g(function)191 4377 y Fp(erf\(x\))p Fz(.)59 b(F)-8 b(or)37 b(the)g(latter,)i(w)m(e)e(ha)m(v)m(e)g(included)f(an)g Fp(adouble)g Fz(v)m(ersion)h(in)f Fs()p Fz(,)e(whic)m(h)i(has)191 4490 y(b)s(een)31 b(commen)m(ted)j(out)e(for) g(systems)g(on)h(whic)m(h)f(the)g Fp(double)h Fz(v)-5 b(alued)32 b(v)m(ersion)h(is)f(not)g(a)m(v)-5 b(ailable.)49 b(The)191 4603 y(incremen)m(t)27 b(and)f(decremen)m(t)h(op)s(erators)f Fp(++)p Fz(,)h Fo(\000\000)g Fz(\(pre\014x)e(and)h(p)s(ost\014x\))g (are)h(a)m(v)-5 b(ailable)28 b(for)f Fp(adouble)p Fz(s.)191 4716 y(Am)m(biguous)e(statemen)m(ts)h(lik)m(e)g Fp(a)e(+=)g(a++;)i Fz(m)m(ust)f(b)s(e)f(a)m(v)m(oided)i(b)s(ecause)f(the)g(compiler)g(ma)m (y)g(sequence)191 4829 y(the)i(ev)-5 b(aluation)28 b(of)f(the)g(o)m(v)m (erloaded)h(expression)e(di\013eren)m(tly)i(from)e(the)h(original)h(in) e(terms)g(of)h Fp(double)p Fz(s.)332 4991 y(As)h(w)m(e)g(ha)m(v)m(e)h (indicated)g(ab)s(o)m(v)m(e,)h(all)f(subroutines)d(called)j(with)f (activ)m(e)i(argumen)m(ts)e(m)m(ust)g(b)s(e)f(mo)s(d-)191 5104 y(i\014ed)j(or)h(suitably)g(o)m(v)m(erloaded.)43 b(The)30 b(simplest)h(pro)s(cedure)f(is)g(to)i(declare)g(the)e(lo)s (cal)i(v)-5 b(ariables)32 b(of)f(the)191 5217 y(function)h(as)g(activ)m (e)j(so)d(that)h(their)f(in)m(ternal)h(calculations)h(are)e(also)h (recorded)f(on)g(the)h(tap)s(e.)46 b(Unfor-)191 5330 y(tunately)-8 b(,)30 b(this)d(approac)m(h)h(is)g(lik)m(ely)h(to)f(b)s (e)g(unnecessarily)f(ine\016cien)m(t)i(and)e(inaccurate)i(if)f(the)g (original)p Black Black eop end %%Page: 10 10 TeXDict begin 10 9 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.10) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fz(10)186 b Ft(1)91 b(PREP)-8 b(ARING)31 b(A)f(SECTION)f(OF)i(C)e(OR) h(C++)g(CODE)g(F)m(OR)h(DIFFERENTIA)-8 b(TION)p Black 191 606 a Fz(subroutine)28 b(ev)-5 b(aluates)30 b(a)g(sp)s(ecial)f (function)g(that)g(is)g(de\014ned)f(as)h(the)g(solution)h(of)f(a)g (particular)g(math-)191 719 y(ematical)36 b(problem.)49 b(The)33 b(most)h(imp)s(ortan)m(t)f(examples)h(are)g(implicit)h (functions,)f(quadratures,)f(and)191 832 y(solutions)40 b(of)g(ordinary)f(di\013eren)m(tial)i(equations.)69 b(Often)40 b(the)g(n)m(umerical)g(metho)s(ds)f(for)g(ev)-5 b(aluating)191 945 y(suc)m(h)27 b(sp)s(ecial)g(functions)g(are)g(elab)s(orate,)j(and)c (their)h(in)m(ternal)h(w)m(orkings)f(are)g(not)h(at)f(all)h(di\013eren) m(tiable)191 1058 y(in)23 b(the)h(data.)39 b(Rather)23 b(than)g(di\013eren)m(tiating)i(through)e(suc)m(h)g(an)g(adaptiv)m(e)i (pro)s(cedure,)f(one)g(can)f(obtain)191 1171 y(\014rst)g(and)g(higher)g (deriv)-5 b(ativ)m(es)26 b(directly)e(from)f(the)h(mathematical)i (de\014nition)e(of)g(the)f(sp)s(ecial)i(function.)191 1284 y(Curren)m(tly)i(this)g(direct)h(approac)m(h)g(has)f(b)s(een)g (implemen)m(ted)h(only)g(for)f(user-supplied)f(quadratures)g(as)191 1396 y(describ)s(ed)j(in)699 1396 y SDict begin H.S end 699 1396 a Black Fz(Section)i(8.5)p Black 1134 1334 a SDict begin H.R end 1134 1334 a 1134 1396 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.8.5) cvn H.B /ANN pdfmark end 1134 1396 a Fz(.)191 1559 y SDict begin H.S end 191 1559 a 191 1559 a SDict begin 13.6 H.A end 191 1559 a 191 1559 a SDict begin [/View [/XYZ H.V]/Dest (subsection.1.7) cvn /DEST pdfmark end 191 1559 a 166 x FA(1.7)112 b(Reusing)38 b(the)g(T)-9 b(ap)s(e)38 b(for)f(Arbitrary)g(Input)g(V)-9 b(alues)191 1954 y Fz(In)25 b(some)h(situations)g(it)h(ma)m(y)f(b)s(e)f (desirable)h(to)g(calculate)i(the)e(v)-5 b(alue)26 b(and)g(deriv)-5 b(ativ)m(es)27 b(of)f(a)g(function)f(at)191 2067 y(arbitrary)i(argumen) m(ts)g(b)m(y)f(using)h(a)g(tap)s(e)g(of)g(the)g(function)g(ev)-5 b(aluation)28 b(at)g(one)f(argumen)m(t)g(and)f(reev)-5 b(al-)191 2180 y(uating)36 b(the)g(function)f(and)g(its)g(deriv)-5 b(ativ)m(es)37 b(using)e(the)h(giv)m(en)g(ADOL-C)g(routines.)56 b(This)34 b(approac)m(h)191 2293 y(can)42 b(signi\014can)m(tly)i (reduce)d(run)g(times,)46 b(and)41 b(it)i(also)g(allo)m(ws)g(to)g(p)s (ort)f(problem)f(functions,)k(in)d(the)191 2406 y(form)32 b(of)g(the)h(corresp)s(onding)e(tap)s(e)i(\014les,)g(in)m(to)g(a)g (computing)f(en)m(vironmen)m(t)h(that)g(do)s(es)f(not)g(supp)s(ort)191 2519 y(C++)c(but)g(do)s(es)h(supp)s(ort)e(C)h(or)h(F)-8 b(ortran.)41 b(Therefore,)30 b(the)f(routines)f(pro)m(vided)h(b)m(y)g (ADOL-C)g(for)g(the)191 2632 y(ev)-5 b(aluation)33 b(of)f(deriv)-5 b(ativ)m(es)33 b(can)f(b)s(e)f(used)g(to)h(at)h(argumen)m(ts)e Fr(x)h Fz(other)g(than)f(the)h(p)s(oin)m(t)g(at)g(whic)m(h)g(the)191 2744 y(tap)s(e)38 b(w)m(as)h(generated,)j(pro)m(vided)c(there)g(are)h (no)f(user)g(de\014ned)f(quadratures)h(and)f(all)j(comparisons)191 2857 y(in)m(v)m(olving)31 b Fp(adouble)p Fz(s)e(yield)g(the)g(same)h (result.)40 b(The)29 b(last)h(condition)g(implies)f(that)h(the)f(con)m (trol)i(\015o)m(w)e(is)191 2970 y(unaltered)j(b)m(y)g(the)h(c)m(hange)g (of)f(the)h(indep)s(enden)m(t)e(v)-5 b(ariable)33 b(v)-5 b(alues.)47 b(Therefore,)32 b(this)g(su\016cien)m(t)h(con-)191 3083 y(dition)f(is)h(tested)g(b)m(y)f(ADOL-C)g(and)g(if)g(it)h(is)f (not)g(met)h(the)f(ADOL-C)h(routine)f(called)h(for)f(deriv)-5 b(ativ)m(e)191 3196 y(calculations)40 b(indicates)f(this)f(con)m (tingency)i(through)e(its)g(return)f(v)-5 b(alue.)65 b(Curren)m(tly)-8 b(,)40 b(there)e(are)h(six)191 3309 y(return)29 b(v)-5 b(alues,)31 b(see)912 3309 y SDict begin H.S end 912 3309 a Black Fz(T)-8 b(able)31 b(1)p Black 1208 3246 a SDict begin H.R end 1208 3246 a 1208 3309 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (table.1) cvn H.B /ANN pdfmark end 1208 3309 a Fz(.)p Black Black Black 362 3445 3259 4 v 360 3590 4 146 v 412 3538 a Fx(+3)p 566 3590 V 98 w(The)d(function)g(is)g(lo)r(cally)f(analytic.)p 3618 3590 V 362 3593 3259 4 v 360 3947 4 354 v 412 3791 a(+2)p 566 3947 V 617 3691 a(The)33 b(function)h(is)e(lo)r(cally)g (analytic)g(but)i(the)f(sparsit)n(y)e(structure)i(\(compared)f(to)g (the)h(sit-)617 3791 y(uation)j(at)f(the)h(taping)f(p)r(oin)n(t\))h(ma) n(y)f(ha)n(v)n(e)f(c)n(hanged,)j(e.g.)60 b(while)36 b(at)f(taping)h (argumen)n(ts)617 3891 y Fi(fmax\(a,b\))29 b Fx(returned)e Fi(a)h Fx(w)n(e)f(get)g Fi(b)h Fx(at)f(the)h(argumen)n(t)f(curren)n (tly)f(used.)p 3618 3947 V 362 3950 3259 4 v 360 4295 4 345 v 412 4144 a(+1)p 566 4295 V 617 4044 a(A)n(t)41 b(least)e(one)h(of)g(the)g(functions)h Fi(fmin)p Fx(,)i Fi(fmax)d Fx(or)g Fi(fabs)g Fx(is)g(ev)-5 b(aluated)39 b(at)h(a)g(tie)g(or)f(zero,)617 4144 y(resp)r(ectiv)n(ely)-7 b(.)46 b(Hence,)32 b(the)f(function)h(to)e(b)r(e)i(di\013eren)n(tiated) f(is)f(Lipsc)n(hitz-con)n(tin)n(uous)g(but)617 4243 y(p)r(ossibly)e (non-di\013eren)n(tiable.)p 3618 4295 V 362 4298 3259 4 v 360 4543 4 245 v 476 4442 a(0)p 566 4543 V 617 4392 a(Some)j(arithmetic)g(comparison)f(in)n(v)n(olving)f Fi(adouble)p Fx(s)h(yields)h(a)g(tie.)48 b(Hence,)32 b(the)g(function)617 4491 y(to)c(b)r(e)g(di\013eren)n(tiated)f(ma)n(y)g (b)r(e)h(discon)n(tin)n(uous.)p 3618 4543 V 362 4547 3259 4 v 360 4792 4 245 v 449 4690 a(-1)p 566 4792 V 617 4640 a(An)g Fi(adouble)d Fx(comparison)h(yields)g(di\013eren)n(t)h (results)f(from)h(the)g(ev)-5 b(aluation)26 b(p)r(oin)n(t)i(at)e(whic)n (h)617 4740 y(the)i(tap)r(e)g(w)n(as)f(generated.)p 3618 4792 V 362 4795 3259 4 v 360 5040 4 245 v 449 4938 a(-2)p 566 5040 V 617 4888 a(The)e(argumen)n(t)e(of)h(a)f(user-de\014ned)h (quadrature)f(has)g(c)n(hanged)g(from)h(the)g(ev)-5 b(aluation)24 b(p)r(oin)n(t)617 4988 y(at)k(whic)n(h)f(the)h(tap)r(e)g(w)n(as)f (generated.)p 3618 5040 V 362 5043 3259 4 v Black 1257 5198 a Fz(T)-8 b(able)31 b(1:)1618 5198 y SDict begin H.S end 1618 5198 a 1618 5198 a SDict begin H.R end 1618 5198 a 1618 5198 a SDict begin [/View [/XYZ H.V]/Dest (table.1) cvn /DEST pdfmark end 1618 5198 a Fz(Description)g(of)g (return)e(v)-5 b(alues)p Black Black Black Black eop end %%Page: 11 11 TeXDict begin 11 10 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.11) cvn /DEST pdfmark end 183 199 a Black 191 307 a Ft(1.8)92 b(Conditional)31 b(Assignmen)m(ts)2311 b Fz(11)p Black Black 810 2113 a @beginspecial 0 @llx 0 @lly 594 @urx 402 @ury 2834 @rwi @setspecial %%BeginDocument: tap_point.eps %!PS-Adobe-2.0 EPSF-2.0 %%Title: tap_point.eps %%Creator: fig2dev Version 3.2 Patchlevel 0-beta3 %%CreationDate: Mon Sep 7 11:26:42 1998 %%For: eckstein@NBTF01 (Sigrid Eckstein) %%Orientation: Portrait %%BoundingBox: 0 0 594 402 %%Pages: 0 %%BeginSetup %%EndSetup %%Magnification: 1.0000 %%EndComments /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save -2.0 403.0 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /reencdict 12 dict def /ReEncode { reencdict begin /newcodesandnames exch def /newfontname exch def /basefontname exch def /basefontdict basefontname findfont def /newfont basefontdict maxlength dict def basefontdict { exch dup /FID ne { dup /Encoding eq { exch dup length array copy newfont 3 1 roll put } { exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall newfont /FontName newfontname put newcodesandnames aload pop 128 1 255 { newfont /Encoding get exch /.notdef put } for newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat newfontname newfont definefont pop end } def /isovec [ 8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde 8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis 8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron 8#220 /dotlessi 8#230 /oe 8#231 /OE 8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling 8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis 8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot 8#255 /endash 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus 8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph 8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine 8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf 8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute 8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring 8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute 8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute 8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve 8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply 8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex 8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave 8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring 8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute 8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute 8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve 8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide 8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex 8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def /Times-Roman /Times-Roman-iso isovec ReEncode /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y tr xrad yrad sc 0 0 1 startangle endangle arc closepath savematrix setmatrix } def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def %%EndProlog $F2psBegin 10 setmiterlimit n -1000 7391 m -1000 -1000 l 10454 -1000 l 10454 7391 l cp clip 0.06299 0.06299 sc 7.500 slw % Ellipse n 2700 1622 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col-1 s gr % Ellipse n 3433 2580 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col-1 s gr % Ellipse n 8505 3004 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col-1 s gr % Ellipse n 8505 3004 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col-1 s gr % Ellipse n 8505 4804 45 45 0 360 DrawEllipse gs col-1 s gr % Ellipse n 5130 2779 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col-1 s gr % Ellipse n 7025 4544 45 45 0 360 DrawEllipse gs col-1 s gr % Ellipse n 7020 2612 16 16 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col-1 s gr % Polyline n 1125 2072 m 1125 677 l gs col-1 s gr % Polyline n 2700 1622 m 2700 497 l gs col-1 s gr % Polyline [60] 0 sd n 7020 2621 m 7020 4548 l gs col-1 s gr [] 0 sd % Polyline n 7020 2612 m 7020 857 l gs col-1 s gr % Polyline [15 45] 45 sd n 2400 3620 m 4605 1909 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 2710 3615 m 5040 1759 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 3055 3590 m 5145 1894 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 3340 3590 m 5145 2134 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 5265 2074 m 5965 1510 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 3660 3575 m 5145 2404 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 5295 2314 m 6290 1480 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 4045 3575 m 6645 1450 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 4425 3570 m 6920 1445 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 4700 3595 m 6990 1654 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 5330 3680 m 6960 2284 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 5645 3735 m 6960 2524 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 5940 3785 m 6825 2914 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 6270 3814 m 6630 3439 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 7080 1624 m 7275 1444 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 7080 1909 m 7620 1459 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 7065 2254 m 7260 2089 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 1875 3529 m 3390 2314 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 1695 3394 m 3375 2014 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 1495 3290 m 3375 1744 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 1290 3154 m 3390 1474 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 1060 3010 m 3270 1264 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 885 2884 m 2670 1459 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 2760 1399 m 3075 1159 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 735 2749 m 2670 1189 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 2760 1159 m 2895 1069 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 585 2599 m 2655 964 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 1162 1866 m 2475 869 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 270 2309 m 1102 1664 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 1155 1641 m 2295 779 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Ellipse n 1125 2072 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col-1 s gr % Polyline [15 45] 45 sd n 155 2185 m 1080 1414 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd /Times-Roman-iso ff 210.00 scf sf 5095 1062 m gs 1 -1 sc (2) col-1 sh gr % Polyline [15 45] 45 sd n 1155 1364 m 2040 694 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 8160 4039 m 7140 6079 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 8375 4215 m 7380 6184 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 8580 4335 m 7650 6259 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 8845 4435 m 7935 6319 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 9075 4534 m 8205 6364 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 9315 4579 m 8500 6365 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 180 1904 m 1065 1189 l 1095 1174 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 1155 1131 m 1365 979 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline n 8505 1744 m 8505 3004 l 8505 3049 l gs col-1 s gr % Polyline [15 45] 45 sd n 4995 3634 m 6975 1969 l gs col-1 s gr [] 0 sd % Polyline n 5130 2734 m 5130 1204 l gs col-1 s gr % Polyline n 3435 2542 m 3435 832 l gs col-1 s gr % Polyline [15 45] 45 sd n 5203 1846 m 5530 1610 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 7790 3594 m 6650 5874 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 7966 3815 m 6886 5990 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 435 2449 m 1095 1924 l 1095 1909 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 3460 1695 m 3655 1585 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 3465 1965 m 3830 1730 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 3465 2265 m 3995 1900 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 3440 1455 m 3485 1440 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline n 2070 677 m 2068 678 l 2064 679 l 2057 682 l 2045 687 l 2029 693 l 2007 702 l 1980 713 l 1948 726 l 1911 741 l 1870 758 l 1825 776 l 1777 796 l 1726 817 l 1675 838 l 1622 860 l 1570 883 l 1518 905 l 1467 927 l 1418 948 l 1371 970 l 1325 990 l 1281 1010 l 1240 1030 l 1200 1049 l 1163 1067 l 1127 1086 l 1093 1103 l 1060 1121 l 1029 1138 l 999 1155 l 970 1172 l 942 1190 l 915 1207 l 888 1225 l 863 1243 l 835 1262 l 809 1281 l 782 1302 l 756 1322 l 730 1344 l 704 1366 l 677 1390 l 650 1415 l 623 1440 l 595 1468 l 566 1497 l 537 1527 l 506 1559 l 475 1593 l 442 1628 l 409 1664 l 376 1702 l 342 1741 l 307 1780 l 274 1819 l 241 1857 l 209 1894 l 179 1929 l 152 1962 l 127 1991 l 106 2017 l 87 2039 l 73 2056 l 62 2070 l 54 2079 l 49 2085 l 46 2089 l 45 2090 l gs col-1 s gr % Polyline n 2070 677 m 2072 678 l 2076 680 l 2084 683 l 2096 688 l 2114 696 l 2136 706 l 2164 718 l 2198 733 l 2236 750 l 2278 769 l 2323 789 l 2372 811 l 2421 834 l 2472 857 l 2523 880 l 2573 903 l 2623 926 l 2671 949 l 2717 971 l 2762 993 l 2805 1013 l 2845 1033 l 2884 1053 l 2921 1072 l 2957 1091 l 2991 1109 l 3024 1127 l 3055 1145 l 3086 1162 l 3116 1180 l 3145 1198 l 3174 1216 l 3203 1234 l 3231 1253 l 3259 1271 l 3288 1291 l 3316 1311 l 3345 1331 l 3374 1353 l 3404 1375 l 3435 1399 l 3467 1424 l 3500 1450 l 3534 1477 l 3569 1506 l 3606 1536 l 3645 1568 l 3684 1602 l 3725 1636 l 3767 1672 l 3809 1708 l 3852 1745 l 3894 1782 l 3936 1818 l 3976 1854 l 4014 1887 l 4049 1918 l 4080 1945 l 4107 1970 l 4131 1990 l 4149 2007 l 4163 2020 l 4174 2029 l 4180 2035 l 4183 2038 l 4185 2039 l gs col-1 s gr % Polyline [60] 0 sd n 1395 4322 m 1396 4321 l 1399 4318 l 1404 4314 l 1411 4306 l 1422 4296 l 1437 4282 l 1455 4265 l 1476 4244 l 1501 4221 l 1529 4195 l 1559 4166 l 1591 4136 l 1625 4104 l 1660 4071 l 1695 4038 l 1731 4005 l 1766 3972 l 1801 3940 l 1836 3908 l 1871 3876 l 1905 3846 l 1938 3816 l 1971 3786 l 2004 3758 l 2036 3729 l 2069 3701 l 2101 3673 l 2134 3644 l 2168 3616 l 2202 3587 l 2237 3558 l 2273 3528 l 2310 3498 l 2339 3473 l 2370 3449 l 2400 3424 l 2432 3398 l 2464 3372 l 2498 3345 l 2532 3317 l 2567 3289 l 2603 3261 l 2639 3232 l 2677 3202 l 2715 3172 l 2754 3141 l 2793 3109 l 2834 3078 l 2874 3046 l 2916 3013 l 2957 2981 l 2999 2948 l 3042 2915 l 3084 2882 l 3126 2849 l 3169 2816 l 3211 2783 l 3254 2751 l 3295 2718 l 3337 2686 l 3378 2655 l 3419 2624 l 3459 2593 l 3498 2563 l 3537 2533 l 3575 2504 l 3612 2476 l 3648 2449 l 3684 2422 l 3718 2396 l 3752 2370 l 3785 2345 l 3817 2321 l 3848 2298 l 3879 2275 l 3909 2253 l 3938 2232 l 3976 2203 l 4014 2175 l 4050 2149 l 4085 2123 l 4120 2098 l 4154 2073 l 4187 2049 l 4221 2025 l 4254 2002 l 4288 1978 l 4322 1955 l 4356 1931 l 4391 1907 l 4426 1883 l 4462 1858 l 4498 1834 l 4534 1809 l 4569 1785 l 4604 1762 l 4638 1740 l 4670 1718 l 4699 1699 l 4726 1681 l 4749 1666 l 4769 1653 l 4785 1642 l 4797 1634 l 4805 1628 l 4811 1625 l 4814 1623 l 4815 1622 l gs col-1 s gr [] 0 sd % Polyline n 4185 2035 m 4187 2034 l 4190 2033 l 4196 2031 l 4207 2027 l 4222 2022 l 4241 2015 l 4266 2007 l 4296 1996 l 4332 1984 l 4373 1970 l 4419 1954 l 4469 1937 l 4522 1919 l 4579 1899 l 4639 1879 l 4700 1859 l 4762 1838 l 4825 1817 l 4888 1796 l 4950 1776 l 5012 1756 l 5072 1737 l 5131 1718 l 5188 1700 l 5243 1683 l 5297 1667 l 5349 1651 l 5399 1637 l 5447 1623 l 5494 1610 l 5539 1597 l 5583 1586 l 5626 1575 l 5667 1564 l 5708 1555 l 5748 1546 l 5788 1537 l 5827 1529 l 5865 1521 l 5904 1514 l 5943 1507 l 5981 1501 l 6020 1494 l 6058 1489 l 6097 1483 l 6137 1478 l 6177 1473 l 6218 1468 l 6260 1464 l 6303 1460 l 6347 1456 l 6392 1453 l 6439 1450 l 6488 1446 l 6538 1444 l 6590 1441 l 6644 1439 l 6700 1436 l 6757 1434 l 6817 1432 l 6877 1431 l 6939 1429 l 7002 1428 l 7065 1426 l 7128 1425 l 7191 1424 l 7253 1423 l 7313 1423 l 7370 1422 l 7424 1421 l 7475 1421 l 7521 1421 l 7562 1420 l 7598 1420 l 7628 1420 l 7653 1420 l 7673 1420 l 7688 1420 l 7698 1420 l 7705 1420 l 7708 1420 l 7710 1420 l gs col-1 s gr % Polyline [60] 0 sd n 6525 3917 m 6480 5852 l gs col-1 s gr [] 0 sd % Polyline n 7715 1415 m 7714 1417 l 7712 1420 l 7708 1427 l 7702 1437 l 7693 1452 l 7681 1471 l 7666 1496 l 7648 1525 l 7628 1560 l 7604 1598 l 7579 1641 l 7551 1687 l 7522 1736 l 7492 1786 l 7461 1838 l 7429 1891 l 7398 1943 l 7368 1995 l 7337 2046 l 7308 2096 l 7280 2145 l 7253 2192 l 7227 2237 l 7202 2281 l 7178 2322 l 7156 2362 l 7134 2401 l 7114 2438 l 7095 2474 l 7076 2508 l 7059 2542 l 7042 2574 l 7025 2606 l 7010 2637 l 6994 2668 l 6979 2699 l 6965 2729 l 6948 2765 l 6932 2801 l 6915 2837 l 6900 2873 l 6884 2909 l 6868 2946 l 6853 2983 l 6838 3019 l 6823 3056 l 6808 3093 l 6794 3130 l 6780 3167 l 6766 3204 l 6752 3240 l 6739 3276 l 6726 3311 l 6714 3345 l 6702 3379 l 6690 3412 l 6680 3443 l 6669 3474 l 6659 3503 l 6650 3531 l 6641 3558 l 6633 3584 l 6625 3608 l 6617 3630 l 6610 3652 l 6604 3672 l 6598 3691 l 6592 3709 l 6587 3726 l 6574 3765 l 6564 3796 l 6555 3822 l 6548 3841 l 6542 3857 l 6537 3868 l 6533 3875 l 6530 3880 l 6528 3882 l 6527 3883 l gs col-1 s gr % Polyline n 2070 3659 m 2071 3659 l 2075 3659 l 2081 3658 l 2090 3658 l 2104 3657 l 2123 3656 l 2147 3655 l 2177 3653 l 2212 3652 l 2253 3650 l 2299 3647 l 2351 3645 l 2407 3642 l 2468 3639 l 2533 3636 l 2601 3633 l 2672 3630 l 2744 3626 l 2818 3623 l 2893 3620 l 2968 3617 l 3043 3614 l 3117 3611 l 3191 3608 l 3262 3605 l 3333 3603 l 3401 3601 l 3468 3599 l 3533 3597 l 3595 3595 l 3656 3594 l 3715 3593 l 3772 3592 l 3827 3591 l 3880 3591 l 3932 3591 l 3982 3591 l 4031 3591 l 4079 3592 l 4126 3592 l 4171 3593 l 4216 3594 l 4260 3596 l 4304 3598 l 4347 3600 l 4390 3602 l 4433 3604 l 4479 3607 l 4525 3610 l 4571 3613 l 4618 3617 l 4664 3621 l 4711 3625 l 4759 3630 l 4807 3635 l 4856 3641 l 4907 3647 l 4958 3653 l 5011 3660 l 5065 3668 l 5121 3676 l 5179 3684 l 5238 3693 l 5300 3702 l 5363 3712 l 5428 3723 l 5494 3733 l 5562 3745 l 5631 3756 l 5701 3768 l 5771 3780 l 5841 3793 l 5911 3805 l 5980 3817 l 6047 3829 l 6111 3841 l 6172 3852 l 6230 3862 l 6283 3872 l 6331 3881 l 6374 3889 l 6411 3896 l 6442 3901 l 6468 3906 l 6488 3910 l 6503 3913 l 6513 3915 l 6520 3916 l 6523 3917 l 6525 3917 l gs col-1 s gr % Polyline n 6479 5884 m 6481 5885 l 6486 5887 l 6494 5890 l 6507 5895 l 6526 5902 l 6550 5911 l 6580 5923 l 6615 5936 l 6656 5951 l 6701 5968 l 6750 5987 l 6801 6006 l 6854 6026 l 6908 6046 l 6962 6066 l 7015 6086 l 7067 6105 l 7118 6123 l 7167 6141 l 7214 6157 l 7259 6173 l 7301 6188 l 7342 6201 l 7380 6214 l 7417 6226 l 7452 6237 l 7485 6248 l 7517 6257 l 7548 6266 l 7578 6275 l 7607 6282 l 7636 6290 l 7664 6297 l 7698 6304 l 7731 6312 l 7764 6318 l 7797 6324 l 7831 6330 l 7865 6335 l 7900 6340 l 7936 6345 l 7973 6349 l 8012 6352 l 8053 6356 l 8095 6359 l 8138 6362 l 8183 6365 l 8229 6367 l 8274 6370 l 8319 6372 l 8362 6373 l 8402 6375 l 8438 6376 l 8470 6377 l 8496 6378 l 8517 6378 l 8532 6379 l 8541 6379 l 8547 6379 l 8549 6379 l gs col-1 s gr % Polyline n 7695 3434 m 7696 3436 l 7700 3440 l 7706 3447 l 7715 3459 l 7729 3475 l 7746 3495 l 7767 3521 l 7792 3551 l 7821 3585 l 7852 3621 l 7886 3661 l 7921 3701 l 7956 3743 l 7993 3784 l 8029 3825 l 8064 3865 l 8099 3903 l 8132 3939 l 8165 3974 l 8196 4007 l 8226 4037 l 8255 4066 l 8282 4092 l 8309 4117 l 8335 4140 l 8361 4162 l 8386 4183 l 8411 4202 l 8435 4220 l 8460 4237 l 8485 4254 l 8512 4271 l 8539 4287 l 8566 4302 l 8595 4317 l 8624 4331 l 8655 4345 l 8687 4359 l 8720 4372 l 8756 4385 l 8793 4398 l 8833 4410 l 8874 4423 l 8918 4436 l 8963 4449 l 9010 4462 l 9059 4474 l 9107 4486 l 9155 4498 l 9202 4510 l 9247 4520 l 9288 4530 l 9325 4538 l 9357 4545 l 9383 4551 l 9404 4555 l 9418 4558 l 9428 4560 l 9433 4562 l 9435 4562 l gs col-1 s gr % Polyline n 45 2089 m 46 2090 l 50 2094 l 55 2100 l 65 2109 l 78 2122 l 95 2140 l 116 2161 l 141 2187 l 169 2216 l 201 2248 l 236 2283 l 273 2320 l 311 2358 l 349 2397 l 389 2436 l 428 2475 l 466 2513 l 504 2549 l 540 2585 l 575 2619 l 610 2651 l 643 2682 l 674 2712 l 705 2740 l 735 2767 l 764 2793 l 793 2817 l 820 2841 l 848 2864 l 875 2887 l 903 2909 l 930 2930 l 958 2952 l 984 2972 l 1010 2992 l 1037 3011 l 1065 3031 l 1094 3051 l 1123 3072 l 1153 3092 l 1185 3113 l 1217 3135 l 1252 3157 l 1288 3180 l 1325 3204 l 1365 3229 l 1406 3254 l 1449 3280 l 1493 3308 l 1540 3335 l 1587 3364 l 1635 3393 l 1684 3422 l 1733 3451 l 1781 3479 l 1828 3507 l 1873 3533 l 1915 3557 l 1953 3580 l 1987 3600 l 2017 3617 l 2042 3632 l 2062 3643 l 2077 3652 l 2088 3658 l 2095 3662 l 2098 3664 l 2100 3665 l gs col-1 s gr % Polyline [60] 0 sd n 8505 3004 m 8505 4804 l gs col-1 s gr [] 0 sd % Polyline [105] 0 sd n 5130 2759 m 5131 2759 l 5134 2758 l 5139 2758 l 5147 2757 l 5159 2755 l 5174 2753 l 5194 2751 l 5219 2748 l 5248 2744 l 5283 2740 l 5322 2735 l 5365 2729 l 5414 2723 l 5466 2717 l 5522 2710 l 5582 2703 l 5644 2695 l 5709 2688 l 5775 2680 l 5843 2672 l 5912 2664 l 5981 2657 l 6050 2649 l 6118 2642 l 6185 2635 l 6251 2629 l 6316 2622 l 6378 2617 l 6439 2612 l 6498 2607 l 6555 2603 l 6609 2600 l 6662 2597 l 6712 2595 l 6761 2594 l 6808 2593 l 6853 2593 l 6896 2593 l 6938 2594 l 6980 2596 l 7020 2599 l 7064 2603 l 7108 2607 l 7152 2613 l 7196 2619 l 7241 2626 l 7287 2635 l 7334 2644 l 7382 2655 l 7431 2666 l 7481 2679 l 7533 2693 l 7586 2707 l 7641 2723 l 7696 2739 l 7753 2756 l 7810 2773 l 7867 2791 l 7924 2809 l 7981 2827 l 8037 2845 l 8091 2863 l 8143 2881 l 8193 2897 l 8240 2913 l 8284 2928 l 8324 2942 l 8361 2954 l 8392 2965 l 8420 2974 l 8443 2983 l 8462 2989 l 8477 2994 l 8488 2998 l 8496 3001 l 8501 3003 l 8504 3004 l 8505 3004 l gs col-1 s gr [] 0 sd % Polyline [60] 0 sd n 7705 3447 m 7705 1422 l gs col-1 s gr [] 0 sd % Polyline n 9442 4556 m 9441 4558 l 9440 4563 l 9437 4571 l 9433 4584 l 9427 4602 l 9419 4626 l 9409 4655 l 9397 4689 l 9384 4727 l 9370 4770 l 9355 4815 l 9339 4862 l 9322 4910 l 9305 4958 l 9288 5006 l 9272 5053 l 9256 5098 l 9240 5141 l 9225 5183 l 9210 5223 l 9196 5260 l 9182 5296 l 9169 5330 l 9156 5363 l 9144 5394 l 9131 5423 l 9119 5452 l 9107 5480 l 9094 5507 l 9082 5533 l 9070 5559 l 9056 5587 l 9042 5614 l 9028 5642 l 9013 5669 l 8998 5697 l 8982 5726 l 8965 5755 l 8948 5785 l 8929 5816 l 8909 5848 l 8888 5882 l 8866 5917 l 8842 5954 l 8818 5992 l 8793 6030 l 8767 6070 l 8740 6109 l 8714 6148 l 8689 6186 l 8665 6222 l 8642 6255 l 8622 6285 l 8605 6310 l 8591 6331 l 8580 6347 l 8572 6359 l 8567 6366 l 8564 6370 l 8563 6372 l gs col-1 s gr % Polyline n 7705 3448 m 7704 3450 l 7701 3453 l 7697 3460 l 7690 3471 l 7680 3486 l 7667 3505 l 7651 3530 l 7631 3559 l 7609 3592 l 7585 3629 l 7559 3670 l 7531 3712 l 7502 3756 l 7473 3802 l 7443 3847 l 7414 3892 l 7386 3937 l 7358 3981 l 7331 4023 l 7305 4065 l 7281 4105 l 7257 4143 l 7235 4180 l 7213 4216 l 7193 4251 l 7173 4285 l 7154 4319 l 7136 4352 l 7118 4384 l 7100 4416 l 7083 4448 l 7067 4481 l 7050 4513 l 7035 4543 l 7020 4573 l 7006 4603 l 6991 4634 l 6976 4666 l 6961 4698 l 6945 4732 l 6930 4767 l 6913 4804 l 6897 4842 l 6880 4881 l 6862 4923 l 6844 4966 l 6825 5011 l 6805 5058 l 6785 5107 l 6764 5158 l 6742 5211 l 6720 5265 l 6698 5319 l 6676 5375 l 6653 5430 l 6631 5485 l 6610 5539 l 6589 5591 l 6570 5639 l 6552 5685 l 6536 5726 l 6521 5762 l 6509 5794 l 6499 5820 l 6490 5841 l 6484 5856 l 6480 5868 l 6477 5875 l 6476 5878 l 6475 5880 l gs col-1 s gr /Times-Roman-iso ff 210.00 scf sf 675 722 m gs 1 -1 sc 30.0 rot (Taping point) col-1 sh gr /Times-Roman-iso ff 210.00 scf sf 2670 407 m gs 1 -1 sc (3) col-1 sh gr /Times-Roman-iso ff 210.00 scf sf 6975 767 m gs 1 -1 sc (0) col-1 sh gr /Times-Roman-iso ff 210.00 scf sf 8385 1652 m gs 1 -1 sc (-1) col-1 sh gr /Times-Roman-iso ff 210.00 scf sf 3400 742 m gs 1 -1 sc (1) col-1 sh gr $F2psEnd rs %%EndDocument @endspecial Black 1024 2309 a(Figure)31 b(3:)1422 2309 y SDict begin H.S end 1422 2309 a 1422 2309 a SDict begin H.R end 1422 2309 a 1422 2309 a SDict begin [/View [/XYZ H.V]/Dest (figure.3) cvn /DEST pdfmark end 1422 2309 a Fz(Return)f(v)-5 b(alues)31 b(around)e(the)i(taping)f(p)s(oin)m (t)p Black Black 332 2610 a(In)449 2628 y SDict begin H.S end 449 2628 a Black -18 x Fz(Figure)h(3)p Black 781 2548 a SDict begin H.R end 781 2548 a 781 2610 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (figure.3) cvn H.B /ANN pdfmark end 781 2610 a 33 w Fz(these)j(return)f(v)-5 b(alues)33 b(are)h(illustrated.)51 b(If)33 b(the)g(user)g(\014nds)f (the)h(return)f(v)-5 b(alue)34 b(of)g(an)191 2723 y(ADOL-C)29 b(routine)g(to)h(b)s(e)f(negativ)m(e)i(the)f(taping)f(pro)s(cess)g (simply)g(has)g(to)h(b)s(e)e(rep)s(eated)h(b)m(y)h(executing)191 2836 y(the)e(activ)m(e)h(section)g(again.)41 b(The)27 b(crux)g(of)h(the)f(problem)g(lies)h(in)g(the)f(fact)i(that)f(the)g (tap)s(e)f(records)h(only)191 2949 y(the)35 b(op)s(erations)f(that)i (are)f(executed)g(during)e(one)i(particular)g(ev)-5 b(aluation)36 b(of)f(the)f(function.)53 b(It)35 b(also)191 3062 y(has)j(no)g(w)m(a)m (y)h(to)g(ev)-5 b(aluate)39 b(in)m(tegrals)h(since)e(the)h(corresp)s (onding)e(quadratures)g(are)i(nev)m(er)f(recorded)191 3175 y(on)32 b(the)h(tap)s(e.)47 b(Therefore,)33 b(when)e(there)i(are)g (user-de\014ned)e(quadratures)g(the)i(retaping)g(is)f(necessary)191 3288 y(at)43 b(eac)m(h)h(new)e(p)s(oin)m(t.)77 b(If)42 b(there)g(are)h(only)g(branc)m(hes)f(conditioned)h(on)f Fp(adouble)h Fz(comparisons)f(one)191 3400 y(ma)m(y)34 b(hop)s(e)f(that)h(re-taping)g(b)s(ecomes)g(unnecessary)f(when)f(the)i (p)s(oin)m(ts)f(settle)i(do)m(wn)e(in)g(some)h(small)191 3513 y(neigh)m(b)s(orho)s(o)s(d,)29 b(as)i(one)f(w)m(ould)h(exp)s(ect)f (for)h(example)g(in)f(an)g(iterativ)m(e)j(equation)e(solv)m(er.)191 3719 y SDict begin H.S end 191 3719 a 191 3719 a SDict begin 13.6 H.A end 191 3719 a 191 3719 a SDict begin [/View [/XYZ H.V]/Dest (subsection.1.8) cvn /DEST pdfmark end 191 3719 a 148 x FA(1.8)112 b(Conditional)39 b(Assignmen)m(ts)191 4101 y Fz(It)25 b(app)s(ears)f(unsatisfactory)h(that,)i(for)d(example,) j(a)e(simple)g(table)h(lo)s(okup)e(of)h(some)g(ph)m(ysical)g(prop)s (ert)m(y)191 4214 y(forces)i(the)g(re-recording)f(of)h(a)g(p)s(ossibly) f(m)m(uc)m(h)g(larger)h(calculation.)42 b(Ho)m(w)m(ev)m(er,)29 b(the)e(basic)g(philosoph)m(y)191 4327 y(of)33 b(ADOL-C)h(is)f(to)h(o)m (v)m(erload)h(arithmetic,)h(rather)d(than)g(to)h(generate)h(a)f(new)e (program)h(with)g(jumps)191 4440 y(b)s(et)m(w)m(een)c(\\instructions",) g(whic)m(h)f(w)m(ould)f(destro)m(y)i(the)f(strictly)h(sequen)m(tial)g (tap)s(e)f(access)i(and)d(require)191 4553 y(the)h(infusion)f(of)h (substan)m(tial)h(compiler)f(tec)m(hnology)-8 b(.)43 b(Therefore,)28 b(w)m(e)g(in)m(tro)s(duce)g(the)g(t)m(w)m(o)h (constructs)191 4665 y(of)c(conditional)g(assignmen)m(ts)g(and)f(activ) m(e)j(in)m(tegers)f(as)e(partial)i(remedies)e(to)h(the)g(branc)m(hing)f (problem.)332 4828 y(In)43 b(man)m(y)g(cases,)48 b(the)c(functionalit)m (y)h(of)e(branc)m(hes)h(can)f(b)s(e)g(replaced)h(b)m(y)f(conditional)i (assign-)191 4941 y(men)m(ts.)40 b(F)-8 b(or)27 b(this)f(purp)s(ose,)g (w)m(e)h(pro)m(vide)g(a)g(sp)s(ecial)g(function)f(called)i Fp(condassign\(a,b,c,d\))p Fz(.)41 b(Its)26 b(calling)191 5054 y(sequence)31 b(corresp)s(onds)e(to)i(the)f(syn)m(tax)h(of)g(the)f (conditional)i(assignmen)m(t)p Black Black 1590 5330 a Fp(a)e(=)g(\(b)g Fm(>)h Fp(0\))g(?)40 b(c)31 b(:)41 b(d;)p Black Black eop end %%Page: 12 12 TeXDict begin 12 11 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.12) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fz(12)186 b Ft(1)91 b(PREP)-8 b(ARING)31 b(A)f(SECTION)f(OF)i(C)e(OR) h(C++)g(CODE)g(F)m(OR)h(DIFFERENTIA)-8 b(TION)p Black 191 606 a Fz(whic)m(h)34 b(C++)g(inherited)g(from)g(C.)g(Ho)m(w)m(ev)m (er,)k(here)c(the)h(argumen)m(ts)g(are)g(restricted)g(to)g(b)s(e)f (activ)m(e)j(or)191 719 y(passiv)m(e)32 b(scalar)h(argumen)m(ts,)f(and) g(all)g(expression)f(argumen)m(ts)h(are)g(ev)-5 b(aluated)33 b(b)s(efore)f(the)f(test)i(on)f Fp(b)p Fz(,)191 832 y(whic)m(h)e(is)g (di\013eren)m(t)h(from)f(the)h(usual)f(conditional)h(assignmen)m(t)h (or)e(the)g(co)s(de)h(segmen)m(t.)332 995 y(Supp)s(ose)e(the)h (original)i(program)e(con)m(tains)h(the)g(co)s(de)g(segmen)m(t)p Black Black 1440 1237 a Fp(if)f(\(b)h Fm(>)f Fp(0\))i(a)e(=)g(c;)g (else)h(a)f(=)g(d;)191 1479 y Fz(Here,)45 b(only)d(one)g(of)g(the)g (expressions)g(\(or,)j(more)d(generally)-8 b(,)46 b(program)c(blo)s(c)m (ks\))h Fp(c)f Fz(and)f Fp(d)h Fz(is)f(ev)-5 b(al-)191 1592 y(uated,)45 b(whic)m(h)d(exactly)h(constitutes)g(the)f(problem)g (for)f(ADOL-C.)i(T)-8 b(o)42 b(obtain)g(the)g(correct)h(v)-5 b(alue)191 1705 y Fp(a)38 b Fz(with)h(ADOL-C,)g(one)g(ma)m(y)g(\014rst) f(execute)i(b)s(oth)e(branc)m(hes)g(and)g(then)h(pic)m(k)g(either)g Fp(c)g Fz(or)g Fp(d)f Fz(using)191 1818 y Fp(condassign\(a,b,c,d\))p Fz(.)51 b(T)-8 b(o)34 b(main)m(tain)g(consistency)h(with)e(the)g (original)i(co)s(de,)f(one)g(has)f(to)h(mak)m(e)g(sure)191 1931 y(that)k(the)g(t)m(w)m(o)h(branc)m(hes)f(do)f(not)h(ha)m(v)m(e)h (an)m(y)f(side)g(e\013ects)h(that)f(can)g(in)m(terfere)g(with)g(eac)m (h)h(other)f(or)191 2044 y(ma)m(y)g(b)s(e)f(imp)s(ortan)m(t)g(for)g (subsequen)m(t)g(calculations.)64 b(F)-8 b(urthermore)37 b(the)h(test)g(parameter)g Fp(b)f Fz(has)g(to)191 2157 y(b)s(e)32 b(an)h Fp(adouble)g Fz(or)f(an)h Fp(adouble)g Fz(expression.)47 b(Otherwise)33 b(the)g(test)g(condition)h Fp(b)f Fz(is)f(recorded)h(on)g(the)191 2270 y(tap)s(e)k(as)g(a)h Fq(c)-5 b(onstant)39 b Fz(with)d(its)i(run)d(time)j(v)-5 b(alue.)61 b(Th)m(us)36 b(the)i(original)g(dep)s(endency)d(of)j Fp(b)f Fz(on)f(activ)m(e)191 2383 y(v)-5 b(ariables)33 b(gets)h(lost,)h(for)d(instance)h(if)g Fp(b)g Fz(is)g(a)g(comparison)g (expression,)g(see)2894 2383 y SDict begin H.S end 2894 2383 a Black Fz(Section)f(1.6)p Black 3329 2320 a SDict begin H.R end 3329 2320 a 3329 2383 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.1.6) cvn H.B /ANN pdfmark end 3329 2383 a Fz(.)47 b(If)33 b(there)g(is)191 2495 y(no)g Fp(else)h Fz(part)f(in)f(a)i(conditional)g(assignmen)m(t,)h(one)f(ma)m(y)g(call)g (the)f(three)h(argumen)m(t)g(v)m(ersion)f Fp(condas-)191 2608 y(sign\(a,b,c\))p Fz(,)27 b(whic)m(h)c(is)i(logically)h(equiv)-5 b(alen)m(t)26 b(to)f Fp(condassign\(a,b,c,a\))g Fz(in)f(that)g(nothing) g(happ)s(ens)f(if)h Fp(b)g Fz(is)191 2721 y(non-p)s(ositiv)m(e.)39 b(The)24 b(header)g(\014le)g Fs()19 b Fz(con)m(tains)25 b(also)g(corresp)s(onding)e(de\014nitions)h(of)191 2834 y Fp(condassign\(a,b,c,d\))32 b Fz(and)d Fp(condassign\(a,b,c\))i Fz(for)f(passiv)m(e)h Fp(double)f Fz(argumen)m(ts)g(so)g(that)h(the)f (mo)s(di\014ed)191 2947 y(co)s(de)h(without)f(an)m(y)h(di\013eren)m (tiation)h(can)e(b)s(e)g(tested)h(for)f(correctness.)332 3110 y(A)23 b(generalization)j(of)d(this)h(concept)g(for)f(more)g(than) g(t)m(w)m(o)h(branc)m(hes,)h(e.g.,)h(akin)d(to)h(a)g Fs(switch)d Fz(state-)191 3223 y(men)m(t)g(or)f(a)h(cascade)g(of)28 b Fs(if...else)45 b(if)p Fz(,)22 b(ma)m(y)f(b)s(e)e(done)i(b)m(y)f (enabling)h Fp(ADOLC)p 2901 3223 28 4 v 33 w(AD)m(V)-8 b(ANCED)p 3414 3223 V 32 w(BRANCHING)191 3336 y Fz(and)30 b(p)s(erforming)f(selection)j(on)e(elemen)m(ts)i(of)f(an)f Fs(advector)e Fz(with)i(activ)m(e)j(indices.)191 3488 y SDict begin H.S end 191 3488 a 191 3488 a SDict begin 13.6 H.A end 191 3488 a 191 3488 a SDict begin [/View [/XYZ H.V]/Dest (subsection.1.9) cvn /DEST pdfmark end 191 3488 a 149 x FA(1.9)112 b(Step-b)m(y-Step)39 b(Mo)s(di\014cation)g(Pro)s (cedure)191 3860 y Fz(T)-8 b(o)40 b(prepare)e(a)i(section)g(of)g(giv)m (en)g(C)f(or)g(C++)g(co)s(de)g(for)g(automatic)i(di\013eren)m(tiation)g (as)f(describ)s(ed)191 3972 y(ab)s(o)m(v)m(e,)32 b(one)e(applies)h(the) g(follo)m(wing)g(step-b)m(y-step)g(pro)s(cedure.)191 4079 y SDict begin H.S end 191 4079 a 191 4079 a SDict begin 13.6 H.A end 191 4079 a 191 4079 a SDict begin [/View [/XYZ H.V]/Dest (Item.1) cvn /DEST pdfmark end 191 4079 a Black 302 4215 a Fz(1.)p Black 46 w(Use)f(the)g(statemen)m(ts)i Fp(trace)p 1399 4215 28 4 v 33 w(on\(tag\))e Fz(or)g Fp(trace)p 2045 4215 V 33 w(on\(tag,k)m(eep\))j Fz(and)c Fp(trace)p 2952 4215 V 33 w(o\013\(\))i Fz(or)f Fp(trace)p 3483 4215 V 33 w(o\013\(\014le\))418 4328 y Fz(to)h(mark)f(the)h(b)s (eginning)f(and)f(end)h(of)h(the)f(activ)m(e)j(section.)191 4386 y SDict begin H.S end 191 4386 a 191 4386 a SDict begin 13.6 H.A end 191 4386 a 191 4386 a SDict begin [/View [/XYZ H.V]/Dest (Item.2) cvn /DEST pdfmark end 191 4386 a Black 302 4522 a Fz(2.)p Black 46 w(Select)26 b(the)e(set)h(of)f(activ)m(e)j(v)-5 b(ariables,)26 b(and)e(c)m(hange)h (their)f(t)m(yp)s(e)h(from)f Fp(double)g Fz(or)h Fp(\015oat)e Fz(to)i Fp(adouble)p Fz(.)191 4580 y SDict begin H.S end 191 4580 a 191 4580 a SDict begin 13.6 H.A end 191 4580 a 191 4580 a SDict begin [/View [/XYZ H.V]/Dest (Item.3) cvn /DEST pdfmark end 191 4580 a Black 302 4716 a Fz(3.)p Black 46 w(Select)j(a)g(sequence)f(of)g(indep)s(enden)m(t)e(v)-5 b(ariables,)29 b(and)d(initialize)j(them)e(with)f Fo(\034)p Fw(=)h Fz(assignmen)m(ts)418 4829 y(from)j(passiv)m(e)h(v)-5 b(ariables)31 b(or)g(v)m(ectors.)191 4887 y SDict begin H.S end 191 4887 a 191 4887 a SDict begin 13.6 H.A end 191 4887 a 191 4887 a SDict begin [/View [/XYZ H.V]/Dest (Item.4) cvn /DEST pdfmark end 191 4887 a Black 302 5023 a Fz(4.)p Black 46 w(Select)37 b(a)f(sequence)f(of)h(dep)s(enden)m (t)e(v)-5 b(ariables)36 b(among)g(the)g(activ)m(e)h(v)-5 b(ariables,)38 b(and)d(pass)g(their)418 5136 y(\014nal)30 b(v)-5 b(alues)31 b(to)g(passiv)m(e)g(v)-5 b(ariable)31 b(or)g(v)m(ectors)h(thereof)e(b)m(y)h Fo(\035)p Fw(=)f Fz(assignmen)m(ts.)191 5194 y SDict begin H.S end 191 5194 a 191 5194 a SDict begin 13.6 H.A end 191 5194 a 191 5194 a SDict begin [/View [/XYZ H.V]/Dest (Item.5) cvn /DEST pdfmark end 191 5194 a Black 302 5330 a Fz(5.)p Black 46 w(Compile)h(the)f(co)s(des)h(after)g(including)f(the)g(header) g(\014le)h Fs()p Fz(.)p Black Black eop end %%Page: 13 13 TeXDict begin 13 12 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.13) cvn /DEST pdfmark end 183 199 a Black 3700 307 a Fz(13)p Black 191 606 a(T)m(ypically)-8 b(,)32 b(the)d(\014rst)g(compilation)j(will)e(detect)h(sev)m(eral)g(t)m(yp)s (e)e(con\015icts)i({)f(usually)f(attempts)i(to)f(con-)191 719 y(v)m(ert)j(from)e(activ)m(e)k(to)d(passiv)m(e)h(v)-5 b(ariables)33 b(or)f(to)h(p)s(erform)d(standard)i(I/O)g(of)g(activ)m(e) i(v)-5 b(ariables.)47 b(Since)191 832 y(all)41 b(standard)e(C)h (programs)f(can)i(b)s(e)e(activ)-5 b(ated)42 b(b)m(y)e(a)g(mec)m (hanical)i(application)f(of)g(the)f(pro)s(cedure)191 945 y(ab)s(o)m(v)m(e,)32 b(the)e(follo)m(wing)i(section)g(is)e(of)h (imp)s(ortance)f(only)h(to)g(adv)-5 b(anced)30 b(users.)191 1169 y SDict begin H.S end 191 1169 a 191 1169 a SDict begin 13.6 H.A end 191 1169 a 191 1169 a SDict begin [/View [/XYZ H.V]/Dest (section.2) cvn /DEST pdfmark end 191 1169 a 182 x FD(2)135 b(Num)l(b)t(ering)45 b(the)g(T)-11 b(ap)t(es)44 b(and)h(Con)l(trolling)i(the)e(Bu\013er)191 1617 y Fz(The)d(trace)i(generated)g(b)m(y)f(the)g(execution)h(of)f(an)f (activ)m(e)j(section)f(ma)m(y)g(sta)m(y)g(within)e(a)h(triplet)h(of)191 1730 y(in)m(ternal)30 b(arra)m(ys)g(or)g(it)g(ma)m(y)h(b)s(e)e(written) g(out)h(to)h(three)e(corresp)s(onding)g(\014les.)41 b(W)-8 b(e)30 b(will)g(refer)g(to)g(these)191 1843 y(triplets)j(as)f(the)h (tap)s(e)f(arra)m(y)h(or)f(tap)s(e)g(\014le,)h(in)f(general)h(tap)s(e,) g(whic)m(h)f(ma)m(y)h(subsequen)m(tly)f(b)s(e)g(used)f(to)191 1956 y(ev)-5 b(aluate)35 b(the)f(underlying)f(function)g(and)g(its)h (deriv)-5 b(ativ)m(es)35 b(at)f(the)g(original)h(p)s(oin)m(t)e(or)h(at) g(alternativ)m(e)191 2069 y(argumen)m(ts.)41 b(If)29 b(the)h(activ)m(e)j(section)e(in)m(v)m(olv)m(es)h(user-de\014ned)c (quadratures)h(it)h(m)m(ust)g(b)s(e)g(executed)g(and)191 2182 y(re-tap)s(ed)c(at)h(eac)m(h)g(new)f(argumen)m(t.)40 b(Similarly)-8 b(,)28 b(if)e(conditions)g(on)g Fp(adouble)h Fz(v)-5 b(alues)26 b(lead)h(to)g(a)f(di\013eren)m(t)191 2295 y(program)j(branc)m(h)f(b)s(eing)h(tak)m(en)h(at)g(a)f(new)g (argumen)m(t)g(the)g(ev)-5 b(aluation)31 b(pro)s(cess)e(also)h(needs)e (to)i(b)s(e)e(re-)191 2408 y(tap)s(ed)h(at)h(the)g(new)e(p)s(oin)m(t.) 41 b(Otherwise,)29 b(direct)h(ev)-5 b(aluation)31 b(from)e(the)g(tap)s (e)h(b)m(y)f(the)g(routine)h Fp(function)191 2521 y Fz(\()226 2521 y SDict begin H.S end 226 2521 a Black Fz(Section)h(3.1)p Black 661 2458 a SDict begin H.R end 661 2458 a 661 2521 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.3.1) cvn H.B /ANN pdfmark end 661 2521 a Fz(\))25 b(is)g(lik)m(ely)h(to) g(b)s(e)f(faster.)39 b(The)24 b(use)h(of)g(quadratures)f(and)h(the)g (results)g(of)g(all)h(comparisons)191 2633 y(on)31 b Fp(adouble)p Fz(s)h(are)g(recorded)f(on)h(the)f(tap)s(e)h(so)g(that)g Fp(function)g Fz(and)e(other)i(forw)m(ard)f(routines)h(stop)f(and)191 2746 y(return)39 b(appropriate)h(\015ags)g(if)h(their)f(use)g(without)g (prior)f(re-taping)i(is)f(unsafe.)70 b(T)-8 b(o)40 b(a)m(v)m(oid)i(an)m (y)e(re-)191 2859 y(taping)27 b(certain)h(t)m(yp)s(es)f(of)f(branc)m (hes)h(can)g(b)s(e)f(recorded)h(on)f(the)h(tap)s(e)g(through)f(the)h (use)f(of)h(conditional)191 2972 y(assignmen)m(ts)k(describ)s(ed)e(b)s (efore)h(in)1476 2972 y SDict begin H.S end 1476 2972 a Black Fz(Section)h(1.8)p Black 1911 2910 a SDict begin H.R end 1911 2910 a 1911 2972 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.1.8) cvn H.B /ANN pdfmark end 1911 2972 a Fz(.)332 3135 y(Sev)m(eral)41 b(tap)s(es)f(ma)m(y)g(b)s(e)f(generated)i (and)e(k)m(ept)h(sim)m(ultaneously)-8 b(.)70 b(A)40 b(tap)s(e)g(arra)m (y)g(is)f(used)g(as)h(a)191 3248 y(triplet)35 b(of)g(bu\013ers)e(or)i (a)g(tap)s(e)g(\014le)g(is)f(generated)i(if)e(the)h(length)g(of)g(an)m (y)g(of)g(the)g(bu\013ers)e(exceeds)j(the)191 3361 y(maximal)22 b(arra)m(y)f(lengths)g(of)g Fp(OBUFSIZE)p Fz(,)e Fp(VBUFSIZE)g Fz(or)i Fp(LBUFSIZE)p Fz(.)e(These)i(parameters)g(are)g(de\014ned)191 3474 y(in)30 b(the)g(header)g(\014le)g Fs()25 b Fz(and)30 b(ma)m(y)h(b)s(e)e(adjusted)h(b)m(y)g(the)g(user)g(in)f (the)i(header)f(\014le)191 3587 y(b)s(efore)37 b(compiling)i(the)f (ADOL-C)g(library)-8 b(,)40 b(or)e(on)g(run)m(time)g(using)f(a)i (\014le)f(named)f Fs(.adolcrc)p Fz(.)61 b(The)191 3699 y(\014lesystem)29 b(folder,)g(where)f(the)h(tap)s(es)g(\014les)g(ma)m (y)g(b)s(e)f(written)h(to)g(disk,)g(can)g(b)s(e)f(c)m(hanged)h(b)m(y)g (c)m(hanging)191 3812 y(the)39 b(de\014nition)f(of)h Fp(T)-8 b(APE)p 1112 3812 28 4 v 33 w(DIR)38 b Fz(in)g(the)h(header)g (\014le)f Fs()c Fz(b)s(efore)k(compiling)i(the)191 3925 y(ADOL-C)27 b(library)-8 b(,)28 b(or)f(on)f(run)m(time)h(b)m(y)g (de\014ning)f Fp(T)-8 b(APE)p 2153 3925 V 33 w(DIR)26 b Fz(in)h(the)g Fs(.adolcrc)e Fz(\014le.)39 b(By)28 b(default)f(this) 191 4038 y(is)j(de\014ned)f(to)j(b)s(e)d(the)i(presen)m(t)f(w)m(orking) h(directory)g(\()p Fs(.)p Fz(\).)332 4201 y(F)-8 b(or)45 b(simple)g(usage,)k Fp(trace)p 1291 4201 V 33 w(on)c Fz(ma)m(y)g(b)s(e)f(called)i(with)f(only)f(the)h(tap)s(e)g Fp(tag)g Fz(as)f(argumen)m(t,)49 b(and)191 4314 y Fp(trace)p 384 4314 V 33 w(o\013)33 b Fz(ma)m(y)g(b)s(e)e(called)j(without)e (argumen)m(t.)47 b(The)31 b(optional)j(in)m(teger)f(argumen)m(t)g Fp(k)m(eep)h Fz(of)e Fp(trace)p 3670 4314 V 33 w(on)191 4427 y Fz(determines)i(whether)g(the)h(n)m(umerical)g(v)-5 b(alues)35 b(of)f(all)i(activ)m(e)h(v)-5 b(ariables)35 b(are)f(recorded)h(in)f(a)h(bu\013ered)191 4540 y(temp)s(orary)j(arra)m (y)h(or)f(\014le)h(called)g(the)g(ta)m(ylor)h(stac)m(k.)66 b(This)38 b(option)g(tak)m(es)i(e\013ect)g(if)f Fp(k)m(eep)h Fz(=)e(1)g(and)191 4653 y(prepares)33 b(the)g(scene)h(for)f(an)g (immediately)i(follo)m(wing)g(gradien)m(t)f(ev)-5 b(aluation)35 b(b)m(y)e(a)h(call)h(to)f(a)g(routine)191 4765 y(implemen)m(ting)f(the) g(rev)m(erse)g(mo)s(de)g(as)g(describ)s(ed)e(in)h(the)2259 4765 y SDict begin H.S end 2259 4765 a Black Fz(Section)f(4)p Black 2623 4703 a SDict begin H.R end 2623 4703 a 2623 4765 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (section.4) cvn H.B /ANN pdfmark end 2623 4765 a 32 w Fz(and)2834 4765 y SDict begin H.S end 2834 4765 a Black Fz(Section)h(5)p Black 3198 4703 a SDict begin H.R end 3198 4703 a 3198 4765 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (section.5) cvn H.B /ANN pdfmark end 3198 4765 a Fz(.)47 b(A)33 b(\014le)g(is)g(used)191 4878 y(instead)k(of)f(an)h(arra)m(y)g(if)f (the)h(size)g(exceeds)h(the)e(maximal)i(arra)m(y)f(length)f(of)h Fp(TBUFSIZE)e Fz(de\014ned)g(in)191 4991 y Fs()k Fz(and)k(ma)m(y)h(b)s(e)f(adjusted)g(in)g(the)h(same)g(w)m(a)m(y)h(lik) m(e)g(the)e(other)h(bu\013er)f(sizes)191 5104 y(men)m(tioned)38 b(ab)s(o)m(v)m(e.)63 b(Alternativ)m(ely)-8 b(,)42 b(gradien)m(ts)d(ma)m (y)f(b)s(e)f(ev)-5 b(aluated)38 b(b)m(y)g(a)g(call)g(to)g Fp(gradient)p Fz(,)i(whic)m(h)191 5217 y(includes)28 b(a)g(preparatory)g(forw)m(ard)g(sw)m(eep)g(for)g(the)g(creation)i(of)e (the)g(temp)s(orary)g(\014le.)40 b(If)28 b(omitted,)i(the)191 5330 y(argumen)m(t)h Fp(k)m(eep)h Fz(defaults)e(to)h(0,)g(so)g(that)g (no)f(temp)s(orary)g(ta)m(ylor)i(stac)m(k)g(\014le)e(is)h(generated.)p Black Black eop end %%Page: 14 14 TeXDict begin 14 13 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.14) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fz(14)637 b Ft(2)92 b(NUMBERING)31 b(THE)f(T)-8 b(APES)30 b(AND)h(CONTR)m(OLLING)f(THE)g(BUFFER)p Black 332 606 a Fz(By)43 b(setting)g(the)g(optional)g(in)m(teger)h(argumen)m(t)e Fp(\014le)g Fz(of)h Fp(trace)p 2524 606 28 4 v 33 w(o\013)g Fz(to)g(1,)j(the)c(user)g(ma)m(y)g(force)h(a)191 719 y(n)m(um)m(b)s(ered)33 b(tap)s(e)i(\014le)g(to)h(b)s(e)e(written)h(ev)m (en)g(if)g(the)g(tap)s(e)g(arra)m(y)h(\(bu\013er\))e(do)s(es)h(not)g(o) m(v)m(er\015o)m(w.)55 b(If)35 b(the)191 832 y(argumen)m(t)e Fp(\014le)f Fz(is)g(omitted,)i(it)f(defaults)f(to)h(0,)g(so)f(that)h (the)g(tap)s(e)f(arra)m(y)h(is)f(written)g(on)m(to)i(a)e(tap)s(e)h (\014le)191 945 y(only)d(if)h(the)f(length)h(of)g(an)m(y)f(of)h(the)f (bu\013ers)g(exceeds)h Fp([OL)-10 b(VT]BUFSIZE)29 b Fz(elemen)m(ts.)332 1108 y(After)f(the)f(execution)i(of)e(an)g(activ)m(e)j(section,)f(if)e (a)h(tap)s(e)g(\014le)f(w)m(as)h(generated,)h(i.e.,)g(if)e(the)h (length)g(of)191 1220 y(some)e(bu\013er)f(exceeded)i Fp([OL)-10 b(VT]BUFSIZE)24 b Fz(elemen)m(ts)j(or)f(if)g(the)g(argumen)m (t)g Fp(\014le)g Fz(of)g Fp(trace)p 3250 1220 V 33 w(o\013)g Fz(w)m(as)h(set)f(to)191 1333 y(1,)e(the)d(\014les)g(will)g(b)s(e)g(sa) m(v)m(ed)h(in)e(the)i(directory)f(de\014ned)f(as)h Fp(ADOLC)p 2451 1333 V 33 w(T)-8 b(APE)p 2711 1333 V 33 w(DIR)20 b Fz(\(b)m(y)h(default)h(the)f(curren)m(t)191 1446 y(w)m(orking)42 b(directory\))g(under)e(\014lenames)i(formed)e(b)m(y)i(the)f(strings)h Fp(ADOLC)p 2887 1446 V 32 w(OPERA)-8 b(TIONS)p 3479 1446 V 33 w(NAME)p Fz(,)191 1559 y Fp(ADOLC)p 497 1559 V 32 w(LOCA)g(TIONS)p 1025 1559 V 33 w(NAME)p Fz(,)20 b Fp(ADOLC)p 1663 1559 V 33 w(V)-8 b(ALUES)p 2027 1559 V 32 w(NAME)20 b Fz(and)f Fp(ADOLC)p 2805 1559 V 32 w(T)-8 b(A)g(YLORS)p 3231 1559 V 33 w(NAME)20 b Fz(de\014ned)191 1672 y(in)33 b(the)g(header)g(\014le)h Fs()28 b Fz(app)s(ended)j(with)i(the)g(n)m(um)m(b)s(er)f(giv)m(en)j(as)e(the)g Fp(tag)g Fz(argu-)191 1785 y(men)m(t)e(to)g Fp(trace)p 725 1785 V 33 w(on)g Fz(and)e(ha)m(v)m(e)j(the)f(extension)g Fp(.tap)p Fz(.)332 1948 y(Later,)49 b(all)d(problem-indep)s(enden)m(t)d (routines)i(lik)m(e)h Fp(gradient)p Fz(,)i Fp(jacobian)p Fz(,)h Fp(fo)m(rw)m(a)m(rd)p Fz(,)h Fp(reverse)p Fz(,)f(and)191 2061 y(others)d(exp)s(ect)g(as)f(\014rst)g(argumen)m(t)h(a)g Fp(tag)f Fz(to)h(determine)g(the)g(tap)s(e)f(on)h(whic)m(h)f(their)h (resp)s(ectiv)m(e)191 2174 y(computational)28 b(task)f(is)f(to)h(b)s(e) f(p)s(erformed.)38 b(By)26 b(calling)i Fp(trace)p 2377 2174 V 33 w(on)f Fz(with)f(di\013eren)m(t)g(tap)s(e)h Fp(tag)p Fz(s,)g(one)f(can)191 2286 y(create)h(sev)m(eral)h(tap)s(es)e (for)f(v)-5 b(arious)26 b(function)g(ev)-5 b(aluations)27 b(and)f(subsequen)m(tly)f(p)s(erform)g(function)g(and)191 2399 y(deriv)-5 b(ativ)m(e)32 b(ev)-5 b(aluations)32 b(on)e(one)h(or)f(more)g(of)h(them.)332 2562 y(F)-8 b(or)30 b(example,)h(supp)s(ose)d(one)h(wishes)g(to)h(calculate)i(for)d(t)m(w)m (o)i(smo)s(oth)e(functions)g Fr(f)3217 2576 y FC(1)3256 2562 y Fz(\()p Fr(x)p Fz(\))h(and)f Fr(f)3629 2576 y FC(2)3668 2562 y Fz(\()p Fr(x)p Fz(\))1235 2774 y Fr(f)10 b Fz(\()p Fr(x)p Fz(\))25 b(=)g(max)p Fn(f)p Fr(f)1792 2788 y FC(1)1832 2774 y Fz(\()p Fr(x)p Fz(\))p Fr(;)15 b(f)2039 2788 y FC(2)2079 2774 y Fz(\()p Fr(x)p Fz(\))p Fn(g)p Fr(;)198 b Fn(r)p Fr(f)10 b Fz(\()p Fr(x)p Fz(\))p Fr(;)191 2987 y Fz(and)29 b(p)s(ossibly)g(higher)h(deriv)-5 b(ativ)m(es)31 b(where)e(the)i(t)m(w)m(o)g(functions)e(do)h(not)g(tie.) 42 b(Pro)m(vided)30 b Fr(f)3311 3001 y FC(1)3379 2987 y Fz(and)g Fr(f)3601 3001 y FC(2)3669 2987 y Fz(are)191 3100 y(ev)-5 b(aluated)37 b(in)f(t)m(w)m(o)i(separate)f(activ)m(e)h (sections,)h(one)e(can)f(generate)i(t)m(w)m(o)f(di\013eren)m(t)g(tap)s (es)f(b)m(y)g(calling)191 3213 y Fp(trace)p 384 3213 V 33 w(on)28 b Fz(with)f Fp(tag)g Fz(=)g(1)h(and)f Fp(tag)g Fz(=)g(2)h(at)g(the)g(b)s(eginning)f(of)g(the)h(resp)s(ectiv)m(e)g (activ)m(e)i(sections.)41 b(Subse-)191 3326 y(quen)m(tly)-8 b(,)30 b(one)f(can)f(decide)h(whether)f Fr(f)10 b Fz(\()p Fr(x)p Fz(\))25 b(=)g Fr(f)1828 3340 y FC(1)1867 3326 y Fz(\()p Fr(x)p Fz(\))k(or)g Fr(f)10 b Fz(\()p Fr(x)p Fz(\))25 b(=)g Fr(f)2471 3340 y FC(2)2510 3326 y Fz(\()p Fr(x)p Fz(\))k(at)g(the)g(curren)m(t)f(argumen)m(t)h(and)191 3439 y(then)j(ev)-5 b(aluate)34 b(the)e(gradien)m(t)h Fn(r)p Fr(f)10 b Fz(\()p Fr(x)p Fz(\))32 b(b)m(y)g(calling)i Fp(gradient)e Fz(with)g(the)g(appropriate)h(argumen)m(t)f(v)-5 b(alue)191 3551 y Fp(tag)30 b Fz(=)g(1)h(or)f Fp(tag)h Fz(=)f(2.)191 3709 y SDict begin H.S end 191 3709 a 191 3709 a SDict begin 13.6 H.A end 191 3709 a 191 3709 a SDict begin [/View [/XYZ H.V]/Dest (subsection.2.1) cvn /DEST pdfmark end 191 3709 a 149 x FA(2.1)112 b(Examining)39 b(the)e(T)-9 b(ap)s(e)38 b(and)h(Predicting)e(Storage)h(Requiremen)m (ts)191 4082 y Fz(A)m(t)31 b(an)m(y)g(p)s(oin)m(t)f(in)g(the)h (program,)f(one)h(ma)m(y)g(call)h(the)e(routine)p Black Black 1048 4327 a Fp(void)h(tap)s(estats\(unsigned)e(sho)m(rt)i(tag,)g (size)p 2515 4327 28 4 v 32 w(t*)f(counts\))191 4573 y Fz(with)f Fp(counts)g Fz(b)s(eeing)g(an)g(arra)m(y)h(of)f(at)h(least) g(elev)m(en)h(in)m(tegers.)41 b(The)29 b(\014rst)f(argumen)m(t)i Fp(tag)f Fz(sp)s(eci\014es)g(the)191 4686 y(particular)i(tap)s(e)f(of)h (in)m(terest.)42 b(The)29 b(comp)s(onen)m(ts)i(of)g Fp(counts)f Fz(represen)m(t)821 4890 y Fp(counts[0])p Fz(:)102 b(the)30 b(n)m(um)m(b)s(er)f(of)i(indep)s(enden)m(ts,)e(i.e.)i(calls)h(to)f Fo(\034)p Fw(=)f Fz(,)821 5003 y Fp(counts[1])p Fz(:)102 b(the)30 b(n)m(um)m(b)s(er)f(of)i(dep)s(enden)m(ts,)e(i.e.)j(calls)f (to)g Fo(\035)p Fw(=)f Fz(,)821 5116 y Fp(counts[2])p Fz(:)102 b(the)30 b(maximal)h(n)m(um)m(b)s(er)e(of)i(liv)m(e)h(activ)m (e)g(v)-5 b(ariables,)821 5229 y Fp(counts[3])p Fz(:)102 b(the)30 b(size)h(of)g(ta)m(ylor)h(stac)m(k)g(\(n)m(um)m(b)s(er)d(of)i (o)m(v)m(erwrites\),)821 5342 y Fp(counts[4])p Fz(:)102 b(the)30 b(bu\013er)f(size)j(\(a)f(m)m(ultiple)g(of)f(eigh)m(t\),)p Black Black eop end %%Page: 15 15 TeXDict begin 15 14 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.15) cvn /DEST pdfmark end 183 199 a Black 191 307 a Ft(2.2)92 b(Customizing)31 b(ADOL-C)2415 b Fz(15)p Black 854 594 a Fp(counts[5])p Fz(:)222 b(the)31 b(total)h(n)m(um)m(b)s (er)d(of)i(op)s(erations)f(recorded,)854 707 y Fp(counts[6-13])p Fz(:)102 b(other)31 b(in)m(ternal)g(information)g(ab)s(out)f(the)g(tap) s(e.)191 870 y(The)43 b(v)-5 b(alues)43 b Fp(maxlive)g Fz(=)g Fp(counts[2])h Fz(and)f Fp(tssize)f Fz(=)h Fp(counts[3])i Fz(determine)e(the)g(temp)s(orary)g(storage)191 983 y(requiremen)m(ts) 32 b(during)e(calls)j(to)f(the)g(routines)f(implemen)m(ting)i(the)f (forw)m(ard)f(and)g(the)h(rev)m(erse)g(mo)s(de.)191 1096 y(F)-8 b(or)26 b(a)h(certain)f(degree)h Fp(deg)f Fn(\025)f Fz(0,)j(the)d(scalar)i(v)m(ersion)f(of)g(the)g(forw)m(ard)f(mo)s(de)h (in)m(v)m(olv)m(es)h(apart)f(from)g(the)191 1209 y(tap)s(e)i(bu\013ers) f(an)h(arra)m(y)h(of)f(\()p Fp(deg)p Fz(+1\))p Fn(\003)p Fp(maxlive)i(double)p Fz(s)f(in)f(core)h(and,)f(in)g(addition,)h(a)f (sequen)m(tial)i(data)191 1322 y(set)f(called)g(the)g(v)-5 b(alue)29 b(stac)m(k)g(of)g Fp(tssize)p Fn(\003)p Fp(k)m(eep)g(revreal) p Fz(s)g(if)f(called)h(with)f(the)h(option)f Fp(k)m(eep)i Fr(>)e Fz(0.)41 b(Here)29 b(the)191 1435 y(t)m(yp)s(e)34 b Fp(revreal)f Fz(is)h(de\014ned)e(as)h Fp(double)h Fz(or)g Fp(\015oat)p Fz(.)49 b(The)33 b(latter)i(c)m(hoice)g(halv)m(es)f(the)g (storage)h(requiremen)m(t)191 1548 y(for)25 b(the)h(sequen)m(tial)i (data)e(set,)h(whic)m(h)f(sta)m(ys)h(in)e(core)i(if)e(its)i(length)f (is)f(less)i(than)e Fp(TBUFSIZE)f Fz(b)m(ytes)i(and)191 1661 y(is)37 b(otherwise)g(written)f(out)h(to)g(a)g(temp)s(orary)f (\014le.)60 b(The)36 b(parameter)h Fp(TBUFSIZE)d Fz(is)j(de\014ned)e (in)i(the)191 1774 y(header)g(\014le)h Fs()p Fz(.)58 b(The)37 b(dra)m(wbac)m(k)h(of)g(the)g(economical)h Fp(revreal)f Fz(=)g Fp(\015oat)f Fz(c)m(hoice)191 1886 y(is)30 b(that)g(subsequen)m(t)g(calls)h(to)f(rev)m(erse)h(mo)s(de)e (implemen)m(tations)j(yield)e(gradien)m(ts)h(and)e(other)h(adjoin)m(t) 191 1999 y(v)m(ectors)42 b(only)g(in)e(single-precision)j(accuracy)-8 b(.)74 b(This)40 b(ma)m(y)i(b)s(e)e(acceptable)j(if)e(the)h(adjoin)m(t) f(v)m(ectors)191 2112 y(represen)m(t)31 b(ro)m(ws)g(of)h(a)f(Jacobian)h (that)g(is)f(used)g(for)g(the)g(calculation)i(of)f(Newton)g(steps.)43 b(In)30 b(its)i(scalar)191 2225 y(v)m(ersion,)37 b(the)e(rev)m(erse)g (mo)s(de)g(implemen)m(tation)h(in)m(v)m(olv)m(es)h(the)e(same)g(n)m(um) m(b)s(er)f(of)h Fp(double)p Fz(s)g(and)f(t)m(wice)191 2338 y(as)39 b(man)m(y)g Fp(revreal)p Fz(s)g(as)h(the)f(forw)m(ard)f (mo)s(de)h(implemen)m(tation.)68 b(The)39 b(storage)h(requiremen)m(ts)f (of)h(the)191 2451 y(v)m(ector)32 b(v)m(ersions)e(of)g(the)g(forw)m (ard)g(mo)s(de)g(and)f(rev)m(erse)i(mo)s(de)e(implemen)m(tation)j(are)f (equal)f(to)h(that)g(of)191 2564 y(the)g(scalar)g(v)m(ersions)g(m)m (ultiplied)f(b)m(y)h(the)f(v)m(ector)i(length.)191 2709 y SDict begin H.S end 191 2709 a 191 2709 a SDict begin 13.6 H.A end 191 2709 a 191 2709 a SDict begin [/View [/XYZ H.V]/Dest (subsection.2.2) cvn /DEST pdfmark end 191 2709 a 148 x FA(2.2)112 b(Customizing)38 b(ADOL-C)191 3078 y Fz(Based)25 b(on)f(the)h(information)f(pro)m(vided)g(b)m(y)h(the)f (routine)h Fp(tap)s(estats)p Fz(,)f(the)h(user)e(ma)m(y)i(alter)h(the)e (follo)m(wing)191 3191 y(t)m(yp)s(es)31 b(and)f(constan)m(t)i (dimensions)e(in)h(the)g(header)f(\014le)h Fs()26 b Fz(to)31 b(suit)g(his)f(problem)191 3304 y(and)g(en)m(vironmen)m(t.)p Black 191 3565 a Fp(OBUFSIZE)p Fw(,)j Fp(LBUFSIZE)p Fw(,)h Fp(VBUFSIZE)p Fz(:)p Black 44 w(These)26 b(in)m(teger)i(determines)f (the)g(length)g(of)f(internal)h(buffers)418 3678 y(\(default:)42 b(524)15 b(288\).)46 b(If)30 b(the)h(bu\013ers)f(are)h(large)h(enough)f (to)g(accommo)s(date)i(all)f(required)e(data,)418 3791 y(an)m(y)41 b(\014le)g(access)i(is)d(a)m(v)m(oided)j(unless)d Fp(trace)p 1952 3791 28 4 v 33 w(o\013)h Fz(is)g(called)h(with)f(a)g(p) s(ositiv)m(e)h(argumen)m(t.)73 b(This)418 3904 y(desirable)41 b(situation)h(can)f(b)s(e)f(ac)m(hiev)m(ed)j(for)e(man)m(y)g(problem)f (functions)g(with)h(an)g(execution)418 4017 y(trace)g(of)e(mo)s(derate) h(size.)68 b(Primarily)39 b(these)g(v)-5 b(alues)40 b(o)s(ccur)f(as)g (an)h(argumen)m(t)f(to)h Fp(mallo)s(c)p Fz(,)h(so)418 4130 y(that)29 b(setting)f(it)h(unnecessarily)e(large)i(ma)m(y)g(ha)m (v)m(e)f(no)g(ill)h(e\013ects,)g(unless)e(the)h(op)s(erating)h(system) 418 4243 y(prohibits)e(or)g(p)s(enalizes)h(large)g(arra)m(y)g(allo)s (cations.)42 b(It)27 b(is)g(ho)m(w)m(ev)m(er)i(recommended)e(to)h(lea)m (v)m(e)i(the)418 4356 y(v)-5 b(alues)38 b(in)f Fs()32 b Fz(unc)m(hanged)37 b(and)f(set)i(them)f(using)g(the)g Fs(.adolcrc)e Fz(\014le)i(in)418 4468 y(the)31 b(curren)m(t)f(w)m (orking)h(directory)g(at)g(run)m(time.)p Black 191 4656 a Fp(TBUFSIZE)p Fz(:)p Black 44 w(This)43 b(in)m(teger)i(determines)f (the)g(length)g(of)g(the)h(internal)f(buffer)e(for)i(a)g(ta)m(ylor)h (stac)m(k)418 4769 y(\(default:)c(524)15 b(288\).)p Black 191 4956 a Fp(TBUFNUM)p Fz(:)p Black 44 w(This)29 b(in)m(teger)j (determines)f(the)f(maximal)h(n)m(um)m(b)s(er)e(of)i(ta)m(ylor)h(stac)m (ks)f(\(default:)42 b(32\).)p Black 191 5143 a Fp(\014nt)p Fz(:)p Black 45 w(The)30 b(in)m(teger)i(data)f(t)m(yp)s(e)f(used)g(b)m (y)g(F)-8 b(ortran)31 b(callable)i(v)m(ersions)d(of)h(functions.)p Black 191 5330 a Fp(fdouble)p Fz(:)p Black 46 w(The)f(\015oating)h(p)s (oin)m(t)f(data)i(t)m(yp)s(e)e(used)g(b)m(y)g(F)-8 b(ortran)31 b(callable)h(v)m(ersions)f(of)f(functions.)p Black Black eop end %%Page: 16 16 TeXDict begin 16 15 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.16) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fz(16)637 b Ft(2)92 b(NUMBERING)31 b(THE)f(T)-8 b(APES)30 b(AND)h(CONTR)m(OLLING)f(THE)g(BUFFER)p Black Black 191 606 a Fp(inf)p 293 606 28 4 v 32 w(num)p Fz(:)p Black 46 w(This)41 b(together)i(with)f Fp(inf)p 1467 606 V 32 w(den)g Fz(sets)g(the)g(\\v)m(ertical")i(slop)s(e)e Fp(InfV)m(al)f Fz(=)h Fp(inf)p 3174 606 V 32 w(num/inf)p 3514 606 V 33 w(den)g Fz(of)418 719 y(sp)s(ecial)e(functions)f(at)h (the)f(b)s(oundaries)f(of)h(their)h(domains)f(\(default:)58 b Fp(inf)p 3083 719 V 33 w(num)39 b Fz(=)g(1.0\).)69 b(On)418 832 y(IEEE)25 b(mac)m(hines)h(the)g(default)f(setting)i(pro)s (duces)d(the)h(standard)g Fp(Inf)p Fz(.)39 b(On)25 b(non-IEEE)f(mac)m (hines)418 945 y(c)m(hange)37 b(these)g(v)-5 b(alues)36 b(to)h(pro)s(duce)d(a)j(small)f Fp(InfV)m(al)f Fz(v)-5 b(alue)37 b(and)e(compare)h(the)h(results)e(of)h(t)m(w)m(o)418 1058 y(forw)m(ard)30 b(sw)m(eeps)h(with)f(di\013eren)m(t)g Fp(InfV)m(al)g Fz(settings)i(to)f(detect)g(a)g(\\v)m(ertical")j(slop)s (e.)p Black 191 1255 a Fp(inf)p 293 1255 V 32 w(den)p Fz(:)p Black 46 w(See)d Fp(inf)p 789 1255 V 32 w(num)f Fz(\(default:)42 b(0.0\).)p Black 191 1453 a Fp(non)p 335 1453 V 33 w(num)p Fz(:)p Black 46 w(This)37 b(together)i(with)f Fp(non)p 1540 1453 V 33 w(den)g Fz(sets)g(the)g(mathematically)i (unde\014ned)c(deriv)-5 b(ativ)m(e)39 b(v)-5 b(alue)418 1566 y Fp(NoNum)37 b Fz(=)e Fp(non)p 997 1566 V 33 w(num/non)p 1380 1566 V 34 w(den)h Fz(of)f(sp)s(ecial)h(functions)f(at)h(the)g(b)s (oundaries)e(of)i(their)f(domains)418 1679 y(\(default:)44 b Fp(non)p 941 1679 V 33 w(num)32 b Fz(=)g(0.0\).)46 b(On)31 b(IEEE)g(mac)m(hines)h(the)g(default)g(setting)h(pro)s(duces)d (the)i(stan-)418 1792 y(dard)37 b Fp(NaN)p Fz(.)i(On)f(non-IEEE)f(mac)m (hines)i(c)m(hange)g(these)g(v)-5 b(alues)39 b(to)g(pro)s(duce)e(a)i (small)f Fp(NoNum)418 1905 y Fz(v)-5 b(alue)35 b(and)g(compare)g(the)g (results)f(of)h(t)m(w)m(o)h(forw)m(ard)e(sw)m(eeps)h(with)f(di\013eren) m(t)i Fp(NoNum)g Fz(settings)418 2018 y(to)31 b(detect)h(the)f(o)s (ccurrence)f(of)h(unde\014ned)d(deriv)-5 b(ativ)m(e)32 b(v)-5 b(alues.)p Black 191 2216 a Fp(non)p 335 2216 V 33 w(den)p Fz(:)p Black 46 w(See)31 b Fp(non)p 874 2216 V 33 w(num)f Fz(\(default:)42 b(0.0\).)p Black 191 2413 a Fp(ADOLC)p 497 2413 V 32 w(EPS)p Fz(:)p Black 46 w(F)-8 b(or)31 b(testing)g(on)g(small)g(n)m(um)m(b)s(ers)d(to)k(a)m (v)m(oid)f(o)m(v)m(er\015o)m(ws)h(\(default:)41 b(10E-20\).)p Black 191 2611 a Fp(DIA)m(G)p 406 2611 V 32 w(OUT)p Fz(:)p Black 45 w(File)33 b(iden)m(ti\014er)f(used)e(as)i(standard)f(output)g (for)g(ADOL-C)h(diagnostics)g(\(default:)44 b(std-)418 2724 y(out\).)332 2996 y(The)e(follo)m(wing)j(t)m(yp)s(es)d(and)g (options)h(ma)m(y)h(b)s(e)e(set)h(using)f(the)h(command-line)h(options) f(of)g(the)191 3109 y Fs(./configure)27 b Fz(script.)p Black 191 3382 a Fp(lo)s(cint)p Fz(:)p Black 45 w(The)k(range)g(of)g (the)h(in)m(teger)g(t)m(yp)s(e)f Fp(lo)s(cint)g Fz(determines)g(ho)m(w) g(man)m(y)g Fp(adouble)p Fz(s)g(can)g(b)s(e)g(sim)m(ulta-)418 3495 y(neously)h(aliv)m(e)i(\(default:)44 b Fp(unsigned)32 b(int)p Fz(\).)46 b(In)31 b(extreme)i(cases)f(when)f(there)h(are)h (more)f(than)g(2)3716 3462 y FC(32)418 3608 y Fp(adouble)p Fz(s)27 b(aliv)m(e)h(at)f(an)m(y)f(one)h(time,)h(the)f(t)m(yp)s(e)f Fp(lo)s(cint)g Fz(m)m(ust)g(b)s(e)g(c)m(hanged)h(to)g Fp(unsigned)g(long)p Fz(.)40 b(This)418 3721 y(can)31 b(b)s(e)f(done)g(b)m(y)g(passing)i Fs(--enable-ulong)26 b Fz(to)31 b Fs(./configure)p Fz(.)p Black 191 3918 a Fp(revreal)p Fz(:)p Black 46 w(The)21 b(c)m(hoice)i(of)e(this)g (\015oating-p)s(oin)m(t)i(t)m(yp)s(e)e(trades)h(accuracy)g(with)f (storage)i(for)e(rev)m(erse)h(sw)m(eeps)418 4031 y(\(default:)38 b Fp(double)p Fz(\).)h(While)23 b(functions)f(and)h(their)f(deriv)-5 b(ativ)m(es)24 b(are)g(alw)m(a)m(ys)g(ev)-5 b(aluated)24 b(in)e(double)418 4144 y(precision)i(during)e(forw)m(ard)h(sw)m(eeps,)i (gradien)m(ts)f(and)e(other)i(adjoin)m(t)g(v)m(ectors)h(are)e(obtained) h(with)418 4257 y(the)32 b(precision)g(determined)f(b)m(y)g(the)h(t)m (yp)s(e)g Fp(revreal)p Fz(.)44 b(The)31 b(less)h(accurate)h(c)m(hoice)g Fp(revreal)f Fz(=)f Fp(\015oat)418 4370 y Fz(nearly)39 b(halv)m(es)g(the)g(storage)h(requiremen)m(t)e(during)f(rev)m(erse)i (sw)m(eeps.)65 b(This)38 b(can)h(b)s(e)f(done)g(b)m(y)418 4483 y(passing)32 b Fs(--disable-double)26 b Fz(to)31 b Fs(./configure)p Fz(.)p Black 191 4681 a Fp(A)-8 b(TRIG)p 456 4681 V 32 w(ERF)p Fz(:)p Black 46 w(The)24 b(o)m(v)m(erloaded)i(v)m (ersions)f(of)f(the)h(in)m(v)m(erse)g(h)m(yp)s(erb)s(olic)f(functions)g (and)g(the)g(error)g(func-)418 4794 y(tion)d(are)g(enabled)f (\(default:)36 b(unde\014ned\))18 b(b)m(y)j(passing)g Fs(--enable-atrig-erf)15 b Fz(to)21 b Fs(./configure)p Black 191 4991 a Fp(ADOLC)p 497 4991 V 32 w(USE)p 697 4991 V 32 w(CALLOC)p Fz(:)p Black 46 w(Selects)k(the)f(memory)f(allo)s (cation)j(routine)e(used)f(b)m(y)h(ADOL-C.)g Fp(Mallo)s(c)e Fz(will)418 5104 y(b)s(e)35 b(used)g(if)h(this)g(v)-5 b(ariable)36 b(is)g(unde\014ned.)55 b Fp(ADOLC)p 2247 5104 V 32 w(USE)p 2447 5104 V 32 w(CALLOC)36 b Fz(is)g(de\014ned)e(b)m (y)i(default)g(to)418 5217 y(a)m(v)m(oid)42 b(incorrect)f(result)g (caused)f(b)m(y)g(uninitialized)i(memory)-8 b(.)71 b(It)40 b(can)h(b)s(e)f(set)h(unde\014ned)d(b)m(y)418 5330 y(passing)32 b Fs(--disable-use-calloc)25 b Fz(to)31 b Fs(./configure)p Fz(.)p Black Black eop end %%Page: 17 17 TeXDict begin 17 16 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.17) cvn /DEST pdfmark end 183 199 a Black 191 307 a Ft(2.3)92 b(W)-8 b(arnings)31 b(and)f(Suggestions)g(for)h(Impro)m(v)m (ed)f(E\016ciency)1304 b Fz(17)p Black Black 191 606 a Fp(ADOLC)p 497 606 28 4 v 32 w(AD)m(V)-8 b(ANCED)p 1009 606 V 33 w(BRANCHING)p Fz(:)p Black 45 w(Enables)37 b(routines)g(required)f(for)g(automatic)j(branc)m(h)d(selec-)418 719 y(tion)29 b(\(default:)40 b(disabled\).)g(The)27 b(b)s(o)s(olean)h(v)-5 b(alued)28 b(comparison)g(op)s(erators)g(with)f (t)m(w)m(o)j Fs(adouble)418 832 y Fz(t)m(yp)s(e)46 b(argumen)m(ts)f (will)h(not)f(return)f(b)s(o)s(olean)i(v)-5 b(alues)45 b(an)m(ymore)h(and)f(ma)m(y)g(not)h(b)s(e)f(used)f(in)418 945 y(branc)m(h)f(con)m(trol)h(statemen)m(ts)h(\()p Fs(if)p Fz(,)h Fs(while)p Fz(,)g Fs(for)c Fz(etc.\).)81 b(Instead)43 b(conditional)h(assignmen)m(ts)418 1058 y(using)c Fs(condassign)c Fz(or)j(selection)i(op)s(erations)f(on)f(elemen)m(ts)h(of)46 b Fs(advector)37 b Fz(t)m(yp)s(e)i(should)f(b)s(e)418 1171 y(used.)53 b(Enabling)35 b(this)f(option)i(and)e(rewriting)g(the)h (function)g(ev)-5 b(aluation)36 b(using)g Fs(condassign)418 1284 y Fz(or)29 b(selections)h(of)36 b Fs(advector)27 b Fz(elemen)m(ts)j(will)f(prev)m(en)m(t)g(the)g(need)g(for)f(retracing) i(the)f(function)f(at)418 1396 y(branc)m(h)i(switc)m(hes.)42 b(This)30 b(can)h(b)s(e)e(enabled)i(b)m(y)f(passing)i Fs(--enable-advanced-branch)o(ing)24 b Fz(to)418 1509 y Fs(./configure)p Fz(.)191 1694 y SDict begin H.S end 191 1694 a 191 1694 a SDict begin 13.6 H.A end 191 1694 a 191 1694 a SDict begin [/View [/XYZ H.V]/Dest (subsection.2.3) cvn /DEST pdfmark end 191 1694 a 146 x FA(2.3)112 b(W)-9 b(arnings)38 b(and)h(Suggestions)f(for)g(Impro)m(v)m(ed)f(E\016ciency) 191 2069 y Fz(Since)d(the)h(t)m(yp)s(e)g Fp(adouble)f Fz(has)g(a)h(non)m(trivial)g(constructor,)h(the)f(mere)g(declaration)h (of)e(large)i Fp(adouble)191 2182 y Fz(arra)m(ys)g(ma)m(y)h(tak)m(e)h (up)c(considerable)j(run)e(time.)58 b(The)35 b(user)h(should)f(b)s(e)g (w)m(arned)h(against)h(the)f(usual)191 2295 y(F)-8 b(ortran)37 b(practice)h(of)f(declaring)g(\014xed-size)h(arra)m(ys)f(that)g(can)g (accommo)s(date)h(the)f(largest)h(p)s(ossible)191 2408 y(case)30 b(of)g(an)f(ev)-5 b(aluation)31 b(program)e(with)g(v)-5 b(ariable)30 b(dimensions.)40 b(If)29 b(suc)m(h)g(programs)f(are)i(con) m(v)m(erted)h(to)191 2521 y(or)j(written)f(in)g(C,)h(the)g(o)m(v)m (erloading)h(in)f(com)m(bination)g(with)g(ADOL-C)f(will)h(lead)g(to)h (v)m(ery)f(large)g(run)191 2633 y(time)29 b(increases)f(for)g (comparativ)m(ely)i(small)f(v)-5 b(alues)28 b(of)g(the)h(problem)e (dimension,)h(b)s(ecause)g(the)g(actual)191 2746 y(computation)j(is)f (completely)i(dominated)e(b)m(y)g(the)h(construction)f(of)g(the)h (large)g Fp(adouble)f Fz(arra)m(ys.)41 b(The)191 2859 y(user)33 b(is)i(advised)f(to)h(create)h(dynamic)e(arra)m(ys)g(of)h Fp(adouble)p Fz(s)f(b)m(y)g(using)g(the)g(C++)f(op)s(erator)i Fp(new)f Fz(and)191 2972 y(to)c(destro)m(y)g(them)f(using)g Fp(delete)p Fz(.)41 b(F)-8 b(or)30 b(storage)h(e\016ciency)f(it)g(is)f (desirable)g(that)h(dynamic)f(ob)5 b(jects)30 b(are)191 3085 y(created)h(and)f(destro)m(y)m(ed)h(in)g(a)f(last-in-\014rst-out)i (fashion.)332 3248 y(Whenev)m(er)d(an)g Fp(adouble)f Fz(is)h(declared,)g(the)g(constructor)g(for)f(the)h(t)m(yp)s(e)g Fp(adouble)f Fz(assigns)h(it)g(a)g(nom-)191 3361 y(inal)g(address,)e (whic)m(h)h(w)m(e)h(will)g(refer)e(to)i(as)g(its)f Fq(lo)-5 b(c)g(ation)p Fz(.)43 b(The)27 b(lo)s(cation)j(is)e(of)h(the)f(t)m(yp)s (e)g Fp(lo)s(cint)g Fz(de\014ned)191 3474 y(in)i(the)h(header)g(\014le) f Fs()p Fz(.)37 b(Activ)m(e)c(v)m(ectors)f(o)s(ccup)m (y)f(a)g(range)g(of)g(con)m(tiguous)g(lo)s(ca-)191 3587 y(tions.)49 b(As)33 b(long)h(as)f(the)g(program)g(execution)i(nev)m(er) e(in)m(v)m(olv)m(es)i(more)e(than)g(65)15 b(536)35 b(activ)m(e)h(v)-5 b(ariables,)191 3699 y(the)29 b(t)m(yp)s(e)f Fp(lo)s(cint)g Fz(ma)m(y)i(b)s(e)d(de\014ned)h(as)g Fp(unsigned)h(sho)m(rt)p Fz(.)41 b(Otherwise,)29 b(the)f(range)h(ma)m(y)g(b)s(e)f(extended)h(b)m (y)191 3812 y(de\014ning)23 b Fp(lo)s(cint)h Fz(as)h Fp(\(unsigned\))g(int)f Fz(or)g Fp(\(unsigned\))h(long)p Fz(,)i(whic)m(h)d(ma)m(y)g(nearly)h(double)f(the)g(o)m(v)m(erall)j (mass)191 3925 y(storage)36 b(requiremen)m(t.)54 b(Sometimes)36 b(one)f(can)g(a)m(v)m(oid)h(exceeding)g(the)f(accessible)h(range)g(of)e Fp(unsigned)191 4038 y(sho)m(rt)p Fz(s)29 b(b)m(y)g(using)f(more)h(lo)s (cal)h(v)-5 b(ariables)30 b(and)e(deleting)i Fp(adouble)p Fz(s)f(created)h(b)m(y)e(the)h(new)g(op)s(erator)g(in)f(a)191 4151 y(last-in-\014rst-out)j(fashion.)41 b(When)30 b(memory)g(for)g Fp(adouble)p Fz(s)g(is)g(requested)g(through)f(a)i(call)g(to)g Fp(mallo)s(c\(\))191 4264 y Fz(or)f(other)g(related)g(C)g(memory-allo)s (cating)i(functions,)e(the)g(storage)h(for)f(these)g Fp(adouble)p Fz(s)g(is)f(allo)s(cated;)191 4377 y(ho)m(w)m(ev)m(er,)e (the)c(C++)g Fp(adouble)h Fz(constructor)g(is)g(nev)m(er)g(called.)40 b(The)23 b(newly)g(de\014ned)g Fp(adouble)p Fz(s)g(are)h(nev)m(er)191 4490 y(assigned)38 b(a)g(lo)s(cation)h(and)e(are)h(not)f(coun)m(ted)h (in)g(the)f(stac)m(k)i(of)f(liv)m(e)h(v)-5 b(ariables.)63 b(Th)m(us,)38 b(an)m(y)g(results)191 4603 y(dep)s(ending)29 b(up)s(on)g(these)i(pseudo-)p Fp(adouble)p Fz(s)g(will)g(b)s(e)f (incorrect.)42 b(F)-8 b(or)32 b(these)f(reasons)f Fw(DO)35 b(NOT)g(use)191 4716 y(mallo)s(c\(\))43 b(and)g(related)g(C)g (memory-allo)s(cating)h(functions)g(when)f(declaring)h(adoubles)191 4829 y(\(see)35 b(the)f(follo)m(wing)h(paragraph\).)332 4991 y Fz(When)e(an)g Fp(adouble)g Fz(go)s(es)g(out)h(of)f(scop)s(e)g (or)g(is)g(explicitly)h(deleted,)h(the)e(destructor)g(notices)h(that) 191 5104 y(its)h(lo)s(cation\(s\))i(ma)m(y)f(b)s(e)e(freed)h(for)g (subsequen)m(t)f(\(nominal\))i(reallo)s(cation.)57 b(In)34 b(general,)k(this)c(is)h(not)191 5217 y(done)26 b(immediately)h(but)f (is)g(dela)m(y)m(ed)i(un)m(til)e(the)h(lo)s(cations)g(to)g(b)s(e)f (deallo)s(cated)i(form)e(a)g(con)m(tiguous)h(tail)191 5330 y(of)j(all)i(lo)s(cations)g(curren)m(tly)e(b)s(eing)g(used.)p Black Black eop end %%Page: 18 18 TeXDict begin 18 17 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.18) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fz(18)637 b Ft(2)92 b(NUMBERING)31 b(THE)f(T)-8 b(APES)30 b(AND)h(CONTR)m(OLLING)f(THE)g(BUFFER)p Black 332 606 a Fz(As)f(a)g(consequence)g(of)g(this)f(allo)s(cation)j(sc)m(heme,)f (the)f(curren)m(tly)f(aliv)m(e)j Fp(adouble)d Fz(lo)s(cations)i(alw)m (a)m(ys)191 719 y(form)37 b(a)g(con)m(tiguous)i(range)e(of)h(in)m (tegers)g(that)g(gro)m(ws)g(and)f(shrinks)e(lik)m(e)k(a)f(stac)m(k.)63 b(Newly)37 b(declared)191 832 y Fp(adouble)p Fz(s)j(are)h(placed)g(on)f (the)h(top)g(so)f(that)h(v)m(ectors)h(of)f Fp(adouble)p Fz(s)f(obtain)h(a)g(con)m(tiguous)h(range)f(of)191 945 y(lo)s(cations.)52 b(While)34 b(the)g(C++)e(compiler)i(can)g(b)s(e)f (exp)s(ected)h(to)g(construct)g(and)f(destruct)h(automatic)191 1058 y(v)-5 b(ariables)28 b(in)g(a)g(last-in-\014rst-out)h(fashion,)g (the)f(user)f(ma)m(y)i(upset)e(this)h(desirable)g(pattern)g(b)m(y)g (deleting)191 1171 y(free-store)36 b Fp(adouble)p Fz(s)f(to)s(o)h (early)f(or)g(to)s(o)h(late.)56 b(Then)34 b(the)h Fp(adouble)g Fz(stac)m(k)i(ma)m(y)f(gro)m(w)f(unnecessarily)-8 b(,)191 1284 y(but)28 b(the)h(n)m(umerical)g(results)f(will)h(still)h(b)s(e)e (correct,)i(unless)e(an)h(exception)h(o)s(ccurs)e(b)s(ecause)h(the)f (range)191 1396 y(of)41 b Fp(lo)s(cint)g Fz(is)g(exceeded.)74 b(In)41 b(general,)k(free-store)d Fp(adouble)p Fz(s)g(should)e(b)s(e)g (deleted)i(in)f(a)h(last-in-\014rst-)191 1509 y(out)36 b(fashion)f(to)m(w)m(ard)h(the)g(end)e(of)i(the)f(program)g(blo)s(c)m (k)h(in)f(whic)m(h)h(they)f(w)m(ere)h(created.)57 b(When)35 b(this)191 1622 y(pattern)f(is)g(main)m(tained,)i(the)e(maxim)m(um)f(n) m(um)m(b)s(er)g(of)h Fp(adouble)p Fz(s)g(aliv)m(e)h(and,)g(as)f(a)g (consequence,)i(the)191 1735 y(randomly)25 b(accessed)i(storage)h (space)e(of)g(the)g(deriv)-5 b(ativ)m(e)28 b(ev)-5 b(aluation)27 b(routines)f(is)g(b)s(ounded)d(b)m(y)j(a)g(small)191 1848 y(m)m(ultiple)40 b(of)f(the)h(memory)f(used)f(in)h(the)g(relev)-5 b(an)m(t)41 b(section)f(of)g(the)f(original)i(program.)67 b(F)-8 b(ailure)40 b(to)191 1961 y(delete)27 b(dynamically)f(allo)s (cated)i Fp(adouble)p Fz(s)d(ma)m(y)i(cause)f(that)g(the)g(maximal)g(n) m(um)m(b)s(er)f(of)g Fp(adouble)p Fz(s)h(aliv)m(e)191 2074 y(at)i(one)g(time)h(will)f(b)s(e)f(exceeded)h(if)g(the)g(same)g (activ)m(e)i(section)f(is)e(called)i(rep)s(eatedly)-8 b(.)41 b(The)27 b(same)h(e\013ect)191 2187 y(o)s(ccurs)i(if)g(static)i Fp(adouble)p Fz(s)f(are)f(used.)332 2350 y(T)-8 b(o)46 b(a)m(v)m(oid)g(the)g(storage)g(and)f(manipulation)g(of)g(structurally) g(trivial)h(deriv)-5 b(ativ)m(e)47 b(v)-5 b(alues,)49 b(one)191 2462 y(should)37 b(pa)m(y)h(careful)g(atten)m(tion)i(to)e (the)g(naming)g(of)g(v)-5 b(ariables.)63 b(Ideally)-8 b(,)41 b(the)d(in)m(termediate)h(v)-5 b(alues)191 2575 y(generated)37 b(during)d(the)i(ev)-5 b(aluation)37 b(of)f(a)g(v)m (ector)h(function)f(should)e(b)s(e)h(assigned)h(to)h(program)e(v)-5 b(ari-)191 2688 y(ables)41 b(that)g(are)g(consisten)m(tly)h(either)e (activ)m(e)j(or)e(passiv)m(e,)i(in)e(that)g(all)g(their)f(v)-5 b(alues)41 b(either)g(are)g(or)191 2801 y(are)h(not)g(dep)s(enden)m(t)f (on)g(the)h(indep)s(enden)m(t)f(v)-5 b(ariables)42 b(in)f(a)h(non)m (trivial)h(w)m(a)m(y)-8 b(.)76 b(F)-8 b(or)42 b(example,)k(this)191 2914 y(rule)36 b(is)g(violated)i(if)e(a)g(temp)s(orary)g(v)-5 b(ariable)37 b(is)f(successiv)m(ely)i(used)d(to)i(accum)m(ulate)h (inner)d(pro)s(ducts)191 3027 y(in)m(v)m(olving)d(\014rst)d(only)i (passiv)m(e)g(and)e(later)j(activ)m(e)g(arra)m(ys.)41 b(Then)30 b(the)g(\014rst)g(inner)f(pro)s(duct)g(and)h(all)h(its)191 3140 y(successors)f(in)g(the)g(data)h(dep)s(endency)d(graph)i(b)s (ecome)g(arti\014cially)i(activ)m(e)g(and)e(the)g(deriv)-5 b(ativ)m(e)31 b(ev)-5 b(al-)191 3253 y(uation)29 b(routines)g(describ)s (ed)e(later)j(will)f(w)m(aste)g(time)h(allo)s(cating)h(and)d (propagating)h(trivial)h(or)f(useless)191 3366 y(deriv)-5 b(ativ)m(es.)58 b(Sometimes)36 b(ev)m(en)h(v)-5 b(alues)36 b(that)g(do)g(dep)s(end)e(on)h(the)h(indep)s(enden)m(t)f(v)-5 b(ariables)36 b(ma)m(y)g(b)s(e)191 3479 y(of)h(only)g(transitory)h(imp) s(ortance)f(and)f(ma)m(y)i(not)f(a\013ect)i(the)e(dep)s(enden)m(t)f(v) -5 b(ariables.)62 b(F)-8 b(or)38 b(example,)191 3592 y(this)31 b(is)g(true)g(for)g(m)m(ultipliers)h(that)g(are)f(used)g(to)h (scale)g(linear)g(equations,)g(but)f(whose)g(v)-5 b(alues)31 b(do)g(not)191 3704 y(in\015uence)38 b(the)g(dep)s(enden)m(t)g(v)-5 b(ariables)39 b(in)f(a)h(mathematical)i(sense.)65 b(Suc)m(h)37 b(dead-end)h(v)-5 b(ariables)39 b(can)191 3817 y(b)s(e)d(deactiv)-5 b(ated)38 b(b)m(y)e(the)g(use)g(of)g(the)h Fp(value)f Fz(function,)h(whic)m(h)f(con)m(v)m(erts)i Fp(adouble)p Fz(s)e(to)h Fp(double)p Fz(s.)58 b(The)191 3930 y(deleterious)30 b(e\013ects)g(of)f(unnecessary)g(activit)m(y)i(are)f(partly)f (alleviated)i(b)m(y)e(run)f(time)h(activit)m(y)j(\015ags)d(in)191 4043 y(the)i(deriv)-5 b(ativ)m(e)31 b(routine)g Fp(hov)p 1217 4043 28 4 v 33 w(reverse)g Fz(presen)m(ted)g(in)2049 4043 y SDict begin H.S end 2049 4043 a Black Fz(Section)g(4)p Black 2412 3981 a SDict begin H.R end 2412 3981 a 2412 4043 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (section.4) cvn H.B /ANN pdfmark end 2412 4043 a Fz(.)332 4206 y(The)c Fp(adouble)g Fz(default)g(constructor)g(sets)g(to)h(zero)g(the) f(asso)s(ciated)h(v)-5 b(alue.)40 b(This)26 b(implies)h(a)h(certain)191 4319 y(o)m(v)m(erhead)34 b(that)g(ma)m(y)g(seem)f(unnecessary)f(when)h (no)g(initial)h(v)-5 b(alue)33 b(is)g(actually)i(giv)m(en,)g(ho)m(w)m (ev)m(er,)h(the)191 4432 y(implicit)43 b(initialization)h(of)e(arra)m (ys)g(from)f(a)h(partial)h(v)-5 b(alue)42 b(list)g(is)g(the)g(only)g (legitimate)i(construct)191 4545 y(\(kno)m(wn)30 b(to)h(us\))f(that)h (requires)f(this)g(b)s(eha)m(vior.)41 b(An)30 b(arra)m(y)h(instan)m (tiation)h(suc)m(h)f(as)p Black Black 1630 4824 a Fp(double)g(x[3]=)p Fn(f)p Fp(2.0)p Fn(g)p Fp(;)191 5104 y Fz(will)26 b(initialize)i Fp(x[0])e Fz(to)g Fp(2.0)h Fz(and)d(initialize)k(\(implicitly\))g(the)d (remaining)h(arra)m(y)g(elemen)m(ts)h Fp(x[1])f Fz(and)f Fp(x[2])191 5217 y Fz(to)j Fp(0.0)p Fz(.)40 b(According)28 b(to)f(the)h(C++)d(standard)i(the)g(arra)m(y)g(elemen)m(t)h (construction)g(of)f(the)g(t)m(yp)s(e)g(c)m(hanged)191 5330 y(instan)m(tiation)p Black Black eop end %%Page: 19 19 TeXDict begin 19 18 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.19) cvn /DEST pdfmark end 183 199 a Black 3700 307 a Fz(19)p Black Black Black 1608 606 a Fp(adouble)31 b(x[3]=)p Fn(f)p Fp(2.0)p Fn(g)p Fp(;)191 855 y Fz(will)41 b(use)g(the)g(constructor)h Fp(adouble\(const)g(double&\);)47 b Fz(for)41 b Fp(x[0])h Fz(passing)f(in)f Fp(2.0)i Fz(but)f(will)g (call)i(the)191 968 y Fp(adouble)23 b Fz(default)g(constructor)g Fp(x[1])g Fz(and)f Fp(x[2])i Fz(lea)m(ving)g(these)f(arra)m(y)g(elemen) m(ts)h(uninitialized)g Fq(unless)f Fz(the)191 1081 y(default)28 b(constructor)g(do)s(es)f(implemen)m(t)h(the)g(initialization)i(to)e (zero.)41 b(The)27 b(C++)f(constructor)i(syn)m(tax)191 1194 y(do)s(es)k(not)h(pro)m(vide)g(a)g(means)f(to)h(distinguish)f (this)h(implicit)g(initialization)j(from)c(the)g(declaration)j(of)191 1307 y(an)m(y)21 b(simple)h(uninitialized)f(v)-5 b(ariable.)39 b(If)21 b(the)g(user)f(can)i(ascertain)g(the)f(absence)h(of)f(arra)m(y) h(instan)m(tiations)191 1420 y(suc)m(h)29 b(as)h(the)f(ab)s(o)m(v)m(e)i (then)e(one)g(can)h(con\014gure)f(ADOL-C)h(with)f(the)g Fs(--disable-stdczero)c Fz(option)30 b(,)191 1533 y(see)338 1533 y SDict begin H.S end 338 1533 a Black Fz(Section)h(8.1)p Black 772 1470 a SDict begin H.R end 772 1470 a 772 1533 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.8.1) cvn H.B /ANN pdfmark end 772 1533 a Fz(,)g(to)g(a)m(v)m(oid)h(the)e (o)m(v)m(erhead)i(of)e(these)h(initializations.)191 1705 y SDict begin H.S end 191 1705 a 191 1705 a SDict begin 13.6 H.A end 191 1705 a 191 1705 a SDict begin [/View [/XYZ H.V]/Dest (section.3) cvn /DEST pdfmark end 191 1705 a 182 x FD(3)135 b(Easy-T)-11 b(o-Use)45 b(Driv)l(ers)191 2143 y Fz(F)-8 b(or)27 b(the)g(con)m(v)m(enience)h(of)f(the)f(user,)h (ADOL-C)f(pro)m(vides)h(sev)m(eral)g(easy-to-use)h(driv)m(ers)e(that)h (compute)191 2256 y(the)42 b(most)h(frequen)m(tly)f(required)f(deriv)-5 b(ativ)m(e)44 b(ob)5 b(jects.)76 b(Throughout,)44 b(w)m(e)f(assume)e (that)i(after)g(the)191 2369 y(execution)e(of)f(an)g(activ)m(e)i (section,)i(the)c(corresp)s(onding)f(tap)s(e)h(with)g(the)g(iden)m (ti\014er)g Fp(tag)g Fz(con)m(tains)h(a)191 2482 y(detailed)34 b(record)f(of)g(the)g(computational)i(pro)s(cess)e(b)m(y)g(whic)m(h)f (the)h(\014nal)g(v)-5 b(alues)34 b Fr(y)h Fz(of)e(the)h(dep)s(enden)m (t)191 2595 y(v)-5 b(ariables)28 b(w)m(ere)g(obtained)f(from)g(the)h(v) -5 b(alues)27 b Fr(x)g Fz(of)h(the)f(indep)s(enden)m(t)f(v)-5 b(ariables.)41 b(W)-8 b(e)28 b(will)g(denote)g(this)191 2708 y(functional)j(relation)g(b)s(et)m(w)m(een)g(the)g(input)e(v)-5 b(ariables)31 b Fr(x)g Fz(and)e(the)i(output)f(v)-5 b(ariables)31 b Fr(y)i Fz(b)m(y)1309 2924 y Fr(F)38 b Fz(:)26 b(I)-20 b(R)1535 2886 y Fh(n)1607 2924 y Fn(7!)25 b Fz(I)-20 b(R)1803 2886 y Fh(m)1869 2924 y Fr(;)197 b(x)26 b Fn(!)f Fr(F)13 b Fz(\()p Fr(x)p Fz(\))26 b Fn(\021)f Fr(y)s(:)191 3140 y Fz(The)30 b(return)g(v)-5 b(alue)31 b(of)g(all)g(driv)m(ers)g (presen)m(ted)f(in)h(this)f(section)i(indicate)g(the)f(v)-5 b(alidit)m(y)32 b(of)f(the)g(tap)s(e)f(as)191 3253 y(explained)38 b(in)718 3253 y SDict begin H.S end 718 3253 a Black Fz(Section)31 b(1.7)p Black 1153 3190 a SDict begin H.R end 1153 3190 a 1153 3253 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.1.7) cvn H.B /ANN pdfmark end 1153 3253 a Fz(.)62 b(The)37 b(presen)m(ted)h(driv)m(ers)f(are)h(all)h(C)e (functions)g(and)g(therefore)h(can)g(b)s(e)191 3365 y(used)29 b(within)g(C)g(and)g(C++)f(programs.)40 b(Some)30 b(F)-8 b(ortran-callable)33 b(companions)c(can)h(b)s(e)f(found)f(in)i(the)191 3478 y(appropriate)g(header)h(\014les.)191 3642 y SDict begin H.S end 191 3642 a 191 3642 a SDict begin 13.6 H.A end 191 3642 a 191 3642 a SDict begin [/View [/XYZ H.V]/Dest (subsection.3.1) cvn /DEST pdfmark end 191 3642 a 148 x FA(3.1)112 b(Driv)m(ers)38 b(for)f(Optimization)h(and)h(Nonlinear)f (Equations)191 4015 y Fz(The)30 b(driv)m(ers)f(pro)m(vided)h(for)g (solving)h(optimization)h(problems)d(and)h(nonlinear)g(equations)h(are) f(proto-)191 4128 y(t)m(yp)s(ed)h(in)g(the)g(header)g(\014le)h Fs()p Fz(,)26 b(whic)m(h)31 b(is)g(included)g(automatically)j(b)m(y)191 4241 y(the)d(global)g (header)f(\014le)h Fs()26 b Fz(\(see)1983 4241 y SDict begin H.S end 1983 4241 a Black Fz(Section)32 b(8.3)p Black 2418 4179 a SDict begin H.R end 2418 4179 a 2418 4241 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.8.3) cvn H.B /ANN pdfmark end 2418 4241 a Fz(\).)332 4404 y(The)37 b(routine)h Fp(function)g Fz(allo)m(ws)h(to)g(ev)-5 b(aluate)39 b(the)f(desired)g(function)f(from)g(the)h(tap)s(e)g (instead)h(of)191 4516 y(executing)32 b(the)e(corresp)s(onding)f (source)i(co)s(de:)p Black Black 491 4765 a Fp(int)f (function\(tag,m,n,x,y\))491 4878 y(sho)m(rt)h(int)f(tag;)690 b Fz(//)31 b(tap)s(e)g(iden)m(ti\014cation)491 4991 y Fp(int)f(m;)959 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(dep)s(enden)m(t)f (v)-5 b(ariables)31 b Fr(m)491 5104 y Fp(int)f(n;)984 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fr(n)491 5217 y Fp(double)g(x[n];)743 b Fz(//)31 b(indep)s(enden)m(t)f(v)m(ector)i Fr(x)491 5330 y Fp(double)f(y[m];)718 b Fz(//)31 b(dep)s(enden)m(t)f(v)m(ector)i Fr(y)c Fz(=)d Fr(F)13 b Fz(\()p Fr(x)p Fz(\))p Black Black eop end %%Page: 20 20 TeXDict begin 20 19 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.20) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fz(20)2300 b Ft(3)92 b(EASY-TO-USE)29 b(DRIVERS)p Black 191 606 a Fz(If)23 b(the)h(original)i(ev)-5 b(aluation)25 b(program)f(is)g(a)m(v)-5 b(ailable)26 b(this)e(double)f(v)m(ersion)h (should)f(b)s(e)h(used)f(to)h(compute)191 719 y(the)31 b(function)f(v)-5 b(alue)30 b(in)g(order)g(to)h(a)m(v)m(oid)h(the)f(in) m(terpretativ)m(e)i(o)m(v)m(erhead.)332 882 y(F)-8 b(or)30 b(the)g(calculation)h(of)f(whole)f(deriv)-5 b(ativ)m(e)31 b(v)m(ectors)g(and)e(matrices)h(up)f(to)h(order)e(2)i(there)g(are)g (the)191 995 y(follo)m(wing)i(pro)s(cedures:)p Black Black 491 1209 a Fp(int)e(gradient\(tag,n,x,g\))491 1322 y(sho)m(rt)h(int)f(tag;)690 b Fz(//)31 b(tap)s(e)g(iden)m(ti\014cation) 491 1435 y Fp(int)f(n;)984 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s (enden)m(t)f(v)-5 b(ariables)31 b Fr(n)f Fz(and)g Fr(m)25 b Fz(=)g(1)491 1548 y Fp(double)31 b(x[n];)743 b Fz(//)31 b(indep)s(enden)m(t)f(v)m(ector)i Fr(x)491 1661 y Fp(double)f(g[n];)740 b Fz(//)31 b(resulting)g(gradien)m(t)g Fn(r)p Fr(F)13 b Fz(\()p Fr(x)p Fz(\))p Black Black 491 1896 a Fp(int)30 b(jacobian\(tag,m,n,x,J\))491 2009 y(sho)m(rt)h(int)f(tag;)690 b Fz(//)31 b(tap)s(e)g(iden)m(ti\014cation)491 2122 y Fp(int)f(m;)959 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(dep)s(enden)m(t)f (v)-5 b(ariables)31 b Fr(m)491 2235 y Fp(int)f(n;)984 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fr(n)491 2348 y Fp(double)g(x[n];)743 b Fz(//)31 b(indep)s(enden)m(t)f(v)m(ector)i Fr(x)491 2461 y Fp(double)f(J[m][n];)618 b Fz(//)31 b(resulting)g(Jacobian)g Fr(F)2626 2428 y Fl(0)2649 2461 y Fz(\()p Fr(x)p Fz(\))p Black Black 491 2696 a Fp(int)f(hessian\(tag,n,x,H\))491 2809 y(sho)m(rt)h(int)f(tag;)690 b Fz(//)31 b(tap)s(e)g(iden)m (ti\014cation)491 2922 y Fp(int)f(n;)984 b Fz(//)31 b(n)m(um)m(b)s(er)f (of)g(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fr(n)f Fz(and)g Fr(m)25 b Fz(=)g(1)491 3035 y Fp(double)31 b(x[n];)743 b Fz(//)31 b(indep)s(enden)m(t)f(v)m(ector)i Fr(x)491 3148 y Fp(double)f(H[n][n];)622 b Fz(//)31 b(resulting)g(Hessian)g (matrix)f Fn(r)2878 3115 y FC(2)2918 3148 y Fr(F)13 b Fz(\()p Fr(x)p Fz(\))191 3383 y(The)28 b(driv)m(er)g(routine)h Fp(hessian)f Fz(computes)h(only)f(the)h(lo)m(w)m(er)h(half)e(of)h Fn(r)2593 3350 y FC(2)2632 3383 y Fr(f)10 b Fz(\()p Fr(x)2774 3397 y FC(0)2813 3383 y Fz(\))29 b(so)g(that)g(all)g(v)-5 b(alues)29 b Fp(H[i][j])191 3496 y Fz(with)37 b Fr(j)k(>)36 b(i)h Fz(of)g Fp(H)g Fz(allo)s(cated)i(as)e(a)h(square)e(arra)m(y)i (remain)e(un)m(touc)m(hed)h(during)f(the)h(call)h(of)f Fp(hessian)p Fz(.)191 3609 y(Hence)31 b(only)g Fr(i)20 b Fz(+)g(1)31 b Fp(double)p Fz(s)f(need)h(to)g(b)s(e)e(allo)s(cated)k (starting)e(at)g(the)g(p)s(osition)f Fp(H[i])p Fz(.)332 3771 y(T)-8 b(o)35 b(use)g(the)g(full)f(capabilit)m(y)j(of)e(automatic) i(di\013eren)m(tiation)f(when)e(the)h(pro)s(duct)e(of)i(deriv)-5 b(ativ)m(es)191 3884 y(with)43 b(certain)h(w)m(eigh)m(t)g(v)m(ectors)h (or)e(directions)g(are)g(needed,)j(ADOL-C)e(o\013ers)f(the)g(follo)m (wing)h(four)191 3997 y(driv)m(ers:)p Black Black 491 4212 a Fp(int)30 b(vec)p 750 4212 28 4 v 33 w(jac\(tag,m,n,rep)s (eat,x,u,z\))491 4325 y(sho)m(rt)h(int)f(tag;)690 b Fz(//)31 b(tap)s(e)g(iden)m(ti\014cation)491 4438 y Fp(int)f(m;)959 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(dep)s(enden)m(t)f(v)-5 b(ariables)31 b Fr(m)491 4551 y Fp(int)f(n;)984 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fr(n)491 4664 y Fp(int)f(rep)s(eat;)793 b Fz(//)31 b(indicate)h(rep)s(eated)e(call)i(at)f(same)g(argumen)m(t)491 4776 y Fp(double)g(x[n];)743 b Fz(//)31 b(indep)s(enden)m(t)f(v)m (ector)i Fr(x)491 4889 y Fp(double)f(u[m];)713 b Fz(//)31 b(range)g(w)m(eigh)m(t)h(v)m(ector)g Fr(u)491 5002 y Fp(double)f(z[n];)745 b Fz(//)31 b(result)g Fr(z)e Fz(=)c Fr(u)2273 4969 y Fh(T)2328 5002 y Fr(F)2399 4969 y Fl(0)2423 5002 y Fz(\()p Fr(x)p Fz(\))191 5217 y(If)i(a)g(nonzero)h(v)-5 b(alue)27 b(of)h(the)f(parameter)h Fp(rep)s(eat)f Fz(indicates)h(that)g (the)f(routine)g Fp(vec)p 3029 5217 V 34 w(jac)g Fz(has)g(b)s(een)g (called)191 5330 y(at)40 b(the)f(same)h(argumen)m(t)g(immediately)g(b)s (efore,)h(the)f(in)m(ternal)g(forw)m(ard)e(mo)s(de)h(ev)-5 b(aluation)41 b(will)e(b)s(e)p Black Black eop end %%Page: 21 21 TeXDict begin 21 20 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.21) cvn /DEST pdfmark end 183 199 a Black 191 307 a Ft(3.1)92 b(Driv)m(ers)31 b(for)f(Optimization)i(and)d(Nonlinear)i (Equations)1298 b Fz(21)p Black 191 606 a(skipp)s(ed)36 b(and)g(only)i(rev)m(erse)g(mo)s(de)f(ev)-5 b(aluation)38 b(with)f(the)h(corresp)s(onding)e(argumen)m(ts)i(is)f(executed)191 719 y(resulting)30 b(in)h(a)f(reduced)g(computational)i(complexit)m(y)g (of)f(the)f(function)g Fp(vec)p 2892 719 28 4 v 34 w(jac)p Fz(.)p Black Black 491 962 a Fp(int)g(jac)p 736 962 V 33 w(vec\(tag,m,n,x,v,z\))491 1075 y(sho)m(rt)h(int)f(tag;)690 b Fz(//)31 b(tap)s(e)g(iden)m(ti\014cation)491 1187 y Fp(int)f(m;)959 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(dep)s(enden)m(t)f (v)-5 b(ariables)31 b Fr(m)491 1300 y Fp(int)f(n;)984 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fr(n)491 1413 y Fp(double)g(x[n];)743 b Fz(//)31 b(indep)s(enden)m(t)f(v)m(ector)i Fr(x)491 1526 y Fp(double)f(v[n];)743 b Fz(//)31 b(tangen)m(t)h(v)m(ector)g Fr(v)491 1639 y Fp(double)f(z[m];)720 b Fz(//)31 b(result)g Fr(z)e Fz(=)c Fr(F)2292 1606 y Fl(0)2316 1639 y Fz(\()p Fr(x)p Fz(\))p Fr(v)p Black Black 491 1908 a Fp(int)30 b(hess)p 785 1908 V 33 w(vec\(tag,n,x,v,z\))491 2021 y(sho)m(rt)h(int)f(tag;)690 b Fz(//)31 b(tap)s(e)g(iden)m(ti\014cation) 491 2134 y Fp(int)f(n;)984 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s (enden)m(t)f(v)-5 b(ariables)31 b Fr(n)491 2247 y Fp(double)g(x[n];)743 b Fz(//)31 b(indep)s(enden)m(t)f(v)m(ector)i Fr(x)491 2360 y Fp(double)f(v[n];)743 b Fz(//)31 b(tangen)m(t)h(v)m(ector)g Fr(v)491 2473 y Fp(double)f(z[n];)745 b Fz(//)31 b(result)g Fr(z)e Fz(=)c Fn(r)2297 2440 y FC(2)2336 2473 y Fr(F)13 b Fz(\()p Fr(x)p Fz(\))p Fr(v)p Black Black 491 2742 a Fp(int)30 b(hess)p 785 2742 V 33 w(mat\(tag,n,p,x,V,Z\))491 2855 y(sho)m(rt)h(int)f(tag;)690 b Fz(//)31 b(tap)s(e)g(iden)m (ti\014cation)491 2968 y Fp(int)f(n;)984 b Fz(//)31 b(n)m(um)m(b)s(er)f (of)g(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fr(n)491 3081 y Fp(int)f(p;)984 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(columns)g (in)g Fr(V)491 3194 y Fp(double)h(x[n];)743 b Fz(//)31 b(indep)s(enden)m(t)f(v)m(ector)i Fr(x)491 3307 y Fp(double)f(V[n][p];) 625 b Fz(//)31 b(tangen)m(t)h(matrix)f Fr(V)491 3420 y Fp(double)g(Z[n][p];)630 b Fz(//)31 b(result)g Fr(Z)h Fz(=)25 b Fn(r)2320 3387 y FC(2)2359 3420 y Fr(F)13 b Fz(\()p Fr(x)p Fz(\))p Fr(V)p Black Black 491 3689 a Fp(int)30 b(lagra)p 814 3689 V 32 w(hess)p 1003 3689 V 33 w(vec\(tag,m,n,x,v,u,h\))491 3802 y(sho)m(rt)h(int)f(tag;)690 b Fz(//)31 b(tap)s(e)g(iden)m(ti\014cation)491 3915 y Fp(int)f(m;)959 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(dep)s(enden)m(t)f (v)-5 b(ariables)31 b Fr(m)491 4028 y Fp(int)f(n;)984 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fr(n)491 4141 y Fp(double)g(x[n];)743 b Fz(//)31 b(indep)s(enden)m(t)f(v)m(ector)i Fr(x)491 4254 y Fp(double)f(v[n];)743 b Fz(//)31 b(tangen)m(t)h(v)m(ector)g Fr(v)491 4366 y Fp(double)f(u[m];)713 b Fz(//)31 b(range)g(w)m(eigh)m (t)h(v)m(ector)g Fr(u)491 4479 y Fp(double)f(h[n];)738 b Fz(//)31 b(result)g Fr(h)25 b Fz(=)g Fr(u)2279 4446 y Fh(T)2334 4479 y Fn(r)2410 4446 y FC(2)2450 4479 y Fr(F)13 b Fz(\()p Fr(x)p Fz(\))p Fr(v)191 4749 y Fz(The)26 b(next)g(pro)s(cedure)f(allo)m(ws)i(the)f(user)g(to)h(p)s(erform)d (Newton)j(steps)f(only)g(ha)m(ving)g(the)h(corresp)s(onding)191 4862 y(tap)s(e)j(at)i(hand:)p Black Black 491 5104 a Fp(int)e(jac)p 736 5104 V 33 w(solv\(tag,n,x,b,mo)s(de\))491 5217 y(sho)m(rt)h(int)f(tag;)690 b Fz(//)31 b(tap)s(e)g(iden)m (ti\014cation)491 5330 y Fp(int)f(n;)984 b Fz(//)31 b(n)m(um)m(b)s(er)f (of)g(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fr(n)p Black Black eop end %%Page: 22 22 TeXDict begin 22 21 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.22) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fz(22)2300 b Ft(3)92 b(EASY-TO-USE)29 b(DRIVERS)p Black 491 606 a Fp(double)i(x[n];)743 b Fz(//)31 b(indep)s(enden)m(t)f(v)m (ector)i Fr(x)e Fz(as)491 719 y Fp(double)h(b[n];)738 b Fz(//)31 b(in:)41 b(righ)m(t-hand)30 b(side)g(b,)g(out:)41 b(result)31 b Fr(w)i Fz(of)d Fr(F)13 b Fz(\()p Fr(x)p Fz(\))p Fr(w)29 b Fz(=)c Fr(b)491 832 y Fp(int)30 b(mo)s(de;)824 b Fz(//)31 b(option)g(to)g(c)m(ho)s(ose)h(di\013eren)m(t)f(solv)m(ers) 191 1047 y(On)i(en)m(try)-8 b(,)35 b(parameter)g Fp(b)e Fz(of)h(the)g(routine)g Fp(jac)p 1821 1047 28 4 v 33 w(solv)g Fz(con)m(tains)h(the)f(righ)m(t-hand)f(side)h(of)g(the)g (equation)191 1160 y Fr(F)13 b Fz(\()p Fr(x)p Fz(\))p Fr(w)28 b Fz(=)d Fr(b)i Fz(to)g(b)s(e)f(solv)m(ed.)40 b(On)26 b(exit,)i Fp(b)e Fz(equals)h(the)g(solution)g Fr(w)i Fz(of)d(this)h(equation.)40 b(If)26 b Fp(mo)s(de)h Fz(=)f(0)h(only)191 1273 y(the)j(Jacobian)h(of)f(the)g(function)f(giv)m (en)i(b)m(y)f(the)g(tap)s(e)g(lab)s(eled)g(with)g Fp(tag)g Fz(is)g(pro)m(vided)f(in)m(ternally)-8 b(.)42 b(The)191 1386 y(LU-factorization)35 b(of)d(this)g(Jacobian)g(is)g(computed)g (for)f Fp(mo)s(de)i Fz(=)e(1.)46 b(The)31 b(solution)i(of)f(the)g (equation)191 1499 y(is)f(calculated)h(if)f Fp(mo)s(de)g Fz(=)f(2.)42 b(Hence,)32 b(it)f(is)g(p)s(ossible)f(to)i(compute)f(the)f (LU-factorization)k(only)d(once.)191 1612 y(Then)43 b(the)h(equation)g (can)g(b)s(e)g(solv)m(ed)g(for)g(sev)m(eral)h(righ)m(t-hand)e(sides)h Fr(b)g Fz(without)g(calculating)i(the)191 1725 y(Jacobian)31 b(and)f(its)h(factorization)i(again.)332 1888 y(If)d(the)g(original)i (ev)-5 b(aluation)31 b(co)s(de)g(of)f(a)h(function)f(con)m(tains)h (neither)g(quadratures)e(nor)h(branc)m(hes,)191 2000 y(all)46 b(driv)m(ers)e(describ)s(ed)g(ab)s(o)m(v)m(e)j(can)e(b)s(e)f (used)g(to)i(ev)-5 b(aluate)47 b(deriv)-5 b(ativ)m(es)46 b(at)g(an)m(y)f(argumen)m(t)h(in)e(its)191 2113 y(domain.)39 b(The)27 b(same)g(still)h(applies)f(if)g(there)g(are)g(no)g(user)f (de\014ned)g(quadratures)g(and)g(all)i(comparisons)191 2226 y(in)m(v)m(olving)h Fp(adouble)p Fz(s)e(ha)m(v)m(e)h(the)f(same)h (result)f(as)g(during)f(taping.)40 b(If)27 b(this)g(assumption)f(is)i (falsely)g(made)191 2339 y(all)34 b(driv)m(ers)f(while)g(in)m(ternally) h(calling)h(the)e(forw)m(ard)g(mo)s(de)g(ev)-5 b(aluation)34 b(will)g(return)e(the)h(v)-5 b(alue)34 b(-1)g(or)191 2452 y(-2)d(as)g(already)g(sp)s(eci\014ed)e(in)1202 2452 y SDict begin H.S end 1202 2452 a Black Fz(Section)i(1.7)p Black 1637 2390 a SDict begin H.R end 1637 2390 a 1637 2452 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.1.7) cvn H.B /ANN pdfmark end 1637 2452 a Fz(.)191 2593 y SDict begin H.S end 191 2593 a 191 2593 a SDict begin 13.6 H.A end 191 2593 a 191 2593 a SDict begin [/View [/XYZ H.V]/Dest (subsection.3.2) cvn /DEST pdfmark end 191 2593 a 148 x FA(3.2)112 b(Driv)m(ers)38 b(for)f(Ordinary)h(Di\013eren)m (tial)h(Equations)191 2963 y Fz(When)30 b Fr(F)43 b Fz(is)31 b(the)f(righ)m(t-hand)h(side)f(of)h(an)f(\(autonomous\))h(ordinary)f (di\013eren)m(tial)i(equation)1654 3141 y Fr(x)1706 3103 y Fl(0)1730 3141 y Fz(\()p Fr(t)p Fz(\))51 b(=)f Fr(F)13 b Fz(\()p Fr(x)p Fz(\()p Fr(t)p Fz(\)\))p Fr(;)191 3318 y Fz(w)m(e)31 b(m)m(ust)f(ha)m(v)m(e)h Fr(m)26 b Fz(=)e Fr(n)p Fz(.)41 b(Along)31 b(an)m(y)f(solution)h(path)f Fr(x)p Fz(\()p Fr(t)p Fz(\))h(its)g(T)-8 b(a)m(ylor)31 b(co)s(e\016cien)m(ts)h Fr(x)3183 3332 y Fh(j)3250 3318 y Fz(at)f(some)g(time,)191 3431 y(e.g.,)h Fr(t)25 b Fz(=)g(0,)31 b(m)m(ust)f(satisfy)h(the)g(relation)1692 3642 y Fr(x)1744 3656 y Fh(i)p FC(+1)1888 3642 y Fz(=)2065 3581 y(1)p 1994 3621 188 4 v 1994 3705 a(1)20 b(+)g Fr(i)2192 3642 y(y)2237 3656 y Fh(i)2264 3642 y Fr(:)191 3855 y Fz(with)30 b(the)h Fr(y)600 3869 y Fh(j)666 3855 y Fz(the)g(T)-8 b(a)m(ylor)31 b(co)s(e\016cien)m(ts)h(of)f(its)g(deriv)-5 b(ativ)m(e)31 b Fr(y)s Fz(\()p Fr(t)p Fz(\))26 b(=)f Fr(x)2540 3822 y Fl(0)2563 3855 y Fz(\()p Fr(t)p Fz(\),)31 b(namely)-8 b(,)1402 4033 y Fr(y)s Fz(\()p Fr(t)p Fz(\))51 b Fn(\021)f Fr(F)13 b Fz(\()p Fr(x)p Fz(\()p Fr(t)p Fz(\)\))52 b(:)e Fr(I)-23 b(R)51 b Fn(7!)g Fr(I)-23 b(R)2514 3996 y Fh(m)191 4211 y Fz(de\014ned)27 b(b)m(y)h(an)g(autonomous)h(righ)m (t-hand)f(side)g Fr(F)42 b Fz(recorded)28 b(on)g(the)g(tap)s(e.)41 b(Using)28 b(this)g(relation,)i(one)191 4324 y(can)e(generate)i(the)f (T)-8 b(a)m(ylor)29 b(co)s(e\016cien)m(ts)h Fr(x)1665 4338 y Fh(i)1693 4324 y Fz(,)f Fr(i)d Fn(\024)f Fr(deg)s Fz(,)30 b(recursiv)m(ely)f(from)e(the)i(curren)m(t)f(p)s(oin)m(t)g Fr(x)3509 4338 y FC(0)3549 4324 y Fz(.)40 b(This)191 4437 y(task)31 b(is)f(ac)m(hiev)m(ed)i(b)m(y)f(the)f(driv)m(er)g (routine)h Fp(fo)m(ro)s(de)g Fz(de\014ned)e(as)i(follo)m(ws:)p Black Black 491 4653 a Fp(int)f(fo)m(ro)s(de\(tag,n,tau,dol,deg,X\))491 4765 y(sho)m(rt)h(int)f(tag;)690 b Fz(//)31 b(tap)s(e)g(iden)m (ti\014cation)491 4878 y Fp(int)f(n;)984 b Fz(//)31 b(n)m(um)m(b)s(er)f (of)g(state)i(v)-5 b(ariables)31 b Fr(n)491 4991 y Fp(double)g(tau;)760 b Fz(//)31 b(scaling)h(parameter)491 5104 y Fp(int)e(dol;)917 b Fz(//)31 b(degree)h(on)e(previous)g(call)491 5217 y Fp(int)g(deg;)899 b Fz(//)31 b(degree)h(on)e(curren)m(t)g(call)491 5330 y Fp(double)h(X[n][deg+1];)424 b Fz(//)31 b(T)-8 b(a)m(ylor)32 b(co)s(e\016cien)m(t)g(v)m(ector)g Fr(X)p Black Black eop end %%Page: 23 23 TeXDict begin 23 22 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.23) cvn /DEST pdfmark end 183 199 a Black 191 307 a Ft(3.2)92 b(Driv)m(ers)31 b(for)f(Ordinary)f(Di\013eren)m(tial)k (Equations)1581 b Fz(23)p Black 191 606 a(If)29 b Fp(dol)g Fz(is)h(p)s(ositiv)m(e,)g(it)g(is)g(assumed)e(that)i Fp(fo)m(ro)s(de)h Fz(has)e(b)s(een)f(called)j(b)s(efore)e(at)h(the)f (same)h(p)s(oin)m(t)g(so)f(that)191 719 y(all)i(T)-8 b(a)m(ylor)32 b(co)s(e\016cien)m(t)g(v)m(ectors)g(up)d(to)i(the)g Fp(dol)p Fz(-th)f(are)h(already)g(correct.)332 882 y(Subsequen)m(tly)c (one)h(ma)m(y)g(call)g(the)g(driv)m(er)f(routine)h Fp(reverse)g Fz(or)g(corresp)s(onding)e(lo)m(w)j(lev)m(el)g(routines)191 995 y(as)34 b(explained)f(in)h(the)984 995 y SDict begin H.S end 984 995 a Black Fz(Section)d(5)p Black 1348 932 a SDict begin H.R end 1348 932 a 1348 995 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (section.5) cvn H.B /ANN pdfmark end 1348 995 a 33 w Fz(and)1561 995 y SDict begin H.S end 1561 995 a Black Fz(Section)g(4)p Black 1925 932 a SDict begin H.R end 1925 932 a 1925 995 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (section.4) cvn H.B /ANN pdfmark end 1925 995 a Fz(,)j(resp)s(ectiv)m(ely)-8 b(,)37 b(to)d(compute)g(the)f(family)h(of)g(square)191 1108 y(matrices)d Fp(Z[n][n][deg])i Fz(de\014ned)c(b)m(y)1583 1319 y Fr(Z)1645 1333 y Fh(j)1707 1319 y Fn(\021)c Fr(U)1890 1257 y(@)5 b(y)1988 1271 y Fh(j)p 1885 1298 145 4 v 1885 1381 a Fr(@)g(x)1990 1395 y FC(0)2065 1319 y Fn(2)25 b Fr(I)-23 b(R)2237 1281 y Fh(q)r Fl(\002)p Fh(n)2373 1319 y Fr(;)191 1526 y Fz(with)30 b Fp(double**)i(U)p Fz(=)24 b Fr(I)966 1540 y Fh(n)1043 1526 y Fz(the)31 b(iden)m(tit)m(y)h(matrix)f(of)f(order)g Fp(n)p Fz(.)332 1689 y(F)-8 b(or)44 b(the)e(n)m(umerical)i(solutions)f(of)g(ordinary)e (di\013eren)m(tial)k(equations,)h(one)d(ma)m(y)g(also)h(wish)e(to)191 1801 y(calculate)33 b(the)d(Jacobians)1142 1801 y SDict begin H.S end 1142 1801 a 1142 1801 a SDict begin 13.6 H.A end 1142 1801 a 1142 1801 a SDict begin [/View [/XYZ H.V]/Dest (equation.3.1) cvn /DEST pdfmark end 1142 1801 a 1511 1935 a Fr(B)1580 1949 y Fh(j)1667 1935 y Fn(\021)1798 1873 y Fz(d)p Fr(x)1901 1887 y Fh(j)t FC(+1)p 1798 1914 230 4 v 1842 1997 a Fz(d)o Fr(x)1944 2011 y FC(0)2088 1935 y Fn(2)50 b Fr(I)-23 b(R)2286 1897 y Fh(n)p Fl(\002)p Fh(n)2445 1935 y Fr(;)1205 b Fz(\(1\))191 2110 y(whic)m(h)38 b(exist)g(pro)m(vided)g Fr(F)51 b Fz(is)38 b(su\016cien)m(tly)g(smo)s (oth.)64 b(These)37 b(matrices)i(can)f(b)s(e)g(obtained)g(from)g(the) 191 2223 y(partial)g(deriv)-5 b(ativ)m(es)39 b Fr(@)5 b(y)1049 2237 y Fh(i)1078 2223 y Fr(=@)g(x)1228 2237 y FC(0)1305 2223 y Fz(b)m(y)38 b(an)f(appropriate)h(v)m(ersion)g(of)g (the)g(c)m(hain)g(rule.)62 b(T)-8 b(o)39 b(compute)f(the)191 2336 y(total)29 b(deriv)-5 b(ativ)m(es)29 b Fr(B)h Fz(=)25 b(\()p Fr(B)1154 2350 y Fh(j)1190 2336 y Fz(\))1225 2351 y FC(0)p Fl(\024)p Fh(j)t()o Fz(.)55 b(The)37 b(global)i(header)e(\014le)g Fs()c Fz(includes)k(this) 191 4941 y(\014le)30 b(automatically)-8 b(,)34 b(see)1075 4941 y SDict begin H.S end 1075 4941 a Black Fz(Section)d(8.3)p Black 1510 4879 a SDict begin H.R end 1510 4879 a 1510 4941 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.8.3) cvn H.B /ANN pdfmark end 1510 4941 a Fz(.)332 5104 y(An)21 b(example)i(program)e(using)h(the)f(pro)s(cedures)g Fp(fo)m(ro)s(de)i Fz(and)e Fp(acco)s(de)h Fz(together)h(with)f(more)g (detailed)191 5217 y(information)32 b(ab)s(out)g(the)f(co)s(ding)h(can) g(b)s(e)f(found)g(in)2053 5217 y SDict begin H.S end 2053 5217 a Black Fz(Section)h(9.4)p Black 2488 5155 a SDict begin H.R end 2488 5155 a 2488 5217 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.9.4) cvn H.B /ANN pdfmark end 2488 5217 a Fz(.)45 b(The)31 b(corresp)s(onding)g(source)g(co)s(de)191 5330 y Fs(odexam.cpp)d Fz(is)i(con)m(tained)i(in)e(the)g(sub)s (directory)f Fs(examples)p Fz(.)p Black Black eop end %%Page: 24 24 TeXDict begin 24 23 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.24) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fz(24)2300 b Ft(3)92 b(EASY-TO-USE)29 b(DRIVERS)p Black 191 515 a SDict begin H.S end 191 515 a 191 515 a SDict begin 13.6 H.A end 191 515 a 191 515 a SDict begin [/View [/XYZ H.V]/Dest (subsection.3.3) cvn /DEST pdfmark end 191 515 a 91 x FA(3.3)112 b(Driv)m(ers)38 b(for)f(Sparse)i(Jacobians)f(and) h(Sparse)f(Hessians)191 835 y Fz(Quite)49 b(often,)k(the)c(Jacobians)g (and)f(Hessians)h(that)g(ha)m(v)m(e)h(to)g(b)s(e)d(computed)i(are)g (sparse)f(matri-)191 948 y(ces.)h(Therefore,)34 b(ADOL-C)f(pro)m(vides) g(additionally)h(driv)m(ers)f(that)h(allo)m(w)g(the)g(exploitation)h (of)e(spar-)191 1061 y(sit)m(y)-8 b(.)93 b(The)47 b(exploitation)j(of)e (sparsit)m(y)g(is)f(frequen)m(tly)h(based)f(on)g Fq(gr)-5 b(aph)51 b(c)-5 b(oloring)49 b Fz(metho)s(ds,)i(dis-)191 1173 y(cussed)39 b(for)g(example)i(in)e([)1138 1173 y SDict begin H.S end 1138 1173 a Black Fz(3)p Black 1184 1115 a SDict begin H.R end 1184 1115 a 1184 1173 a SDict begin [/Color [0 1 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (cite.GeMaPo05) cvn H.B /ANN pdfmark end 1184 1173 a Fz(])h(and)f([)1460 1173 y SDict begin H.S end 1460 1173 a Black Fz(6)p Black 1505 1115 a SDict begin H.R end 1505 1115 a 1505 1173 a SDict begin [/Color [0 1 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (cite.GeTaMaPo07) cvn H.B /ANN pdfmark end 1505 1173 a Fz(].)69 b(The)39 b(sparse)h(driv)m(ers)f(of) h(ADOL-C)f(presen)m(ted)h(in)f(this)h(sec-)191 1286 y(tion)k(rely)f(on) g(the)h(the)f(coloring)i(pac)m(k)-5 b(age)45 b(ColP)m(ac)m(k)g(dev)m (elop)s(ed)f(b)m(y)f(the)g(authors)g(of)h([)3366 1286 y SDict begin H.S end 3366 1286 a Black Fz(3)p Black 3411 1228 a SDict begin H.R end 3411 1228 a 3411 1286 a SDict begin [/Color [0 1 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (cite.GeMaPo05) cvn H.B /ANN pdfmark end 3411 1286 a Fz(])g(and)f([)3695 1286 y SDict begin H.S end 3695 1286 a Black Fz(6)p Black 3740 1228 a SDict begin H.R end 3740 1228 a 3740 1286 a SDict begin [/Color [0 1 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (cite.GeTaMaPo07) cvn H.B /ANN pdfmark end 3740 1286 a Fz(].)191 1399 y(ColP)m(ac)m(k)35 b(is)f(not)f(directly)i(incorp)s(orated)e(in)g(ADOL-C,)h(and)f (therefore)h(needs)f(to)h(b)s(e)f(installed)h(sep-)191 1512 y(arately)46 b(to)f(use)f(the)h(sparse)f(driv)m(ers)g(describ)s (ed)g(here.)83 b(ColP)m(ac)m(k)46 b(is)f(a)m(v)-5 b(ailable)47 b(for)d(do)m(wnload)h(at)191 1625 y Fs(http://www.cscapes.org/c)o(olor) o(ing)o(page)o(/sof)o(twa)o(re.h)o(tm)p Fz(.)34 b(More)29 b(information)g(ab)s(out)g(the)f(re-)191 1738 y(quired)i(installation)i (of)e(ColP)m(ac)m(k)j(is)d(giv)m(en)h(in)1842 1738 y SDict begin H.S end 1842 1738 a Black Fz(Section)h(8)p Black 2206 1676 a SDict begin H.R end 2206 1676 a 2206 1738 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (section.8) cvn H.B /ANN pdfmark end 2206 1738 a Fz(.)191 2064 y SDict begin H.S end 191 2064 a 191 2064 a SDict begin 13.6 H.A end 191 2064 a 191 2064 a SDict begin [/View [/XYZ H.V]/Dest (section*.2) cvn /DEST pdfmark end 191 2064 a Fw(Sparse)j (Jacobians)h(and)f(Sparse)g(Hessians)191 2293 y Fz(T)-8 b(o)29 b(compute)f(the)h(en)m(tries)g(of)f(sparse)g(Jacobians)h(and)f (sparse)g(Hessians,)h(resp)s(ectiv)m(ely)-8 b(,)31 b(in)d(co)s (ordinate)191 2406 y(format)j(one)f(ma)m(y)h(use)f(the)h(driv)m(ers:)p Black Black 491 2666 a Fp(int)f(spa)m(rse)p 857 2666 28 4 v 33 w(jac\(tag,m,n,rep)s (eat,x,&nnz,&rind,&cind,&values,&options\))491 2779 y(sho)m(rt)h(int)f (tag;)690 b Fz(//)31 b(tap)s(e)g(iden)m(ti\014cation)491 2892 y Fp(int)f(m;)959 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(dep)s(enden) m(t)f(v)-5 b(ariables)31 b Fr(m)491 3005 y Fp(int)f(n;)984 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fr(n)491 3118 y Fp(int)f(rep)s(eat;)793 b Fz(//)31 b(indicate)h(rep)s(eated)e(call)i(at)f(same)g(argumen)m(t) 491 3230 y Fp(double)g(x[n];)743 b Fz(//)31 b(indep)s(enden)m(t)f(v)m (ector)i Fr(x)491 3343 y Fp(int)e(nnz;)897 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(nonzeros)491 3456 y Fp(unsigned)h(int)e (rind[nnz];)338 b Fz(//)31 b(ro)m(w)g(index)491 3569 y Fp(unsigned)g(int)e(cind[nnz];)329 b Fz(//)31 b(column)g(index)491 3682 y Fp(double)g(values[nnz];)468 b Fz(//)31 b(non-zero)g(v)-5 b(alues)491 3795 y Fp(int)30 b(options[4];)660 b Fz(//)31 b(arra)m(y)g(of)g(con)m(trol)h(parameters)p Black Black 491 4201 a Fp(int)e(spa)m(rse)p 857 4201 V 33 w(hess\(tag,n,rep)s (eat,x,&nnz,&rind,&cind,&values,&options\))491 4314 y(sho)m(rt)h(int)f (tag;)690 b Fz(//)31 b(tap)s(e)g(iden)m(ti\014cation)491 4427 y Fp(int)f(n;)984 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s (enden)m(t)f(v)-5 b(ariables)31 b Fr(n)f Fz(and)g Fr(m)25 b Fz(=)g(1)491 4540 y Fp(int)30 b(rep)s(eat;)793 b Fz(//)31 b(indicate)h(rep)s(eated)e(call)i(at)f(same)g(argumen)m(t)491 4653 y Fp(double)g(x[n];)743 b Fz(//)31 b(indep)s(enden)m(t)f(v)m (ector)i Fr(x)491 4765 y Fp(int)e(nnz;)897 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(nonzeros)491 4878 y Fp(unsigned)h(int)e (rind[nnz];)338 b Fz(//)31 b(ro)m(w)g(indices)491 4991 y Fp(unsigned)g(int)e(cind[nnz];)329 b Fz(//)31 b(column)g(indices)491 5104 y Fp(double)g(values[nnz];)468 b Fz(//)31 b(non-zero)g(v)-5 b(alues)491 5217 y Fp(int)30 b(options[2];)660 b Fz(//)31 b(arra)m(y)g(of)g(con)m(trol)h(parameters)p Black Black eop end %%Page: 25 25 TeXDict begin 25 24 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.25) cvn /DEST pdfmark end 183 199 a Black 191 307 a Ft(3.3)92 b(Driv)m(ers)31 b(for)f(Sparse)g(Jacobians)h(and)e(Sparse)h (Hessians)1338 b Fz(25)p Black 191 606 a(Once)44 b(more,)49 b(the)c(input)e(v)-5 b(ariables)46 b(are)f(the)g(iden)m(ti\014er)f(for) h(the)f(in)m(ternal)i(represen)m(tation)f Fp(tag)p Fz(,)k(if)191 719 y(required)29 b(the)h(n)m(um)m(b)s(er)e(of)i(dep)s(enden)m(ts)e Fp(m)p Fz(,)i(and)g(the)f(n)m(um)m(b)s(er)g(of)h(indep)s(enden)m(ts)e Fp(n)h Fz(for)h(a)g(consistency)191 832 y(c)m(hec)m(k.)40 b(F)-8 b(urthermore,)26 b(the)e(\015ag)h Fp(rep)s(eat=0)f Fz(indicates)h(that)g(the)f(functions)g(are)h(called)g(at)g(a)g(p)s (oin)m(t)f(with)191 945 y(a)35 b(new)f(sparsit)m(y)h(structure,)g (whereas)f Fp(rep)s(eat=1)h Fz(results)f(in)g(the)h(re-usage)g(of)g (the)g(sparsit)m(y)g(pattern)191 1058 y(from)h(the)g(previous)g(call.) 61 b(The)35 b(curren)m(t)i(v)-5 b(alues)36 b(of)h(the)g(indep)s(enden)m (ts)e(are)h(giv)m(en)i(b)m(y)e(the)h(arra)m(y)g Fp(x)p Fz(.)191 1171 y(The)h(input/output)f(v)-5 b(ariable)39 b Fp(nnz)e Fz(stores)i(the)f(n)m(um)m(b)s(er)f(of)h(the)g(nonzero)h(en) m(tries.)64 b(Therefore,)40 b Fp(nnz)191 1284 y Fz(denotes)30 b(also)g(the)g(length)f(of)h(the)f(arra)m(ys)h Fp(r)p 1699 1284 28 4 v 33 w(ind)f Fz(storing)h(the)f(ro)m(w)h(indices,)g Fp(c)p 2872 1284 V 33 w(ind)f Fz(storing)g(the)h(column)191 1396 y(indices,)39 b(and)d Fp(values)g Fz(storing)h(the)g(v)-5 b(alues)37 b(of)f(the)h(nonzero)g(en)m(tries.)61 b(If)36 b Fp(spa)m(rse)p 3016 1396 V 33 w(jac)h Fz(and)f Fp(spa)m(rse)p 3606 1396 V 33 w(hess)191 1509 y Fz(are)d(called)h(with)e Fp(rep)s(eat=0)p Fz(,)i(the)e(functions)h(determine)f(the)h(n)m(um)m(b) s(er)f(of)g(nonzeros)h(for)g(the)f(sparsit)m(y)191 1622 y(pattern)k(de\014ned)f(b)m(y)h(the)g(v)-5 b(alue)36 b(of)g Fp(x)p Fz(,)i(allo)s(cate)g(appropriate)e(arra)m(ys)g Fp(r)p 2739 1622 V 33 w(ind)p Fz(,)h Fp(c)p 2990 1622 V 33 w(ind)p Fz(,)h(and)d Fp(values)g Fz(and)191 1735 y(store)d(the)g(desired)f(information)h(in)f(these)h(arra)m(ys.)45 b(During)32 b(the)f(next)h(function)g(call)g(with)g Fp(rep)s(eat=1)191 1848 y Fz(the)d(allo)s(cated)i(memory)d(is)h(reused)f(suc)m(h)g(that)h (only)g(the)g(v)-5 b(alues)29 b(of)g(the)g(arra)m(ys)g(are)g(c)m (hanged.)41 b(Before)191 1961 y(calling)i Fp(spa)m(rse)p 724 1961 V 33 w(jac)g Fz(or)e Fp(spa)m(rse)p 1259 1961 V 33 w(hess)h Fz(once)h(more)f(with)g Fp(rep)s(eat=0)g Fz(the)g(user)f(is)h(resp)s(onsible)f(for)h(the)191 2074 y(deallo)s(cation)33 b(of)d(the)h(arra)m(y)g Fp(r)p 1233 2074 V 32 w(ind)p Fz(,)g Fp(c)p 1477 2074 V 33 w(ind)p Fz(,)f(and)g Fp(values)f Fz(using)h(the)h(function)f Fp(delete[])p Fz(!)332 2237 y(F)-8 b(or)30 b(eac)m(h)g(driv)m(er)f(the) g(arra)m(y)h Fp(options)f Fz(can)h(b)s(e)e(used)g(to)i(adapted)f(the)h (computation)g(of)f(the)g(sparse)191 2350 y(deriv)-5 b(ativ)m(e)26 b(matrices)f(to)g(the)g(sp)s(ecial)f(needs)g(of)h (application)g(under)e(consideration.)40 b(Most)25 b(frequen)m(tly)-8 b(,)191 2462 y(the)34 b(default)g(options)g(will)h(giv)m(e)g(a)f (reasonable)h(p)s(erformance.)50 b(The)34 b(elemen)m(ts)h(of)f(the)g (arra)m(y)h Fp(options)191 2575 y Fz(con)m(trol)d(the)e(action)i(of)f Fp(spa)m(rse)p 1264 2575 V 33 w(jac)f Fz(according)i(to)1951 2575 y SDict begin H.S end 1951 2575 a Black Fz(T)-8 b(able)31 b(2)p Black 2246 2512 a SDict begin H.R end 2246 2512 a 2246 2575 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (table.2) cvn H.B /ANN pdfmark end 2246 2575 a Fz(.)p Black Black Black 693 2724 2596 4 v 692 2837 4 113 v 743 2803 a(comp)s(onen)m(t)p 1226 2837 V 100 w(v)-5 b(alue)p 1530 2837 V 3287 2837 V 693 2840 2596 4 v 692 2953 4 113 v 774 2919 a Fp(options[0])p 1226 2953 V 1530 2953 V 436 w Fz(w)m(a)m(y)31 b(of)g(sparsit)m(y)g(pattern)f(computation)p 3287 2953 V 692 3066 V 1226 3066 V 1357 3032 a(0)p 1530 3066 V 179 w(propagation)h(of)g(index)f(domains)g(\(default\))p 3287 3066 V 692 3179 V 1226 3179 V 1357 3145 a(1)p 1530 3179 V 179 w(propagation)h(of)g(bit)f(pattern)p 3287 3179 V 693 3182 2596 4 v 692 3295 4 113 v 774 3261 a Fp(options[1])p 1226 3295 V 1530 3295 V 436 w Fz(test)h(the)g (computational)h(graph)e(con)m(trol)i(\015o)m(w)p 3287 3295 V 692 3408 V 1226 3408 V 1357 3374 a(0)p 1530 3408 V 179 w(safe)f(mo)s(de)f(\(default\))p 3287 3408 V 692 3521 V 1226 3521 V 1357 3487 a(1)p 1530 3521 V 179 w(tigh)m(t)i(mo)s (de)p 3287 3521 V 693 3524 2596 4 v 692 3637 4 113 v 774 3603 a Fp(options[2])p 1226 3637 V 1530 3637 V 436 w Fz(w)m(a)m(y)f(of)g(bit)f(pattern)h(propagation)p 3287 3637 V 692 3750 V 1226 3750 V 1357 3716 a(0)p 1530 3750 V 179 w(automatic)h(detection)g(\(default\))p 3287 3750 V 692 3863 V 1226 3863 V 1357 3829 a(1)p 1530 3863 V 179 w(forw)m(ard)e(mo)s(de)p 3287 3863 V 692 3976 V 1226 3976 V 1357 3942 a(2)p 1530 3976 V 179 w(rev)m(erse)h(mo)s(de)p 3287 3976 V 693 3979 2596 4 v 692 4092 4 113 v 774 4058 a Fp(options[3])p 1226 4092 V 1530 4092 V 436 w Fz(w)m(a)m(y)g(of)g (compression)p 3287 4092 V 692 4205 V 1226 4205 V 1357 4171 a(0)p 1530 4205 V 179 w(column)f(compression)h(\(default\))p 3287 4205 V 692 4318 V 1226 4318 V 1357 4284 a(1)p 1530 4318 V 179 w(ro)m(w)g(compression)p 3287 4318 V 693 4321 2596 4 v Black 1235 4475 a(T)-8 b(able)31 b(2:)1596 4475 y SDict begin H.S end 1596 4475 a 1596 4475 a SDict begin H.R end 1596 4475 a 1596 4475 a SDict begin [/View [/XYZ H.V]/Dest (table.2) cvn /DEST pdfmark end 1596 4475 a 41 w Fp(spa)m(rse)p 1871 4475 28 4 v 33 w(jac)f Fz(parameter)h Fp(options)p Black Black 332 4765 a Fz(The)38 b(comp)s(onen)m(t)i Fp(options[1])g Fz(determines)f(the)g(usage)g(of)g (the)g(safe)h(or)f(tigh)m(t)h(mo)s(de)e(of)h(sparsit)m(y)191 4878 y(computation.)70 b(The)40 b(\014rst,)i(more)e(conserv)-5 b(ativ)m(e)42 b(option)e(is)g(the)g(default.)70 b(It)40 b(accoun)m(ts)h(for)f(all)h(de-)191 4991 y(p)s(endences)33 b(that)i(migh)m(t)g(o)s(ccur)g(for)f(an)m(y)g(v)-5 b(alue)35 b(of)g(the)f(indep)s(enden)m(t)g(v)-5 b(ariables.)53 b(F)-8 b(or)35 b(example,)i(the)191 5104 y(in)m(termediate)e Fp(c)f Fz(=)f Fp(max)p Fz(\()p Fp(a)p Fr(;)p Fp(b)p Fz(\))h(is)f(alw)m (a)m(ys)i(assumed)e(to)h(dep)s(end)e(on)h(all)i(indep)s(enden)m(t)d(v) -5 b(ariables)34 b(that)191 5217 y Fp(a)d Fz(or)g Fp(b)g Fz(dep)s(enden)m(t)f(on,)i(i.e.)g(the)g(bit)f(pattern)h(asso)s(ciated)g (with)f Fp(c)h Fz(is)f(set)h(to)g(the)f(logical)j Fp(OR)d Fz(of)g(those)191 5330 y(asso)s(ciated)j(with)f Fp(a)g Fz(and)f Fp(b)p Fz(.)48 b(In)32 b(con)m(trast)j(the)e(tigh)m(t)h (option)f(giv)m(es)i(this)e(result)f(only)h(in)g(the)g(unlik)m(ely)p Black Black eop end %%Page: 26 26 TeXDict begin 26 25 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.26) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fz(26)2300 b Ft(3)92 b(EASY-TO-USE)29 b(DRIVERS)p Black 191 606 a Fz(ev)m(en)m(t)37 b(of)f(an)f(exact)i(tie)f Fp(a)f Fz(=)h Fp(b)p Fz(.)55 b(Otherwise)36 b(it)g(sets)f(the)h(bit)g (pattern)f(asso)s(ciated)i(with)e Fp(c)h Fz(either)g(to)191 719 y(that)k(of)f Fp(a)f Fz(or)h(to)h(that)g(of)f Fp(b)p Fz(,)i(dep)s(ending)d(on)h(whether)f Fp(c)i Fz(=)e Fp(a)h Fz(or)g Fp(c)g Fz(=)g Fp(b)g Fz(lo)s(cally)-8 b(.)69 b(Ob)m(viously)-8 b(,)42 b(the)191 832 y(sparsit)m(y)28 b(pattern)h(obtained)f(with)g(the)g(tigh)m(t)i(option)e(ma)m(y)h(con)m (tain)h(more)e(zeros)h(than)f(that)g(obtained)191 945 y(with)e(the)h(safe)g(option.)40 b(On)25 b(the)i(other)g(hand,)f(it)h (will)g(only)g(b)s(e)f(v)-5 b(alid)27 b(at)g(p)s(oin)m(ts)f(b)s (elonging)h(to)g(an)g(area)191 1058 y(where)32 b(the)i(function)e Fr(F)46 b Fz(is)34 b(lo)s(cally)g(analytic)h(and)d(that)i(con)m(tains)g (the)f(p)s(oin)m(t)g(at)h(whic)m(h)f(the)g(in)m(ternal)191 1171 y(represen)m(tation)28 b(w)m(as)e(generated.)41 b(Since)26 b(generating)i(the)f(sparsit)m(y)g(structure)f(using)g(the)g (safe)h(v)m(ersion)191 1284 y(do)s(es)d(not)h(require)g(an)m(y)g(reev) -5 b(aluation,)27 b(it)f(ma)m(y)f(th)m(us)f(reduce)h(the)f(o)m(v)m (erall)j(computational)g(cost)f(despite)191 1396 y(the)j(fact)h(that)g (it)g(pro)s(duces)e(more)h(nonzero)h(en)m(tries.)41 b(The)29 b(v)-5 b(alue)29 b(of)h Fp(options[2])g Fz(selects)h(the)e(direction) 191 1509 y(of)j(bit)h(pattern)f(propagation.)47 b(Dep)s(ending)32 b(on)g(the)h(n)m(um)m(b)s(er)d(of)j(indep)s(enden)m(t)e Fr(n)h Fz(and)f(of)i(dep)s(enden)m(t)191 1622 y(v)-5 b(ariables)28 b Fr(m)e Fz(one)h(w)m(ould)g(prefer)f(the)i(forw)m(ard)e (mo)s(de)g(if)h Fr(n)g Fz(is)g(signi\014can)m(t)h(smaller)f(than)g Fr(m)g Fz(and)f(w)m(ould)191 1735 y(otherwise)31 b(use)f(the)g(rev)m (erse)h(mo)s(de.)332 1898 y(The)d(elemen)m(ts)h(of)f(the)g(arra)m(y)g Fp(options)h Fz(con)m(trol)g(the)f(action)h(of)g Fp(spa)m(rse)p 2742 1898 28 4 v 33 w(hess)e Fz(according)i(to)3470 1898 y SDict begin H.S end 3470 1898 a Black Fz(T)-8 b(able)31 b(3)p Black 3766 1835 a SDict begin H.R end 3766 1835 a 3766 1898 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (table.3) cvn H.B /ANN pdfmark end 3766 1898 a Fz(.)p Black Black Black 693 2112 2596 4 v 692 2225 4 113 v 743 2191 a(comp)s(onen)m(t)p 1226 2225 V 100 w(v)-5 b(alue)p 1530 2225 V 3287 2225 V 693 2228 2596 4 v 692 2341 4 113 v 774 2307 a Fp(options[0])p 1226 2341 V 1530 2341 V 436 w Fz(test)31 b(the)g(computational)h(graph)e(con)m(trol)i(\015o)m(w)p 3287 2341 V 692 2454 V 1226 2454 V 1357 2420 a(0)p 1530 2454 V 179 w(safe)f(mo)s(de)f(\(default\))p 3287 2454 V 692 2567 V 1226 2567 V 1357 2533 a(1)p 1530 2567 V 179 w(tigh)m(t)i(mo)s(de)p 3287 2567 V 693 2570 2596 4 v 692 2683 4 113 v 774 2649 a Fp(options[1])p 1226 2683 V 1530 2683 V 436 w Fz(w)m(a)m(y)f(of)g(reco)m(v)m(ery)p 3287 2683 V 692 2796 V 1226 2796 V 1357 2762 a(0)p 1530 2796 V 179 w(indirect)g(reco)m(v)m(ery)h(\(default\))p 3287 2796 V 692 2909 V 1226 2909 V 1357 2875 a(1)p 1530 2909 V 179 w(direct)f(reco)m(v)m(ery)p 3287 2909 V 693 2912 2596 4 v Black 1211 3067 a(T)-8 b(able)31 b(3:)1572 3067 y SDict begin H.S end 1572 3067 a 1572 3067 a SDict begin H.R end 1572 3067 a 1572 3067 a SDict begin [/View [/XYZ H.V]/Dest (table.3) cvn /DEST pdfmark end 1572 3067 a 40 w Fp(spa)m(rse)p 1846 3067 28 4 v 33 w(hess)g Fz(parameter)g Fp(options)p Black Black 332 3345 a Fz(The)44 b(describ)s(ed)f(driv)m(er)h(routines)f(for)h(the)h (computation)g(of)f(sparse)g(deriv)-5 b(ativ)m(e)45 b(matrices)g(are) 191 3458 y(protot)m(yp)s(ed)33 b(in)f(the)h(header)f(\014le)h Fs()p Fz(,)27 b(whic)m(h)32 b(is)h(included)f(auto-)191 3571 y(matically)26 b(b)m(y)e(the)g(global) h(header)f(\014le)g Fs()c Fz(\(see)2455 3571 y SDict begin H.S end 2455 3571 a Black Fz(Section)31 b(8.3)p Black 2889 3508 a SDict begin H.R end 2889 3508 a 2889 3571 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.8.3) cvn H.B /ANN pdfmark end 2889 3571 a Fz(\).)39 b(Example)24 b(co)s(des)g(illus-)191 3684 y(trating)g(the)e(usage)i(of) f Fp(spa)m(rse)p 1206 3684 28 4 v 33 w(jac)g Fz(and)f Fp(spa)m(rse)p 1768 3684 V 33 w(hess)g Fz(can)h(b)s(e)g(found)e(in)h (the)h(\014le)g Fs(sparse_jacobian.cpp)191 3796 y Fz(and)30 b Fs(sparse_hessian.cpp)25 b Fz(con)m(tained)32 b(in)e Fs(examples/additional_exa)o(mple)o(s/sp)o(ars)o(e)p Fz(.)191 4085 y SDict begin H.S end 191 4085 a 191 4085 a SDict begin 13.6 H.A end 191 4085 a 191 4085 a SDict begin [/View [/XYZ H.V]/Dest (section*.3) cvn /DEST pdfmark end 191 4085 a Fw(Computation)k(of)h(Sparsit)m(y)h(P)m(attern)191 4307 y Fz(ADOL-C)26 b(o\013ers)g(a)g(con)m(v)m(enien)m(t)h(w)m(a)m(y)g (of)f(determining)f(the)h(sparsit)m(y)g(structure)f(of)h(a)g(Jacobian)g (matrix)191 4420 y(using)k(the)g(function:)p Black Black 491 4653 a Fp(int)g(jac)p 736 4653 28 4 v 33 w(pat\(tag,)g(m,)h(n,)f (x,)h(JP)-8 b(,)31 b(options\))491 4765 y(sho)m(rt)g(int)f(tag;)810 b Fz(//)31 b(tap)s(e)g(iden)m(ti\014cation)491 4878 y Fp(int)f(m;)1079 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(dep)s(enden)m(t)f (v)-5 b(ariables)31 b Fr(m)491 4991 y Fp(int)f(n;)1104 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fr(n)491 5104 y Fp(double)g(x[n];)863 b Fz(//)31 b(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fr(x)2865 5118 y FC(0)491 5217 y Fp(unsigned)g(int)e(JP[][];)586 b Fz(//)31 b(ro)m(w)g(compressed)f(sparsit)m(y)h(structure)491 5330 y Fp(int)f(options[2];)780 b Fz(//)31 b(arra)m(y)g(of)g(con)m (trol)h(parameters)p Black Black eop end %%Page: 27 27 TeXDict begin 27 26 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.27) cvn /DEST pdfmark end 183 199 a Black 191 307 a Ft(3.3)92 b(Driv)m(ers)31 b(for)f(Sparse)g(Jacobians)h(and)e(Sparse)h (Hessians)1338 b Fz(27)p Black 191 606 a(The)37 b(sparsit)m(y)i (pattern)f(of)g(the)g(Jacobian)g(is)g(computed)g(in)g(a)g(compressed)f (ro)m(w)h(format.)64 b(F)-8 b(or)39 b(this)191 719 y(purp)s(ose,)g Fp(JP)g Fz(has)g(to)g(b)s(e)g(an)f Fr(m)h Fz(dimensional)g(arra)m(y)g (of)g(p)s(oin)m(ters)g(to)h Fp(unsigned)f(int)p Fz(s,)h(i.e.,)j(one)c (has)191 832 y Fp(unsigned)29 b(int*)f(JP[m])p Fz(.)40 b(During)29 b(the)f(call)i(of)e Fp(jac)p 1854 832 28 4 v 33 w(pat)p Fz(,)h(the)f(n)m(um)m(b)s(er)k(^)-50 b Fr(n)2598 846 y Fh(i)2654 832 y Fz(of)29 b(nonzero)f(en)m(tries)h(in)g (ro)m(w)f Fr(i)h Fz(of)191 945 y(the)e(Jacobian)h(is)f(determined)g (for)f(all)i(1)e Fn(\024)f Fr(i)h Fn(\024)f Fr(m)p Fz(.)39 b(Then,)27 b(a)g(memory)g(allo)s(cation)i(is)f(p)s(erformed)d(suc)m(h) 191 1058 y(that)30 b Fp(JP[i-1])h Fz(p)s(oin)m(ts)f(to)h(a)f(blo)s(c)m (k)h(of)j(^)-49 b Fr(n)1525 1072 y Fh(i)1572 1058 y Fz(+)19 b(1)30 b Fp(unsigned)g(int)g Fz(for)g(all)g(1)c Fn(\024)f Fr(i)h Fn(\024)f Fr(m)k Fz(and)h Fp(JP[i-1][0])h Fz(is)f(set)h(to)196 1171 y(^)-50 b Fr(n)246 1185 y Fh(i)274 1171 y Fz(.)50 b(Subsequen)m(tly)-8 b(,)34 b(the)g(column)f(indices)h(of)g(the)g Fr(j)39 b Fz(nonzero)34 b(en)m(tries)g(in)f(the)h Fr(i)p Fz(th)g(ro)m(w)f(are)h(stored)g(in)191 1284 y(the)d(comp)s(onen)m(ts)f Fp(JP[i-1][1])p Fz(,)j(.)15 b(.)g(.)h(,)30 b Fp(JP[i-1][j])p Fz(.)332 1446 y(The)39 b(elemen)m(ts)j(of)e(the)g(arra)m(y)g Fp(options)g Fz(con)m(trol)h(the)f(action)h(of)f Fp(jac)p 2739 1446 V 33 w(pat)g Fz(according)h(to)3470 1446 y SDict begin H.S end 3470 1446 a Black Fz(T)-8 b(able)31 b(4)p Black 3766 1383 a SDict begin H.R end 3766 1383 a 3766 1446 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (table.4) cvn H.B /ANN pdfmark end 3766 1446 a Fz(.)191 1559 y(The)36 b(v)-5 b(alue)37 b(of)f Fp(options[0])i Fz(selects)g(the)f(w)m (a)m(y)g(to)g(compute)g(the)g(sparsit)m(y)f(pattern.)59 b(The)36 b(comp)s(onen)m(t)p Black Black Black 693 1796 2596 4 v 692 1908 4 113 v 743 1875 a(comp)s(onen)m(t)p 1226 1908 V 100 w(v)-5 b(alue)p 1530 1908 V 3287 1908 V 693 1912 2596 4 v 692 2025 4 113 v 774 1991 a Fp(options[0])p 1226 2025 V 1530 2025 V 436 w Fz(w)m(a)m(y)31 b(of)g(sparsit)m(y)g (pattern)f(computation)p 3287 2025 V 692 2138 V 1226 2138 V 1357 2104 a(0)p 1530 2138 V 179 w(propagation)h(of)g(index)f (domains)g(\(default\))p 3287 2138 V 692 2250 V 1226 2250 V 1357 2217 a(1)p 1530 2250 V 179 w(propagation)h(of)g(bit)f (pattern)p 3287 2250 V 693 2254 2596 4 v 692 2367 4 113 v 774 2333 a Fp(options[1])p 1226 2367 V 1530 2367 V 436 w Fz(test)h(the)g(computational)h(graph)e(con)m(trol)i(\015o)m(w)p 3287 2367 V 692 2480 V 1226 2480 V 1357 2446 a(0)p 1530 2480 V 179 w(safe)f(mo)s(de)f(\(default\))p 3287 2480 V 692 2593 V 1226 2593 V 1357 2559 a(1)p 1530 2593 V 179 w(tigh)m(t)i(mo)s(de)p 3287 2593 V 693 2596 2596 4 v 692 2709 4 113 v 774 2675 a Fp(options[2])p 1226 2709 V 1530 2709 V 436 w Fz(w)m(a)m(y)f(of)g(bit)f(pattern)h (propagation)p 3287 2709 V 692 2822 V 1226 2822 V 1357 2788 a(0)p 1530 2822 V 179 w(automatic)h(detection)g(\(default\))p 3287 2822 V 692 2935 V 1226 2935 V 1357 2901 a(1)p 1530 2935 V 179 w(forw)m(ard)e(mo)s(de)p 3287 2935 V 692 3047 V 1226 3047 V 1357 3014 a(2)p 1530 3047 V 179 w(rev)m(erse)h(mo)s(de)p 3287 3047 V 693 3051 2596 4 v Black 1288 3205 a(T)-8 b(able)31 b(4:)1649 3205 y SDict begin H.S end 1649 3205 a 1649 3205 a SDict begin H.R end 1649 3205 a 1649 3205 a SDict begin [/View [/XYZ H.V]/Dest (table.4) cvn /DEST pdfmark end 1649 3205 a 41 w Fp(jac)p 1803 3205 28 4 v 33 w(pat)f Fz(parameter)g Fp(options)p Black Black 191 3523 a(options[1])35 b Fz(determines)e(the)h(usage)g(of)g(the)g (safe)g(or)f(tigh)m(t)i(mo)s(de)e(of)h(bit)f(pattern)h(propagation.)51 b(The)191 3636 y(\014rst,)37 b(more)f(conserv)-5 b(ativ)m(e)39 b(option)d(is)h(the)f(default.)58 b(It)37 b(accoun)m(ts)g(for)f(all)h (dep)s(endences)e(that)i(migh)m(t)191 3749 y(o)s(ccur)21 b(for)f(an)m(y)i(v)-5 b(alue)21 b(of)g(the)g(indep)s(enden)m(t)f(v)-5 b(ariables.)38 b(F)-8 b(or)22 b(example,)i(the)d(in)m(termediate)h Fp(c)g Fz(=)e Fp(max)p Fz(\()p Fp(a)p Fr(;)p Fp(b)p Fz(\))191 3862 y(is)38 b(alw)m(a)m(ys)h(assumed)e(to)i(dep)s(end)d(on)i(all)h (indep)s(enden)m(t)e(v)-5 b(ariables)38 b(that)h Fp(a)e Fz(or)h Fp(b)g Fz(dep)s(enden)m(t)f(on,)j(i.e.)191 3975 y(the)e(bit)g(pattern)g(asso)s(ciated)h(with)e Fp(c)i Fz(is)e(set)i(to)f(the)g(logical)j Fp(OR)c Fz(of)h(those)g(asso)s (ciated)h(with)f Fp(a)f Fz(and)191 4088 y Fp(b)p Fz(.)56 b(In)34 b(con)m(trast)j(the)f(tigh)m(t)h(option)e(giv)m(es)i(this)e (result)h(only)f(in)g(the)h(unlik)m(ely)g(ev)m(en)m(t)h(of)f(an)f (exact)i(tie)191 4201 y Fp(a)32 b Fz(=)g Fp(b)p Fz(.)47 b(Otherwise)32 b(it)h(sets)g(the)f(bit)h(pattern)f(asso)s(ciated)i (with)e Fp(c)h Fz(either)g(to)g(that)g(of)g Fp(a)f Fz(or)g(to)i(that)f (of)191 4314 y Fp(b)p Fz(,)h(dep)s(ending)e(on)h(whether)g Fp(c)h Fz(=)f Fp(a)g Fz(or)g Fp(c)h Fz(=)f Fp(b)g Fz(lo)s(cally)-8 b(.)52 b(Ob)m(viously)-8 b(,)35 b(the)e(sparsit)m(y)h(pattern)f (obtained)191 4427 y(with)d(the)g(tigh)m(t)h(option)g(ma)m(y)f(con)m (tain)i(more)e(zeros)g(than)g(that)h(obtained)f(with)g(the)g(safe)h (option.)41 b(On)191 4540 y(the)g(other)g(hand,)i(it)f(will)f(only)g(b) s(e)f(v)-5 b(alid)41 b(at)h(p)s(oin)m(ts)f(b)s(elonging)g(to)h(an)f (area)g(where)g(the)g(function)191 4653 y Fr(F)47 b Fz(is)33 b(lo)s(cally)j(analytic)f(and)e(that)h(con)m(tains)h(the)f(p)s(oin)m(t) g(at)g(whic)m(h)f(the)h(in)m(ternal)h(represen)m(tation)f(w)m(as)191 4765 y(generated.)54 b(Since)34 b(generating)i(the)f(sparsit)m(y)f (structure)g(using)g(the)h(safe)f(v)m(ersion)h(do)s(es)f(not)h(require) 191 4878 y(an)m(y)29 b(reev)-5 b(aluation,)31 b(it)e(ma)m(y)g(th)m(us)f (reduce)h(the)g(o)m(v)m(erall)i(computational)f(cost)g(despite)e(the)h (fact)h(that)f(it)191 4991 y(pro)s(duces)j(more)h(nonzero)g(en)m (tries.)50 b(The)32 b(v)-5 b(alue)34 b(of)f Fp(options[2])h Fz(selects)g(the)g(direction)f(of)h(bit)f(pattern)191 5104 y(propagation.)40 b(Dep)s(ending)25 b(on)h(the)g(n)m(um)m(b)s(er)e (of)i(indep)s(enden)m(t)f Fr(n)g Fz(and)g(of)h(dep)s(enden)m(t)f(v)-5 b(ariables)26 b Fr(m)f Fz(one)191 5217 y(w)m(ould)33 b(prefer)f(the)h(forw)m(ard)f(mo)s(de)g(if)h Fr(n)g Fz(is)f (signi\014can)m(t)i(smaller)g(than)e Fr(m)h Fz(and)f(w)m(ould)h (otherwise)g(use)191 5330 y(the)e(rev)m(erse)g(mo)s(de.)p Black Black eop end %%Page: 28 28 TeXDict begin 28 27 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.28) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fz(28)2300 b Ft(3)92 b(EASY-TO-USE)29 b(DRIVERS)p Black 332 606 a Fz(The)39 b(routine)g Fp(jac)p 963 606 28 4 v 33 w(pat)g Fz(ma)m(y)h(use)f(the)h(propagation)g(of)g(bitpattern)f (to)h(determine)g(the)f(sparsit)m(y)191 719 y(pattern.)j(Therefore,)31 b(a)g(kind)g(of)g(\\strip-mining")g(is)g(used)f(to)h(cop)s(e)g(with)g (large)h(matrix)f(dimensions.)191 832 y(If)39 b(the)g(system)g(happ)s (ens)f(to)h(run)f(out)i(of)f(memory)-8 b(,)42 b(one)d(ma)m(y)h(reduce)f (the)g(v)-5 b(alue)40 b(of)f(the)g(constan)m(t)191 945 y Fp(PQ)p 321 945 V 33 w(STRIPMINE)p 832 945 V 32 w(MAX)29 b Fz(follo)m(wing)j(the)f(instructions)f(in)g Fs ()p Fz(.)332 1108 y(The)d(driv)m(er)h(routine)g(is)g(protot)m(yp)s(ed)g(in)f(the)h (header)g(\014le)g Fs()p Fz(,)191 1220 y(whic)m(h)21 b(is)g(included)f(automatically)k(b)m(y)d (the)g(global)i(header)e(\014le)g Fs()c Fz(\(see)3296 1220 y SDict begin H.S end 3296 1220 a Black Fz(Section)31 b(8.3)p Black 3730 1158 a SDict begin H.R end 3730 1158 a 3730 1220 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.8.3) cvn H.B /ANN pdfmark end 3730 1220 a Fz(\).)191 1333 y(The)21 b(determination)i(of)f(sparsit)m(y)h (patterns)f(is)g(illustrated)g(b)m(y)g(the)g(examples)h Fs(sparse_jacobian.cpp)191 1446 y Fz(and)30 b Fs(jacpatexam.cpp)c Fz(con)m(tained)32 b(in)e Fs(examples/additional_exam)o(ple)o(s/sp)o (arse)o Fz(.)332 1609 y(T)-8 b(o)45 b(compute)g(the)f(sparsit)m(y)h (pattern)g(of)f(a)h(Hessian)g(in)f(a)h(ro)m(w)g(compressed)f(form,)k (ADOL-C)191 1722 y(pro)m(vides)30 b(the)h(driv)m(er)p Black Black 491 1948 a Fp(int)f(hess)p 785 1948 28 4 v 33 w(pat\(tag,)g(n,)g(x,)h(HP)-8 b(,)31 b(options\))491 2061 y(sho)m(rt)g(int)f(tag;)810 b Fz(//)31 b(tap)s(e)g(iden)m (ti\014cation)491 2174 y Fp(int)f(n;)1104 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fr(n)491 2287 y Fp(double)g(x[n];)863 b Fz(//)31 b(indep)s(enden)m(t) f(v)-5 b(ariables)31 b Fr(x)2865 2301 y FC(0)491 2400 y Fp(unsigned)g(int)e(HP[][];)565 b Fz(//)31 b(ro)m(w)g(compressed)f (sparsit)m(y)h(structure)491 2512 y Fp(int)f(option;)912 b Fz(//)31 b(con)m(trol)h(parameter)191 2738 y(where)j(the)i(user)e (has)h(to)g(pro)m(vide)h Fp(HP)f Fz(as)g(an)g Fr(n)g Fz(dimensional)g(arra)m(y)g(of)g(p)s(oin)m(ters)g(to)h Fp(unsigned)f(int)p Fz(s.)191 2851 y(After)25 b(the)f(function)g(call)i Fp(HP)f Fz(con)m(tains)h(the)e(sparsit)m(y)h(pattern,)h(where)e Fp(HP[j][0])j Fz(con)m(tains)e(the)g(n)m(um)m(b)s(er)191 2964 y(of)35 b(nonzero)h(elemen)m(ts)h(in)e(the)g Fr(j)5 b Fz(th)36 b(ro)m(w)f(for)g(1)f Fn(\024)f Fr(j)39 b Fn(\024)34 b Fr(n)p Fz(.)54 b(The)35 b(comp)s(onen)m(ts)h Fp(P[j][i])p Fz(,)h(0)d Fr(<)p Fp(i)h Fn(\024)g Fp(P[j][0])191 3077 y Fz(store)e(the)g(indices)g(of)g(these)g(en)m(tries.)48 b(F)-8 b(or)34 b(determining)e(the)h(sparsit)m(y)g(pattern,)h(ADOL-C)e (uses)h(the)191 3190 y(algorithm)g(describ)s(ed)f(in)g([)1145 3190 y SDict begin H.S end 1145 3190 a Black Fz(12)p Black 1236 3131 a SDict begin H.R end 1236 3131 a 1236 3190 a SDict begin [/Color [0 1 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (cite.Wa05a) cvn H.B /ANN pdfmark end 1236 3190 a Fz(].)47 b(The)32 b(parameter)p Fp(option)i Fz(determines)e(the)h(usage)g(of)f(the)h(safe)g(\()p Fp(option)191 3303 y(=)40 b(0)p Fz(,)k(default\))e(or)e(tigh)m(t)i(mo)s (de)f(\()p Fp(option)g(=)g(1)p Fz(\))g(of)g(the)g(computation)h(of)f (the)g(sparsit)m(y)g(pattern)f(as)191 3416 y(describ)s(ed)29 b(ab)s(o)m(v)m(e.)332 3579 y(This)c(driv)m(er)g(routine)h(is)f(protot)m (yp)s(ed)h(in)f(the)h(header)f(\014le)h Fs()p Fz(,)191 3692 y(whic)m(h)21 b(is)g(included)f (automatically)k(b)m(y)d(the)g(global)i(header)e(\014le)g Fs()c Fz(\(see)3296 3692 y SDict begin H.S end 3296 3692 a Black Fz(Section)31 b(8.3)p Black 3730 3629 a SDict begin H.R end 3730 3629 a 3730 3692 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.8.3) cvn H.B /ANN pdfmark end 3730 3692 a Fz(\).)191 3804 y(An)24 b(example)g(emplo)m (ying)h(the)g(pro)s(cedure)e Fp(hess)p 1840 3804 28 4 v 32 w(pat)h Fz(can)g(b)s(e)g(found)f(in)g(the)i(\014le)f Fs(sparse_hessian.cpp)191 3917 y Fz(con)m(tained)32 b(in)e Fs(examples/additional_exa)o(mple)o(s/s)o(pars)o(e)p Fz(.)191 4205 y SDict begin H.S end 191 4205 a 191 4205 a SDict begin 13.6 H.A end 191 4205 a 191 4205 a SDict begin [/View [/XYZ H.V]/Dest (section*.4) cvn /DEST pdfmark end 191 4205 a Fw(Calculation)35 b(of)g(Seed)g(Matrices)191 4427 y Fz(T)-8 b(o)33 b(compute)g(a)g(compressed)f(deriv)-5 b(ativ)m(e)34 b(matrix)f(from)f(a)g(giv)m(en)i(sparsit)m(y)f(pattern,)g (one)g(has)f(to)h(cal-)191 4539 y(culate)f(an)f(appropriate)g(seed)g (matrix)g(that)g(can)g(b)s(e)f(used)g(as)h(input)f(for)h(the)g(deriv)-5 b(ativ)m(e)32 b(calculation.)191 4652 y(T)-8 b(o)29 b(facilitate)j(the) d(generation)h(of)e(seed)h(matrices)h(for)e(a)h(sparsit)m(y)g(pattern)g (giv)m(en)h(in)e(ro)m(w)h(compressed)191 4765 y(form,)g(ADOL-C)f(pro)m (vides)h(the)f(follo)m(wing)i(t)m(w)m(o)g(driv)m(ers,)f(whic)m(h)f(are) h(based)f(on)h(the)f(ColP)m(ac)m(k)j(library:)p Black Black 491 4991 a Fp(int)f(generate)p 948 4991 28 4 v 34 w(seed)p 1144 4991 V 33 w(jac\(m,)i(n,)e(JP)-8 b(,)31 b(S,)f(p\))491 5104 y(int)g(m;)1079 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g (dep)s(enden)m(t)f(v)-5 b(ariables)31 b Fr(m)491 5217 y Fp(int)f(n;)1104 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s(enden)m (t)f(v)-5 b(ariables)31 b Fr(n)491 5330 y Fp(unsigned)g(int)e(JP[][];) 586 b Fz(//)31 b(ro)m(w)g(compressed)f(sparsit)m(y)h(structure)f(of)g (Jacobian)p Black Black eop end %%Page: 29 29 TeXDict begin 29 28 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.29) cvn /DEST pdfmark end 183 199 a Black 191 307 a Ft(3.3)92 b(Driv)m(ers)31 b(for)f(Sparse)g(Jacobians)h(and)e(Sparse)h (Hessians)1338 b Fz(29)p Black 491 606 a Fp(double)31 b(S[n][p];)755 b Fz(//)31 b(seed)g(matrix)491 719 y Fp(int)f(p;)1104 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(columns)g(in)g Fr(S)191 1055 y Fz(The)44 b(input)g(v)-5 b(ariables)45 b(to)g Fp(generate)p 1490 1055 28 4 v 34 w(seed)p 1686 1055 V 33 w(jac)g Fz(are)g(the)g(n)m(um)m(b)s(er)e(of)i(dep)s(enden)m(t)e(v) -5 b(ariables)45 b Fr(m)p Fz(,)k(the)191 1168 y(n)m(um)m(b)s(er)22 b(of)h(indep)s(enden)m(t)f(v)-5 b(ariables)24 b Fp(n)f Fz(and)g(the)g(sparsit)m(y)h(pattern)f Fp(JP)g Fz(of)h(the)f(Jacobian)h (computed)f(for)191 1281 y(example)32 b(b)m(y)g Fp(jac)p 789 1281 V 33 w(pat)p Fz(.)45 b(First,)33 b Fp(generate)p 1585 1281 V 34 w(seed)p 1781 1281 V 33 w(jac)f Fz(p)s(erforms)e(a)j (distance-2)g(coloring)g(of)f(the)g(bipartite)191 1394 y(graph)f(de\014ned)f(b)m(y)h(the)h(sparsit)m(y)g(pattern)f Fp(JP)g Fz(as)h(describ)s(ed)e(in)h([)2494 1394 y SDict begin H.S end 2494 1394 a Black Fz(3)p Black 2540 1335 a SDict begin H.R end 2540 1335 a 2540 1394 a SDict begin [/Color [0 1 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (cite.GeMaPo05) cvn H.B /ANN pdfmark end 2540 1394 a Fz(].)44 b(The)31 b(n)m(um)m(b)s(er)f(of)i(colors)g (needed)191 1507 y(for)40 b(the)g(coloring)h(determines)g(the)f(n)m(um) m(b)s(er)f(of)h(columns)g Fp(p)f Fz(in)h(the)h(seed)f(matrix.)70 b(Subsequen)m(tly)-8 b(,)191 1620 y Fp(generate)p 516 1620 28 4 v 34 w(seed)p 712 1620 V 33 w(jac)27 b Fz(allo)s(cates)j(the) d(memory)g(needed)f(b)m(y)h Fp(S)g Fz(and)f(initializes)j Fp(S)d Fz(according)i(to)g(the)f(graph)191 1733 y(coloring.)70 b(The)40 b(coloring)h(algorithm)g(that)f(is)g(applied)f(in)h Fp(generate)p 2647 1733 V 34 w(seed)p 2843 1733 V 33 w(jac)g Fz(is)g(used)f(also)i(b)m(y)f(the)191 1846 y(driv)m(er)30 b Fp(spa)m(rse)p 688 1846 V 33 w(jac)h Fz(describ)s(ed)e(earlier.)p Black Black 491 2239 a Fp(int)h(generate)p 948 2239 V 34 w(seed)p 1144 2239 V 33 w(hess\(n,)h(HP)-8 b(,)31 b(S,)g(p\))491 2352 y(int)f(n;)1104 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g (indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fr(n)491 2465 y Fp(unsigned)g(int)e(HP[][];)565 b Fz(//)31 b(ro)m(w)g(compressed)f (sparsit)m(y)h(structure)f(of)g(Jacobian)491 2578 y Fp(double)h (S[n][p];)755 b Fz(//)31 b(seed)g(matrix)491 2691 y Fp(int)f(p;)1104 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(columns)g(in)g Fr(S)191 3085 y Fz(The)24 b(input)g(v)-5 b(ariables)25 b(to)g Fp(generate)p 1410 3085 V 34 w(seed)p 1606 3085 V 33 w(hess)g Fz(are)g(the)g(n)m(um)m(b)s(er)e(of)i(indep)s(enden)m(ts)e Fr(n)h Fz(and)g(the)g(sparsit)m(y)191 3198 y(pattern)k Fp(HP)g Fz(of)f(the)h(Hessian)g(computed)g(for)f(example)h(b)m(y)g Fp(hess)p 2437 3198 V 33 w(pat)p Fz(.)39 b(First,)29 b Fp(generate)p 3223 3198 V 33 w(seed)p 3418 3198 V 34 w(hess)e Fz(p)s(er-)191 3311 y(forms)33 b(an)h(appropriate)g(coloring)h (of)f(the)g(adjacency)g(graph)g(de\014ned)e(b)m(y)i(the)g(sparsit)m(y)g (pattern)g Fp(HP)p Fz(:)191 3424 y(An)f(acyclic)j(coloring)f(in)e(the)h (case)h(of)f(an)g(indirect)f(reco)m(v)m(ery)j(of)e(the)g(Hessian)g (from)f(its)h(compressed)191 3537 y(represen)m(tation)41 b(and)e(a)h(star)g(coloring)h(in)e(the)h(case)h(of)e(a)h(direct)h(reco) m(v)m(ery)-8 b(.)70 b(Subsequen)m(tly)-8 b(,)42 b Fp(gener-)191 3650 y(ate)p 313 3650 V 33 w(seed)p 508 3650 V 33 w(hess)d Fz(allo)s(cates)i(the)e(memory)g(needed)g(b)m(y)f Fp(S)h Fz(and)f(initializes)j Fp(S)e Fz(according)g(to)h(the)f(graph)191 3763 y(coloring.)67 b(The)39 b(coloring)h(algorithm)f(applied)g(in)g Fp(generate)p 2332 3763 V 34 w(seed)p 2528 3763 V 33 w(hess)g Fz(is)g(used)f(also)h(b)m(y)g(the)g(driv)m(er)191 3875 y Fp(spa)m(rse)p 425 3875 V 33 w(hess)30 b Fz(describ)s(ed)g (earlier.)332 4038 y(The)25 b(sp)s(eci\014c)h(set)h(of)f(criteria)h (used)e(to)i(de\014ne)e(a)h(seed)g(matrix)g Fr(S)31 b Fz(dep)s(ends)24 b(on)i(whether)f(the)h(sparse)191 4151 y(deriv)-5 b(ativ)m(e)32 b(matrix)e(to)h(b)s(e)f(computed)g(is)g(a)h (Jacobian)g(\(nonsymmetric\))g(or)f(a)h(Hessian)f(\(symmetric\).)191 4264 y(It)d(also)h(dep)s(ends)c(on)j(whether)f(the)h(en)m(tries)h(of)f (the)g(deriv)-5 b(ativ)m(e)28 b(matrix)f(are)g(to)h(b)s(e)e(reco)m(v)m (ered)i(from)f(the)191 4377 y(compressed)k(represen)m(tation)i Fq(dir)-5 b(e)g(ctly)42 b Fz(\(without)32 b(requiring)f(an)m(y)h (further)f(arithmetic\))i(or)f Fq(indir)-5 b(e)g(ctly)191 4490 y Fz(\(for)32 b(example,)i(b)m(y)e(solving)h(for)f(unkno)m(wns)f (via)i(successiv)m(e)h(substitutions\).)46 b(Appropriate)32 b(reco)m(v)m(ery)191 4603 y(routines)22 b(are)h(pro)m(vided)f(b)m(y)g (ColP)m(ac)m(k)j(and)d(used)f(in)h(the)h(driv)m(ers)f Fp(spa)m(rse)p 2650 4603 V 33 w(jac)h Fz(and)e Fp(spa)m(rse)p 3211 4603 V 33 w(hess)i Fz(describ)s(ed)191 4716 y(in)33 b(the)h(previous)f(subsection.)51 b(Examples)33 b(with)h(a)g(detailed)g (analysis)g(of)g(the)g(emplo)m(y)m(ed)h(driv)m(ers)e(for)191 4829 y(the)e(exploitation)h(of)f(sparsit)m(y)f(can)h(b)s(e)f(found)f (in)h(the)g(pap)s(ers)f([)2417 4829 y SDict begin H.S end 2417 4829 a Black Fz(4)p Black 2463 4770 a SDict begin H.R end 2463 4770 a 2463 4829 a SDict begin [/Color [0 1 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (cite.GePoTaWa06) cvn H.B /ANN pdfmark end 2463 4829 a Fz(])i(and)e([)2720 4829 y SDict begin H.S end 2720 4829 a Black Fz(5)p Black 2766 4770 a SDict begin H.R end 2766 4770 a 2766 4829 a SDict begin [/Color [0 1 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (cite.GePoWa08) cvn H.B /ANN pdfmark end 2766 4829 a Fz(].)332 4991 y(These)20 b(driv)m(er)h(routines)f(are)h(protot)m(yp)s (ed)f(in)h Fs()o Fz(,)c(whic)m(h)j(is)h(in-)191 5104 y(cluded)f(automatically)j(b)m(y)d (the)h(global)g(header)f(\014le)h Fs()16 b Fz(\(see)2880 5104 y SDict begin H.S end 2880 5104 a Black Fz(Section)31 b(8.3)p Black 3314 5042 a SDict begin H.R end 3314 5042 a 3314 5104 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.8.3) cvn H.B /ANN pdfmark end 3314 5104 a Fz(\).)38 b(An)20 b(exam-)191 5217 y(ple)i(co)s(de)g (illustrating)h(the)f(usage)h(of)f Fp(generate)p 1795 5217 28 4 v 34 w(seed)p 1991 5217 V 34 w(jac)g Fz(and)f Fp(generate)p 2643 5217 V 34 w(seed)p 2839 5217 V 34 w(hess)h Fz(can)g(b)s(e)f(found)g(in)h(the)191 5330 y(\014le)30 b Fs(sparse_jac_hess_exam.cpp)24 b Fz(con)m(tained)32 b(in)e Fs(examples/additional_exam)o(ple)o(s/sp)o(arse)o Fz(.)p Black Black eop end %%Page: 30 30 TeXDict begin 30 29 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.30) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fz(30)2300 b Ft(3)92 b(EASY-TO-USE)29 b(DRIVERS)p Black 191 515 a SDict begin H.S end 191 515 a 191 515 a SDict begin 13.6 H.A end 191 515 a 191 515 a SDict begin [/View [/XYZ H.V]/Dest (subsection.3.4) cvn /DEST pdfmark end 191 515 a 91 x FA(3.4)112 b(Higher)38 b(Deriv)-6 b(ativ)m(e)37 b(T)-9 b(ensors)191 827 y Fz(Man)m(y)25 b(applications)h(in)e(scien)m (ti\014c)i(computing)f(need)f(second-)h(and)f(higher-order)g(deriv)-5 b(ativ)m(es.)40 b(Often,)191 940 y(one)f(do)s(es)f(not)h(require)f (full)g(deriv)-5 b(ativ)m(e)40 b(tensors)f(but)e(only)i(the)g(deriv)-5 b(ativ)m(es)40 b(in)e(certain)h(directions)191 1053 y Fr(s)234 1067 y Fh(i)287 1053 y Fn(2)25 b Fz(I)-20 b(R)452 1017 y Fh(n)499 1053 y Fz(.)41 b(Supp)s(ose)28 b(a)j(collection)i(of)e Fr(p)f Fz(directions)h Fr(s)2039 1067 y Fh(i)2092 1053 y Fn(2)25 b Fz(I)-20 b(R)2257 1017 y Fh(n)2334 1053 y Fz(is)30 b(giv)m(en,)i(whic)m(h)e(form)g(a)h(matrix)1403 1227 y Fr(S)56 b Fz(=)50 b([)p Fr(s)1704 1241 y FC(1)1743 1227 y Fr(;)15 b(s)1826 1241 y FC(2)1866 1227 y Fr(;)g(:)g(:)g(:)h(;)f (s)2110 1241 y Fh(p)2150 1227 y Fz(])51 b Fn(2)f Fz(I)-20 b(R)2416 1190 y Fh(n)p Fl(\002)p Fh(p)2553 1227 y Fr(:)191 1401 y Fz(One)40 b(p)s(ossible)h(c)m(hoice)h(is)f Fr(S)48 b Fz(=)42 b Fr(I)1385 1415 y Fh(n)1472 1401 y Fz(with)f Fr(p)h Fz(=)g Fr(n)p Fz(,)i(whic)m(h)c(leads)h(to)h(full)e(tensors)h(b) s(eing)f(ev)-5 b(aluated.)191 1514 y(ADOL-C)30 b(pro)m(vides)h(the)f (function)g Fp(tenso)m(r)p 1687 1514 28 4 v 34 w(eval)g Fz(to)h(calculate)i(the)e(deriv)-5 b(ativ)m(e)32 b(tensors)742 1741 y SDict begin H.S end 742 1741 a 742 1741 a SDict begin 13.6 H.A end 742 1741 a 742 1741 a SDict begin [/View [/XYZ H.V]/Dest (equation.3.2) cvn /DEST pdfmark end 742 1741 a 10 w Fn(r)828 1704 y Fh(k)804 1764 y(S)870 1741 y Fr(F)13 b Fz(\()p Fr(x)1028 1755 y FC(0)1068 1741 y Fz(\))51 b(=)1308 1680 y Fr(@)1361 1647 y Fh(k)p 1285 1721 143 4 v 1285 1804 a Fr(@)5 b(z)1384 1778 y Fh(k)1437 1741 y Fr(F)13 b Fz(\()p Fr(x)1595 1755 y FC(0)1655 1741 y Fz(+)20 b Fr(S)5 b(z)t Fz(\))1888 1610 y Fk(\014)1888 1664 y(\014)1888 1719 y(\014)1888 1773 y(\014)1919 1832 y Fh(z)s FC(=0)2074 1741 y Fn(2)25 b Fz(I)-20 b(R)2239 1704 y Fh(p)2275 1680 y Fg(k)2408 1741 y Fz(for)91 b Fr(k)28 b Fz(=)d(0)p Fr(;)15 b(:)g(:)g(:)i(;)e(d)p Black 602 w Fz(\(2\))p Black 191 1956 a(sim)m(ultaneously)-8 b(.)41 b(The)25 b(function)h Fp(tenso)m(r)p 1602 1956 28 4 v 34 w(eval)g Fz(has)g(the)h(follo)m(wing)h(calling)g(sequence)e (and)g(parameters:)p Black Black 491 2168 a Fp(void)k(tenso)m(r)p 910 2168 V 34 w(eval\(tag,m,n,d,p,x,tenso)m(r,S\))491 2281 y(sho)m(rt)h(int)f(tag;)690 b Fz(//)31 b(tap)s(e)g(iden)m (ti\014cation)491 2394 y Fp(int)f(m;)959 b Fz(//)31 b(n)m(um)m(b)s(er)f (of)g(dep)s(enden)m(t)f(v)-5 b(ariables)31 b Fr(m)491 2507 y Fp(int)f(n;)984 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s (enden)m(t)f(v)-5 b(ariables)31 b Fr(n)491 2620 y Fp(int)f(d;)984 b Fz(//)31 b(highest)g(deriv)-5 b(ativ)m(e)32 b(degree)f Fr(d)491 2733 y Fp(int)f(p;)984 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g (directions)h Fr(p)491 2846 y Fp(double)g(x[n];)743 b Fz(//)31 b(v)-5 b(alues)31 b(of)g(indep)s(enden)m(t)e(v)-5 b(ariables)31 b Fr(x)3119 2860 y FC(0)491 2959 y Fp(double)g(tenso)m (r[m][size];)343 b Fz(//)31 b(result)g(as)f(de\014ned)f(in)i(\()2620 2959 y SDict begin H.S end 2620 2959 a Black Fz(2)p Black 2665 2900 a SDict begin H.R end 2665 2900 a 2665 2959 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (equation.3.2) cvn H.B /ANN pdfmark end 2665 2959 a Fz(\))g(in)f(compressed)g(form)491 3071 y Fp(double)h(S[n][p];)635 b Fz(//)31 b(seed)g(matrix)g Fr(S)191 3284 y Fz(Using)d(the)h(symmetry)e(of)i(the)f(tensors)g (de\014ned)f(b)m(y)i(\()2055 3284 y SDict begin H.S end 2055 3284 a Black Fz(2)p Black 2101 3225 a SDict begin H.R end 2101 3225 a 2101 3284 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (equation.3.2) cvn H.B /ANN pdfmark end 2101 3284 a Fz(\),)g(the)f(memory)g(requiremen)m(t)h(can)f(b)s(e)f(reduced) 191 3396 y(enormously)-8 b(.)79 b(The)42 b(collection)k(of)d(tensors)g (up)f(to)h(order)g Fr(d)g Fz(comprises)2830 3323 y Fk(\000)2871 3356 y Fh(p)p FC(+)p Fh(d)2917 3428 y(d)2998 3323 y Fk(\001)3083 3396 y Fz(distinct)g(elemen)m(ts.)191 3523 y(Hence,)34 b(the)f(second)f(dimension)g(of)h Fp(tenso)m(r)h Fz(m)m(ust)e(b)s(e)g (greater)i(or)e(equal)h(to)2875 3449 y Fk(\000)2917 3483 y Fh(p)p FC(+)p Fh(d)2962 3554 y(d)3044 3449 y Fk(\001)3086 3523 y Fz(.)47 b(T)-8 b(o)33 b(compute)g(the)191 3650 y(deriv)-5 b(ativ)m(es,)39 b Fp(tenso)m(r)p 909 3650 28 4 v 34 w(eval)d Fz(propagates)h(in)m(ternally)g(univ)-5 b(ariate)37 b(T)-8 b(a)m(ylor)37 b(series)g(along)3225 3576 y Fk(\000)3266 3609 y Fh(n)p FC(+)p Fh(d)p Fl(\000)p FC(1)3360 3681 y Fh(d)3491 3576 y Fk(\001)3568 3650 y Fz(direc-)191 3763 y(tions.)k(Then)29 b(the)i(desired)f(v)-5 b(alues)31 b(are)f(in)m(terp)s(olated.)42 b(This)30 b(approac)m(h)g(is) h(describ)s(ed)e(in)h([)3344 3763 y SDict begin H.S end 3344 3763 a Black Fz(8)p Black 3390 3704 a SDict begin H.R end 3390 3704 a 3390 3763 a SDict begin [/Color [0 1 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (cite.Griewank97) cvn H.B /ANN pdfmark end 3390 3763 a Fz(].)332 3925 y(The)35 b(access)i(of)f(individual)f(en)m(tries) h(in)f(symmetric)h(tensors)f(of)h(higher)f(order)g(is)h(a)g(little)h (tric)m(ky)-8 b(.)191 4038 y(W)g(e)32 b(alw)m(a)m(ys)h(store)f(the)f (deriv)-5 b(ativ)m(e)33 b(v)-5 b(alues)32 b(in)e(the)i(t)m(w)m(o)g (dimensional)g(arra)m(y)f Fp(tenso)m(r)h Fz(and)f(pro)m(vide)g(t)m(w)m (o)191 4151 y(di\013eren)m(t)c(w)m(a)m(ys)h(of)f(accessing)i(them.)39 b(The)27 b(leading)g(dimension)g(of)g(the)g(tensor)g(arra)m(y)g(ranges) g(o)m(v)m(er)i(the)191 4264 y(comp)s(onen)m(t)e(index)f Fr(i)h Fz(of)g(the)f(function)h Fr(F)13 b Fz(,)27 b(i.e.,)i Fr(F)1906 4278 y Fh(i)p FC(+1)2051 4264 y Fz(for)e Fr(i)e Fz(=)g(0)p Fr(;)15 b(:)g(:)g(:)i(;)e(m)e Fn(\000)g Fz(1.)40 b(The)26 b(sub-arra)m(ys)g(p)s(oin)m(ted)191 4377 y(to)40 b(b)m(y)f Fp(tenso)m(r[i])h Fz(ha)m(v)m(e)h(iden)m(tical)g(structure)e (for)g(all)h Fr(i)p Fz(.)67 b(Eac)m(h)40 b(of)g(them)f(represen)m(ts)g (the)g(symmetric)191 4490 y(tensors)d(up)e(to)j(order)e Fr(d)h Fz(of)g(the)g(scalar)g(function)g Fr(F)2039 4504 y Fh(i)p FC(+1)2193 4490 y Fz(in)g Fr(p)f Fz(v)-5 b(ariables.)57 b(The)3007 4416 y Fk(\000)3048 4449 y Fh(p)p FC(+)p Fh(d)3094 4521 y(d)3175 4416 y Fk(\001)3252 4490 y Fz(mixed)36 b(partial)191 4603 y(deriv)-5 b(ativ)m(es)26 b(in)f(eac)m(h)h(of)f(the) g Fr(m)f Fz(tensors)h(are)g(linearly)h(ordered)e(according)i(to)f(the)g (tetrahedral)h(sc)m(heme)191 4716 y(describ)s(ed)33 b(b)m(y)h(Kn)m(uth) f([)1041 4716 y SDict begin H.S end 1041 4716 a Black Fz(11)p Black 1132 4657 a SDict begin H.R end 1132 4657 a 1132 4716 a SDict begin [/Color [0 1 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (cite.Knuth73) cvn H.B /ANN pdfmark end 1132 4716 a Fz(].)52 b(In)33 b(the)i(familiar)f(quadratic)h(case)g Fr(d)d Fz(=)f(2)j(the)g(deriv)-5 b(ativ)m(e)36 b(with)e(resp)s(ect)191 4829 y(to)h Fr(z)348 4843 y Fh(j)418 4829 y Fz(and)f Fr(z)641 4844 y Fh(k)717 4829 y Fz(with)g Fr(z)k Fz(as)c(in)g(\()1268 4829 y SDict begin H.S end 1268 4829 a Black Fz(2)p Black 1314 4770 a SDict begin H.R end 1314 4770 a 1314 4829 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (equation.3.2) cvn H.B /ANN pdfmark end 1314 4829 a Fz(\))g(and)f Fr(j)k Fn(\024)31 b Fr(k)37 b Fz(is)d(stored)g(at)g Fp(tenso)m(r[i][l])i Fz(with)d Fr(l)g Fz(=)e Fr(k)26 b Fn(\003)d Fz(\()p Fr(k)j Fz(+)c(1\))p Fr(=)p Fz(2)j(+)d Fr(j)5 b Fz(.)191 4941 y(A)m(t)42 b Fr(j)48 b Fz(=)43 b(0)g(=)f Fr(k)i Fz(and)d(hence)g Fr(l)k Fz(=)d(0)f(w)m(e)h(\014nd)d(the)i(function)g(v)-5 b(alue)41 b Fr(F)2720 4955 y Fh(i)p FC(+1)2880 4941 y Fz(itself)g(and)g(the)g(gradien)m(t)191 5054 y Fn(r)p Fr(F)325 5068 y Fh(i)p FC(+1)469 5054 y Fz(=)25 b Fr(@)5 b(F)676 5068 y Fh(i)p FC(+1)795 5054 y Fr(=@)g(x)945 5069 y Fh(k)1019 5054 y Fz(is)30 b(stored)g(at)i Fr(l)27 b Fz(=)e Fr(k)s Fz(\()p Fr(k)f Fz(+)c(1\))p Fr(=)p Fz(2)32 b(with)e Fr(j)h Fz(=)24 b(0)31 b(for)f Fr(k)f Fz(=)c(1)p Fr(;)15 b(:)g(:)g(:)i(;)e(p)p Fz(.)332 5217 y(F)-8 b(or)27 b(general)g Fr(d)g Fz(w)m(e)f(com)m(bine)h(the)f(v)-5 b(ariable)27 b(indices)f(to)h(a)g(m)m(ulti-index)f Fr(j)31 b Fz(=)25 b(\()p Fr(j)3033 5231 y FC(1)3073 5217 y Fr(;)15 b(j)3150 5231 y FC(2)3191 5217 y Fr(;)g(:)g(:)g(:)h(;)f(j)3429 5232 y Fh(d)3471 5217 y Fz(\),)27 b(where)191 5330 y Fr(j)228 5345 y Fh(k)306 5330 y Fz(indicates)36 b(di\013eren)m(tiation) h(with)d(resp)s(ect)h(to)h(v)-5 b(ariable)36 b Fr(x)2322 5344 y Fh(j)2351 5356 y Fg(k)2427 5330 y Fz(with)f Fr(j)2676 5345 y Fh(k)2752 5330 y Fn(2)d(f)p Fz(0)p Fr(;)15 b Fz(1)p Fr(;)g(:)g(:)g(:)k(;)c(p)p Fn(g)p Fz(.)55 b(The)34 b(v)-5 b(alue)p Black Black eop end %%Page: 31 31 TeXDict begin 31 30 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.31) cvn /DEST pdfmark end 183 199 a Black 191 307 a Ft(3.4)92 b(Higher)31 b(Deriv)-5 b(ativ)m(e)33 b(T)-8 b(ensors)2268 b Fz(31)p Black 191 606 a Fr(j)228 621 y Fh(k)309 606 y Fz(=)38 b(0)h(indicates)g(no)f(di\013eren)m(tiation)i (so)f(that)f(all)h(lo)m(w)m(er)h(deriv)-5 b(ativ)m(es)39 b(are)g(also)g(con)m(tained)h(in)e(the)191 719 y(same)32 b(data)g(structure)f(as)h(describ)s(ed)e(ab)s(o)m(v)m(e)j(for)e(the)h (quadratic)g(case.)45 b(The)31 b(lo)s(cation)i(of)e(the)h(partial)191 832 y(deriv)-5 b(ativ)m(e)32 b(sp)s(eci\014ed)e(b)m(y)g Fr(j)36 b Fz(is)30 b(computed)g(b)m(y)h(the)f(function)p Black Black 491 1052 a Fp(int)g(address\(d,)15 b(j\))491 1165 y(int)30 b(d;)984 b Fz(//)31 b(highest)g(deriv)-5 b(ativ)m(e)32 b(degree)f Fr(d)491 1277 y Fp(int)f(j[d];)908 b Fz(//)31 b(m)m(ulti-index)g Fr(j)191 1497 y Fz(and)23 b(it)h(ma)m(y)g(th)m(us)f(b)s(e)g(referenced)g(as)h Fp(tenso)m (r[i][address\(d,)15 b(j\)])p Fz(.)41 b(Notice)26 b(that)e(the)f (address)g(computation)191 1610 y(do)s(es)f(dep)s(end)f(on)i(the)g (degree)g Fr(d)g Fz(but)f(not)h(on)g(the)f(n)m(um)m(b)s(er)g(of)h (directions)g Fr(p)p Fz(,)h(whic)m(h)e(could)h(theoretically)191 1723 y(b)s(e)33 b(enlarged)h(without)g(the)g(need)f(to)i(reallo)s(cate) h(the)e(original)h(tensor.)51 b(Also,)35 b(the)f(comp)s(onen)m(ts)g(of) g Fr(j)191 1836 y Fz(need)d(to)i(b)s(e)e(non-increasing.)45 b(T)-8 b(o)33 b(some)f(C)f(programmers)g(it)i(ma)m(y)f(app)s(ear)f (more)h(natural)g(to)g(access)191 1949 y(tensor)e(en)m(tries)g(b)m(y)g (successiv)m(e)h(dereferencing)f(in)f(the)h(form)g Fp(tenso)m (rentry[i][)15 b(j1)g(][)g(j2)g(])p Fr(:)g(:)g(:)5 b Fp([)15 b(jd)g(])p Fz(.)42 b(W)-8 b(e)30 b(ha)m(v)m(e)191 2062 y(also)36 b(pro)m(vided)e(this)g(mo)s(de,)i(alb)s(eit)f(with)g (the)g(restriction)g(that)h(the)e(indices)h Fr(j)2986 2076 y FC(1)3026 2062 y Fr(;)15 b(j)3103 2076 y FC(2)3143 2062 y Fr(;)g(:)g(:)g(:)i(;)e(j)3382 2077 y Fh(d)3458 2062 y Fz(are)35 b(non-)191 2175 y(increasing.)k(In)25 b(the)g(second)g(order)f(case)i(this)f(means)g(that)g(the)h(Hessian)f (en)m(tries)h(m)m(ust)e(b)s(e)h(sp)s(eci\014ed)f(in)191 2288 y(or)f(b)s(elo)m(w)f(the)h(diagonal.)40 b(If)22 b(this)g(restriction)i(is)f(violated)h(the)f(v)-5 b(alues)23 b(are)g(almost)g(certain)h(to)f(b)s(e)f(wrong)191 2401 y(and)31 b(arra)m(y)i(b)s(ounds)d(ma)m(y)j(b)s(e)e(violated.)47 b(W)-8 b(e)34 b(emphasize)e(that)h(subscripting)e(is)h(not)g(o)m(v)m (erloaded)i(but)191 2513 y(that)29 b Fp(tenso)m(rentry)g Fz(is)f(a)g(con)m(v)m(en)m(tional)j(and)c(th)m(us)h(mo)s(derately)h (e\016cien)m(t)g(C)f(p)s(oin)m(ter)g(structure.)39 b(Suc)m(h)27 b(a)191 2626 y(p)s(oin)m(ter)j(structure)g(can)h(b)s(e)f(allo)s(cated)i (and)e(set)h(up)e(completely)j(b)m(y)e(the)h(function)p Black Black 491 2846 a Fp(void**)g(tenso)m(rsetup\(m,p,d,tenso)m(r\)) 491 2959 y(int)f(m;)959 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(dep)s (enden)m(t)f(v)-5 b(ariables)31 b Fr(n)491 3072 y Fp(int)f(p;)984 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(directions)h Fr(p)491 3185 y Fp(int)f(d;)984 b Fz(//)31 b(highest)g(deriv)-5 b(ativ)m(e)32 b(degree)f Fr(d)491 3298 y Fp(double)g(tenso)m (r[m][size];)343 b Fz(//)31 b(p)s(oin)m(ter)g(to)g(t)m(w)m(o)h (dimensional)e(arra)m(y)191 3533 y(Here,)35 b Fp(tenso)m(r)g Fz(is)f(the)g(arra)m(y)h(of)f Fr(m)f Fz(p)s(oin)m(ters)h(p)s(oin)m (ting)g(to)h(arra)m(ys)f(of)g Fp(size)f Fn(\025)2901 3460 y Fk(\000)2943 3493 y Fh(p)p FC(+)p Fh(d)2988 3565 y(d)3069 3460 y Fk(\001)3145 3533 y Fz(allo)s(cated)j(b)m(y)e(the)191 3646 y(user)29 b(b)s(efore.)40 b(During)30 b(the)g(execution)h(of)f Fp(tenso)m(rsetup)p Fz(,)i Fr(d)19 b Fn(\000)h Fz(1)30 b(la)m(y)m(ers)h(of)f(p)s(oin)m(ters)g(are)h(set)f(up)f(so)h(that)191 3759 y(the)h(return)e(v)-5 b(alue)31 b(allo)m(ws)g(the)g(direct)g (dereferencing)f(of)h(individual)f(tensor)g(elemen)m(ts.)332 3922 y(F)-8 b(or)45 b(example,)k(supp)s(ose)43 b(some)i(activ)m(e)i (section)f(in)m(v)m(olving)g Fr(m)j Fn(\025)f Fz(5)d(dep)s(enden)m(ts)e (and)h Fr(n)49 b Fn(\025)f Fz(2)191 4035 y(indep)s(enden)m(ts)31 b(has)h(b)s(een)g(executed)h(and)f(tap)s(ed.)46 b(W)-8 b(e)33 b(ma)m(y)g(select)h Fr(p)29 b Fz(=)f(2,)33 b Fr(d)c Fz(=)f(3)33 b(and)f(initialize)j(the)191 4148 y Fr(n)24 b Fn(\002)f Fz(2)37 b(seed)f(matrix)g Fr(S)41 b Fz(with)36 b(t)m(w)m(o)i(columns)d Fr(s)1840 4162 y FC(1)1916 4148 y Fz(and)g Fr(s)2141 4162 y FC(2)2180 4148 y Fz(.)58 b(Then)35 b(w)m(e)i(are)f(able)h(to)g(execute)g(the)f(co)s(de)191 4261 y(segmen)m(t)p Black Black 491 4480 a Fp(double****)d(tenso)m (rentry)e(=)f(\(double****\))j(tenso)m(rsetup\(m,p,d,tenso)m(r\);)491 4593 y(tenso)m(r)p 724 4593 28 4 v 34 w(eval\(tag,m,n,d,p,x,tenso)m (r,S\);)191 4813 y Fz(This)g(w)m(a)m(y)-8 b(,)35 b(w)m(e)f(ev)-5 b(aluated)35 b(all)f(tensors)g(de\014ned)e(in)h(\()2056 4813 y SDict begin H.S end 2056 4813 a Black Fz(2)p Black 2102 4754 a SDict begin H.R end 2102 4754 a 2102 4813 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (equation.3.2) cvn H.B /ANN pdfmark end 2102 4813 a Fz(\))h(up)e(to)i(degree)g(3)g(in)f(b)s (oth)g(directions)h Fr(s)3572 4827 y FC(1)3644 4813 y Fz(and)191 4926 y Fr(s)234 4940 y FC(2)306 4926 y Fz(at)f(some)h (argumen)m(t)f Fr(x)p Fz(.)48 b(T)-8 b(o)34 b(allo)m(w)g(the)f(access)h (of)f(tensor)g(en)m(tries)h(b)m(y)f(dereferencing)g(the)g(p)s(oin)m (ter)191 5039 y(structure)d Fp(tenso)m(rentry)h Fz(has)f(b)s(een)g (created.)42 b(No)m(w,)31 b(the)g(v)-5 b(alue)31 b(of)f(the)h(mixed)f (partial)1407 5211 y Fr(@)1460 5178 y FC(3)1500 5211 y Fr(F)1558 5225 y FC(5)1598 5211 y Fz(\()p Fr(x)20 b Fz(+)g Fr(s)1839 5225 y FC(1)1878 5211 y Fr(z)1920 5225 y FC(1)1980 5211 y Fz(+)g Fr(s)2114 5225 y FC(2)2153 5211 y Fr(z)2195 5225 y FC(2)2235 5211 y Fz(\))p 1407 5251 864 4 v 1702 5336 a Fr(@)5 b(z)1801 5305 y FC(2)1797 5362 y(1)1841 5336 y Fr(@)g(z)1936 5350 y FC(2)2280 5140 y Fk(\014)2280 5195 y(\014)2280 5249 y(\014)2280 5304 y(\014)2310 5366 y Fh(z)2343 5375 y Fv(1)2378 5366 y FC(=0=)p Fh(z)2556 5375 y Fv(2)p Black Black eop end %%Page: 32 32 TeXDict begin 32 31 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.32) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fz(32)2300 b Ft(3)92 b(EASY-TO-USE)29 b(DRIVERS)p Black 191 606 a Fz(can)i(b)s(e)e(reco)m(v)m(ered)j(as)p Black Black 930 847 a Fp(tenso)m(rentry[4][2][1][1])185 b Fz(or)c Fp(tenso)m(r[4][address\(d,)15 b(j\)])p Fz(,)191 1088 y(where)30 b(the)g(in)m(teger)i(arra)m(y)f Fp(j)g Fz(ma)m(y)g(equal)f (\(1,1,2\),)k(\(1,2,1\))e(or)f(\(2,1,1\).)43 b(Analogously)-8 b(,)32 b(the)f(en)m(try)p Black Black 942 1329 a Fp(tenso)m (rentry[2][1][0][0])186 b Fz(or)181 b Fp(tenso)m(r[2][address\(d,)15 b(j\)])191 1570 y Fz(with)26 b Fp(j)i Fz(=)e(\(1,0,0\))j(con)m(tains)f (the)f(\014rst)g(deriv)-5 b(ativ)m(e)28 b(of)f(the)g(third)f(dep)s (enden)m(t)g(v)-5 b(ariable)28 b Fr(F)3240 1584 y FC(3)3306 1570 y Fz(with)f(resp)s(ect)191 1683 y(to)k(the)g(\014rst)e(di\013eren) m(tiation)j(parameter)f Fr(z)1709 1697 y FC(1)1749 1683 y Fz(.)332 1846 y(Note,)36 b(that)f(the)f(p)s(oin)m(ter)g(structure)f Fp(tenso)m(rentry)i Fz(has)f(to)h(b)s(e)e(set)h(up)f(only)h(once.)52 b(Changing)34 b(the)191 1959 y(v)-5 b(alues)30 b(of)f(the)h(arra)m(y)g Fp(tenso)m(r)p Fz(,)h(e.g.)g(b)m(y)e(a)h(further)e(call)j(of)f Fp(tenso)m(r)p 2413 1959 28 4 v 33 w(eval)p Fz(,)g(directly)g (e\013ects)h(the)f(v)-5 b(alues)30 b(ac-)191 2072 y(cessed)23 b(b)m(y)g Fp(tenso)m(rentry)p Fz(.)39 b(When)22 b(no)h(more)g(deriv)-5 b(ativ)m(e)24 b(ev)-5 b(aluations)24 b(are)f(desired)g(the)f(p)s(oin)m (ter)h(structure)191 2185 y Fp(tenso)m(rentry)31 b Fz(can)g(b)s(e)f (deallo)s(cated)i(b)m(y)e(a)h(call)h(to)f(the)g(function)p Black Black 491 2426 a Fp(int)f(freetenso)m(r\(m,p,d,)j(\(double)e (****\))i(tenso)m(rentry\))491 2539 y(int)d(m;)959 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(dep)s(enden)m(t)f(v)-5 b(ariables)31 b Fr(m)491 2652 y Fp(int)f(p;)984 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fr(p)491 2765 y Fp(int)f(d;)984 b Fz(//)31 b(highest)g(deriv)-5 b(ativ)m(e)32 b(degree)f Fr(d)491 2878 y Fp(double***)h(tenso)m (rentry[m];)203 b Fz(//)31 b(return)f(v)-5 b(alue)31 b(of)f Fp(tenso)m(rsetup)191 3119 y Fz(that)h(do)s(es)f(not)h(deallo)s (cate)h(the)f(arra)m(y)g Fp(tenso)m(r)p Fz(.)332 3281 y(The)f(driv)m(ers)h(pro)m(vided)f(for)g(e\016cien)m(t)i(calculation)h (of)e(higher)f(order)h(deriv)-5 b(ativ)m(es)32 b(are)f(protot)m(yp)s (ed)191 3394 y(in)h(the)g(header)g(\014le)g Fs ()p Fz(,)26 b(whic)m(h)32 b(is)g(included)g(b)m (y)g(the)g(global)i(header)e(\014le)191 3507 y Fs()e Fz(automatically)37 b(\(see)1704 3507 y SDict begin H.S end 1704 3507 a Black Fz(Section)31 b(8.3)p Black 2139 3445 a SDict begin H.R end 2139 3445 a 2139 3507 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.8.3) cvn H.B /ANN pdfmark end 2139 3507 a Fz(\).)52 b(Example)35 b(co)s(des)f(using)g(the)g (ab)s(o)m(v)m(e)i(pro)s(ce-)191 3620 y(dures)e(can)i(b)s(e)e(found)g (in)h(the)h(\014les)f Fs(taylorexam.C)d Fz(and)i Fs(accessexam.C)e Fz(con)m(tained)37 b(in)e(the)g(sub)s(di-)191 3733 y(rectory)c Fs(examples/additional_examp)o(les)o(/tay)o(lor)o Fz(.)191 3886 y SDict begin H.S end 191 3886 a 191 3886 a SDict begin 13.6 H.A end 191 3886 a 191 3886 a SDict begin [/View [/XYZ H.V]/Dest (subsection.3.5) cvn /DEST pdfmark end 191 3886 a 146 x FA(3.5)112 b(Deriv)-6 b(ativ)m(es)38 b(of)g(Implicit)f (and)i(In)m(v)m(erse)e(F)-9 b(unctions)191 4255 y Fz(F)h(requen)m(tly)g (,)26 b(one)c(needs)g(deriv)-5 b(ativ)m(es)24 b(of)e(v)-5 b(ariables)23 b Fr(y)28 b Fn(2)d Fz(I)-20 b(R)2201 4219 y Fh(m)2290 4255 y Fz(that)23 b(are)f(implicitly)i(de\014ned)d(as)h (functions)191 4368 y(of)30 b(some)h(v)-5 b(ariables)31 b Fr(x)25 b Fn(2)g Fz(I)-20 b(R)1142 4332 y Fh(n)p Fl(\000)p Fh(m)1336 4368 y Fz(b)m(y)30 b(an)h(algebraic)h(system)e(of)h (equations)1160 4575 y Fr(G)p Fz(\()p Fr(z)t Fz(\))52 b(=)e(0)26 b Fn(2)f Fz(I)-20 b(R)1756 4538 y Fh(m)1913 4575 y Fz(with)91 b Fr(z)29 b Fz(=)c(\()p Fr(y)s(;)15 b(x)p Fz(\))27 b Fn(2)d Fz(I)-20 b(R)2750 4538 y Fh(n)2797 4575 y Fr(:)191 4783 y Fz(Naturally)-8 b(,)28 b(the)e Fr(n)f Fz(argumen)m(ts)h(of)g Fr(G)g Fz(need)f(not)h(b)s(e)f (partitioned)h(in)g(this)f(regular)h(fashion)f(and)g(w)m(e)i(wish)191 4896 y(to)38 b(pro)m(vide)f(\015exibilit)m(y)i(for)e(a)h(con)m(v)m (enien)m(t)h(selection)g(of)e(the)h Fr(n)24 b Fn(\000)h Fr(m)37 b Fq(truly)h Fz(indep)s(enden)m(t)e(v)-5 b(ariables.)191 5009 y(Let)33 b Fr(P)43 b Fn(2)28 b Fz(I)-20 b(R)626 4973 y FC(\()p Fh(n)p Fl(\000)p Fh(m)p FC(\))p Fl(\002)p Fh(n)975 5009 y Fz(b)s(e)32 b(a)i(0)22 b Fn(\000)f Fz(1)34 b(matrix)f(that)g(pic)m(ks)g(out)g(these)h(v)-5 b(ariables)33 b(so)g(that)h(it)f(is)g(a)g(column)191 5122 y(p)s(erm)m(utation)d(of)h (the)g(matrix)f([0)p Fr(;)15 b(I)1417 5136 y Fh(n)p Fl(\000)p Fh(m)1583 5122 y Fz(])25 b Fn(2)g Fz(I)-20 b(R)1798 5086 y FC(\()p Fh(n)p Fl(\000)p Fh(m)p FC(\))p Fl(\002)p Fh(n)2115 5122 y Fz(.)41 b(Then)29 b(the)i(nonlinear)f(system)1565 5330 y Fr(G)p Fz(\()p Fr(z)t Fz(\))52 b(=)e(0)p Fr(;)106 b(P)13 b(z)30 b Fz(=)25 b Fr(x;)p Black Black eop end %%Page: 33 33 TeXDict begin 33 32 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.33) cvn /DEST pdfmark end 183 199 a Black 191 307 a Ft(3.5)92 b(Deriv)-5 b(ativ)m(es)33 b(of)d(Implicit)h(and)f(In)m(v)m (erse)h(F)-8 b(unctions)1515 b Fz(33)p Black 191 606 a(has)30 b(a)i(regular)f(Jacobian,)g(wherev)m(er)g(the)g(implicit)h (function)e(theorem)i(yields)e Fr(y)k Fz(as)d(a)g(function)g(of)g Fr(x)p Fz(.)191 719 y(Hence,)g(w)m(e)g(ma)m(y)g(also)h(write)1232 719 y SDict begin H.S end 1232 719 a 1232 719 a SDict begin 13.6 H.A end 1232 719 a 1232 719 a SDict begin [/View [/XYZ H.V]/Dest (equation.3.3) cvn /DEST pdfmark end 1232 719 a 1218 949 a Fr(F)13 b Fz(\()p Fr(z)t Fz(\))26 b(=)1527 821 y Fk(\022)1636 892 y Fr(G)p Fz(\()p Fr(z)t Fz(\))1671 1005 y Fr(P)13 b(z)1866 821 y Fk(\023)1983 949 y Fn(\021)2104 821 y Fk(\022)2249 892 y Fz(0)2213 1005 y Fr(P)g(z)2372 821 y Fk(\023)2489 949 y Fn(\021)50 b Fr(S)20 b(x;)912 b Fz(\(3\))191 1194 y(where)33 b Fr(S)j Fz(=)31 b([0)p Fr(;)15 b(I)801 1208 y Fh(p)842 1194 y Fz(])867 1161 y Fh(T)953 1194 y Fn(2)31 b Fz(I)-20 b(R)1124 1159 y Fh(n)p Fl(\002)p Fh(p)1295 1194 y Fz(with)34 b Fr(p)d Fz(=)f Fr(n)23 b Fn(\000)f Fr(m)p Fz(.)51 b(No)m(w,)35 b(w)m(e)g(ha)m(v)m(e)g(rewritten)f(the)g(original)h(implicit)191 1307 y(functional)c(relation)h(b)s(et)m(w)m(een)f Fr(x)g Fz(and)f Fr(y)k Fz(as)d(an)f(in)m(v)m(erse)i(relation)g Fr(F)13 b Fz(\()p Fr(z)t Fz(\))27 b(=)f Fr(S)5 b(x)p Fz(.)41 b(In)30 b(practice,)j(w)m(e)e(ma)m(y)191 1420 y(implemen)m(t)f(the)g(pro)5 b(jection)30 b Fr(P)42 b Fz(simply)29 b(b)m(y)h(marking)f Fr(n)18 b Fn(\000)g Fr(m)30 b Fz(of)f(the)h(indep)s(enden)m(ts)e(also)i(dep)s(enden)m(t.) 332 1583 y(Giv)m(en)23 b(an)m(y)g Fr(F)38 b Fz(:)26 b(I)-20 b(R)977 1547 y Fh(n)1049 1583 y Fn(7!)25 b Fz(I)-20 b(R)1245 1547 y Fh(n)1314 1583 y Fz(that)23 b(is)f(lo)s(cally)i(in)m(v)m (ertible)f(and)f(an)g(arbitrary)g(seed)g(matrix)h Fr(S)30 b Fn(2)25 b Fz(I)-20 b(R)3653 1547 y Fh(n)p Fl(\002)p Fh(p)191 1696 y Fz(w)m(e)33 b(ma)m(y)h(ev)-5 b(aluate)34 b(all)g(deriv)-5 b(ativ)m(es)34 b(of)f Fr(z)h Fn(2)29 b Fz(I)-20 b(R)1820 1660 y Fh(n)1900 1696 y Fz(with)32 b(resp)s(ect)h(to)g Fr(x)d Fn(2)f Fz(I)-20 b(R)2787 1660 y Fh(p)2859 1696 y Fz(b)m(y)33 b(calling)h(the)f(follo)m(wing)191 1809 y(routine:)p Black Black 491 2027 a Fp(void)d(inverse)p 939 2027 28 4 v 33 w(tenso)m(r)p 1200 2027 V 34 w (eval\(tag,n,d,p,z,tenso)m(r,S\))491 2140 y(sho)m(rt)h(int)f(tag;)690 b Fz(//)31 b(tap)s(e)g(iden)m(ti\014cation)491 2253 y Fp(int)f(n;)984 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(v)-5 b(ariables)31 b Fr(n)491 2366 y Fp(int)f(d;)984 b Fz(//)31 b(highest)g(deriv)-5 b(ativ)m(e)32 b(degree)f Fr(d)491 2479 y Fp(int)f(p;)984 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(directions)h Fr(p)491 2592 y Fp(double)g(z[n];)745 b Fz(//)31 b(v)-5 b(alues)31 b(of)g(indep)s(enden)m(t)e(v)-5 b(ariables)31 b Fr(z)491 2705 y Fp(double)g(tenso)m(r[n][size];)368 b Fz(//)31 b(partials)g(of)g Fr(z)k Fz(with)30 b(resp)s(ect)g(to)h Fr(x)491 2818 y Fp(double)g(S[n][p];)635 b Fz(//)31 b(seed)g(matrix)g Fr(S)191 3036 y Fz(The)f(results)g(obtained)h(in)g Fp(tenso)m(r)g Fz(are)g(exactly)i(the)d(same)h(as)g(if)g(w)m(e)g(had)f(called)i Fp(tenso)m(r)p 3255 3036 V 33 w(eval)f Fz(with)f Fp(tag)191 3149 y Fz(p)s(oin)m(ting)e(to)g(a)f(tap)s(e)h(for)f(the)g(ev)-5 b(aluation)29 b(of)f(the)f(in)m(v)m(erse)i(function)e Fr(z)i Fz(=)c Fr(F)2796 3116 y Fl(\000)p FC(1)2890 3149 y Fz(\()p Fr(y)s Fz(\))j(for)f(whic)m(h)g(naturally)191 3262 y Fr(n)39 b Fz(=)g Fr(m)p Fz(.)65 b(Note)41 b(that)e(the)g (columns)f(of)h Fr(S)44 b Fz(b)s(elong)39 b(to)g(the)g(domain)g(of)g (that)g(function.)66 b(Individual)191 3375 y(deriv)-5 b(ativ)m(e)38 b(comp)s(onen)m(ts)f(can)g(b)s(e)f(accessed)h(in)g (tensor)f(exactly)j(as)d(in)h(the)f(explicit)i(case)g(describ)s(ed)191 3488 y(ab)s(o)m(v)m(e.)332 3650 y(It)i(m)m(ust)f(b)s(e)g(understo)s(o)s (d)e(that)j Fp(inverse)p 1759 3650 V 33 w(tenso)m(r)p 2020 3650 V 34 w(eval)f Fz(actually)i(computes)f(the)f(deriv)-5 b(ativ)m(es)41 b(of)f Fr(z)191 3763 y Fz(with)33 b(resp)s(ect)g(to)h Fr(x)f Fz(that)g(is)h(de\014ned)d(b)m(y)i(the)h(equation)g Fr(F)13 b Fz(\()p Fr(z)t Fz(\))30 b(=)g Fr(F)13 b Fz(\()p Fr(z)2652 3777 y FC(0)2692 3763 y Fz(\))23 b(+)e Fr(S)f(x)p Fz(.)49 b(In)33 b(other)g(w)m(ords)g(the)191 3876 y(base)27 b(p)s(oin)m(t)g(at)h(whic)m(h)e(the)i(in)m(v)m(erse)g(function)e(is)h (di\013eren)m(tiated)i(is)e(giv)m(en)h(b)m(y)e Fr(F)13 b Fz(\()p Fr(z)3025 3890 y FC(0)3066 3876 y Fz(\).)40 b(The)26 b(routine)h(has)191 3989 y(no)36 b(capabilit)m(y)h(for)e(in)m (v)m(erting)i Fr(F)49 b Fz(itself)36 b(as)g(solving)h(systems)e(of)h (nonlinear)g(equations)g Fr(F)13 b Fz(\()p Fr(z)t Fz(\))35 b(=)f(0)i(in)191 4102 y(the)d(\014rst)f(place)i(is)g(not)f(just)f(a)i (di\013eren)m(tiation)h(task.)49 b(Ho)m(w)m(ev)m(er,)36 b(the)d(routine)g Fp(jac)p 3105 4102 V 33 w(solv)g Fz(describ)s(ed)f (in)191 4215 y SDict begin H.S end 191 4215 a Black Fz(Section)f(3.1)p Black 625 4153 a SDict begin H.R end 625 4153 a 625 4215 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.3.1) cvn H.B /ANN pdfmark end 625 4215 a 31 w Fz(ma)m(y)g(certainly) g(b)s(e)f(v)m(ery)h(useful)e(for)h(that)h(purp)s(ose.)332 4378 y(As)f(an)h(example)g(consider)f(the)h(follo)m(wing)g(t)m(w)m(o)h (nonlinear)e(expressions)1225 4559 y Fr(G)1296 4573 y FC(1)1336 4559 y Fz(\()p Fr(z)1413 4573 y FC(1)1453 4559 y Fr(;)15 b(z)1535 4573 y FC(2)1575 4559 y Fr(;)g(z)1657 4573 y FC(3)1697 4559 y Fr(;)g(z)1779 4573 y FC(4)1820 4559 y Fz(\))83 b(=)g Fr(z)2138 4522 y FC(2)2134 4582 y(1)2198 4559 y Fz(+)19 b Fr(z)2334 4522 y FC(2)2330 4582 y(2)2394 4559 y Fn(\000)h Fr(z)2531 4522 y FC(2)2527 4582 y(3)1225 4697 y Fr(G)1296 4711 y FC(2)1336 4697 y Fz(\()p Fr(z)1413 4711 y FC(1)1453 4697 y Fr(;)15 b(z)1535 4711 y FC(2)1575 4697 y Fr(;)g(z)1657 4711 y FC(3)1697 4697 y Fr(;)g(z)1779 4711 y FC(4)1820 4697 y Fz(\))83 b(=)g(cos\()p Fr(z)2290 4711 y FC(4)2330 4697 y Fz(\))21 b Fn(\000)f Fr(z)2519 4711 y FC(1)2559 4697 y Fr(=z)2646 4711 y FC(3)2731 4697 y Fr(:)191 4878 y Fz(The)j(equations)i Fr(G)p Fz(\()p Fr(z)t Fz(\))h(=)f(0)f(describ)s(e)f(the)h(relation)h(b) s(et)m(w)m(een)g(the)f(Cartesian)g(co)s(ordinates)g(\()p Fr(z)3423 4892 y FC(1)3463 4878 y Fr(;)15 b(z)3545 4892 y FC(2)3585 4878 y Fz(\))24 b(and)191 4991 y(the)g(p)s(olar)g(co)s (ordinates)h(\()p Fr(z)1124 5005 y FC(3)1164 4991 y Fr(;)15 b(z)1246 5005 y FC(4)1286 4991 y Fz(\))24 b(in)g(the)g(plane.)39 b(No)m(w,)26 b(supp)s(ose)d(w)m(e)i(are)f(in)m(terested)h(in)f(the)g (deriv)-5 b(ativ)m(es)191 5104 y(of)37 b(the)g(second)f(Cartesian)h Fr(y)1224 5118 y FC(1)1299 5104 y Fz(=)e Fr(z)1447 5118 y FC(2)1524 5104 y Fz(and)h(the)h(second)f(\(angular\))i(p)s(olar)e(co) s(ordinate)i Fr(y)3315 5118 y FC(2)3389 5104 y Fz(=)e Fr(z)3538 5118 y FC(4)3614 5104 y Fz(with)191 5217 y(resp)s(ect)30 b(to)i(the)f(other)f(t)m(w)m(o)i(v)-5 b(ariables)31 b Fr(x)1609 5231 y FC(1)1674 5217 y Fz(=)26 b Fr(z)1813 5231 y FC(1)1883 5217 y Fz(and)k Fr(x)2112 5231 y FC(2)2177 5217 y Fz(=)25 b Fr(z)2315 5231 y FC(3)2355 5217 y Fz(.)41 b(Then)29 b(the)i(activ)m(e)i(section)f(could)e(lo)s(ok)191 5330 y(simply)g(lik)m(e)p Black Black eop end %%Page: 34 34 TeXDict begin 34 33 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.34) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fz(34)671 b Ft(4)92 b(BASIC)30 b(DRIVERS)g(F)m(OR)g(THE)g(F)m(OR)-10 b(W)g(ARD)32 b(AND)f(REVERSE)e(MODE)p Black Black Black 1091 606 a Fp(fo)m(r)i(\(j=1;)g(j)g Fr(<)f Fp(5;)15 b(j++\))121 b(z[j])31 b Fo(\034)p Fw(=)f Fp(zp[j];)1091 719 y(g[1])i(=)e (z[1]*z[1]+z[2]*z[2]-z[3]*z[3];)1091 832 y(g[2])i(=)e(cos\(z[4]\))i(-)f (z[1]/z[3];)1091 945 y(g[1])h Fo(\035)p Fw(=)e Fp(gp[1];)322 b(g[2])32 b Fo(\035)p Fw(=)e Fp(gp[2];)1091 1058 y(z[1])h Fo(\035)p Fw(=)f Fp(zd[1];)333 b(z[3])31 b Fo(\035)p Fw(=)f Fp(zd[2];)191 1288 y Fz(where)d Fp(zd[1])i Fz(and)e Fp(zd[2])i Fz(are)f(dumm)m(y)f(argumen)m(ts.)40 b(In)27 b(the)i(last)f(line)h(the)f(t)m(w)m(o)h(indep)s(enden)m(t)e(v)-5 b(ariables)191 1401 y Fp(z[1])30 b Fz(and)g Fp(z[3])g Fz(are)h(made)f(sim)m(ultaneously)h(dep)s(enden)m(t)e(th)m(us)g (generating)j(a)e(square)g(system)g(that)g(can)191 1514 y(b)s(e)g(in)m(v)m(erted)h(\(at)g(most)g(argumen)m(ts\).)42 b(The)29 b(corresp)s(onding)h(pro)5 b(jection)31 b(and)f(seed)g(matrix) h(are)780 1764 y Fr(P)64 b Fz(=)1023 1636 y Fk(\022)1131 1708 y Fz(1)84 b(0)f(0)h(0)1131 1820 y(0)g(0)f(1)h(0)1604 1636 y Fk(\023)1777 1764 y Fz(and)90 b Fr(S)2075 1727 y Fh(T)2181 1764 y Fz(=)2302 1636 y Fk(\022)2410 1708 y Fz(0)84 b(0)f(1)h(0)2410 1820 y(0)g(0)f(0)h(1)2883 1636 y Fk(\023)3010 1764 y Fr(:)191 2009 y Fz(Pro)m(vided)25 b(the)g(v)m(ector)i Fp(zp)d Fz(is)h(consisten)m(t)h(in)f(that)g(its)h (Cartesian)f(and)f(p)s(olar)h(comp)s(onen)m(ts)g(describ)s(e)g(the)191 2122 y(same)33 b(p)s(oin)m(t)g(in)f(the)h(plane)g(the)g(resulting)g (tuple)f Fp(gp)i Fz(m)m(ust)e(v)-5 b(anish.)47 b(The)33 b(call)h(to)f Fp(inverse)p 3353 2122 28 4 v 33 w(tenso)m(r)p 3614 2122 V 34 w(eval)191 2235 y Fz(with)h Fr(n)c Fz(=)h(4,)k Fr(p)c Fz(=)g(2)j(and)f Fr(d)i Fz(as)f(desired)f(will)h(yield)g(the)g (implicit)h(deriv)-5 b(ativ)m(es,)37 b(pro)m(vided)c Fp(tenso)m(r)i Fz(has)191 2348 y(b)s(een)h(allo)s(cated)i (appropriately)f(of)f(course)h(and)f Fr(S)41 b Fz(has)36 b(the)h(v)-5 b(alue)37 b(giv)m(en)g(ab)s(o)m(v)m(e.)61 b(The)36 b(example)h(is)191 2461 y(un)m(t)m(ypical)32 b(in)f(that)g(the)g(implicit)h(function)f(could)g(also)h(b)s(e)e (obtained)i(explicitly)g(b)m(y)f(sym)m(b)s(olic)h(mani-)191 2574 y(pulations.)39 b(It)26 b(is)g(t)m(ypical)i(in)e(that)g(the)g (subset)g(of)g Fr(z)k Fz(comp)s(onen)m(ts)c(that)h(are)f(to)h(b)s(e)e (considered)h(as)g(truly)191 2686 y(indep)s(enden)m(t)j(can)i(b)s(e)f (selected)h(and)f(altered)h(with)g(next)f(to)h(no)f(e\013ort)i(at)f (all.)332 2849 y(The)38 b(presen)m(ted)h(driv)m(ers)f(are)h(protot)m (yp)s(ed)f(in)g(the)h(header)f(\014le)h Fs()p Fz(.)191 2962 y(As)31 b(indicated)h(b)s(efore)f(this)g(header)g(is)g (included)f(b)m(y)h(the)h(global)g(header)f(\014le)h Fs()27 b Fz(au-)191 3075 y(tomatically)36 b(\(see)855 3075 y SDict begin H.S end 855 3075 a Black Fz(Section)c(8.3)p Black 1290 3013 a SDict begin H.R end 1290 3013 a 1290 3075 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.8.3) cvn H.B /ANN pdfmark end 1290 3075 a Fz(\).)48 b(The)32 b(example)i(programs)e Fs(inversexam.cpp)p Fz(,)e Fs(coordinates.cpp)191 3188 y Fz(and)h Fs(trigger.cpp)d Fz(in)k(the)f(directory)h Fs(examples/additional_exampl)o(es/)o(tayl)o (or)25 b Fz(sho)m(w)32 b(the)g(ap-)191 3301 y(plication)g(of)e(the)h (pro)s(cedures)e(describ)s(ed)g(here.)191 3454 y SDict begin H.S end 191 3454 a 191 3454 a SDict begin 13.6 H.A end 191 3454 a 191 3454 a SDict begin [/View [/XYZ H.V]/Dest (section.4) cvn /DEST pdfmark end 191 3454 a 182 x FD(4)135 b(Basic)45 b(Driv)l(ers)h(for)f(the)g(F)-11 b(orw)l(ard)45 b(and)f(Rev)l(erse)j(Mo)t(de)191 3889 y Fz(In)24 b(this)g(section,)j(w)m(e)e(presen)m(t)g(tailored)g(driv)m (ers)g(for)f(di\013eren)m(t)h(v)-5 b(arian)m(ts)25 b(of)g(the)g(forw)m (ard)f(mo)s(de)g(and)g(the)191 4001 y(rev)m(erse)k(mo)s(de,)g(resp)s (ectiv)m(ely)-8 b(.)41 b(F)-8 b(or)28 b(a)g(b)s(etter)g(understanding,) e(w)m(e)i(start)g(with)f(a)h(short)f(description)h(of)191 4114 y(the)j(mathematical)h(bac)m(kground.)332 4277 y(Pro)m(vided)c(no) f(arithmetic)i(exception)g(o)s(ccurs,)f(no)f(comparison)h(including)f Fp(fmax)g Fz(or)g Fp(fmin)h Fz(yields)f(a)191 4390 y(tie,)j Fp(fabs)e Fz(do)s(es)g(not)h(yield)g(zero,)i(and)d(all)h(sp)s(ecial)h (functions)e(w)m(ere)h(ev)-5 b(aluated)30 b(in)e(the)h(in)m(terior)h (of)f(their)191 4503 y(domains,)42 b(the)d(functional)h(relation)h(b)s (et)m(w)m(een)f(the)g(input)e(v)-5 b(ariables)40 b Fr(x)g Fz(and)e(the)i(output)f(v)-5 b(ariables)191 4616 y Fr(y)43 b Fz(denoted)d(b)m(y)f Fr(y)44 b Fz(=)d Fr(F)13 b Fz(\()p Fr(x)p Fz(\))41 b(is)f(in)f(fact)i(analytic.)71 b(In)39 b(other)i(w)m(ords,)h(w)m(e)e(can)g(compute)g(arbitrarily)191 4729 y(high)c(deriv)-5 b(ativ)m(es)38 b(of)f(the)f(v)m(ector)j (function)d Fr(F)48 b Fz(:)36 b Fr(I)-23 b(R)2026 4696 y Fh(n)2108 4729 y Fn(7!)35 b Fr(I)-23 b(R)2321 4696 y Fh(m)2424 4729 y Fz(de\014ned)35 b(b)m(y)i(the)f(activ)m(e)j (section.)61 b(W)-8 b(e)191 4842 y(\014nd)33 b(it)h(most)h(con)m(v)m (enien)m(t)h(to)f(describ)s(e)e(and)h(compute)g(deriv)-5 b(ativ)m(es)36 b(in)d(terms)h(of)h(univ)-5 b(ariate)34 b(T)-8 b(a)m(ylor)191 4955 y(expansions,)29 b(whic)m(h)f(are)i (truncated)e(after)i(the)f(highest)g(deriv)-5 b(ativ)m(e)30 b(degree)f Fr(d)g Fz(that)h(is)f(desired)f(b)m(y)h(the)191 5067 y(user.)40 b(Let)582 5067 y SDict begin H.S end 582 5067 a 582 5067 a SDict begin 13.6 H.A end 582 5067 a 582 5067 a SDict begin [/View [/XYZ H.V]/Dest (equation.4.4) cvn /DEST pdfmark end 582 5067 a 1406 5245 a Fr(x)p Fz(\()p Fr(t)p Fz(\))51 b Fn(\021)1781 5131 y Fh(d)1733 5158 y Fk(X)1738 5354 y Fh(j)t FC(=0)1880 5245 y Fr(x)1932 5259 y Fh(j)1968 5245 y Fr(t)2001 5207 y Fh(j)2088 5245 y Fz(:)g Fr(I)-23 b(R)51 b Fn(7!)f Fr(I)-23 b(R)2529 5207 y Fh(n)3675 5245 y Fz(\(4\))p Black Black eop end %%Page: 35 35 TeXDict begin 35 34 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.35) cvn /DEST pdfmark end 183 199 a Black 3700 307 a Fz(35)p Black 191 606 a(denote)29 b(an)m(y)g(v)m(ector)i(p)s (olynomial)e(in)f(the)h(scalar)h(v)-5 b(ariable)29 b Fr(t)c Fn(2)g Fr(I)-23 b(R)q Fz(.)40 b(In)28 b(other)g(w)m(ords,)h Fr(x)p Fz(\()p Fr(t)p Fz(\))g(describ)s(es)f(a)191 719 y(path)i(in)g Fr(I)-23 b(R)596 686 y Fh(n)673 719 y Fz(parameterized)31 b(b)m(y)g Fr(t)p Fz(.)40 b(The)30 b(T)-8 b(a)m(ylor)32 b(co)s(e\016cien)m(t)g(v)m(ectors)1580 997 y Fr(x)1632 1011 y Fh(j)1719 997 y Fz(=)1862 935 y(1)p 1850 976 68 4 v 1850 1059 a Fr(j)5 b Fz(!)1980 935 y Fr(@)2033 902 y Fh(j)p 1963 976 123 4 v 1963 1059 a Fr(@)g(t)2049 1033 y Fh(j)2096 997 y Fr(x)p Fz(\()p Fr(t)p Fz(\))2251 865 y Fk(\014)2251 919 y(\014)2251 974 y(\014)2251 1028 y(\014)2282 1087 y Fh(t)p FC(=0)191 1277 y Fz(are)27 b(simply)e(the)i(scaled)g (deriv)-5 b(ativ)m(es)27 b(of)g Fr(x)p Fz(\()p Fr(t)p Fz(\))f(at)h(the)g(parameter)f(origin)h Fr(t)e Fz(=)g(0.)40 b(The)25 b(\014rst)h(t)m(w)m(o)h(v)m(ectors)191 1390 y Fr(x)243 1404 y FC(1)282 1390 y Fr(;)15 b(x)374 1404 y FC(2)442 1390 y Fn(2)28 b Fr(I)-23 b(R)618 1357 y Fh(n)697 1390 y Fz(can)32 b(b)s(e)g(visualized)h(as)f(tangen)m(t)i(and)e(curv)-5 b(ature)32 b(at)h(the)f(base)g(p)s(oin)m(t)g Fr(x)3210 1404 y FC(0)3250 1390 y Fz(,)h(resp)s(ectiv)m(ely)-8 b(.)191 1503 y(Pro)m(vided)34 b(that)h Fr(F)47 b Fz(is)35 b Fr(d)f Fz(times)h(con)m(tin)m(uously)g(di\013eren)m(tiable,)i(it)e (follo)m(ws)g(from)f(the)g(c)m(hain)h(rule)f(that)191 1616 y(the)d(image)g(path)822 1616 y SDict begin H.S end 822 1616 a 822 1616 a SDict begin 13.6 H.A end 822 1616 a 822 1616 a SDict begin [/View [/XYZ H.V]/Dest (equation.4.5) cvn /DEST pdfmark end 822 1616 a 1402 1750 a Fr(y)s Fz(\()p Fr(t)p Fz(\))51 b Fn(\021)f Fr(F)13 b Fz(\()p Fr(x)p Fz(\()p Fr(t)p Fz(\)\))52 b(:)e Fr(I)-23 b(R)51 b Fn(7!)g Fr(I)-23 b(R)2514 1713 y Fh(m)3675 1750 y Fz(\(5\))191 1943 y(is)30 b(also)i(smo)s(oth)e(and)g(has)g(\()p Fr(d)21 b Fz(+)f(1\))31 b(T)-8 b(a)m(ylor)31 b(co)s(e\016cien)m(t)i(v)m(ectors) e Fr(y)2493 1957 y Fh(j)2555 1943 y Fn(2)25 b Fr(I)-23 b(R)2728 1910 y Fh(m)2824 1943 y Fz(at)31 b Fr(t)25 b Fz(=)g(0,)31 b(so)g(that)3499 1943 y SDict begin H.S end 3499 1943 a 3499 1943 a SDict begin 13.6 H.A end 3499 1943 a 3499 1943 a SDict begin [/View [/XYZ H.V]/Dest (equation.4.6) cvn /DEST pdfmark end 3499 1943 a 1460 2260 a Fr(y)s Fz(\()p Fr(t)p Fz(\))51 b(=)1830 2146 y Fh(d)1783 2173 y Fk(X)1787 2369 y Fh(j)t FC(=0)1929 2260 y Fr(y)1974 2274 y Fh(j)2010 2260 y Fr(t)2043 2222 y Fh(j)2100 2260 y Fz(+)20 b Fr(O)s Fz(\()p Fr(t)2331 2222 y Fh(d)p FC(+1)2461 2260 y Fz(\))p Fr(:)1154 b Fz(\(6\))191 2575 y(Also)44 b(as)f(a)h(consequence)g(of)g(the)f(c)m(hain)h(rule,)j(one)c(can)h (observ)m(e)g(that)g(eac)m(h)g Fr(y)3079 2589 y Fh(j)3158 2575 y Fz(is)g(uniquely)e(and)191 2688 y(smo)s(othly)30 b(determined)g(b)m(y)h(the)f(co)s(e\016cien)m(t)i(v)m(ectors)g Fr(x)2128 2702 y Fh(i)2187 2688 y Fz(with)e Fr(i)25 b Fn(\024)g Fr(j)5 b Fz(.)42 b(In)29 b(particular)i(w)m(e)g(ha)m(v)m(e) 1057 2914 y Fr(y)1102 2928 y FC(0)1166 2914 y Fz(=)25 b Fr(F)13 b Fz(\()p Fr(x)1420 2928 y FC(0)1460 2914 y Fz(\))1057 3052 y Fr(y)1102 3066 y FC(1)1166 3052 y Fz(=)25 b Fr(F)1333 3015 y Fl(0)1356 3052 y Fz(\()p Fr(x)1443 3066 y FC(0)1483 3052 y Fz(\))p Fr(x)1570 3066 y FC(1)1057 3239 y Fr(y)1102 3253 y FC(2)1166 3239 y Fz(=)g Fr(F)1333 3202 y Fl(0)1356 3239 y Fz(\()p Fr(x)1443 3253 y FC(0)1483 3239 y Fz(\))p Fr(x)1570 3253 y FC(2)1630 3239 y Fz(+)1731 3178 y(1)p 1731 3219 46 4 v 1731 3302 a(2)1786 3239 y Fr(F)1857 3202 y Fl(00)1900 3239 y Fz(\()p Fr(x)1987 3253 y FC(0)2027 3239 y Fz(\))p Fr(x)2114 3253 y FC(1)2153 3239 y Fr(x)2205 3253 y FC(1)3675 3239 y SDict begin H.S end 3675 3239 a 3675 3239 a SDict begin 16.6 H.A end 3675 3239 a 3675 3239 a SDict begin [/View [/XYZ H.V]/Dest (equation.4.7) cvn /DEST pdfmark end 3675 3239 a Fz(\(7\))1057 3455 y Fr(y)1102 3469 y FC(3)1166 3455 y Fz(=)g Fr(F)1333 3418 y Fl(0)1356 3455 y Fz(\()p Fr(x)1443 3469 y FC(0)1483 3455 y Fz(\))p Fr(x)1570 3469 y FC(3)1630 3455 y Fz(+)20 b Fr(F)1792 3418 y Fl(00)1835 3455 y Fz(\()p Fr(x)1922 3469 y FC(0)1961 3455 y Fz(\))p Fr(x)2048 3469 y FC(1)2088 3455 y Fr(x)2140 3469 y FC(2)2200 3455 y Fz(+)2301 3394 y(1)p 2301 3434 46 4 v 2301 3517 a(6)2356 3455 y Fr(F)2427 3418 y Fl(000)2489 3455 y Fz(\()p Fr(x)2576 3469 y FC(0)2615 3455 y Fz(\))p Fr(x)2702 3469 y FC(1)2742 3455 y Fr(x)2794 3469 y FC(1)2833 3455 y Fr(x)2885 3469 y FC(1)1156 3630 y Fr(:)15 b(:)g(:)191 3856 y Fz(In)30 b(writing)h(do)m(wn)f(the)h(last) h(equations)f(w)m(e)h(ha)m(v)m(e)g(already)f(departed)g(from)f(the)h (usual)f(matrix-v)m(ector)191 3969 y(notation.)41 b(It)28 b(is)h(w)m(ell)g(kno)m(wn)e(that)i(the)f(n)m(um)m(b)s(er)f(of)h(terms)g (that)h(o)s(ccur)f(in)g(these)g(\\sym)m(b)s(olic")i(expres-)191 4082 y(sions)k(for)g(the)g Fr(y)766 4096 y Fh(j)836 4082 y Fz(in)g(terms)f(of)i(the)f(\014rst)f Fr(j)40 b Fz(deriv)-5 b(ativ)m(e)35 b(tensors)f(of)g Fr(F)47 b Fz(and)34 b(the)g(\\input")g (co)s(e\016cien)m(ts)191 4195 y Fr(x)243 4209 y Fh(i)310 4195 y Fz(with)k Fr(i)i Fn(\024)f Fr(j)44 b Fz(gro)m(ws)c(v)m(ery)f (rapidly)f(with)h Fr(j)5 b Fz(.)66 b(F)-8 b(ortunately)g(,)43 b(this)c(exp)s(onen)m(tial)h(gro)m(wth)f(do)s(es)f(not)191 4307 y(o)s(ccur)27 b(in)g(automatic)i(di\013eren)m(tiation,)h(where)d (the)g(man)m(y)h(terms)f(are)g(someho)m(w)h(implicitly)h(com)m(bined) 191 4420 y(so)i(that)g(storage)g(and)f(op)s(erations)h(coun)m(t)g(gro)m (w)g(only)f(quadratically)i(in)e(the)h(b)s(ound)d Fr(d)j Fz(on)f Fr(j)5 b Fz(.)332 4583 y(Pro)m(vided)30 b Fr(F)44 b Fz(is)30 b(analytic,)i(this)f(prop)s(ert)m(y)e(is)i(inherited)f(b)m (y)g(the)h(functions)1412 4809 y Fr(y)1457 4823 y Fh(j)1519 4809 y Fz(=)25 b Fr(y)1660 4823 y Fh(j)1696 4809 y Fz(\()p Fr(x)1783 4823 y FC(0)1822 4809 y Fr(;)15 b(x)1914 4823 y FC(1)1954 4809 y Fr(;)g(:)g(:)g(:)i(;)e(x)2208 4823 y Fh(j)2245 4809 y Fz(\))25 b Fn(2)g Fr(I)-23 b(R)2478 4772 y Fh(m)2544 4809 y Fr(;)191 5035 y Fz(and)30 b(their)g(deriv)-5 b(ativ)m(es)32 b(satisfy)f(the)f(iden)m(tities)1870 5035 y SDict begin H.S end 1870 5035 a 1870 5035 a SDict begin 13.6 H.A end 1870 5035 a 1870 5035 a SDict begin [/View [/XYZ H.V]/Dest (equation.4.8) cvn /DEST pdfmark end 1870 5035 a 1262 5238 a Fr(@)5 b(y)1360 5252 y Fh(j)p 1262 5279 135 4 v 1262 5362 a Fr(@)g(x)1367 5376 y Fh(i)1432 5300 y Fz(=)1538 5238 y Fr(@)g(y)1636 5252 y Fh(j)t Fl(\000)p Fh(i)p 1538 5279 214 4 v 1572 5362 a Fr(@)g(x)1677 5376 y FC(0)1786 5300 y Fz(=)25 b Fr(A)1950 5314 y Fh(j)t Fl(\000)p Fh(i)2066 5300 y Fz(\()p Fr(x)2153 5314 y FC(0)2193 5300 y Fr(;)15 b(x)2285 5314 y FC(1)2325 5300 y Fr(;)g(:)g(:)g(:)h(;)f (x)2578 5314 y Fh(j)t Fl(\000)p Fh(i)2694 5300 y Fz(\))946 b(\(8\))p Black Black eop end %%Page: 36 36 TeXDict begin 36 35 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.36) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fz(36)671 b Ft(4)92 b(BASIC)30 b(DRIVERS)g(F)m(OR)g(THE)g(F)m(OR)-10 b(W)g(ARD)32 b(AND)f(REVERSE)e(MODE)p Black 191 606 a Fz(as)i(established)f(in)g([)899 606 y SDict begin H.S end 899 606 a Black Fz(2)p Black 945 547 a SDict begin H.R end 945 547 a 945 606 a SDict begin [/Color [0 1 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (cite.Chri91a) cvn H.B /ANN pdfmark end 945 606 a Fz(].)41 b(This)29 b(yields)i(in)f(particular)451 786 y Fr(@)5 b(y)549 800 y FC(0)p 448 826 145 4 v 448 910 a Fr(@)g(x)553 924 y FC(0)628 847 y Fz(=)737 786 y Fr(@)g(y)835 800 y FC(1)p 734 826 V 734 910 a Fr(@)g(x)839 924 y FC(1)914 847 y Fz(=)1023 786 y Fr(@)g(y)1121 800 y FC(2)p 1019 826 V 1019 910 a Fr(@)g(x)1124 924 y FC(2)1199 847 y Fz(=)1309 786 y Fr(@)g(y)1407 800 y FC(3)p 1305 826 V 1305 910 a Fr(@)g(x)1410 924 y FC(3)1485 847 y Fz(=)25 b Fr(A)1649 861 y FC(0)1714 847 y Fz(=)g Fr(F)1881 810 y Fl(0)1904 847 y Fz(\()p Fr(x)1991 861 y FC(0)2031 847 y Fz(\))737 1020 y Fr(@)5 b(y)835 1034 y FC(1)p 734 1060 V 734 1143 a Fr(@)g(x)839 1157 y FC(0)914 1081 y Fz(=)1023 1020 y Fr(@)g(y)1121 1034 y FC(2)p 1019 1060 V 1019 1143 a Fr(@)g(x)1124 1157 y FC(1)1199 1081 y Fz(=)1309 1020 y Fr(@)g(y)1407 1034 y FC(3)p 1305 1060 V 1305 1143 a Fr(@)g(x)1410 1157 y FC(2)1485 1081 y Fz(=)25 b Fr(A)1649 1095 y FC(1)1714 1081 y Fz(=)g Fr(F)1881 1044 y Fl(00)1924 1081 y Fz(\()p Fr(x)2011 1095 y FC(0)2050 1081 y Fz(\))p Fr(x)2137 1095 y FC(1)1023 1253 y Fr(@)5 b(y)1121 1267 y FC(2)p 1019 1294 V 1019 1377 a Fr(@)g(x)1124 1391 y FC(0)1199 1315 y Fz(=)1309 1253 y Fr(@)g(y)1407 1267 y FC(3)p 1305 1294 V 1305 1377 a Fr(@)g(x)1410 1391 y FC(1)1485 1315 y Fz(=)25 b Fr(A)1649 1329 y FC(2)1714 1315 y Fz(=)g Fr(F)1881 1277 y Fl(00)1924 1315 y Fz(\()p Fr(x)2011 1329 y FC(0)2050 1315 y Fz(\))p Fr(x)2137 1329 y FC(2)2197 1315 y Fz(+)2298 1253 y(1)p 2298 1294 46 4 v 2298 1377 a(2)2354 1315 y Fr(F)2425 1277 y Fl(000)2486 1315 y Fz(\()p Fr(x)2573 1329 y FC(0)2613 1315 y Fz(\))p Fr(x)2700 1329 y FC(1)2740 1315 y Fr(x)2792 1329 y FC(1)1309 1487 y Fr(@)5 b(y)1407 1501 y FC(3)p 1305 1528 145 4 v 1305 1611 a Fr(@)g(x)1410 1625 y FC(0)1485 1549 y Fz(=)25 b Fr(A)1649 1563 y FC(3)1714 1549 y Fz(=)g Fr(F)1881 1511 y Fl(00)1924 1549 y Fz(\()p Fr(x)2011 1563 y FC(0)2050 1549 y Fz(\))p Fr(x)2137 1563 y FC(3)2197 1549 y Fz(+)20 b Fr(F)2359 1511 y Fl(000)2421 1549 y Fz(\()p Fr(x)2508 1563 y FC(0)2548 1549 y Fz(\))p Fr(x)2635 1563 y FC(1)2674 1549 y Fr(x)2726 1563 y FC(2)2786 1549 y Fz(+)2887 1487 y(1)p 2887 1528 46 4 v 2887 1611 a(6)2942 1549 y Fr(F)3013 1511 y FC(\(4\))3108 1549 y Fz(\()p Fr(x)3195 1563 y FC(0)3234 1549 y Fz(\))p Fr(x)3321 1563 y FC(1)3361 1549 y Fr(x)3413 1563 y FC(1)3453 1549 y Fr(x)3505 1563 y FC(1)1704 1737 y Fr(:)15 b(:)g(:)191 1936 y Fz(The)35 b Fr(m)24 b Fn(\002)g Fr(n)35 b Fz(matrices)i Fr(A)1110 1951 y Fh(k)1153 1936 y Fr(;)15 b(k)39 b Fz(=)34 b(0)p Fr(;)15 b(:)g(:)g(:)i(;)e(d)p Fz(,)38 b(are)f(actually)g(the)g(T)-8 b(a)m(ylor)37 b(co)s(e\016cien)m(ts)h(of)e(the)g(Jacobian)191 2048 y(path)41 b Fr(F)485 2015 y Fl(0)509 2048 y Fz(\()p Fr(x)p Fz(\()p Fr(t)p Fz(\)\),)46 b(a)c(fact)g(that)g(is)g(of)g(in)m (terest)h(primarily)e(in)g(the)h(con)m(text)i(of)d(ordinary)g (di\013eren)m(tial)191 2161 y(equations)31 b(and)f(di\013eren)m(tial)i (algebraic)g(equations.)332 2324 y(Giv)m(en)38 b(the)e(tap)s(e)h(of)g (an)f(activ)m(e)j(section)f(and)e(the)h(co)s(e\016cien)m(ts)h Fr(x)2660 2338 y Fh(j)2696 2324 y Fz(,)h(the)d(resulting)h Fr(y)3348 2338 y Fh(j)3421 2324 y Fz(and)f(their)191 2437 y(deriv)-5 b(ativ)m(es)33 b Fr(A)713 2451 y Fh(j)780 2437 y Fz(can)f(b)s(e)e(ev)-5 b(aluated)33 b(b)m(y)e(appropriate)g (calls)h(to)g(the)g(ADOL-C)f(forw)m(ard)g(mo)s(de)f(imple-)191 2550 y(men)m(tations)41 b(and)e(the)g(ADOL-C)h(rev)m(erse)g(mo)s(de)f (implemen)m(tations.)70 b(The)39 b(scalar)h(v)m(ersions)g(of)g(the)191 2663 y(forw)m(ard)33 b(mo)s(de)h(propagate)h(just)e(one)h(truncated)g (T)-8 b(a)m(ylor)35 b(series)f(from)g(the)g(\()p Fr(x)2978 2677 y Fh(j)3015 2663 y Fz(\))3050 2678 y Fh(j)t Fl(\024)p Fh(d)3211 2663 y Fz(to)h(the)f(\()p Fr(y)3566 2677 y Fh(j)3602 2663 y Fz(\))3637 2678 y Fh(j)t Fl(\024)p Fh(d)3766 2663 y Fz(.)191 2776 y(The)28 b(v)m(ector)j(v)m(ersions)e(of)g(the)g (forw)m(ard)f(mo)s(de)g(propagate)i(families)g(of)f Fr(p)c Fn(\025)g Fz(1)k(suc)m(h)g(truncated)f(T)-8 b(a)m(ylor)191 2889 y(series)24 b(in)g(order)f(to)i(reduce)f(the)g(relativ)m(e)i(cost) f(of)f(the)g(o)m(v)m(erhead)h(incurred)e(in)h(the)g(tap)s(e)g(in)m (terpretation.)191 3002 y(In)30 b(detail,)h(ADOL-C)g(pro)m(vides)p Black Black 491 3234 a Fp(int)f(zos)p 748 3234 28 4 v 32 w(fo)m(rw)m(a)m(rd\(tag,m,n,k)m(eep,x,y\))491 3347 y(sho)m(rt)h(int)f(tag;)690 b Fz(//)31 b(tap)s(e)g(iden)m(ti\014cation) 491 3460 y Fp(int)f(m;)959 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(dep)s (enden)m(t)f(v)-5 b(ariables)31 b Fr(m)491 3573 y Fp(int)f(n;)984 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fr(n)491 3686 y Fp(int)f(k)m(eep;)863 b Fz(//)31 b(\015ag)g(for)f(rev)m(erse)h(mo)s(de)f(preparation)491 3799 y Fp(double)h(x[n];)743 b Fz(//)31 b(indep)s(enden)m(t)f(v)m (ector)i Fr(x)25 b Fz(=)g Fr(x)2814 3813 y FC(0)491 3912 y Fp(double)31 b(y[m];)718 b Fz(//)31 b(dep)s(enden)m(t)f(v)m(ector)i Fr(y)c Fz(=)d Fr(F)13 b Fz(\()p Fr(x)2840 3926 y FC(0)2880 3912 y Fz(\))191 4144 y(for)28 b(the)h Fw(z)p Fz(ero-)p Fw(o)p Fz(rder)g Fw(s)p Fz(calar)g(forw)m(ard)f(mo)s(de.)40 b(This)28 b(driv)m(er)g(computes)g Fr(y)g Fz(=)d Fr(F)13 b Fz(\()p Fr(x)p Fz(\))29 b(with)g(0)c Fn(\024)g Fp(k)m(eep)i Fn(\024)e Fz(1.)191 4257 y(The)c(in)m(teger)h(\015ag)g Fp(k)m(eep)h Fz(pla)m(ys)f(a)f(similar)h(role)g(as)f(in)g(the)h(call)g (to)g Fp(trace)p 2561 4257 V 33 w(on)p Fz(:)37 b(It)21 b(determines)g(if)h Fp(zos)p 3483 4257 V 32 w(fo)m(rw)m(a)m(rd)191 4370 y Fz(writes)34 b(the)f(\014rst)g(T)-8 b(a)m(ylor)35 b(co)s(e\016cien)m(ts)g(of)f(all)g(in)m(termediate)h(quan)m(tities)g (in)m(to)g(a)f(bu\013ered)e(temp)s(orary)191 4483 y(\014le,)43 b(i.e.,)h(the)c(v)-5 b(alue)40 b(stac)m(k,)k(in)c(preparation)g(for)g (a)g(subsequen)m(t)g(rev)m(erse)g(mo)s(de)g(ev)-5 b(aluation.)71 b(The)191 4596 y(v)-5 b(alue)31 b Fp(k)m(eep)h Fz(=)25 b(1)31 b(prepares)e(for)h Fp(fos)p 1414 4596 V 33 w(reverse)i Fz(or)e Fp(fov)p 1964 4596 V 33 w(reverse)h Fz(as)g(exlained)g(b)s(elo) m(w.)332 4759 y(T)-8 b(o)31 b(compute)g(\014rst-order)e(deriv)-5 b(ativ)m(es,)32 b(one)f(has)p Black Black 491 4991 a Fp(int)f(fos)p 736 4991 V 33 w(fo)m(rw)m(a)m(rd\(tag,m,n,k)m (eep,x0,x1,y0,y1)q(\))491 5104 y(sho)m(rt)h(int)f(tag;)690 b Fz(//)31 b(tap)s(e)g(iden)m(ti\014cation)491 5217 y Fp(int)f(m;)959 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(dep)s(enden)m(t)f (v)-5 b(ariables)31 b Fr(m)491 5330 y Fp(int)f(n;)984 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fr(n)p Black Black eop end %%Page: 37 37 TeXDict begin 37 36 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.37) cvn /DEST pdfmark end 183 199 a Black 3700 307 a Fz(37)p Black 491 606 a Fp(int)30 b(k)m(eep;)863 b Fz(//)31 b(\015ag)g(for)f(rev)m(erse)h(mo)s(de)f(preparation)491 719 y Fp(double)h(x0[n];)698 b Fz(//)31 b(indep)s(enden)m(t)f(v)m (ector)i Fr(x)2641 733 y FC(0)491 832 y Fp(double)f(x1[n];)698 b Fz(//)31 b(tangen)m(t)h(v)m(ector)g Fr(x)2456 846 y FC(1)491 945 y Fp(double)f(y0[m];)673 b Fz(//)31 b(dep)s(enden)m(t)f(v) m(ector)i Fr(y)2558 959 y FC(0)2622 945 y Fz(=)25 b Fr(F)13 b Fz(\()p Fr(x)2876 959 y FC(0)2916 945 y Fz(\))491 1058 y Fp(double)31 b(y1[m];)673 b Fz(//)31 b(\014rst)f(deriv)-5 b(ativ)m(e)32 b Fr(y)2450 1072 y FC(1)2514 1058 y Fz(=)25 b Fr(F)2681 1025 y Fl(0)2705 1058 y Fz(\()p Fr(x)2792 1072 y FC(0)2831 1058 y Fz(\))p Fr(x)2918 1072 y FC(1)191 1310 y Fz(for)30 b(the)h Fw(f)p Fz(irst-)p Fw(o)p Fz(rder)f Fw(s)p Fz(calar)h(forw)m(ard)f(mo)s(de.)41 b(Here,)31 b(one)f(has)g(0)c Fn(\024)f Fp(k)m(eep)i Fn(\024)e Fz(2,)31 b(where)954 1578 y Fp(k)m(eep)c Fz(=)1245 1449 y Fk(\032)1355 1521 y Fz(1)83 b(prepares)30 b(for)g Fp(fos)p 2100 1521 28 4 v 33 w(reverse)h Fz(or)g Fp(fov)p 2650 1521 V 33 w(reverse)1355 1634 y Fz(2)83 b(prepares)30 b(for)g Fp(hos)p 2119 1634 V 33 w(reverse)h Fz(or)g Fp(hov)p 2688 1634 V 33 w(reverse)191 1837 y Fz(as)g(exlained)g(b)s(elo)m(w.)41 b(F)-8 b(or)31 b(the)f Fw(f)p Fz(irst-)p Fw(o)p Fz(rder)g Fw(v)p Fz(ector)i(forw)m(ard)e(mo)s(de,)g(ADOL-C)g(pro)m(vides)p Black Black 491 2089 a Fp(int)g(fov)p 743 2089 V 33 w(fo)m(rw)m(a)m (rd\(tag,m,n,p,x0,X,y0,Y\))491 2202 y(sho)m(rt)h(int)f(tag;)690 b Fz(//)31 b(tap)s(e)g(iden)m(ti\014cation)491 2315 y Fp(int)f(m;)959 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(dep)s(enden)m(t)f (v)-5 b(ariables)31 b Fr(m)491 2428 y Fp(int)f(n;)984 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fr(n)491 2541 y Fp(int)f(p;)984 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(directions)491 2654 y Fp(double)h(x0[n];)698 b Fz(//)31 b(indep)s(enden)m(t)f(v)m(ector)i Fr(x)2641 2668 y FC(0)491 2767 y Fp(double)f(X[n][p];)625 b Fz(//)31 b(tangen)m(t)h(matrix)f Fr(X)491 2880 y Fp(double)g(y0[m];)673 b Fz(//)31 b(dep)s(enden)m(t)f(v)m(ector)i Fr(y)2558 2894 y FC(0)2622 2880 y Fz(=)25 b Fr(F)13 b Fz(\()p Fr(x)2876 2894 y FC(0)2916 2880 y Fz(\))491 2993 y Fp(double)31 b(Y[m][p];)600 b Fz(//)31 b(\014rst)f(deriv)-5 b(ativ)m(e)32 b(matrix)f Fr(Y)45 b Fz(=)25 b Fr(F)2966 2960 y Fl(0)2989 2993 y Fz(\()p Fr(x)p Fz(\))p Fr(X)191 3245 y Fz(F)-8 b(or)31 b(the)g(computation)g(of)f(higher)h(deriv)-5 b(ativ)m(e,)32 b(the)e(driv)m(er)p Black Black 491 3497 a Fp(int)g(hos)p 755 3497 V 33 w(fo)m(rw)m(a)m(rd\(tag,m,n,d,k)m (eep,x0,X,y0,Y\))491 3610 y(sho)m(rt)h(int)f(tag;)690 b Fz(//)31 b(tap)s(e)g(iden)m(ti\014cation)491 3723 y Fp(int)f(m;)959 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(dep)s(enden)m(t)f (v)-5 b(ariables)31 b Fr(m)491 3836 y Fp(int)f(n;)984 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fr(n)491 3949 y Fp(int)f(d;)984 b Fz(//)31 b(highest)g(deriv)-5 b(ativ)m(e)32 b(degree)f Fr(d)491 4062 y Fp(int)f(k)m(eep;)863 b Fz(//)31 b(\015ag)g(for)f(rev)m(erse)h (mo)s(de)f(preparation)491 4175 y Fp(double)h(x0[n];)698 b Fz(//)31 b(indep)s(enden)m(t)f(v)m(ector)i Fr(x)2641 4189 y FC(0)491 4287 y Fp(double)f(X[n][d];)625 b Fz(//)31 b(tangen)m(t)h(matrix)f Fr(X)491 4400 y Fp(double)g(y0[m];)673 b Fz(//)31 b(dep)s(enden)m(t)f(v)m(ector)i Fr(y)2558 4414 y FC(0)2622 4400 y Fz(=)25 b Fr(F)13 b Fz(\()p Fr(x)2876 4414 y FC(0)2916 4400 y Fz(\))491 4513 y Fp(double)31 b(Y[m][d];)600 b Fz(//)31 b(deriv)-5 b(ativ)m(e)32 b(matrix)f Fr(Y)191 4765 y Fz(implemen)m(ting)46 b(the)f Fw(h)p Fz(igher-)p Fw(o)p Fz(rder)g Fw(s)p Fz(calar)i(forw)m(ard)d(mo)s(de.)85 b(The)44 b(ro)m(ws)h(of)h(the)f(matrix)g Fr(X)53 b Fz(m)m(ust)191 4878 y(corresp)s(ond)41 b(to)i(the)g(indep)s(enden)m(t)e(v)-5 b(ariables)43 b(in)f(the)h(order)f(of)g(their)h(initialization)i(b)m(y) d(the)h Fo(\034)p Fw(=)191 4991 y Fz(op)s(erator.)68 b(The)39 b(columns)g(of)h Fr(X)48 b Fz(=)40 b Fn(f)p Fr(x)1623 5005 y Fh(j)1660 4991 y Fn(g)1705 5006 y Fh(j)t FC(=1)p Fh(:::)n(d)1966 4991 y Fz(represen)m(t)g(T)-8 b(a)m(ylor)40 b(co)s(e\016cien)m(t)i(v)m(ectors)f(as)e(in)g(\()3684 4991 y SDict begin H.S end 3684 4991 a Black Fz(4)p Black 3730 4933 a SDict begin H.R end 3730 4933 a 3730 4991 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (equation.4.4) cvn H.B /ANN pdfmark end 3730 4991 a Fz(\))q(.)191 5104 y(The)29 b(ro)m(ws)g(of)g(the)g(matrix)h Fr(Y)49 b Fz(m)m(ust)29 b(corresp)s(ond)f(to)h(the)h(dep)s(enden)m(t)e(v)-5 b(ariables)30 b(in)e(the)i(order)e(of)i(their)191 5217 y(selection)i(b)m(y)d(the)h Fo(\035)p Fw(=)g Fz(op)s(erator.)41 b(The)29 b(columns)h(of)g Fr(Y)45 b Fz(=)25 b Fn(f)p Fr(y)2386 5231 y Fh(j)2423 5217 y Fn(g)2468 5232 y Fh(j)t FC(=1)p Fh(:::)o(d)2720 5217 y Fz(represen)m(t)30 b(T)-8 b(a)m(ylor)31 b(co)s(e\016cien)m(t)191 5330 y(v)m(ectors)41 b(as)f(in)g(\()781 5330 y SDict begin H.S end 781 5330 a Black Fz(6)p Black 827 5271 a SDict begin H.R end 827 5271 a 827 5330 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (equation.4.6) cvn H.B /ANN pdfmark end 827 5330 a Fz(\),)j(i.e.,)g Fp(hos)p 1245 5330 28 4 v 33 w(fo)m(rw)m(a)m(rd)f Fz(computes)e(the)g(v)-5 b(alues)40 b Fr(y)2499 5344 y FC(0)2579 5330 y Fz(=)h Fr(F)13 b Fz(\()p Fr(x)2849 5344 y FC(0)2889 5330 y Fz(\),)43 b Fr(y)3037 5344 y FC(1)3117 5330 y Fz(=)e Fr(F)3300 5297 y Fl(0)3323 5330 y Fz(\()p Fr(x)3410 5344 y FC(0)3450 5330 y Fz(\))p Fr(x)3537 5344 y FC(1)3577 5330 y Fz(,)h(.)16 b(.)f(.)h(,)p Black Black eop end %%Page: 38 38 TeXDict begin 38 37 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.38) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fz(38)671 b Ft(4)92 b(BASIC)30 b(DRIVERS)g(F)m(OR)g(THE)g(F)m(OR)-10 b(W)g(ARD)32 b(AND)f(REVERSE)e(MODE)p Black 191 606 a Fz(where)f Fr(X)33 b Fz(=)25 b([)p Fr(x)733 620 y FC(1)773 606 y Fr(;)15 b(x)865 620 y FC(2)904 606 y Fr(;)g(:)g(:)g(:)i(;)e(x) 1158 621 y Fh(d)1199 606 y Fz(])29 b(and)f Fr(Y)45 b Fz(=)25 b([)p Fr(y)1692 620 y FC(1)1731 606 y Fr(;)15 b(y)1816 620 y FC(2)1856 606 y Fr(;)g(:)g(:)g(:)i(;)e(y)2103 621 y Fh(d)2143 606 y Fz(].)40 b(F)-8 b(urthermore,)30 b(one)f(has)f(0)e Fn(\024)f Fp(k)m(eep)i Fn(\024)e Fr(d)17 b Fz(+)g(1,)191 719 y(with)959 957 y Fp(k)m(eep)1144 829 y Fk(\032)1254 901 y Fz(=)25 b(1)83 b(prepares)30 b(for)g Fp(fos)p 2095 901 28 4 v 33 w(reverse)h Fz(or)g Fp(fov)p 2645 901 V 32 w(reverse)1254 1014 y Fr(>)25 b Fz(1)83 b(prepares)30 b(for)g Fp(hos)p 2114 1014 V 33 w(reverse)h Fz(or)g Fp(hov)p 2683 1014 V 33 w(reverse)191 1205 y Fz(Once)f(more,)h(there)g(is)f(also)h(a)g(v)m(ector)h(v)m (ersion)f(giv)m(en)g(b)m(y)p Black Black 491 1446 a Fp(int)f(hov)p 762 1446 V 33 w(fo)m(rw)m(a)m(rd\(tag,m,n,d,p,x0,X,y0,Y\))491 1558 y(sho)m(rt)h(int)f(tag;)690 b Fz(//)31 b(tap)s(e)g(iden)m (ti\014cation)491 1671 y Fp(int)f(m;)959 b Fz(//)31 b(n)m(um)m(b)s(er)f (of)g(dep)s(enden)m(t)f(v)-5 b(ariables)31 b Fr(m)491 1784 y Fp(int)f(n;)984 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s (enden)m(t)f(v)-5 b(ariables)31 b Fr(n)491 1897 y Fp(int)f(d;)984 b Fz(//)31 b(highest)g(deriv)-5 b(ativ)m(e)32 b(degree)f Fr(d)491 2010 y Fp(int)f(p;)984 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g (directions)h Fr(p)491 2123 y Fp(double)g(x0[n];)698 b Fz(//)31 b(indep)s(enden)m(t)f(v)m(ector)i Fr(x)2641 2137 y FC(0)491 2236 y Fp(double)f(X[n][p][d];)526 b Fz(//)31 b(tangen)m(t)h(matrix)f Fr(X)491 2349 y Fp(double)g(y0[m];)673 b Fz(//)31 b(dep)s(enden)m(t)f(v)m(ector)i Fr(y)2558 2363 y FC(0)2622 2349 y Fz(=)25 b Fr(F)13 b Fz(\()p Fr(x)2876 2363 y FC(0)2916 2349 y Fz(\))491 2462 y Fp(double)31 b(Y[m][p][d];)501 b Fz(//)31 b(deriv)-5 b(ativ)m(e)32 b(matrix)f Fr(Y)191 2702 y Fz(for)h(the)g Fw(h)p Fz(igher-)p Fw(o)p Fz(rder)g Fw(v)p Fz(ector)i(forw)m(ard)d(mo)s(de)h(that)h (computes)f Fr(y)2539 2716 y FC(0)2606 2702 y Fz(=)c Fr(F)13 b Fz(\()p Fr(x)2863 2716 y FC(0)2903 2702 y Fz(\),)33 b Fr(Y)3049 2716 y FC(1)3116 2702 y Fz(=)28 b Fr(F)3286 2669 y Fl(0)3310 2702 y Fz(\()p Fr(x)3397 2716 y FC(0)3436 2702 y Fz(\))p Fr(X)3546 2716 y FC(1)3587 2702 y Fz(,)k(.)16 b(.)f(.)h(,)191 2815 y(where)30 b Fr(X)j Fz(=)24 b([)p Fr(X)757 2829 y FC(1)797 2815 y Fr(;)15 b(X)912 2829 y FC(2)953 2815 y Fr(;)g(:)g(:)g(:)h(;)f(X)1229 2830 y Fh(d)1270 2815 y Fz(])31 b(and)f Fr(Y)45 b Fz(=)25 b([)p Fr(Y)1775 2829 y FC(1)1814 2815 y Fr(;)15 b(Y)1907 2829 y FC(2)1947 2815 y Fr(;)g(:)g(:)g(:)i(;)e(Y)2202 2830 y Fh(d)2242 2815 y Fz(].)332 2978 y(There)35 b(are)g(also)h(o)m(v) m(erloaded)h(v)m(ersions)e(pro)m(viding)g(a)g(general)h Fp(fo)m(rw)m(a)m(rd)p Fz(-call.)58 b(Details)37 b(of)e(the)h(ap-)191 3091 y(propriate)30 b(calling)i(sequences)f(are)g(giv)m(en)g(in)1781 3091 y SDict begin H.S end 1781 3091 a Black Fz(Section)g(5)p Black 2145 3029 a SDict begin H.R end 2145 3029 a 2145 3091 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (section.5) cvn H.B /ANN pdfmark end 2145 3091 a Fz(.)332 3254 y(Once,)h(the)f(required)g(information)g(is)h(generated)g(due)f(to)h(a) f(forw)m(ard)g(mo)s(de)g(ev)-5 b(aluation)33 b(with)e(an)191 3366 y(approriate)e(v)-5 b(alue)29 b(of)g(the)g(parameter)h Fp(k)m(eep)p Fz(,)h(one)e(ma)m(y)g(use)f(the)h(follo)m(wing)i(implemen) m(tation)f(v)-5 b(arian)m(ts)191 3479 y(of)30 b(the)h(rev)m(erse)g(mo)s (de.)40 b(T)-8 b(o)31 b(compute)g(\014rst-order)e(deriv)-5 b(ativ)m(es)32 b(one)f(can)g(use)p Black Black 491 3720 a Fp(int)f(fos)p 736 3720 28 4 v 33 w(reverse\(tag,m,n,u,z\))491 3833 y(sho)m(rt)h(int)f(tag;)690 b Fz(//)31 b(tap)s(e)g(iden)m (ti\014cation)491 3946 y Fp(int)f(m;)959 b Fz(//)31 b(n)m(um)m(b)s(er)f (of)g(dep)s(enden)m(t)f(v)-5 b(ariables)31 b Fr(m)491 4059 y Fp(int)f(n;)984 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s (enden)m(t)f(v)-5 b(ariables)31 b Fr(n)491 4172 y Fp(double)g(u[m];)713 b Fz(//)31 b(w)m(eigh)m(t)h(v)m(ector)g Fr(u)491 4284 y Fp(double)f(z[n];)745 b Fz(//)31 b(resulting)g(adjoin)m(t)g(v)-5 b(alue)31 b Fr(z)2764 4251 y Fh(T)2844 4284 y Fz(=)25 b Fr(u)2992 4251 y Fh(T)3047 4284 y Fr(F)3118 4251 y Fl(0)3142 4284 y Fz(\()p Fr(x)p Fz(\))191 4525 y(as)g Fw(f)p Fz(irst-)p Fw(o)p Fz(rder)f Fw(s)p Fz(calar)i(rev)m(erse)f(mo)s (de)f(implemen)m(tation)i(that)f(computes)g(the)g(pro)s(duct)e Fr(z)3290 4492 y Fh(T)3371 4525 y Fz(=)i Fr(u)3519 4492 y Fh(T)3574 4525 y Fr(F)3645 4492 y Fl(0)3668 4525 y Fz(\()p Fr(x)p Fz(\))191 4638 y(after)33 b(calling)h Fp(zos)p 823 4638 V 32 w(fo)m(rw)m(a)m(rd)p Fz(,)h Fp(fos)p 1302 4638 V 33 w(fo)m(rw)m(a)m(rd)p Fz(,)f(or)f Fp(hos)p 1914 4638 V 33 w(fo)m(rw)m(a)m(rd)h Fz(with)e Fp(k)m(eep)p Fz(=1.)48 b(The)32 b(corresp)s(onding)f Fw(f)p Fz(irst-)191 4751 y Fw(o)p Fz(rder)f Fw(v)p Fz(ector)h(rev)m(erse)g(mo)s(de)f(driv)m (er)g(is)h(giv)m(en)g(b)m(y)p Black Black 491 4991 a Fp(int)f(fov)p 743 4991 V 33 w(reverse\(tag,m,n,q,U,Z\))491 5104 y(sho)m(rt)h(int)f(tag;)690 b Fz(//)31 b(tap)s(e)g(iden)m (ti\014cation)491 5217 y Fp(int)f(m;)959 b Fz(//)31 b(n)m(um)m(b)s(er)f (of)g(dep)s(enden)m(t)f(v)-5 b(ariables)31 b Fr(m)491 5330 y Fp(int)f(n;)984 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s (enden)m(t)f(v)-5 b(ariables)31 b Fr(n)p Black Black eop end %%Page: 39 39 TeXDict begin 39 38 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.39) cvn /DEST pdfmark end 183 199 a Black 3700 307 a Fz(39)p Black 491 606 a Fp(int)30 b(q;)984 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(w)m(eigh)m(t)i(v)m(ectors)g Fr(q)491 719 y Fp(double)f(U[q][m];)598 b Fz(//)31 b(w)m(eigh)m(t)h (matrix)f Fr(U)491 832 y Fp(double)g(Z[q][n];)630 b Fz(//)31 b(resulting)g(adjoin)m(t)g Fr(Z)h Fz(=)25 b Fr(U)10 b(F)2816 799 y Fl(0)2839 832 y Fz(\()p Fr(x)p Fz(\))191 1056 y(that)44 b(can)g(b)s(e)f(used)g(after)h(calling)h Fp(zos)p 1593 1056 28 4 v 33 w(fo)m(rw)m(a)m(rd)p Fz(,)j Fp(fos)p 2086 1056 V 33 w(fo)m(rw)m(a)m(rd)p Fz(,)h(or)44 b Fp(hos)p 2724 1056 V 33 w(fo)m(rw)m(a)m(rd)h Fz(with)e Fp(k)m(eep)p Fz(=1.)82 b(T)-8 b(o)191 1169 y(compute)31 b(higher-order)f(deriv)-5 b(ativ)m(es,)32 b(ADOL-C)e(pro)m(vides)p Black Black 491 1393 a Fp(int)g(hos)p 755 1393 V 33 w(reverse\(tag,m,n,d,u,Z\))491 1506 y(sho)m(rt)h(int)f(tag;)690 b Fz(//)31 b(tap)s(e)g(iden)m (ti\014cation)491 1619 y Fp(int)f(m;)959 b Fz(//)31 b(n)m(um)m(b)s(er)f (of)g(dep)s(enden)m(t)f(v)-5 b(ariables)31 b Fr(m)491 1732 y Fp(int)f(n;)984 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s (enden)m(t)f(v)-5 b(ariables)31 b Fr(n)491 1845 y Fp(int)f(d;)984 b Fz(//)31 b(highest)g(deriv)-5 b(ativ)m(e)32 b(degree)f Fr(d)491 1958 y Fp(double)g(u[m];)713 b Fz(//)31 b(w)m(eigh)m(t)h(v)m (ector)g Fr(u)491 2071 y Fp(double)f(Z[n][d+1];)514 b Fz(//)31 b(resulting)g(adjoin)m(ts)191 2295 y(as)d Fw(h)p Fz(igher-)p Fw(o)p Fz(rder)f Fw(s)p Fz(calar)i(rev)m(erse)f(mo)s(de)e (implemen)m(tation)j(yielding)f(the)g(adjoin)m(ts)g Fr(z)3155 2262 y Fh(T)3151 2319 y FC(0)3235 2295 y Fz(=)d Fr(u)3383 2262 y Fh(T)3438 2295 y Fr(F)3509 2262 y Fl(0)3533 2295 y Fz(\()p Fr(x)3620 2309 y FC(0)3659 2295 y Fz(\))h(=)191 2408 y Fr(u)243 2375 y Fh(T)298 2408 y Fr(A)366 2422 y FC(0)406 2408 y Fz(,)31 b Fr(z)508 2375 y Fh(T)504 2432 y FC(1)589 2408 y Fz(=)25 b Fr(u)737 2375 y Fh(T)793 2408 y Fr(F)864 2375 y Fl(00)906 2408 y Fz(\()p Fr(x)993 2422 y FC(0)1033 2408 y Fz(\))p Fr(x)1120 2422 y FC(1)1185 2408 y Fz(=)h Fr(u)1334 2375 y Fh(T)1389 2408 y Fr(A)1457 2422 y FC(1)1497 2408 y Fz(,)31 b(.)15 b(.)h(.)f(,)31 b(where)f Fr(Z)j Fz(=)25 b([)p Fr(z)2251 2422 y FC(0)2291 2408 y Fr(;)15 b(z)2373 2422 y FC(1)2413 2408 y Fr(;)g(:)g(:)g(:)i(;)e (z)2657 2423 y Fh(d)2698 2408 y Fz(])31 b(after)g(calling)i Fp(fos)p 3371 2408 V 32 w(fo)m(rw)m(a)m(rd)g Fz(or)191 2521 y Fp(hos)p 323 2521 V 33 w(fo)m(rw)m(a)m(rd)f Fz(with)e Fp(k)m(eep)i Fz(=)25 b Fr(d)20 b Fz(+)g(1)26 b Fr(>)f Fz(1.)41 b(The)30 b(v)m(ector)i(v)m(ersion)f(is)f(giv)m(en)i(b)m(y)p Black Black 491 2745 a Fp(int)e(hov)p 762 2745 V 33 w (reverse\(tag,m,n,d,q,U,Z,nz\))491 2858 y(sho)m(rt)h(int)f(tag;)690 b Fz(//)31 b(tap)s(e)g(iden)m(ti\014cation)491 2971 y Fp(int)f(m;)959 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(dep)s(enden)m(t)f (v)-5 b(ariables)31 b Fr(m)491 3083 y Fp(int)f(n;)984 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fr(n)491 3196 y Fp(int)f(d;)984 b Fz(//)31 b(highest)g(deriv)-5 b(ativ)m(e)32 b(degree)f Fr(d)491 3309 y Fp(double)g(U[q][m];)598 b Fz(//)31 b(w)m(eigh)m(t)h(v)m(ector)g Fr(u)491 3422 y Fp(double)f(Z[q][n][d+1];)415 b Fz(//)31 b(resulting)g(adjoin)m(ts)491 3535 y Fp(sho)m(rt)g(int)f(nz[q][n];)527 b Fz(//)31 b(nonzero)g(pattern)g(of)f Fp(Z)191 3759 y Fz(as)h Fw(h)p Fz(igher-)p Fw(o)p Fz(rder)g Fw(v)p Fz(ector)h(rev)m (erse)f(mo)s(de)f(driv)m(er)h(to)g(compute)g(the)g(adjoin)m(ts)g Fr(Z)2973 3773 y FC(0)3039 3759 y Fz(=)25 b Fr(U)10 b(F)3278 3726 y Fl(0)3302 3759 y Fz(\()p Fr(x)3389 3773 y FC(0)3428 3759 y Fz(\))26 b(=)g Fr(U)10 b(A)3726 3773 y FC(0)3766 3759 y Fz(,)191 3872 y Fr(Z)253 3886 y FC(1)345 3872 y Fz(=)53 b Fr(U)10 b(F)612 3839 y Fl(00)654 3872 y Fz(\()p Fr(x)741 3886 y FC(0)781 3872 y Fz(\))p Fr(x)868 3886 y FC(1)960 3872 y Fz(=)53 b Fr(U)10 b(A)1224 3886 y FC(1)1263 3872 y Fz(,)51 b(.)16 b(.)f(.)h(,)51 b(where)46 b Fr(Z)59 b Fz(=)53 b([)p Fr(Z)2148 3886 y FC(0)2187 3872 y Fr(;)15 b(Z)2289 3886 y FC(1)2329 3872 y Fr(;)g(:)g(:)g(:)i(;)e(Z)2593 3887 y Fh(d)2634 3872 y Fz(])47 b(after)g(calling)i Fp(fos)p 3355 3872 V 32 w(fo)m(rw)m(a)m(rd)g Fz(or)191 3985 y Fp(hos)p 323 3985 V 33 w(fo)m(rw)m(a)m(rd)31 b Fz(with)d Fp(k)m(eep)j Fz(=)25 b Fr(d)18 b Fz(+)g(1)25 b Fr(>)g Fz(1.)41 b(After)29 b(the)h(function)e(call,)j(the)f(last)g(argumen)m (t)f(of)h Fp(hov)p 3503 3985 V 33 w(reverse)191 4098 y Fz(con)m(tains)d(information)g(ab)s(out)f(the)g(sparsit)m(y)h (pattern,)g(i.e.)41 b(eac)m(h)27 b Fp(nz[i][j])g Fz(has)f(a)g(v)-5 b(alue)27 b(that)g(c)m(haracter-)191 4211 y(izes)f(the)f(functional)g (relation)i(b)s(et)m(w)m(een)e(the)h Fr(i)p Fz(-th)f(comp)s(onen)m(t)g (of)h Fr(U)10 b(F)2629 4178 y Fl(0)2652 4211 y Fz(\()p Fr(x)p Fz(\))26 b(and)e(the)h Fr(j)5 b Fz(-th)26 b(indep)s(enden)m(t) 191 4324 y(v)-5 b(alue)31 b Fr(x)478 4338 y Fh(j)545 4324 y Fz(as:)p Black Black 827 4549 a(0)100 b(trivial)827 4662 y(1)g(linear)1529 4549 y(2)g(p)s(olynomial)1529 4662 y(3)g(rational)2430 4549 y(4)h(transcenden)m(tal)2430 4662 y(5)g(non-smo)s(oth)191 4878 y(Here,)27 b(\\trivial")h(means)e (that)g(there)h(is)e(no)h(dep)s(endence)f(at)i(all)f(and)g(\\linear")h (means)e(that)i(the)f(partial)191 4991 y(deriv)-5 b(ativ)m(e)34 b(is)f(a)h(constan)m(t)g(that)f(do)s(es)g(not)g(dep)s(enden)m(t)f(on)h (other)g(v)-5 b(ariables)34 b(either.)49 b(\\Non-smo)s(oth")191 5104 y(means)35 b(that)h(one)g(of)g(the)f(functions)g(on)h(the)f(path)g (b)s(et)m(w)m(een)h Fr(x)2433 5118 y Fh(i)2497 5104 y Fz(and)f Fr(y)2724 5118 y Fh(j)2795 5104 y Fz(w)m(as)h(ev)-5 b(aluated)37 b(at)f(a)g(p)s(oin)m(t)191 5217 y(where)25 b(it)i(is)f(not)g(di\013eren)m(tiable.)40 b(All)27 b(p)s(ositiv)m(e)f (lab)s(els)g(1)p Fr(;)15 b Fz(2)p Fr(;)g Fz(3)p Fr(;)g Fz(4)p Fr(;)g Fz(5)30 b(are)c(p)s(essimistic)g(in)g(that)g(the)g (actual)191 5330 y(functional)31 b(relation)g(ma)m(y)g(in)f(fact)i(b)s (e)d(simpler,)i(for)f(example)h(due)e(to)j(exact)f(cancellations.)p Black Black eop end %%Page: 40 40 TeXDict begin 40 39 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.40) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fz(40)1179 b Ft(5)91 b(O)m(VERLO)m(ADED)32 b(F)m(OR)-10 b(W)g(ARD)31 b(AND)g(REVERSE)f(CALLS)p Black 332 606 a Fz(There)36 b(are)h(also)g(o)m(v)m(erloaded)i(v)m(ersions)d(pro)m (viding)h(a)g(general)g Fp(reverse)p Fz(-call.)62 b(Details)38 b(of)f(the)g(ap-)191 719 y(propriate)30 b(calling)i(sequences)f(are)g (giv)m(en)g(in)f(the)h(follo)m(wing)2322 719 y SDict begin H.S end 2322 719 a Black Fz(Section)g(5)p Black 2685 657 a SDict begin H.R end 2685 657 a 2685 719 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (section.5) cvn H.B /ANN pdfmark end 2685 719 a Fz(.)191 886 y SDict begin H.S end 191 886 a 191 886 a SDict begin 13.6 H.A end 191 886 a 191 886 a SDict begin [/View [/XYZ H.V]/Dest (section.5) cvn /DEST pdfmark end 191 886 a 182 x FD(5)135 b(Ov)l(erloaded)46 b(F)-11 b(orw)l(ard)45 b(and)f(Rev)l(erse)j(Calls)191 1323 y Fz(In)37 b(this)h(section,)j(the)d(sev)m(eral)h(v)m(ersions)f (of)g(the)g Fp(fo)m(rw)m(a)m(rd)i Fz(and)d Fp(reverse)i Fz(routines,)h(whic)m(h)d(utilize)j(the)191 1436 y(o)m(v)m(erloading)32 b(capabilities)f(of)f(C++,)f(are)h(describ)s(ed)f(in)g(detail.)42 b(With)30 b(exception)h(of)f(the)g(bit)g(pattern)191 1549 y(v)m(ersions)f(all)g(in)m(terfaces)g(are)g(protot)m(yp)s(ed)g(in) f(the)g(header)g(\014le)h Fs()p Fz(,)23 b(where)28 b(also)191 1662 y(some)35 b(more)h(sp)s(ecialized)g Fp(fo)m(rw)m(a)m(rd)g Fz(and)f Fp(reverse)h Fz(routines)f(are)g (explained.)55 b(F)-8 b(urthermore,)37 b(ADOL-C)191 1775 y(pro)m(vides)c(C)g(and)f(F)-8 b(ortran-callable)37 b(v)m(ersions)c (protot)m(yp)s(ed)g(in)g(the)h(same)f(header)g(\014le.)49 b(The)33 b(bit)g(pat-)191 1888 y(tern)41 b(v)m(ersions)i(of)e Fp(fo)m(rw)m(a)m(rd)j Fz(and)d Fp(reverse)i Fz(in)m(tro)s(duced)e(in)g (the)2429 1888 y SDict begin H.S end 2429 1888 a Black Fz(Section)31 b(5.3)p Black 2863 1826 a SDict begin H.R end 2863 1826 a 2863 1888 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.5.3) cvn H.B /ANN pdfmark end 2863 1888 a 42 w Fz(are)42 b(protot)m(yp)s(ed)g(in)g(the)191 2001 y(header)36 b(\014le)h Fs()o Fz(,)32 b(whic)m(h)37 b(will)f(b)s(e)g(included)g(b)m(y)g(the)g(header) h(\014le)191 2114 y Fs()25 b Fz(automatically)-8 b(.)191 2271 y SDict begin H.S end 191 2271 a 191 2271 a SDict begin 13.6 H.A end 191 2271 a 191 2271 a SDict begin [/View [/XYZ H.V]/Dest (subsection.5.1) cvn /DEST pdfmark end 191 2271 a 149 x FA(5.1)112 b(The)38 b(Scalar)g(Case)191 2644 y Fz(Giv)m(en)31 b(an)m(y)f(correct)h(tap)s(e,)f(one)g(ma)m(y)h (call)g(from)e(within)g(the)h(generating)h(program,)f(or)g(subsequen)m (tly)191 2757 y(during)f(another)i(run,)e(the)h(follo)m(wing)i(pro)s (cedure:)p Black Black 491 3002 a Fp(int)e(fo)m(rw)m(a)m (rd\(tag,m,n,d,k)m(eep,X,Y\))491 3115 y(sho)m(rt)h(int)f(tag;)690 b Fz(//)31 b(tap)s(e)g(iden)m(ti\014cation)491 3228 y Fp(int)f(m;)959 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(dep)s(enden)m(t)f (v)-5 b(ariables)31 b Fr(m)491 3341 y Fp(int)f(n;)984 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fr(n)491 3454 y Fp(int)f(d;)984 b Fz(//)31 b(highest)g(deriv)-5 b(ativ)m(e)32 b(degree)f Fr(d)491 3567 y Fp(int)f(k)m(eep;)863 b Fz(//)31 b(\015ag)g(for)f(rev)m(erse)h (sw)m(eep)491 3680 y Fp(double)g(X[n][d+1];)509 b Fz(//)31 b(T)-8 b(a)m(ylor)32 b(co)s(e\016cien)m(ts)g Fr(X)38 b Fz(of)30 b(indep)s(enden)m(t)g(v)-5 b(ariables)491 3793 y Fp(double)31 b(Y[m][d+1];)484 b Fz(//)31 b(T)-8 b(a)m(ylor)32 b(co)s(e\016cien)m(ts)g Fr(Y)50 b Fz(as)31 b(in)f(\()2902 3793 y SDict begin H.S end 2902 3793 a Black Fz(6)p Black 2948 3734 a SDict begin H.R end 2948 3734 a 2948 3793 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (equation.4.6) cvn H.B /ANN pdfmark end 2948 3793 a Fz(\))191 4038 y(The)37 b(ro)m(ws)h(of)g(the)g(matrix)g Fr(X)46 b Fz(m)m(ust)37 b(corresp)s(ond)g(to)h(the)h(indep)s(enden)m(t)d(v)-5 b(ariables)39 b(in)e(the)h(order)g(of)191 4151 y(their)32 b(initialization)j(b)m(y)c(the)h Fo(\034)p Fw(=)g Fz(op)s(erator.)45 b(The)32 b(columns)f(of)h Fr(X)j Fz(=)28 b Fn(f)p Fr(x)2806 4165 y Fh(j)2843 4151 y Fn(g)2888 4166 y Fh(j)t FC(=0)p Fh(:::)n(d)3142 4151 y Fz(represen)m(t)j(T)-8 b(a)m(ylor)191 4264 y(co)s(e\016cien)m(t)35 b(v)m(ectors)f(as)g(in)e(\()1187 4264 y SDict begin H.S end 1187 4264 a Black Fz(4)p Black 1233 4205 a SDict begin H.R end 1233 4205 a 1233 4264 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (equation.4.4) cvn H.B /ANN pdfmark end 1233 4264 a Fz(\))q(.)48 b(The)33 b(ro)m(ws)g(of)g(the)g(matrix)h Fr(Y)53 b Fz(m)m(ust)33 b(corresp)s(ond)f(to)h(the)h(dep)s(enden)m(t)191 4377 y(v)-5 b(ariables)23 b(in)g(the)g(order)f(of)h(their)g(selection)h(b)m (y)f(the)g Fo(\035)p Fw(=)g Fz(op)s(erator.)38 b(The)22 b(columns)h(of)g Fr(Y)45 b Fz(=)25 b Fn(f)p Fr(y)3487 4391 y Fh(j)3524 4377 y Fn(g)3569 4392 y Fh(j)t FC(=0)p Fh(:::)n(d)191 4490 y Fz(represen)m(t)43 b(T)-8 b(a)m(ylor)45 b(co)s(e\016cien)m(t)g(v)m(ectors)g(as)e(in)g(\()1932 4490 y SDict begin H.S end 1932 4490 a Black Fz(6)p Black 1978 4431 a SDict begin H.R end 1978 4431 a 1978 4490 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (equation.4.6) cvn H.B /ANN pdfmark end 1978 4490 a Fz(\).)80 b(Th)m(us)42 b(the)i(\014rst)e(column)h(of)h Fr(Y)63 b Fz(con)m(tains)45 b(the)191 4603 y(function)32 b(v)-5 b(alue)34 b Fr(F)13 b Fz(\()p Fr(x)p Fz(\))33 b(itself,)h(the)f(next)g(column)g(represen)m (ts)g(the)g(\014rst)f(T)-8 b(a)m(ylor)34 b(co)s(e\016cien)m(t)g(v)m (ector)h(of)191 4716 y Fr(F)13 b Fz(,)30 b(and)f(the)h(last)h(column)e (the)h Fr(d)p Fz(-th)g(T)-8 b(a)m(ylor)31 b(co)s(e\016cien)m(t)h(v)m (ector.)42 b(The)29 b(in)m(teger)i(\015ag)f Fp(k)m(eep)i Fz(determines)191 4829 y(ho)m(w)e(man)m(y)f(T)-8 b(a)m(ylor)31 b(co)s(e\016cien)m(ts)h(of)e(all)g(in)m(termediate)i(quan)m(tities)f (are)f(written)g(in)m(to)g(the)g(v)-5 b(alue)30 b(stac)m(k)191 4941 y(as)h(explained)f(in)815 4941 y SDict begin H.S end 815 4941 a Black Fz(Section)h(4)p Black 1179 4879 a SDict begin H.R end 1179 4879 a 1179 4941 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (section.4) cvn H.B /ANN pdfmark end 1179 4941 a Fz(.)40 b(If)30 b Fp(k)m(eep)i Fz(is)f(omitted,)g(it)g (defaults)g(to)g(0.)332 5104 y(The)i(giv)m(en)i Fp(tag)f Fz(v)-5 b(alue)34 b(is)g(used)f(b)m(y)g Fp(fo)m(rw)m(a)m(rd)j Fz(to)e(determine)g(the)g(name)g(of)g(the)g(\014le)f(on)h(whic)m(h)g (the)191 5217 y(tap)s(e)k(w)m(as)g(written.)63 b(If)38 b(the)g(tap)s(e)g(\014le)g(do)s(es)f(not)h(exist,)j Fp(fo)m(rw)m(a)m (rd)e Fz(assumes)f(that)g(the)g(relev)-5 b(an)m(t)40 b(tap)s(e)191 5330 y(is)e(still)h(in)f(core)h(and)f(reads)g(from)g(the) g(bu\013ers.)63 b(After)39 b(the)f(execution)i(of)e(an)g(activ)m(e)j (section)e(with)p Black Black eop end %%Page: 41 41 TeXDict begin 41 40 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.41) cvn /DEST pdfmark end 183 199 a Black 191 307 a Ft(5.2)92 b(The)30 b(V)-8 b(ector)32 b(Case)2640 b Fz(41)p Black 191 606 a Fp(k)m(eep)32 b Fz(=)e(1)h(or)f(a)h(call)g(to)g Fp(fo)m(rw)m(a)m(rd)h Fz(with)e(an)m(y)g Fp(k)m(eep)i Fn(\024)e Fr(d)21 b Fz(+)e(1,)31 b(one)g(ma)m(y)g(call)g(the)g (function)f Fp(reverse)h Fz(with)191 719 y Fp(d)f Fz(=)g Fp(k)m(eep)i Fn(\000)e Fz(1)35 b(and)f(the)h(same)f(tap)s(e)h(iden)m (ti\014er)g Fp(tag)p Fz(.)53 b(When)34 b Fr(u)g Fz(is)h(a)f(v)m(ector)j (and)c Fr(Z)41 b Fz(an)35 b Fr(n)22 b Fn(\002)h Fz(\()p Fr(d)g Fz(+)g(1\))191 832 y(matrix)31 b Fp(reverse)g Fz(is)f(executed)i(in)e(the)g(scalar)i(mo)s(de)e(b)m(y)g(the)g(calling) i(sequence)p Black Black 491 1088 a Fp(int)e(reverse\(tag,m,n,d,u,Z\)) 491 1201 y(sho)m(rt)h(int)f(tag;)690 b Fz(//)31 b(tap)s(e)g(iden)m (ti\014cation)491 1314 y Fp(int)f(m;)959 b Fz(//)31 b(n)m(um)m(b)s(er)f (of)g(dep)s(enden)m(t)f(v)-5 b(ariables)31 b Fr(m)491 1427 y Fp(int)f(n;)984 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s (enden)m(t)f(v)-5 b(ariables)31 b Fr(n)491 1540 y Fp(int)f(d;)984 b Fz(//)31 b(highest)g(deriv)-5 b(ativ)m(e)32 b(degree)f Fr(d)491 1653 y Fp(double)g(u[m];)713 b Fz(//)31 b(w)m(eigh)m(ting)i(v) m(ector)f Fr(u)491 1766 y Fp(double)f(Z[n][d+1];)514 b Fz(//)31 b(resulting)g(adjoin)m(ts)g Fr(Z)191 2022 y Fz(to)38 b(compute)f(the)h(adjoin)m(ts)g Fr(z)1245 1989 y Fh(T)1241 2046 y FC(0)1337 2022 y Fz(=)e Fr(u)1496 1989 y Fh(T)1551 2022 y Fr(F)1622 1989 y Fl(0)1646 2022 y Fz(\()p Fr(x)1733 2036 y FC(0)1772 2022 y Fz(\))h(=)g Fr(u)2004 1989 y Fh(T)2059 2022 y Fr(A)2127 2036 y FC(0)2166 2022 y Fz(,)j Fr(z)2277 1989 y Fh(T)2273 2046 y FC(1)2369 2022 y Fz(=)c Fr(u)2528 1989 y Fh(T)2583 2022 y Fr(F)2654 1989 y Fl(00)2696 2022 y Fz(\()p Fr(x)2783 2036 y FC(0)2823 2022 y Fz(\))p Fr(x)2910 2036 y FC(1)2987 2022 y Fz(=)g Fr(u)3146 1989 y Fh(T)3201 2022 y Fr(A)3269 2036 y FC(1)3309 2022 y Fz(,)j(.)15 b(.)h(.)f(,)39 b(where)191 2135 y Fr(Z)32 b Fz(=)25 b([)p Fr(z)448 2149 y FC(0)488 2135 y Fr(;)15 b(z)570 2149 y FC(1)610 2135 y Fr(;)g(:)g(:)g(:)h(;)f(z)853 2150 y Fh(d)895 2135 y Fz(].)191 2315 y SDict begin H.S end 191 2315 a 191 2315 a SDict begin 13.6 H.A end 191 2315 a 191 2315 a SDict begin [/View [/XYZ H.V]/Dest (subsection.5.2) cvn /DEST pdfmark end 191 2315 a 143 x FA(5.2)112 b(The)38 b(V)-9 b(ector)36 b(Case)191 2685 y Fz(When)26 b Fr(U)36 b Fz(is)26 b(a)g(matrix)g Fp(reverse)h Fz(is)f(executed)h(in) f(the)g(v)m(ector)i(mo)s(de)d(b)m(y)h(the)g(follo)m(wing)i(calling)f (sequence)p Black Black 491 2942 a Fp(int)j (reverse\(tag,m,n,d,q,U,Z,nz\))491 3055 y(sho)m(rt)h(int)f(tag;)690 b Fz(//)31 b(tap)s(e)g(iden)m(ti\014cation)491 3167 y Fp(int)f(m;)959 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(dep)s(enden)m(t)f (v)-5 b(ariables)31 b Fr(m)491 3280 y Fp(int)f(n;)984 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fr(n)491 3393 y Fp(int)f(d;)984 b Fz(//)31 b(highest)g(deriv)-5 b(ativ)m(e)32 b(degree)f Fr(d)491 3506 y Fp(int)f(q;)984 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(w)m(eigh)m (t)i(v)m(ectors)g Fr(q)491 3619 y Fp(double)f(U[q][m];)598 b Fz(//)31 b(w)m(eigh)m(t)h(matrix)f Fr(U)491 3732 y Fp(double)g(Z[q][n][d+1];)415 b Fz(//)31 b(resulting)g(adjoin)m(ts)491 3845 y Fp(sho)m(rt)g(nz[q][n];)659 b Fz(//)31 b(nonzero)g(pattern)g(of) f Fp(Z)191 4101 y Fz(to)45 b(compute)f(the)g(adjoin)m(ts)g Fr(Z)1287 4115 y FC(0)1374 4101 y Fz(=)k Fr(U)10 b(F)1636 4068 y Fl(0)1659 4101 y Fz(\()p Fr(x)1746 4115 y FC(0)1786 4101 y Fz(\))48 b(=)g Fr(U)10 b(A)2128 4115 y FC(0)2167 4101 y Fz(,)48 b Fr(Z)2302 4115 y FC(1)2389 4101 y Fz(=)f Fr(U)10 b(F)2650 4068 y Fl(00)2693 4101 y Fz(\()p Fr(x)2780 4115 y FC(0)2820 4101 y Fz(\))p Fr(x)2907 4115 y FC(1)2994 4101 y Fz(=)48 b Fr(U)10 b(A)3253 4115 y FC(1)3292 4101 y Fz(,)48 b(.)15 b(.)g(.)h(,)47 b(where)191 4214 y Fr(Z)32 b Fz(=)25 b([)p Fr(Z)468 4228 y FC(0)507 4214 y Fr(;)15 b(Z)609 4228 y FC(1)649 4214 y Fr(;)g(:)g(:)g(:)i(;)e(Z)913 4229 y Fh(d)954 4214 y Fz(].)40 b(When)29 b(the)h(argumen)m(ts)f Fp(p)h Fz(and)e Fp(U)h Fz(are)g(omitted,)i(they)f(default)f(to)h Fr(m)f Fz(and)g(the)191 4327 y(iden)m(tit)m(y)j(matrix)f(of)f(order)g Fr(m)p Fz(,)g(resp)s(ectiv)m(ely)-8 b(.)332 4490 y(Through)35 b(the)i(optional)h(argumen)m(t)f Fp(nz)f Fz(of)h Fp(reverse)h Fz(one)f(can)g(compute)g(information)g(ab)s(out)g(the)191 4603 y(sparsit)m(y)31 b(pattern)f(of)h Fr(Z)36 b Fz(as)31 b(describ)s(ed)e(in)h(detail)i(in)e(the)h(previous)2553 4603 y SDict begin H.S end 2553 4603 a Black Fz(Section)h(4)p Black 2917 4541 a SDict begin H.R end 2917 4541 a 2917 4603 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (section.4) cvn H.B /ANN pdfmark end 2917 4603 a Fz(.)332 4765 y(The)e(return)g(v)-5 b(alues)30 b(of)h Fp(reverse)h Fz(calls)f(can)g(b)s(e)f(in)m(terpreted)h(according)g(to)2945 4765 y SDict begin H.S end 2945 4765 a Black Fz(T)-8 b(able)31 b(1)p Black 3240 4702 a SDict begin H.R end 3240 4702 a 3240 4765 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (table.1) cvn H.B /ANN pdfmark end 3240 4765 a Fz(,)g(but)f(negativ)m (e)191 4878 y(return)41 b(v)-5 b(alues)43 b(are)g(not)g(v)-5 b(alid,)46 b(since)d(the)f(corresp)s(onding)g(forw)m(ard)g(sw)m(eep)h (w)m(ould)f(ha)m(v)m(e)i(stopp)s(ed)191 4991 y(without)39 b(completing)h(the)g(necessary)f(ta)m(ylor)i(\014le.)67 b(The)38 b(return)g(v)-5 b(alue)40 b(of)f Fp(reverse)h Fz(ma)m(y)g(b)s(e)e(higher)191 5104 y(than)d(that)h(of)f(the)g (preceding)g Fp(fo)m(rw)m(a)m(rd)i Fz(call)g(b)s(ecause)e(some)g(op)s (erations)h(that)f(w)m(ere)h(ev)-5 b(aluated)36 b(at)g(a)191 5217 y(critical)26 b(argumen)m(t)f(during)e(the)h(forw)m(ard)g(sw)m (eep)g(w)m(ere)h(found)e(not)i(to)g(impact)f(the)h(dep)s(enden)m(ts)e (during)191 5330 y(the)31 b(rev)m(erse)g(sw)m(eep.)p Black Black eop end %%Page: 42 42 TeXDict begin 42 41 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.42) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fz(42)1179 b Ft(5)91 b(O)m(VERLO)m(ADED)32 b(F)m(OR)-10 b(W)g(ARD)31 b(AND)g(REVERSE)f(CALLS)p Black 332 606 a Fz(In)36 b(b)s(oth)f(scalar)i(and)f(v)m(ector)h(mo)s(de,)h(the)e (degree)h Fr(d)g Fz(m)m(ust)f(agree)h(with)f Fp(k)m(eep)i Fn(\000)e Fz(1)g(for)g(the)g(most)191 719 y(recen)m(t)i(call)f(to)g Fp(fo)m(rw)m(a)m(rd)p Fz(,)j(or)d(it)g(m)m(ust)f(b)s(e)g(equal)h(to)g (zero)g(if)g Fp(reverse)g Fz(directly)g(follo)m(ws)h(the)f(taping)g(of) 191 832 y(an)d(activ)m(e)i(section.)51 b(Otherwise,)35 b Fp(reverse)g Fz(will)f(return)e(con)m(trol)k(with)d(a)h(suitable)g (error)g(message.)51 b(In)191 945 y(order)35 b(to)i(a)m(v)m(oid)g(p)s (ossible)e(confusion,)i(the)f(\014rst)f(four)g(argumen)m(ts)h(m)m(ust)g (alw)m(a)m(ys)h(b)s(e)e(presen)m(t)h(in)g(the)191 1058 y(calling)f(sequence.)51 b(Ho)m(w)m(ev)m(er,)36 b(if)e Fr(m)f Fz(or)g Fr(d)h Fz(attain)h(their)f(trivial)g(v)-5 b(alues)34 b(1)g(and)f(0,)i(resp)s(ectiv)m(ely)-8 b(,)36 b(then)191 1171 y(corresp)s(onding)e(dimensions)g(of)h(the)f(arra)m(ys) i Fp(X)p Fz(,)e Fp(Y)p Fz(,)h Fp(u)p Fz(,)h Fp(U)p Fz(,)e(or)h Fp(Z)f Fz(can)h(b)s(e)f(omitted,)j(th)m(us)d(eliminating)191 1284 y(one)39 b(lev)m(el)h(of)f(indirection.)65 b(F)-8 b(or)40 b(example,)h(w)m(e)e(ma)m(y)g(call)h Fp (reverse\(tag,1,n,0,1.0,g\))k Fz(after)39 b(declaring)191 1396 y Fp(double)31 b(g[n])g Fz(to)g(calculate)i(a)e(gradien)m(t)g(of)f (a)h(scalar-v)-5 b(alued)32 b(function.)332 1559 y(Sometimes)26 b(it)g(ma)m(y)g(b)s(e)f(useful)g(to)h(p)s(erform)e(a)i(forw)m(ard)f(sw) m(eep)g(for)h(families)g(of)g(T)-8 b(a)m(ylor)26 b(series)g(with)191 1672 y(the)31 b(same)f(leading)h(term.)41 b(This)30 b(v)m(ector)i(v)m (ersion)f(of)f Fp(fo)m(rw)m(a)m(rd)i Fz(can)f(b)s(e)e(called)j(in)e (the)h(form)p Black Black 491 1868 a Fp(int)f(fo)m(rw)m(a)m (rd\(tag,m,n,d,p,x0,X,y0,Y\))491 1981 y(sho)m(rt)h(int)f(tag;)690 b Fz(//)31 b(tap)s(e)g(iden)m(ti\014cation)491 2094 y Fp(int)f(m;)959 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(dep)s(enden)m(t)f (v)-5 b(ariables)31 b Fr(m)491 2207 y Fp(int)f(n;)984 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fr(n)491 2320 y Fp(int)f(d;)984 b Fz(//)31 b(highest)g(deriv)-5 b(ativ)m(e)32 b(degree)f Fr(d)491 2433 y Fp(int)f(p;)984 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(T)-8 b(a)m(ylor)32 b(series)e Fr(p)491 2546 y Fp(double)h(x0[n];)698 b Fz(//)31 b(v)-5 b(alues)31 b(of)g(indep)s(enden)m(t)e(v)-5 b(ariables)31 b Fr(x)3119 2560 y FC(0)491 2659 y Fp(double)g (X[n][p][d];)526 b Fz(//)31 b(T)-8 b(a)m(ylor)32 b(co)s(e\016cien)m(ts) g Fr(X)38 b Fz(of)30 b(indep)s(enden)m(t)g(v)-5 b(ariables)491 2772 y Fp(double)31 b(y0[m];)673 b Fz(//)31 b(v)-5 b(alues)31 b(of)g(dep)s(enden)m(t)e(v)-5 b(ariables)31 b Fr(y)3036 2786 y FC(0)491 2885 y Fp(double)g(Y[m][p][d];)501 b Fz(//)31 b(T)-8 b(a)m(ylor)32 b(co)s(e\016cien)m(ts)g Fr(Y)50 b Fz(of)31 b(dep)s(enden)m(t)e(v)-5 b(ariables)191 3081 y(where)25 b Fp(X)g Fz(and)g Fp(Y)g Fz(hold)g(the)h(T)-8 b(a)m(ylor)26 b(co)s(e\016cien)m(ts)i(of)d(\014rst)g(and)g(higher)g (degree)h(and)f Fp(x0)p Fz(,)i Fp(y0)f Fz(the)f(common)191 3194 y(T)-8 b(a)m(ylor)39 b(co)s(e\016cien)m(ts)i(of)d(degree)h(0.)65 b(There)38 b(is)g(no)g(option)h(to)g(k)m(eep)g(the)f(v)-5 b(alues)39 b(of)g(activ)m(e)h(v)-5 b(ariables)191 3307 y(that)29 b(are)g(going)h(out)f(of)g(scop)s(e)g(or)f(that)i(are)f(o)m (v)m(erwritten.)42 b(Therefore)28 b(this)h(function)f(cannot)h(prepare) 191 3420 y(a)k(subsequen)m(t)e(rev)m(erse)i(sw)m(eep.)47 b(The)32 b(return)f(in)m(teger)i(serv)m(es)g(as)g(a)f(\015ag)h(to)g (indicate)g(quadratures)f(or)191 3533 y(altered)f(comparisons)g(as)f (describ)s(ed)g(ab)s(o)m(v)m(e)h(in)1888 3533 y SDict begin H.S end 1888 3533 a Black Fz(Section)g(1.7)p Black 2323 3470 a SDict begin H.R end 2323 3470 a 2323 3533 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.1.7) cvn H.B /ANN pdfmark end 2323 3533 a Fz(.)332 3695 y(Since)25 b(the)h(calculation)i(of)d(Jacobians)h(is)g(probably)e(the)i(most)f (imp)s(ortan)m(t)h(automatic)h(di\013eren)m(tia-)191 3808 y(tion)i(task,)g(w)m(e)g(ha)m(v)m(e)g(pro)m(vided)f(a)g(sp)s (ecialization)j(of)d(v)m(ector)i Fp(fo)m(rw)m(a)m(rd)f Fz(to)g(the)g(case)g(where)f Fr(d)d Fz(=)g(1.)41 b(This)191 3921 y(v)m(ersion)31 b(can)f(b)s(e)g(called)i(in)e(the)g(form)p Black Black 491 4117 a Fp(int)g(fo)m(rw)m(a)m(rd\(tag,m,n,p,x,X,y)-8 b(,Y\))491 4230 y(sho)m(rt)31 b(int)f(tag;)690 b Fz(//)31 b(tap)s(e)g(iden)m(ti\014cation)491 4343 y Fp(int)f(m;)959 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(dep)s(enden)m(t)f(v)-5 b(ariables)31 b Fr(m)491 4456 y Fp(int)f(n;)984 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fr(n)491 4569 y Fp(int)f(p;)984 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g (partial)h(deriv)-5 b(ativ)m(es)32 b Fr(p)491 4682 y Fp(double)f(x[n];)743 b Fz(//)31 b(v)-5 b(alues)31 b(of)g(indep)s (enden)m(t)e(v)-5 b(ariables)31 b Fr(x)3119 4696 y FC(0)491 4795 y Fp(double)g(X[n][p];)625 b Fz(//)31 b(seed)g(deriv)-5 b(ativ)m(es)32 b(of)e(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fr(X)491 4908 y Fp(double)g(y[m];)718 b Fz(//)31 b(v)-5 b(alues)31 b(of)g(dep)s(enden)m(t)e(v)-5 b(ariables)31 b Fr(y)3036 4922 y FC(0)491 5021 y Fp(double)g(Y[m][p];)600 b Fz(//)31 b(\014rst)f(deriv)-5 b(ativ)m(es)32 b(of)e(dep)s(enden)m(t)g (v)-5 b(ariables)31 b Fr(Y)191 5217 y Fz(When)e(this)g(routine)g(is)g (called)h(with)f Fp(p)g Fz(=)g Fp(n)g Fz(and)f Fp(X)h Fz(the)g(iden)m(tit)m(y)i(matrix,)f(the)f(resulting)g Fp(Y)g Fz(is)g(simply)191 5330 y(the)e(Jacobian)h Fr(F)792 5297 y Fl(0)816 5330 y Fz(\()p Fr(x)903 5344 y FC(0)942 5330 y Fz(\).)40 b(In)27 b(general,)i(one)f(obtains)f(the)g Fr(m)14 b Fn(\002)g Fr(p)27 b Fz(matrix)g Fr(Y)46 b Fz(=)25 b Fr(F)2931 5297 y Fl(0)2954 5330 y Fz(\()p Fr(x)3041 5344 y FC(0)3081 5330 y Fz(\))15 b Fr(X)35 b Fz(for)27 b(the)g(c)m(hosen)p Black Black eop end %%Page: 43 43 TeXDict begin 43 42 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.43) cvn /DEST pdfmark end 183 199 a Black 191 307 a Ft(5.3)92 b(Dep)s(endence)30 b(Analysis)2462 b Fz(43)p Black 191 606 a(initialization)36 b(of)d Fr(X)7 b Fz(.)49 b(In)32 b(a)h(w)m(orkstation)h(en)m(vironmen)m(t)g(a)f(v)-5 b(alue)33 b(of)h Fr(p)e Fz(somewhere)h(b)s(et)m(w)m(een)h(10)f(and)191 719 y(50)26 b(app)s(ears)f(to)h(b)s(e)f(fairly)h(optimal.)40 b(F)-8 b(or)26 b(smaller)g Fr(p)g Fz(the)f(in)m(terpretiv)m(e)i(o)m(v)m (erhead)g(is)f(not)f(appropriately)191 832 y(amortized,)48 b(and)42 b(for)h(larger)h Fr(p)e Fz(the)i Fr(p)p Fz(-fold)f(increase)h (in)e(storage)j(causes)f(to)s(o)f(man)m(y)h(page)f(faults.)191 945 y(Therefore,)27 b(large)h(Jacobians)f(that)f(cannot)h(b)s(e)f (compressed)g(via)h(column)f(coloring)i(as)f(could)f(b)s(e)g(done)191 1058 y(for)j(example)g(using)g(the)g(driv)m(er)g Fp(spa)m(rse)p 1571 1058 28 4 v 33 w(jac)g Fz(should)f(b)s(e)h(\\strip-mined")g(in)g (the)g(sense)g(that)g(the)h(ab)s(o)m(v)m(e)191 1171 y(\014rst-order-v)m (ector)k(v)m(ersion)f(of)f Fp(fo)m(rw)m(a)m(rd)i Fz(is)f(called)h(rep)s (eatedly)f(with)f(the)h(successiv)m(e)h Fr(n)20 b Fn(\002)f Fr(p)33 b Fz(matrices)191 1284 y Fr(X)38 b Fz(forming)30 b(a)h(partition)g(of)f(the)h(iden)m(tit)m(y)h(matrix)e(of)h(order)f Fr(n)p Fz(.)191 1437 y SDict begin H.S end 191 1437 a 191 1437 a SDict begin 13.6 H.A end 191 1437 a 191 1437 a SDict begin [/View [/XYZ H.V]/Dest (subsection.5.3) cvn /DEST pdfmark end 191 1437 a 148 x FA(5.3)112 b(Dep)s(endence)39 b(Analysis)191 1808 y Fz(The)26 b(sparsit)m(y)i(pattern)f(of)g (Jacobians)g(is)g(often)h(needed)e(to)i(set)g(up)d(data)j(structures)e (for)h(their)g(storage)191 1921 y(and)j(factorization)j(or)d(to)h(allo) m(w)h(their)e(economical)j(ev)-5 b(aluation)31 b(b)m(y)g(compression)f ([)3134 1921 y SDict begin H.S end 3134 1921 a Black Fz(1)p Black 3180 1863 a SDict begin H.R end 3180 1863 a 3180 1921 a SDict begin [/Color [0 1 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (cite.BeKh96) cvn H.B /ANN pdfmark end 3180 1921 a Fz(].)40 b(Compared)30 b(to)191 2034 y(the)f(ev)-5 b(aluation)30 b(of)e(the)h(full)g(Jacobian) g Fr(F)1644 2001 y Fl(0)1667 2034 y Fz(\()p Fr(x)1754 2048 y FC(0)1794 2034 y Fz(\))g(in)f(real)h(arithmetic)h(computing)f (the)f(Bo)s(olean)i(matrix)211 2124 y(~)191 2147 y Fr(P)54 b Fn(2)42 b(f)p Fz(0)p Fr(;)15 b Fz(1)p Fn(g)628 2105 y Fh(m)p Fl(\002)p Fh(n)832 2147 y Fz(represen)m(ting)40 b(its)h(sparsit)m(y)f(pattern)h(in)e(the)i(ob)m(vious)f(w)m(a)m(y)h (requires)f(a)g(little)i(less)191 2260 y(run-time)30 b(and)g(certainly)h(a)g(lot)g(less)g(memory)-8 b(.)332 2423 y(The)34 b(en)m(try)785 2400 y(~)765 2423 y Fr(P)823 2437 y Fh(j)t(i)918 2423 y Fz(in)h(the)f Fr(j)5 b Fz(-th)36 b(ro)m(w)e(and)g Fr(i)p Fz(-th)h(column)g(of)2375 2400 y(~)2354 2423 y Fr(P)48 b Fz(should)34 b(b)s(e)f(1)g(=)f Fr(tr)s(ue)i Fz(exactly)j(when)191 2536 y(there)25 b(is)g(a)g(data)g (dep)s(endence)f(b)s(et)m(w)m(een)i(the)f Fr(i)p Fz(-th)g(indep)s (enden)m(t)f(v)-5 b(ariable)25 b Fr(x)2823 2550 y Fh(i)2876 2536 y Fz(and)f(the)h Fr(j)5 b Fz(-th)26 b(dep)s(enden)m(t)191 2649 y(v)-5 b(ariable)41 b Fr(y)587 2663 y Fh(j)623 2649 y Fz(.)72 b(Just)40 b(lik)m(e)i(for)e(real)h(argumen)m(ts)g(one)g(w)m (ould)f(wish)g(to)h(compute)g(matrix-v)m(ector)i(and)191 2762 y(v)m(ector-matrix)32 b(pro)s(ducts)d(of)i(the)f(form)1631 2739 y(~)1611 2762 y Fr(P)16 b Fz(~)-48 b Fr(v)33 b Fz(or)j(~)-51 b Fr(u)1922 2729 y Fh(T)1998 2739 y Fz(~)1977 2762 y Fr(P)43 b Fz(b)m(y)30 b(appropriate)g Fp(fo)m(rw)m(a)m(rd)i Fz(and)e Fp(reverse)h Fz(routines)191 2874 y(where)39 b(~)-49 b Fr(v)38 b Fn(2)33 b(f)p Fz(0)p Fr(;)15 b Fz(1)p Fn(g)855 2841 y Fh(n)940 2874 y Fz(and)41 b(~)-51 b Fr(u)34 b Fn(2)g(f)p Fz(0)p Fr(;)15 b Fz(1)p Fn(g)1523 2841 y Fh(m)1592 2874 y Fz(.)57 b(Here,)37 b(m)m(ultiplication)h(corresp)s (onds)c(to)j(logical)h Fp(AND)d Fz(and)191 2987 y(addition)c(to)g (logical)h Fp(OR)p Fz(,)f(so)f(that)h(algebra)h(is)e(p)s(erformed)f(in) h(a)h(semi-ring.)332 3150 y(F)-8 b(or)39 b(practical)h(reasons)f(it)g (is)g(assumed)e(that)i Fr(s)g Fz(=)f(8)p Fn(\003)p Fp(sizeof)p Fz(\()p Fp(unsigned)i(long)f(int)p Fz(\))f(suc)m(h)g(Bo)s(olean)191 3263 y(v)m(ectors)i(~)-48 b Fr(v)39 b Fz(and)i(~)-51 b Fr(u)36 b Fz(are)g(com)m(bined)f(to)i(in)m(teger)g(v)m(ectors)g Fr(v)g Fn(2)d Fz(I)-20 b(N)2419 3227 y Fh(n)2502 3263 y Fz(and)35 b Fr(u)f Fn(2)f Fz(I)-20 b(N)2945 3227 y Fh(m)3047 3263 y Fz(whose)36 b(comp)s(onen)m(ts)191 3376 y(can)c(b)s(e)f(in)m(terpreted)h(as)g(bit)f(patterns.)45 b(Moreo)m(v)m(er)34 b Fr(p)d Fz(or)g Fr(q)k Fz(suc)m(h)c(in)m(teger)i (v)m(ectors)g(ma)m(y)g(b)s(e)e(com)m(bined)191 3489 y(column-wise)37 b(or)g(ro)m(w-wise)g(to)h(in)m(teger)g(matrices)g Fr(X)44 b Fn(2)35 b Fz(I)-20 b(N)2301 3453 y Fh(n)p Fl(\002)p Fh(p)2475 3489 y Fz(and)36 b Fr(U)47 b Fn(2)35 b Fz(I)-20 b(N)2944 3453 y Fh(q)r Fl(\002)p Fh(m)3099 3489 y Fz(,)39 b(whic)m(h)d(naturally)191 3602 y(corresp)s(ond)d(to)j(Bo)s(olean)g (matrices)1523 3579 y(~)1497 3602 y Fr(X)k Fn(2)32 b(f)p Fz(0)p Fr(;)15 b Fz(1)p Fn(g)1925 3569 y Fh(n)p Fl(\002)p FC(\()s Fh(sp)p FC(\))2187 3602 y Fz(and)2384 3579 y(~)2368 3602 y Fr(U)43 b Fn(2)32 b(f)p Fz(0)p Fr(;)15 b Fz(1)p Fn(g)2786 3569 y FC(\()s Fh(sq)r FC(\))p Fl(\002)p Fh(m)3031 3602 y Fz(.)54 b(The)34 b(pro)m(vided)h(bit)191 3715 y(pattern)g(v)m(ersions)h(of)f Fp(fo)m(rw)m(a)m(rd)h Fz(and)f Fp(reverse)h Fz(allo)m(w)g(to)g(compute)g(in)m(teger)g (matrices)g Fr(Y)53 b Fn(2)33 b Fz(I)-20 b(N)3452 3679 y Fh(m)p Fl(\002)p Fh(p)3644 3715 y Fz(and)191 3828 y Fr(Z)32 b Fn(2)25 b Fz(I)-20 b(N)451 3792 y Fh(q)r Fl(\002)p Fh(m)637 3828 y Fz(corresp)s(onding)29 b(to)1332 3828 y SDict begin H.S end 1332 3828 a 1332 3828 a SDict begin 13.6 H.A end 1332 3828 a 1332 3828 a SDict begin [/View [/XYZ H.V]/Dest (equation.5.9) cvn /DEST pdfmark end 1332 3828 a 1389 4014 a Fz(~)1375 4037 y Fr(Y)46 b Fz(=)1590 4014 y(~)1570 4037 y Fr(P)1667 4014 y Fz(~)1641 4037 y Fr(X)189 b Fz(and)2252 4014 y(~)2233 4037 y Fr(Z)32 b Fz(=)2439 4014 y(~)2423 4037 y Fr(U)2515 4014 y Fz(~)2495 4037 y Fr(P)c(;)1069 b Fz(\(9\))191 4247 y(resp)s(ectiv)m(ely)-8 b(,)34 b(with)927 4224 y(~)914 4247 y Fr(Y)47 b Fn(2)26 b(f)p Fz(0)p Fr(;)15 b Fz(1)p Fn(g)1321 4214 y Fh(m)p Fl(\002)p FC(\()s Fh(sp)p FC(\))1599 4247 y Fz(and)1793 4224 y(~)1777 4247 y Fr(U)37 b Fn(2)26 b(f)p Fz(0)p Fr(;)15 b Fz(1)p Fn(g)2183 4214 y FC(\()s Fh(sq)r FC(\))p Fl(\002)p Fh(n)2409 4247 y Fz(.)43 b(In)31 b(general,)i(the)e(application)i(of)f (the)191 4360 y(bit)39 b(pattern)h(v)m(ersions)f(of)g Fp(fo)m(rw)m(a)m(rd)i Fz(or)e Fp(reverse)i Fz(can)e(b)s(e)g(in)m (terpreted)g(as)h(propagating)g(dep)s(endences)191 4473 y(b)s(et)m(w)m(een)27 b(v)-5 b(ariables)27 b(forw)m(ard)e(or)h(bac)m (kw)m(ard,)i(therefore)f(b)s(oth)e(the)i(propagated)g(in)m(teger)g (matrices)g(and)191 4586 y(the)k(corresp)s(onding)e(Bo)s(olean)j (matrices)f(are)g(called)g Fq(dep)-5 b(endenc)g(e)34 b(structur)-5 b(es)p Fz(.)332 4748 y(The)30 b(bit)g(pattern)h Fp(fo)m(rw)m(a)m(rd)h Fz(routine)p Black Black 491 4991 a Fp(int)e(fo)m(rw)m(a)m(rd\(tag,m,n,p,x,X,y)-8 b(,Y,mo)s(de\))491 5104 y(sho)m(rt)31 b(int)f(tag;)690 b Fz(//)31 b(tap)s(e)g(iden)m (ti\014cation)491 5217 y Fp(int)f(m;)959 b Fz(//)31 b(n)m(um)m(b)s(er)f (of)g(dep)s(enden)m(t)f(v)-5 b(ariables)31 b Fr(m)491 5330 y Fp(int)f(n;)984 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s (enden)m(t)f(v)-5 b(ariables)31 b Fr(n)p Black Black eop end %%Page: 44 44 TeXDict begin 44 43 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.44) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fz(44)1179 b Ft(5)91 b(O)m(VERLO)m(ADED)32 b(F)m(OR)-10 b(W)g(ARD)31 b(AND)g(REVERSE)f(CALLS)p Black 491 606 a Fp(int)g(p;)984 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(in)m(tegers)i (propagated)f Fr(p)491 719 y Fp(double)g(x[n];)743 b Fz(//)31 b(v)-5 b(alues)31 b(of)g(indep)s(enden)m(t)e(v)-5 b(ariables)31 b Fr(x)3119 733 y FC(0)491 832 y Fp(unsigned)g(long)f (int)g(X[n][p];)222 b Fz(//)31 b(dep)s(endence)f(structure)g Fr(X)491 945 y Fp(double)h(y[m];)718 b Fz(//)31 b(v)-5 b(alues)31 b(of)g(dep)s(enden)m(t)e(v)-5 b(ariables)31 b Fr(y)3036 959 y FC(0)491 1058 y Fp(unsigned)g(long)f(int)g(Y[m][p];) 197 b Fz(//)31 b(dep)s(endence)f(structure)g Fr(Y)50 b Fz(according)31 b(to)g(\()3336 1058 y SDict begin H.S end 3336 1058 a Black Fz(9)p Black 3382 999 a SDict begin H.R end 3382 999 a 3382 1058 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (equation.5.9) cvn H.B /ANN pdfmark end 3382 1058 a Fz(\))491 1171 y Fp(cha)m(r)g(mo)s(de;)766 b Fz(//)31 b(0)g(:)41 b(safe)31 b(mo)s(de)f(\(default\),)h(1)g(:)41 b(tigh)m(t)31 b(mo)s(de)191 1414 y(can)26 b(b)s(e)g(used)f(to)h(obtain) h(the)f(dep)s(endence)f(structure)g Fr(Y)46 b Fz(for)26 b(a)g(giv)m(en)h(dep)s(endence)e(structure)h Fr(X)7 b Fz(.)39 b(The)191 1527 y(dep)s(endence)26 b(structures)g(are)h (represen)m(ted)f(as)h(arra)m(ys)g(of)g Fp(unsigned)g(long)g(int)f Fz(the)h(en)m(tries)g(of)g(whic)m(h)f(are)191 1640 y(in)m(terpreted)32 b(as)f(bit)h(patterns)f(as)h(describ)s(ed)e(ab)s(o)m(v)m(e.)46 b(F)-8 b(or)32 b(example,)g(for)g Fr(n)26 b Fz(=)h(3)32 b(the)f(iden)m(tit)m(y)i(matrix)191 1753 y Fr(I)231 1767 y FC(3)301 1753 y Fz(should)c(b)s(e)h(passed)g(with)g Fr(p)25 b Fz(=)g(1)30 b(as)h(the)g(3)20 b Fn(\002)g Fz(1)31 b(arra)m(y)893 2069 y Fp(X)50 b Fz(=)1126 1886 y Fk(0)1126 2050 y(@)1247 1956 y Fp(1)p Fz(0000000)24 b(00000000)f(00000000)h (00000000)2758 1970 y FC(2)1247 2069 y Fz(0)p Fp(1)p Fz(000000)g(00000000)f(00000000)h(00000000)2758 2083 y FC(2)1247 2182 y Fz(00)p Fp(1)p Fz(00000)g(00000000)f(00000000)h (00000000)2758 2196 y FC(2)2843 1886 y Fk(1)2843 2050 y(A)191 2385 y Fz(in)i(the)g(4-b)m(yte)i(long)f(in)m(teger)g(format.)40 b(The)26 b(parameter)g Fp(mo)s(de)h Fz(determines)f(the)h(mo)s(de)e(of) i(dep)s(endence)191 2498 y(analysis)k(as)f(explained)h(already)g(in) 1478 2498 y SDict begin H.S end 1478 2498 a Black Fz(Section)g(3.3)p Black 1912 2436 a SDict begin H.R end 1912 2436 a 1912 2498 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.3.3) cvn H.B /ANN pdfmark end 1912 2498 a Fz(.)332 2660 y(A)g(call)g(to)g(the)g(corresp)s(onding)e(bit)i(pattern)f Fp(reverse)i Fz(routine)p Black Black 491 2904 a Fp(int)e (reverse\(tag,m,n,q,U,Z,mo)s(de\))491 3017 y(sho)m(rt)h(int)f(tag;)690 b Fz(//)31 b(tap)s(e)g(iden)m(ti\014cation)491 3130 y Fp(int)f(m;)959 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(dep)s(enden)m(t)f (v)-5 b(ariables)31 b Fr(m)491 3243 y Fp(int)f(n;)984 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fr(n)491 3356 y Fp(int)f(q;)984 b Fz(//)31 b(n)m(um)m(b)s(er)f(of)g(in)m(tegers)i(propagated)f(q)491 3469 y Fp(unsigned)g(long)f(int)g(U[q][m];)195 b Fz(//)31 b(dep)s(endence)f(structure)g Fr(U)491 3582 y Fp(unsigned)h(long)f(int) g(Z[q][n];)227 b Fz(//)31 b(dep)s(endence)f(structure)g Fr(Z)37 b Fz(according)31 b(to)g(\()3332 3582 y SDict begin H.S end 3332 3582 a Black Fz(9)p Black 3378 3523 a SDict begin H.R end 3378 3523 a 3378 3582 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (equation.5.9) cvn H.B /ANN pdfmark end 3378 3582 a Fz(\))491 3695 y Fp(cha)m(r)g(mo)s(de;)766 b Fz(//)31 b(0)g(:)41 b(safe)31 b(mo)s(de)f(\(default\),)h(1)g(:)41 b(tigh)m(t)31 b(mo)s(de)191 3939 y(yields)g(the)f(dep)s(endence)f (structure)h Fr(Z)37 b Fz(for)30 b(a)h(giv)m(en)g(dep)s(endence)f (structure)g Fr(U)10 b Fz(.)332 4101 y(T)-8 b(o)33 b(determine)g(the)f (whole)h(sparsit)m(y)g(pattern)2001 4078 y(~)1981 4101 y Fr(P)45 b Fz(of)33 b(the)g(Jacobian)g Fr(F)2802 4068 y Fl(0)2825 4101 y Fz(\()p Fr(x)p Fz(\))g(as)g(an)f(in)m(teger)i (matrix)191 4214 y Fr(P)45 b Fz(one)32 b(ma)m(y)g(call)h Fp(fo)m(rw)m(a)m(rd)h Fz(or)e Fp(reverse)g Fz(with)g Fr(p)27 b Fn(\025)h Fr(n=s)j Fz(or)h Fr(q)f Fn(\025)c Fr(m=s)p Fz(,)32 b(resp)s(ectiv)m(ely)-8 b(.)47 b(F)-8 b(or)33 b(this)e(purp)s(ose)191 4327 y(the)i(corresp)s(onding)e(dep)s (endence)h(structure)g Fr(X)39 b Fz(or)33 b Fr(U)42 b Fz(m)m(ust)33 b(b)s(e)f(de\014ned)f(to)i(represen)m(t)g(the)f(iden)m (tit)m(y)191 4440 y(matrix)37 b(of)f(the)h(resp)s(ectiv)m(e)h (dimension.)58 b(Due)37 b(to)g(the)f(fact)i(that)f(alw)m(a)m(ys)h(a)f (m)m(ultiple)g(of)f Fr(s)g Fz(Bo)s(olean)191 4553 y(v)m(ectors)c(are)f (propagated)g(there)f(ma)m(y)h(b)s(e)f(sup)s(er\015uous)d(v)m(ectors,) 32 b(whic)m(h)f(can)f(b)s(e)g(set)h(to)g(zero.)332 4716 y(The)37 b(return)f(v)-5 b(alues)37 b(of)h(the)f(bit)g(pattern)h Fp(fo)m(rw)m(a)m(rd)g Fz(and)f Fp(reverse)h Fz(routines)f(corresp)s (ond)f(to)i(those)191 4829 y(describ)s(ed)29 b(in)699 4829 y SDict begin H.S end 699 4829 a Black Fz(T)-8 b(able)31 b(1)p Black 995 4765 a SDict begin H.R end 995 4765 a 995 4829 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (table.1) cvn H.B /ANN pdfmark end 995 4829 a Fz(.)332 4991 y(One)36 b(can)h(con)m(trol)h(the)f(storage)h(gro)m(wth)f(b)m(y)f (the)h(factor)g Fr(p)g Fz(using)f(\\strip-mining")h(for)f(the)h(calls) 191 5104 y(of)45 b Fp(fo)m(rw)m(a)m(rd)h Fz(or)e Fp(reverse)i Fz(with)e(successiv)m(e)i(groups)e(of)g(columns)h(or)f(resp)s(ectiv)m (ely)i(ro)m(ws)f(at)g(a)g(time,)191 5217 y(i.e.)c(partitioning)g Fr(X)48 b Fz(or)40 b Fr(U)50 b Fz(appropriately)41 b(as)f(describ)s(ed) f(for)h(the)h(computation)g(of)f(Jacobians)h(in)191 5330 y SDict begin H.S end 191 5330 a Black Fz(Section)31 b(5.2)p Black 625 5268 a SDict begin H.R end 625 5268 a 625 5330 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.5.2) cvn H.B /ANN pdfmark end 625 5330 a Fz(.)p Black Black eop end %%Page: 45 45 TeXDict begin 45 44 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.45) cvn /DEST pdfmark end 183 199 a Black 3700 307 a Fz(45)p Black 191 515 a SDict begin H.S end 191 515 a 191 515 a SDict begin 13.6 H.A end 191 515 a 191 515 a SDict begin [/View [/XYZ H.V]/Dest (section.6) cvn /DEST pdfmark end 191 515 a 91 x FD(6)135 b(Adv)-7 b(anced)43 b(algorithmic)k(di\013eren)l(tiation)h(in)c(ADOL-C)191 719 y SDict begin H.S end 191 719 a 191 719 a SDict begin 13.6 H.A end 191 719 a 191 719 a SDict begin [/View [/XYZ H.V]/Dest (subsection.6.1) cvn /DEST pdfmark end 191 719 a 143 x FA(6.1)112 b(Di\013eren)m(tiating)38 b(external)g(functions)191 1084 y Fz(Ideally)-8 b(,)47 b(AD)c(is)f(applied)h(to)g(a)g(giv)m(en)g (computation)g(as)g(a)g(whole.)77 b(This)42 b(is)g(not)h(alw)m(a)m(ys)h (p)s(ossible)191 1196 y(b)s(ecause)38 b(parts)f(of)h(the)h(computation) f(ma)m(y)h(b)s(e)e(co)s(ded)h(in)f(a)h(di\013eren)m(t)h(programming)e (language)j(or)191 1309 y(ma)m(y)g(a)g(call)h(to)f(an)g(external)g (library)-8 b(.)69 b(In)39 b(the)g(former)g(case)i(one)f(ma)m(y)g(w)m (an)m(t)h(to)f(di\013eren)m(tiate)i(the)191 1422 y(parts)26 b(in)h(question)g(with)f(a)h(di\013eren)m(t)g(AD)h(to)s(ol)f(or)g(pro)m (vide)g(hand)f(written)g(deriv)-5 b(ativ)m(es.)41 b(T)-8 b(o)28 b(in)m(tegrate)191 1535 y(these)h(In)f(practice,)i(ho)m(w)m(ev)m (er,)h(sophisticated)f(pro)5 b(jects)28 b(usually)h(ev)m(olv)m(e)i(o)m (v)m(er)f(a)f(long)g(p)s(erio)s(d)e(of)i(time.)191 1648 y(Within)e(this)g(pro)s(cess,)h(a)g(heterogeneous)g(co)s(de)f(base)h (for)f(the)g(pro)5 b(ject)28 b(dev)m(elops,)g(whic)m(h)f(ma)m(y)h (include)191 1761 y(the)i(incorp)s(oration)g(of)g(external)g (solutions,)h(c)m(hanges)g(in)e(programming)g(paradigms)h(or)g(ev)m(en) g(of)g(pro-)191 1874 y(gramming)c(languages.)41 b(Equally)26 b(heterogeneous,)i(the)e(computation)h(of)f(deriv)-5 b(ativ)m(e)28 b(v)-5 b(alues)26 b(app)s(ears.)191 1987 y(Hence,)41 b(di\013eren)m(t)e(AD-to)s(ols)i(ma)m(y)e(b)s(e)e(com)m (bined)i(with)f(hand-deriv)m(ed)g(co)s(des)g(based)g(on)h(the)f(same) 191 2100 y(or)i(di\013eren)m(t)h(programming)e(languages.)71 b(ADOL-C)40 b(supp)s(orts)f(suc)m(h)g(settings)i(b)m(y)f(the)h(concept) g(of)191 2213 y(externally)32 b(di\013eren)m(tiated)g(functions,)f (that)h(is,)f(a)h(function)e(not)h(di\013eren)m(tiated)i(b)m(y)e (ADOL-C)g(itself.)191 2326 y(The)f(required)f(deriv)-5 b(ativ)m(es)32 b(ha)m(v)m(e)g(to)f(b)s(e)f(pro)m(vided)g(b)m(y)g(the)g (user.)332 2488 y(F)-8 b(or)33 b(this)f(purp)s(ose,)f(it)i(is)f (required)g(that)g(the)h(externally)g(di\013eren)m(tiated)h(function)e (\(for)g(example)191 2601 y(named)e Ff(euler)p 669 2601 28 4 v 33 w(step)h Fz(\))f(has)g(the)h(follo)m(wing)h(signature.)663 2786 y Fp(int)e(euler)p 980 2786 V 33 w(step\(int)h(n,)f(double)h(*x,)g (int)f(m,)h(double)f(*y\);)191 2993 y Fz(Note)38 b(that)f(the)g(formal) g(paraem)m(ters)g(in)f(the)h(signature)g(ha)m(v)m(e)h Fp(double)f Fz(t)m(yp)s(e,)h(that)f(is,)i(they)e(are)f(not)191 3106 y(activ)m(e)30 b(as)f(in)e(the)i(original)g(program)f(b)s(efore)f (the)i(ADOL-C)f(t)m(yp)s(e)g(c)m(hange.)41 b(The)28 b(externally)h (di\013eren-)191 3219 y(tiated)j(function)e(has)g(to)h(b)s(e)f Fq(r)-5 b(e)g(gister)g(e)g(d)1572 3219 y SDict begin H.S end 1572 3219 a -33 x FC(4)1613 3219 y SDict begin 13.6 H.L end 1613 3219 a 1613 3219 a SDict begin [/Subtype /Link/Dest (Hfootnote.4) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 1613 3219 a 30 w Fz(using)30 b(an)h(ADOL-C)f(metho)s(d)g(as)g(follo)m(ws.)663 3404 y Fp(ext)p 783 3404 28 4 v 33 w(di\013)p 938 3404 V 33 w(fct)g(*edf)h(=)f(reg)p 1510 3404 V 34 w(ext)p 1659 3404 V 32 w(fct\(euler)p 2007 3404 V 34 w(step\);)p Fz(.)191 3589 y(This)i(returns)g(a)i(p)s(oin)m(ter)f(to)h(an)f Fp(ext)p 1476 3589 V 33 w(di\013)p 1631 3589 V 32 w(fct)g Fz(instance)h(sp)s(eci\014c)f(to)h(the)f(registered)h(function.)48 b(Then,)191 3702 y(the)36 b(user)g(has)g(to)g(supply)f(the)h(function)g (p)s(oin)m(ters)g(for)g(the)g(call)i(bac)m(k)e(metho)s(ds)g(\(for)g (example)h(here)191 3815 y Fp(zos)p 316 3815 V 33 w(fo)m(r)p 450 3815 V 33 w(euler)p 663 3815 V 33 w(step)27 b Fz(and)e Fp(fos)p 1158 3815 V 33 w(rev)p 1304 3815 V 33 w(euler)p 1517 3815 V 33 w(step)p Fz(\))i(the)f(user)g(implemen)m(ted)h(to)g (compute)f(the)h(deriv)-5 b(ativ)m(es)27 b(as)191 3928 y(follo)m(ws.)p Black Black 663 4152 a Fp(edf-)p Fr(>)p Fp(zos)p 1004 4152 V 33 w(fo)m(rw)m(a)m(rd)32 b(=)e Ff(zos)p 1569 4152 V 33 w(fo)m(r)p 1703 4152 V 33 w(euler)p 1916 4152 V 33 w(step)p Fp(;)663 4264 y(//)i(function)e(p)s(ointer)g(fo)m(r) h(computing)h(Zero-Order-Scala)m(r)f(\(=zos\))663 4377 y(//)h(fo)m(rw)m(a)m(rd)f(info)m(rmation)663 4490 y(edf-)p Fr(>)p Fp(fos)p 992 4490 V 33 w(reverse)h(=)e(fos)p 1525 4490 V 33 w(rev)p 1671 4490 V 33 w(euler)p 1884 4490 V 33 w(step;)663 4603 y(//)i(function)e(p)s(ointer)g(fo)m(r)h (computing)h(First-Order-Scala)m(r)e(\(=fos\))663 4716 y(reverse)i(info)m(rmation)191 4940 y Fz(T)-8 b(o)44 b(facilitate)j(the)d(switc)m(h)g(b)s(et)m(w)m(een)g(activ)m(e)i(and)d (passiv)m(e)h(v)m(ersions)g(of)g(the)g(parameters)g Fp(x)g Fz(and)f Fp(y)191 5053 y Fz(one)f(has)g(to)h(pro)m(vide)f(\(allo)s (cate\))j(b)s(oth)c(v)-5 b(arian)m(ts.)77 b(I.e.)f(if)42 b(the)g(call)h(to)g Fp(euler)p 3008 5053 V 33 w(step)f Fz(w)m(as)g(originally)663 5166 y Fp(rc=euler)p 990 5166 V 34 w(step\(n,)36 b(sOld,)g(m,)g(sNew\);)i Fz(then)d(the)g(ADOL-C)g(t) m(yp)s(ec)m(hange)h(for)e(the)h(calling)p Black 191 5244 1440 4 v 295 5298 a Fv(4)329 5330 y SDict begin H.S end 329 5330 a 329 5330 a SDict begin H.R end 329 5330 a 329 5330 a SDict begin [/View [/XYZ H.V]/Dest (Hfootnote.4) cvn /DEST pdfmark end 329 5330 a Fu(w)n(e)26 b(record)g(the)g (function)f(p)r(oin)n(ter)p Black Black Black eop end %%Page: 46 46 TeXDict begin 46 45 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.46) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fz(46)705 b Ft(6)91 b(AD)m(V)-10 b(ANCED)32 b(ALGORITHMIC)e (DIFFERENTIA)-8 b(TION)30 b(IN)h(ADOL-C)p Black 191 606 a Fz(con)m(text)j(will)e(turn)f Fp(sOld)g Fz(and)g Fp(sNew)i Fz(in)e Fp(adouble)h Fz(p)s(oin)m(ters.)45 b(T)-8 b(o)33 b(trigger)g(the)f(appropriate)g(action)h(for)191 719 y(the)c(deriv)-5 b(ativ)m(e)30 b(computation)g(\(i.e.)41 b(creating)31 b(an)d(external)i(di\013eren)m(tiation)g(en)m(try)g(on)e (the)h(trace\))i(the)191 832 y(original)g(call)h(to)f(the)g(externally) g(di\013eren)m(tiated)h(function)e(m)m(ust)g(b)s(e)g(substituted)g(b)m (y)663 1036 y Fp(rc=call)p 938 1036 28 4 v 33 w(ext)p 1086 1036 V 33 w(fct\(edf,)h(n,)f(sOldP)m(assive,)g(sOld,)g(m,)h(sNewP) m(assive,)g(sNew\);)191 1240 y Fz(Here,)36 b Fp(sOldP)m(assive)d Fz(and)h Fp(sNewP)m(assive)h Fz(are)f(the)g(passiv)m(e)h(coun)m (terparts)g(\()p Fp(double)g Fz(p)s(oin)m(ters)f(allo)s(cated)191 1353 y(to)k(length)g Fp(n)f Fz(and)g Fp(m)p Fz(,)i(resp)s(ectiv)m (ely\))h(to)e(the)f(activ)m(e)j(argumen)m(ts)e Fp(sNew)g Fz(in)f Fp(adouble)p Fz(.)62 b(The)37 b(usage)h(of)191 1465 y(the)43 b(external)g(function)f(facilit)m(y)i(is)f(illustrated)g (b)m(y)f(the)h(example)g Fs(ext_diff_func)38 b Fz(con)m(tained)44 b(in)191 1578 y Fs(examples/additional_exam)o(ples)o(/ex)o(t_di)o(ff_f) o(unc)o Fz(.)39 b(There,the)32 b(external)h(di\013eren)m(tiated)g (func-)191 1691 y(tion)g(is)g(also)h(a)f(C)g(co)s(de,)h(but)e(the)h (handling)f(as)h(external)h(di\013eren)m(tiated)g(functions)f(also)g(a) h(decrease)191 1804 y(of)c(the)h(o)m(v)m(erall)i(required)c(tap)s(e)i (size.)191 1945 y SDict begin H.S end 191 1945 a 191 1945 a SDict begin 13.6 H.A end 191 1945 a 191 1945 a SDict begin [/View [/XYZ H.V]/Dest (subsection.6.2) cvn /DEST pdfmark end 191 1945 a 148 x FA(6.2)112 b(Adv)-6 b(anced)38 b(algorithmic)h(di\013eren)m(tiation)f(of)g(time)f(in)m(tegration)h (pro)s(cesses)191 2315 y Fz(F)-8 b(or)23 b(man)m(y)g(time-dep)s(enden)m (t)g(applications,)j(the)d(corresp)s(onding)f(sim)m(ulations)h(are)g (based)g(on)f(ordinary)191 2428 y(or)27 b(partial)g(di\013eren)m(tial)h (equations.)40 b(F)-8 b(urthermore,)28 b(frequen)m(tly)f(there)g(are)g (quan)m(tities)h(that)f(in\015uence)191 2541 y(the)40 b(result)g(of)g(the)h(sim)m(ulation)g(and)e(can)h(b)s(e)g(seen)g(as)g (con)m(trol)i(of)e(the)g(systems.)70 b(T)-8 b(o)40 b(compute)h(an)191 2654 y(appro)m(ximation)31 b(of)g(the)g(sim)m(ulated)g(pro)s(cess)g (for)f(a)h(time)g(in)m(terv)-5 b(al)32 b([0)p Fr(;)15 b(T)e Fz(])32 b(and)e(ev)-5 b(aluated)31 b(the)g(desired)191 2766 y(target)h(function,)e(one)h(applies)f(an)h(appropriate)f(in)m (tegration)i(sc)m(heme)g(giv)m(en)f(b)m(y)p Black Black 339 2982 a(some)g(initializations)i(yielding)e Fr(x)1526 2996 y FC(0)339 3095 y Fz(for)g Fr(i)25 b Fz(=)g(0)p Fr(;)15 b(:)g(:)g(:)i(;)e(N)31 b Fn(\000)20 b Fz(1)427 3208 y Fr(x)479 3222 y Fh(i)p FC(+1)623 3208 y Fz(=)25 b Fr(F)13 b Fz(\()p Fr(x)877 3222 y Fh(i)905 3208 y Fr(;)i(u)997 3222 y Fh(i)1026 3208 y Fr(;)g(t)1099 3222 y Fh(i)1127 3208 y Fz(\))339 3321 y(ev)-5 b(aluation)32 b(of)f(the)f(target)i (function)191 3537 y(where)g Fr(x)508 3551 y Fh(i)565 3537 y Fn(2)d Fw(R)733 3501 y Fh(n)813 3537 y Fz(denotes)k(the)f(state) i(and)e Fr(u)1758 3551 y Fh(i)1816 3537 y Fn(2)c Fw(R)1983 3504 y Fh(m)2083 3537 y Fz(the)k(con)m(trol)j(at)e(time)g Fr(t)2905 3551 y Fh(i)2966 3537 y Fz(for)f(a)h(giv)m(en)h(time)f(grid) 191 3650 y Fr(t)224 3664 y FC(0)263 3650 y Fr(;)15 b(:)g(:)g(:)i(;)e(t) 498 3664 y Fh(N)595 3650 y Fz(with)29 b Fr(t)834 3664 y FC(0)899 3650 y Fz(=)c(0)30 b(and)f Fr(t)1279 3664 y Fh(N)1371 3650 y Fz(=)c Fr(T)13 b Fz(.)41 b(The)29 b(op)s(erator)h Fr(F)38 b Fz(:)26 b Fw(R)2376 3617 y Fh(n)2442 3650 y Fn(\002)19 b Fw(R)2610 3617 y Fh(m)2696 3650 y Fn(\002)f Fw(R)26 b Fn(7!)f Fw(R)3083 3617 y Fh(n)3160 3650 y Fz(de\014nes)k(the)h(time)191 3763 y(step)g(to)h(compute)g(the)g (state)g(at)h(time)f Fr(t)1594 3777 y Fh(i)1622 3763 y Fz(.)40 b(Note)32 b(that)f(w)m(e)g(do)f(not)h(assume)f(a)h(uniform)e (grid.)332 3925 y(When)44 b(computing)f(deriv)-5 b(ativ)m(es)46 b(of)e(the)f(target)j(function)d(with)h(resp)s(ect)f(to)i(the)f(con)m (trol,)49 b(the)191 4038 y(consequences)30 b(for)g(the)g(tap)s(e)g (generation)h(using)e(the)h(\\basic")h(taping)g(approac)m(h)f(as)g (implemen)m(ted)g(in)191 4151 y(ADOL-C)e(so)g(far)g(are)g(sho)m(wn)f (in)h(the)g(left)h(part)e(of)1958 4169 y SDict begin H.S end 1958 4169 a Black -18 x Fz(Figure)k(4)p Black 2291 4089 a SDict begin H.R end 2291 4089 a 2291 4151 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (figure.4) cvn H.B /ANN pdfmark end 2291 4151 a Fz(.)40 b(As)27 b(can)i(b)s(e)e(seen,)i(the)f (iterativ)m(e)i(pro)s(cess)191 4264 y(is)38 b(completely)i(unrolled)e (due)g(to)h(the)f(taping)h(pro)s(cess.)64 b(That)39 b(is,)h(the)f(tap)s (e)f(con)m(tains)i(an)e(in)m(ternal)191 4377 y(represen)m(tation)h(of)g (eac)m(h)g(time)g(step.)65 b(Hence,)41 b(the)e(o)m(v)m(erall)h(tap)s(e) f(comprises)f(a)h(serious)f(amoun)m(t)h(of)191 4490 y(redundan)m(t)29 b(information)i(as)f(illustrated)h(b)m(y)g(the)f(ligh)m(t)i(grey)f (rectangles)h(in)2891 4508 y SDict begin H.S end 2891 4508 a Black -18 x Fz(Figure)f(4)p Black 3223 4428 a SDict begin H.R end 3223 4428 a 3223 4490 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (figure.4) cvn H.B /ANN pdfmark end 3223 4490 a Fz(.)332 4653 y(T)-8 b(o)35 b(o)m(v)m(ercome)i(the)d(rep) s(eated)h(storage)h(of)e(essen)m(tially)j(the)d(same)h(information,)h (a)f Fq(neste)-5 b(d)37 b(taping)191 4765 y Fz(mec)m(hanism)j(has)g(b)s (een)f(incorp)s(orated)h(in)m(to)h(ADOL-C)e(as)i(illustrated)f(on)g (the)g(righ)m(t-hand)g(side)g(of)191 4896 y SDict begin H.S end 191 4896 a Black -18 x Fz(Figure)31 b(4)p Black 523 4816 a SDict begin H.R end 523 4816 a 523 4878 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (figure.4) cvn H.B /ANN pdfmark end 523 4878 a Fz(.)40 b(This)26 b(new)g(capabilit)m(y)i (allo)m(ws)g(the)f(encapsulation)g(of)g(the)g(time-stepping)h(pro)s (cedure)d(suc)m(h)191 4991 y(that)j(only)f(the)h(last)g(time)g(step)f Fr(x)1349 5005 y Fh(N)1442 4991 y Fz(=)e Fr(F)13 b Fz(\()p Fr(x)1696 5005 y Fh(N)7 b Fl(\000)p FC(1)1854 4991 y Fr(;)15 b(u)1946 5005 y Fh(N)7 b Fl(\000)p FC(1)2104 4991 y Fz(\))27 b(is)g(tap)s(ed)h(as)f(one)h(represen)m(tativ)m(e)h(of) e(the)h(time)191 5104 y(steps)e(in)g(addition)g(to)h(a)g(function)e(p)s (oin)m(ter)i(to)f(the)h(ev)-5 b(aluation)27 b(pro)s(cedure)e Fr(F)40 b Fz(of)26 b(the)g(time)h(steps.)39 b(The)191 5217 y(function)f(p)s(oin)m(ter)g(has)g(to)h(b)s(e)f(stored)g(for)g(a)h (p)s(ossibly)e(necessary)i(retaping)g(during)e(the)h(deriv)-5 b(ativ)m(e)191 5330 y(calculation)33 b(as)d(explained)h(b)s(elo)m(w.)p Black Black eop end %%Page: 47 47 TeXDict begin 47 46 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.47) cvn /DEST pdfmark end 183 199 a Black 191 307 a Ft(6.2)92 b(Adv)-5 b(anced)30 b(algorithmic)i(di\013eren)m(tiation)g (of)f(time)g(in)m(tegration)h(pro)s(cesses)681 b Fz(47)p Black Black Black Black 309 1195 a @beginspecial 0 @llx 0 @lly 314 @urx 156 @ury 1644 @rwi @setspecial %%BeginDocument: tapebasic.eps %!PS-Adobe-2.0 EPSF-2.0 %%Title: tapebasic.fig %%Creator: fig2dev Version 3.2 Patchlevel 5 %%CreationDate: Thu Dec 18 13:02:12 2008 %%For: awalther@localhost.localdomain (Andrea Walther) %%BoundingBox: 0 0 314 156 %Magnification: 1.0000 %%EndComments /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save newpath 0 156 moveto 0 0 lineto 314 0 lineto 314 156 lineto closepath clip newpath -27.6 185.0 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y tr xrad yrad sc 0 0 1 startangle endangle arc closepath savematrix setmatrix } def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin 10 setmiterlimit 0 slj 0 slc 0.06299 0.06299 sc % % Fig objects follow % % % here starts figure with depth 50 % Ellipse 7.500 slw n 2937 1440 33 33 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr % Ellipse n 3150 1440 33 33 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr % Ellipse n 3375 1440 33 33 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr % Polyline 0 slj 0 slc n 2025 2475 m 3375 2475 l 3375 2925 l 2025 2925 l cp gs col7 s gr % Polyline gs clippath 5230 930 m 5415 930 l 5415 870 l 5230 870 l 5230 870 l 5380 900 l 5230 930 l cp eoclip n 450 900 m 5400 900 l gs 0.80 setgray ef gr gs col0 s gr gr % arrowhead n 5230 930 m 5380 900 l 5230 870 l 5260 900 l 5230 930 l cp gs 0.00 setgray ef gr col0 s % Polyline n 450 1125 m 5400 1125 l 5400 1800 l 450 1800 l cp gs col0 s gr % Polyline n 1800 1125 m 2250 1125 l 2250 1800 l 1800 1800 l cp gs 0.80 setgray ef gr gs col0 s gr % Polyline n 2250 1125 m 2700 1125 l 2700 1800 l 2250 1800 l cp gs 0.80 setgray ef gr gs col0 s gr % Polyline n 3600 1125 m 4050 1125 l 4050 1800 l 3600 1800 l cp gs 0.80 setgray ef gr gs col0 s gr % Polyline n 450 1125 m 1800 1125 l 1800 1800 l 450 1800 l cp gs 0.60 setgray ef gr gs col0 s gr % Polyline n 4050 1125 m 5400 1125 l 5400 1800 l 4050 1800 l cp gs 0.40 setgray ef gr gs col0 s gr /Times-Roman ff 317.50 scf sf 1935 720 m gs 1 -1 sc (tape generation) col0 sh gr /Times-Roman ff 317.50 scf sf 2340 2205 m gs 1 -1 sc (time loop) col0 sh gr /Times-Roman ff 317.50 scf sf 4365 2205 m gs 1 -1 sc (target) col0 sh gr /Times-Roman ff 317.50 scf sf 4230 2520 m gs 1 -1 sc (function) col0 sh gr /Times-Roman ff 317.50 scf sf 855 2205 m gs 1 -1 sc (init) col0 sh gr % here ends figure; $F2psEnd rs showpage %%Trailer %EOF %%EndDocument @endspecial 1963 w @beginspecial 0 @llx 0 @lly 314 @urx 156 @ury 1644 @rwi @setspecial %%BeginDocument: tapeadv.eps %!PS-Adobe-2.0 EPSF-2.0 %%Title: tapeadv.fig %%Creator: fig2dev Version 3.2 Patchlevel 5 %%CreationDate: Thu Dec 18 13:02:55 2008 %%For: awalther@localhost.localdomain (Andrea Walther) %%BoundingBox: 0 0 314 156 %Magnification: 1.0000 %%EndComments /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save newpath 0 156 moveto 0 0 lineto 314 0 lineto 314 156 lineto closepath clip newpath -27.6 185.0 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin 10 setmiterlimit 0 slj 0 slc 0.06299 0.06299 sc % % Fig objects follow % % % here starts figure with depth 50 /Times-Roman ff 317.50 scf sf 1935 720 m gs 1 -1 sc (tape generation) col0 sh gr % Polyline 0 slj 0 slc 7.500 slw n 2025 2250 m 3375 2250 l 3375 2700 l 2025 2700 l cp gs col7 s gr % Polyline gs clippath 5230 930 m 5415 930 l 5415 870 l 5230 870 l 5230 870 l 5380 900 l 5230 930 l cp eoclip n 450 900 m 5400 900 l gs 0.80 setgray ef gr gs col0 s gr gr % arrowhead n 5230 930 m 5380 900 l 5230 870 l 5260 900 l 5230 930 l cp gs 0.00 setgray ef gr col0 s % Polyline n 450 1125 m 5400 1125 l 5400 1800 l 450 1800 l cp gs col0 s gr % Polyline n 2700 2250 m 3150 2250 l 3150 2925 l 2700 2925 l cp gs 0.80 setgray ef gr gs col0 s gr % Polyline gs clippath 2534 2200 m 2700 2283 l 2726 2229 l 2561 2147 l 2561 2147 l 2682 2241 l 2534 2200 l cp eoclip n 1800 1800 m 2700 2250 l gs 0.80 setgray ef gr gs col0 s gr gr % arrowhead n 2534 2200 m 2682 2241 l 2561 2147 l 2574 2187 l 2534 2200 l cp gs 0.00 setgray ef gr col0 s % Polyline n 450 1125 m 1800 1125 l 1800 1800 l 450 1800 l cp gs 0.60 setgray ef gr gs col0 s gr % Polyline gs clippath 3911 1902 m 4076 1820 l 4050 1766 l 3884 1849 l 3884 1849 l 4032 1809 l 3911 1902 l cp eoclip n 4050 1800 m 3150 2250 l gs 0.60 setgray ef gr gs col0 s gr gr % arrowhead n 3911 1902 m 4032 1809 l 3884 1849 l 3924 1862 l 3911 1902 l cp gs 0.00 setgray ef gr col0 s % Polyline n 4050 1125 m 5400 1125 l 5400 1800 l 4050 1800 l cp gs 0.40 setgray ef gr gs col0 s gr % here ends figure; $F2psEnd rs showpage %%Trailer %EOF %%EndDocument @endspecial 410 1408 a(Basic)32 b(taping)f(pro)s(cess)1076 b(Adv)-5 b(anced)30 b(taping)h(pro)s(cess)p Black 1243 1604 a(Figure)g(4:)1641 1604 y SDict begin H.S end 1641 1604 a 1641 1604 a SDict begin H.R end 1641 1604 a 1641 1604 a SDict begin [/View [/XYZ H.V]/Dest (figure.4) cvn /DEST pdfmark end 1641 1604 a Fz(Di\013eren)m(t)h(taping)e (approac)m(hes)p Black Black 332 1854 a(Instead)f(of)h(storing)f(the)h (complete)h(tap)s(e,)e(only)h(a)g(v)m(ery)f(limited)h(n)m(um)m(b)s(er)e (of)i(in)m(termediate)h(states)191 1967 y(are)41 b(k)m(ept)g(in)g (memory)-8 b(.)71 b(They)41 b(serv)m(e)g(as)g(c)m(hec)m(kp)s(oin)m(ts,) k(suc)m(h)40 b(that)h(the)g(required)f(information)h(for)191 2080 y(the)e(bac)m(kw)m(ard)h(in)m(tegration)h(is)f(generated)g (piecewise)g(during)f(the)g(adjoin)m(t)h(calculation.)70 b(F)-8 b(or)40 b(this)191 2192 y(mo)s(di\014ed)h(adjoin)m(t)h (computation)h(the)g(optimal)g(c)m(hec)m(kp)s(oin)m(ting)g(sc)m (hedules)g(pro)m(vided)e(b)m(y)h Fw(rev)m(olv)m(e)191 2305 y Fz(are)i(emplo)m(y)m(ed.)83 b(An)43 b(adapted)h(v)m(ersion)h(of) f(the)g(soft)m(w)m(are)h(pac)m(k)-5 b(age)46 b Fp(revolve)f Fz(is)f(part)g(of)g(ADOL-C)191 2418 y(and)33 b(automatically)k(in)m (tegrated)e(in)f(the)g(ADOL-C)g(library)-8 b(.)51 b(Based)34 b(on)g Fp(revolve)p Fz(,)i Fr(c)e Fz(c)m(hec)m(kp)s(oin)m(ts)h(are)191 2531 y(distributed)24 b(suc)m(h)h(that)g(computational)i(e\013ort)f(is) f(minimized)g(for)f(the)h(giv)m(en)h(n)m(um)m(b)s(er)e(of)h(c)m(hec)m (kp)s(oin)m(ts)191 2644 y(and)32 b(time)i(steps)e Fr(N)10 b Fz(.)48 b(It)33 b(is)g(imp)s(ortan)m(t)g(to)g(note)h(that)f(the)g(o)m (v)m(erall)i(tap)s(e)e(size)h(is)e(drastically)i(reduced)191 2757 y(due)42 b(to)h(the)g(adv)-5 b(anced)42 b(taping)h(strategy)-8 b(.)79 b(F)-8 b(or)44 b(the)e(implemen)m(tation)j(of)d(this)h(nested)f (taping)h(w)m(e)191 2870 y(in)m(tro)s(duced)36 b(a)h(so-called)h (\\di\013eren)m(tiating)g(con)m(text")h(that)e(enables)g(ADOL-C)f(to)h (handle)f(di\013eren)m(t)191 2983 y(in)m(ternal)23 b(function)g (represen)m(tations)g(during)f(the)h(taping)g(pro)s(cedure)e(and)h(the) h(deriv)-5 b(ativ)m(e)24 b(calculation.)191 3096 y(This)d(approac)m(h)h (allo)m(ws)h(the)e(generation)i(of)f(a)g(new)f(tap)s(e)h(inside)f(the)h (o)m(v)m(erall)i(tap)s(e,)g(where)d(the)g(coupling)191 3209 y(of)30 b(the)h(di\013eren)m(t)g(tap)s(es)f(is)h(based)f(on)g(the) h Fq(external)i(di\013er)-5 b(entiate)g(d)35 b(function)30 b Fz(describ)s(ed)g(ab)s(o)m(v)m(e.)332 3371 y(W)-8 b(ritten)22 b(under)c(the)j(ob)5 b(jectiv)m(e)22 b(of)f(minimal)f(user)g(e\013ort,) j(the)d(c)m(hec)m(kp)s(oin)m(ting)i(routines)f(of)f(ADOL-C)191 3484 y(need)28 b(only)g(v)m(ery)g(limited)h(information.)40 b(The)28 b(user)f(m)m(ust)h(pro)m(vide)g(t)m(w)m(o)h(routines)f(as)g (implemen)m(tation)191 3597 y(of)i(the)h(time-stepping)g(function)f Fr(F)44 b Fz(with)30 b(the)g(signatures)663 3797 y Fp(int)g(time)p 967 3797 28 4 v 33 w(step)p 1155 3797 V 33 w(function\(int)g(n,)h (adouble)f(*u\);)663 3910 y(int)g(time)p 967 3910 V 33 w(step)p 1155 3910 V 33 w(function\(int)g(n,)h(double)f(*u\);)191 4110 y Fz(where)i(the)g(function)g(names)g(can)h(b)s(e)f(c)m(hosen)g(b) m(y)h(the)f(user)g(as)g(long)h(as)g(the)f(names)g(are)h(unique.It)f(is) 191 4223 y(p)s(ossible)e(that)g(the)h(result)f(v)m(ector)i(of)e(one)g (time)h(step)f(iteration)i(o)m(v)m(erwrites)g(the)e(argumen)m(t)h(v)m (ector)h(of)191 4336 y(the)f(same)f(time)h(step.)41 b(Then,)30 b(no)g(cop)m(y)h(op)s(erations)g(are)g(required)e(to)i(prepare)f(the)h (next)f(time)h(step.)332 4498 y(A)m(t)41 b(\014rst,)i(the)d Fp(adouble)h Fz(v)m(ersion)g(of)f(the)h(time)g(step)f(function)g(has)g (to)i(b)s(e)d Fq(r)-5 b(e)g(gister)g(e)g(d)43 b Fz(using)d(the)191 4611 y(ADOL-C)30 b(function)663 4811 y Fp(CP)p 784 4811 V 33 w(Context)h(cp)s(c\(time)p 1478 4811 V 34 w(step)p 1667 4811 V 32 w(function\);)p Fz(.)191 5011 y(This)38 b(function)h(initializes)i(the)e(structure)f Fp(cp)s(c)p Fz(.)67 b(Then,)40 b(the)f(user)f(has)h(to)h(pro)m(vide)f(the)g (remaining)191 5124 y(c)m(hec)m(kp)s(oin)m(ting)32 b(information)f(b)m (y)f(the)h(follo)m(wing)h(commands:)p Black Black 663 5330 a Fp(cp)s(c.setDoubleFct\(time)p 1525 5330 V 34 w(step)p 1714 5330 V 33 w(function\);)p Black Black eop end %%Page: 48 48 TeXDict begin 48 47 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.48) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fz(48)705 b Ft(6)91 b(AD)m(V)-10 b(ANCED)32 b(ALGORITHMIC)e (DIFFERENTIA)-8 b(TION)30 b(IN)h(ADOL-C)p Black 663 606 a Fp(//)h(double)e(va)m(riante)g(of)h(the)f(time)h(step)f(function)663 719 y(cp)s(c.setNumb)s(erOfSteps\(N\);)663 832 y(//)i(numb)s(er)e(of)h (time)f(steps)g(to)h(p)s(erfo)m(rm)663 945 y(cp)s(c.setNumb)s (erOfCheckp)s(oints\(10\);)663 1058 y(//)h(numb)s(er)e(of)h(checkp)s (oint)663 1171 y(cp)s(c.setDimensionXY\(n\);)663 1284 y(//)h(dimension)e(of)h(input/output)663 1396 y(cp)s(c.setInput\(y\);) 663 1509 y(//)h(input)d(vecto)m(r)663 1622 y(cp)s(c.setOutput\(y\);)663 1735 y(//)j(output)e(vecto)m(r)663 1848 y(cp)s(c.setT)-8 b(ap)s(eNumb)s(er\(tag)p 1580 1848 28 4 v 35 w(check\);)663 1961 y(//)32 b(subtap)s(e)d(numb)s(er)i(fo)m(r)g(checkp)s(ointing)663 2074 y(cp)s(c.setAlw)m(a)m(ysRetaping\(false\);)663 2187 y(//)h(alw)m(a)m(ys)e(retap)s(e)g(o)m(r)h(not)g(?)191 2420 y Fz(Subsequen)m(tly)-8 b(,)34 b(the)f(time)h(lo)s(op)g(in)f(the)g (function)h(ev)-5 b(aluation)34 b(can)g(b)s(e)f(substituted)f(b)m(y)i (a)f(call)i(of)f(the)191 2533 y(function)663 2744 y Fp(int)c(cp)s (c.checkp)s(ointing\(\);)191 2955 y Fz(Then,)h(ADOL-C)g(computes)h (deriv)-5 b(ativ)m(e)33 b(information)e(using)g(the)h(optimal)g(c)m (hec)m(kp)s(oin)m(ting)h(strategy)191 3068 y(pro)m(vided)d(b)m(y)g Fp(revolve)h Fz(in)m(ternally)-8 b(,)32 b(i.e.,)g(completely)g(hidden)d (from)h(the)h(user.)332 3231 y(The)f(presen)m(ted)g(driv)m(er)g(is)h (protot)m(yp)s(ed)f(in)g(the)h(header)f(\014le)g Fs ()p Fz(.)35 b(This)191 3344 y(header)e(is)h (included)e(b)m(y)i(the)f(global)i(header)e(\014le)h Fs()29 b Fz(automatically)-8 b(.)53 b(An)33 b(example)191 3457 y(program)28 b Fs(checkpointing.cpp)23 b Fz(illustrates)29 b(the)f(c)m(hec)m(kp)s(oin)m(ting)i(facilities.)42 b(It)28 b(can)h(b)s(e)e(found)g(in)h(the)191 3569 y(directory)j Fs(examples/additional_exam)o(ple)o(s/ch)o(eckp)o(oin)o(ting)o Fz(.)191 3716 y SDict begin H.S end 191 3716 a 191 3716 a SDict begin 13.6 H.A end 191 3716 a 191 3716 a SDict begin [/View [/XYZ H.V]/Dest (subsection.6.3) cvn /DEST pdfmark end 191 3716 a 146 x FA(6.3)112 b(Adv)-6 b(anced)38 b(algorithmic)h(di\013eren)m(tiation)f(of)g(\014xed)g(p)s(oin)m(t)g (iterations)191 4083 y Fz(Quite)28 b(often,)h(the)f(state)h(of)f(the)f (considered)h(system)g(denoted)g(b)m(y)f Fr(x)e Fn(2)g Fz(I)-20 b(R)2771 4048 y Fh(n)2845 4083 y Fz(dep)s(ends)26 b(on)i(some)g(design)191 4196 y(parameters)c(denoted)g(b)m(y)g Fr(u)h Fn(2)g Fz(I)-20 b(R)1354 4160 y Fh(m)1421 4196 y Fz(.)38 b(One)24 b(example)g(for)g(this)g(setting)h(forms)e(the)h (\015o)m(w)g(o)m(v)m(er)h(an)f(aircraft)191 4309 y(wing.)59 b(Here,)39 b(the)e(shap)s(e)f(of)g(the)h(wing)f(that)i(is)e(de\014ned)g (b)m(y)g(the)h(design)f(v)m(ector)i Fr(u)f Fz(determines)g(the)191 4422 y(\015o)m(w)30 b(\014eld)g Fr(x)p Fz(.)41 b(The)30 b(desired)g(quasi-steady)h(state)h Fr(x)1987 4436 y Fl(\003)2056 4422 y Fz(ful\014lls)e(the)h(\014xed)e(p)s(oin)m(t)i(equation)1722 4622 y Fr(x)1774 4636 y Fl(\003)1838 4622 y Fz(=)25 b Fr(F)13 b Fz(\()p Fr(x)2092 4636 y Fl(\003)2132 4622 y Fr(;)i(u)p Fz(\))3629 4622 y SDict begin H.S end 3629 4622 a 3629 4622 a SDict begin 16.6 H.A end 3629 4622 a 3629 4622 a SDict begin [/View [/XYZ H.V]/Dest (equation.6.10) cvn /DEST pdfmark end 3629 4622 a Fz(\(10\))191 4821 y(for)27 b(a)g(giv)m(en)i(con)m(tin)m(uously)f(di\013eren)m(tiable)g (function)f Fr(F)38 b Fz(:)26 b(I)-20 b(R)2280 4785 y Fh(n)2341 4821 y Fn(\002)14 b Fz(I)-20 b(R)2505 4785 y Fh(m)2596 4821 y Fn(!)26 b Fz(I)-20 b(R)2792 4785 y Fh(n)2839 4821 y Fz(.)39 b(A)28 b(\014xed)e(p)s(oin)m(t)h(prop)s(ert)m (y)191 4934 y(of)j(this)h(kind)e(is)i(also)g(exploited)g(b)m(y)g(man)m (y)f(other)h(applications.)332 5097 y(Assume)f(that)h(one)g(can)f (apply)g(the)h(iteration)1673 5296 y Fr(x)1725 5311 y Fh(k)r FC(+1)1883 5296 y Fz(=)25 b Fr(F)13 b Fz(\()p Fr(x)2137 5311 y Fh(k)2181 5296 y Fr(;)i(u)p Fz(\))3629 5296 y SDict begin H.S end 3629 5296 a 3629 5296 a SDict begin 16.6 H.A end 3629 5296 a 3629 5296 a SDict begin [/View [/XYZ H.V]/Dest (equation.6.11) cvn /DEST pdfmark end 3629 5296 a Fz(\(11\))p Black Black eop end %%Page: 49 49 TeXDict begin 49 48 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.49) cvn /DEST pdfmark end 183 199 a Black 191 307 a Ft(6.3)92 b(Adv)-5 b(anced)30 b(algorithmic)i(di\013eren)m(tiation)g (of)f(\014xed)f(p)s(oin)m(t)g(iterations)883 b Fz(49)p Black 191 606 a(to)31 b(obtain)g(a)g(linear)g(con)m(v)m(erging)h (sequence)f Fn(f)p Fr(x)1840 621 y Fh(k)1883 606 y Fn(g)g Fz(generated)h(for)e(an)m(y)h(giv)m(en)g(con)m(trol)h Fr(u)25 b Fn(2)g Fz(I)-20 b(R)3471 570 y Fh(n)3518 606 y Fz(.)41 b(Then)191 719 y(the)j(limit)h(p)s(oin)m(t)f Fr(x)895 733 y Fl(\003)982 719 y Fn(2)k Fz(I)-20 b(R)1170 683 y Fh(n)1261 719 y Fz(ful\014ls)43 b(the)h(\014xed)f(p)s(oin)m(t)h (equation)h(\()2594 719 y SDict begin H.S end 2594 719 a Black Fz(10)p Black 2685 660 a SDict begin H.R end 2685 660 a 2685 719 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (equation.6.10) cvn H.B /ANN pdfmark end 2685 719 a Fz(\))q(.)81 b(Moreo)m(v)m(er,)50 b(supp)s(ose)42 b(that)191 832 y Fn(k)246 796 y Fh(dF)p 246 811 91 4 v 253 863 a(dx)347 832 y Fz(\()p Fr(x)434 846 y Fl(\003)474 832 y Fr(;)15 b(u)p Fz(\))p Fn(k)36 b Fr(<)e Fz(1)i(holds)g(for)f(an)m(y)i(pair)e(\() p Fr(x)1713 846 y Fl(\003)1753 832 y Fr(;)15 b(u)p Fz(\))37 b(satisfying)f(equation)h(\()2739 832 y SDict begin H.S end 2739 832 a Black Fz(10)p Black 2830 773 a SDict begin H.R end 2830 773 a 2830 832 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (equation.6.10) cvn H.B /ANN pdfmark end 2830 832 a Fz(\))q(.)57 b(Hence,)39 b(there)d(exists)g(a)191 945 y(di\013eren)m(tiable)d(function)e Fr(\036)c Fz(:)g(I)-20 b(R)1308 909 y Fh(m)1401 945 y Fn(!)27 b Fz(I)-20 b(R)1598 909 y Fh(n)1645 945 y Fz(,)32 b(suc)m(h)f(that)h Fr(\036)p Fz(\()p Fr(u)p Fz(\))c(=)f Fr(F)13 b Fz(\()p Fr(\036)p Fz(\()p Fr(u)p Fz(\))p Fr(;)i(u)p Fz(\),)34 b(where)d(the)h(state)g Fr(\036)p Fz(\()p Fr(u)p Fz(\))h(is)191 1058 y(a)e(\014xed)f(p)s(oin)m (t)g(of)h Fr(F)44 b Fz(according)31 b(to)h(a)f(con)m(trol)h Fr(u)p Fz(.)41 b(T)-8 b(o)31 b(optimize)h(the)f(system)g(describ)s(ed)e (b)m(y)i(the)f(state)191 1171 y(v)m(ector)j Fr(x)28 b Fz(=)f Fr(\036)p Fz(\()p Fr(u)p Fz(\))33 b(with)e(resp)s(ect)h(to)h (the)e(design)h(v)m(ector)i Fr(u)p Fz(,)e(deriv)-5 b(ativ)m(es)33 b(of)f Fr(\036)g Fz(with)f(resp)s(ect)h(to)h Fr(u)e Fz(are)191 1284 y(of)f(particular)h(in)m(terest.)332 1446 y(T)-8 b(o)25 b(exploit)h(the)f(adv)-5 b(anced)25 b(algorithmic)i(di\013eren)m (tiation)f(of)g(suc)m(h)e(\014xed)g(p)s(oin)m(t)h(iterations)h(ADOL-) 191 1559 y(C)k(pro)m(vides)g(the)h(sp)s(ecial)g(functions)f Fs(fp)p 1593 1559 29 4 v 34 w(iteration\(...\))p Fz(.)36 b(It)31 b(has)f(the)h(follo)m(wing)g(in)m(terface:)p Black Black 491 1977 a Fp(int)f(fp)p 703 1977 28 4 v 32 w(iteration\(sub)p 1216 1977 V 33 w(tap)s(e)p 1416 1977 V 32 w(num,double)p 1887 1977 V 34 w(F,adouble)p 2290 1977 V 32 w(F,no)m(rm,no)m(rm)p 2808 1977 V 36 w(deriv,eps,eps)p 3320 1977 V 34 w(deriv,)1082 2090 y(N)p 1151 2090 V 33 w(max,N)p 1431 2090 V 34 w(max)p 1623 2090 V 32 w(deriv,x)p 1904 2090 V 33 w(0,u,x)p 2121 2090 V 34 w(\014x,dim)p 2412 2090 V 32 w(x,dim)p 2652 2090 V 33 w(u\))491 2203 y(sho)m(rt)h(int)f(sub)p 976 2203 V 32 w(tap)s(e)p 1175 2203 V 32 w(num;)166 b Fz(//)31 b(tap)s(e)g(iden)m(ti\014cation)h(for)e (sub)p 2715 2203 V 32 w(tap)s(e)491 2315 y Fp(int)g(*double)p 921 2315 V 33 w(F;)533 b Fz(//)31 b(p)s(oin)m(ter)g(to)g(a)g(function)f (that)h(compute)f(for)h Fr(x)f Fz(and)g Fr(u)1559 2428 y Fz(//)h(the)g(v)-5 b(alue)31 b Fr(y)d Fz(=)d Fr(F)13 b Fz(\()p Fr(x;)i(u)p Fz(\))31 b(for)g Fp(double)f Fz(argumen)m(ts)491 2541 y Fp(int)g(*adouble)p 965 2541 V 33 w(F;)489 b Fz(//)31 b(p)s(oin)m(ter)g(to)g(a)g(function)f(that)h(compute)f(for)h Fr(x)f Fz(and)g Fr(u)1559 2654 y Fz(//)h(the)g(v)-5 b(alue)31 b Fr(y)d Fz(=)d Fr(F)13 b Fz(\()p Fr(x;)i(u)p Fz(\))31 b(for)g Fp(double)f Fz(argumen)m(ts)491 2767 y Fp(int)g(*no)m(rm;)674 b Fz(//)31 b(p)s(oin)m(ter)g(to)g(a)g(function)f(that)h(computes)1559 2880 y(//)g(the)g(norm)f(of)g(a)h(v)m(ector)491 2993 y Fp(int)f(*no)m(rm)p 865 2993 V 34 w(deriv;)458 b Fz(//)31 b(p)s(oin)m(ter)g(to)g(a)g(function)f(that)h(computes)1559 3106 y(//)g(the)g(norm)f(of)g(a)h(v)m(ector)491 3219 y Fp(double)g(eps;)642 b Fz(//)31 b(termination)h(criterion)f(for)f (\014xed)g(p)s(oin)m(t)g(iteration)491 3332 y Fp(double)h(eps)p 897 3332 V 33 w(deriv;)427 b Fz(//)31 b(termination)h(criterion)f(for)f (adjoin)m(t)h(\014xed)f(p)s(oin)m(t)g(iteration)491 3445 y Fp(N)p 560 3445 V 33 w(max;)788 b Fz(//)31 b(maximal)h(n)m(um)m(b)s (er)d(of)h(itertions)i(for)e(state)h(computation)491 3557 y Fp(N)p 560 3557 V 33 w(max)p 751 3557 V 33 w(deriv;)573 b Fz(//)31 b(maximal)h(n)m(um)m(b)s(er)d(of)h(itertions)i(for)e(adjoin) m(t)h(computation)491 3670 y Fp(adouble)f(*x)p 905 3670 V 34 w(0;)555 b Fz(//)31 b(inital)h(state)g(of)e(\014xed)g(p)s(oin)m(t) g(iteration)491 3783 y Fp(adouble)g(*u;)629 b Fz(//)31 b(v)-5 b(alue)31 b(of)g Fr(u)491 3896 y Fp(adouble)f(*x)p 905 3896 V 34 w(\014c;)511 b Fz(//)31 b(\014nal)f(state)i(of)f(\014xed) e(p)s(oin)m(t)i(iteration)491 4009 y Fp(int)f(dim)p 769 4009 V 32 w(x;)696 b Fz(//)31 b(dimension)f(of)h Fr(x)491 4122 y Fp(int)f(dim)p 769 4122 V 32 w(u;)691 b Fz(//)31 b(dimension)f(of)h Fr(u)191 4653 y Fz(Here)38 b Fs(sub)p 563 4653 29 4 v 33 w(tape)p 788 4653 V 34 w(num)e Fz(is)i(an)f(ADOL-C)h (iden)m(ti\014er)f(for)g(the)h(subtap)s(e)e(that)i(should)f(b)s(e)g (used)f(for)i(the)191 4765 y(\014xed)31 b(p)s(oin)m(t)g(iteration.)45 b Fs(double)p 1351 4765 V 32 w(F)31 b Fz(and)g Fs(adouble)p 1976 4765 V 33 w(F)f Fz(are)i(p)s(oin)m(ters)f(to)h(functions,)g(that)f (compute)h(for)191 4878 y Fr(x)d Fz(and)h Fr(u)f Fz(a)h(single)g (iteration)i(step)d Fr(y)g Fz(=)24 b Fr(F)13 b Fz(\()p Fr(x;)i(u)p Fz(\).)42 b(Thereb)m(y)29 b Fs(double)p 2590 4878 V 33 w(F)g Fz(uses)g Fs(double)f Fz(argumen)m(ts)i(and)191 4991 y Fs(adouble)p 533 4991 V 32 w(F)35 b Fz(uses)g(ADOL-C)g Fs(adouble)e Fz(argumen)m(ts.)54 b(The)35 b(parameters)g Fs(norm)f Fz(and)g Fs(norm)p 3368 4991 V 34 w(deriv)f Fz(are)191 5104 y(p)s(oin)m(ters)h(to)h(functions)e(computing)h(the)g (norm)g(of)g(a)g(v)m(ector.)53 b(The)34 b(latter)h(functions)f (together)h(with)191 5217 y Fs(eps)p Fz(,)h Fs(eps)p 546 5217 V 33 w(deriv)p Fz(,)f Fs(N)p 927 5217 V 34 w(max)p Fz(,)h(and)e Fs(N)p 1395 5217 V 35 w(max)p 1574 5217 V 33 w(deriv)g Fz(con)m(trol)i(the)g(iterations.)56 b(Th)m(us)34 b(the)h(follo)m(wing)i(lo)s(ops)191 5330 y(are)31 b(p)s(erformed:)p Black Black eop end %%Page: 50 50 TeXDict begin 50 49 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.50) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fz(50)705 b Ft(6)91 b(AD)m(V)-10 b(ANCED)32 b(ALGORITHMIC)e (DIFFERENTIA)-8 b(TION)30 b(IN)h(ADOL-C)p Black Black Black 498 594 a Fz(do)1450 b(do)619 707 y Fr(k)29 b Fz(=)c Fr(k)e Fz(+)d(1)1168 b Fr(k)29 b Fz(=)c Fr(k)e Fz(+)d(1)619 820 y Fr(x)25 b Fz(=)g Fr(y)1328 b(\020)32 b Fz(=)25 b Fr(\030)619 933 y(y)j Fz(=)d Fr(F)13 b Fz(\()p Fr(x;)i(u)p Fz(\))1092 b(\()p Fr(\030)2244 900 y Fh(T)2300 933 y Fr(;)21 b Fz(\026)-51 b Fr(u)2392 900 y Fh(T)2447 933 y Fz(\))26 b(=)f Fr(\020)2651 900 y Fh(T)2705 933 y Fr(F)2776 900 y Fl(0)2800 933 y Fz(\()p Fr(x)2887 947 y Fl(\003)2926 933 y Fr(;)15 b(u)p Fz(\))21 b(+)f(\()6 b(\026)-51 b Fr(x)3252 900 y Fh(T)3308 933 y Fr(;)15 b Fz(0)3393 900 y Fh(T)3448 933 y Fz(\))498 1045 y(while)30 b Fn(k)p Fr(y)24 b Fn(\000)c Fr(x)p Fn(k)25 b(\025)g Fr(")31 b Fz(and)f Fr(k)e Fn(\024)d Fr(N)1652 1059 y Fh(max)2044 1045 y Fz(while)30 b Fn(k)p Fr(\030)25 b Fn(\000)20 b Fr(\020)7 b Fn(k)2574 1060 y Fh(der)r(iv)2767 1045 y Fn(\025)25 b Fr(")2905 1060 y Fh(der)r(iv)2044 1158 y Fz(and)30 b Fr(k)e Fn(\024)d Fr(N)2465 1173 y Fh(max;der)r(iv)191 1395 y Fz(The)35 b(v)m(ector)i(for)e(the)g(initial)i(iterate)g(and)d (the)i(con)m(trol)h(is)e(stored)g(in)g Fs(x)p 2720 1395 29 4 v 34 w(0)g Fz(and)g Fs(u)g Fz(resp)s(ectiv)m(ely)-8 b(.)57 b(The)191 1508 y(v)m(ector)37 b(in)e(whic)m(h)g(the)g(\014xed)g (p)s(oin)m(t)g(is)h(stored)f(is)g Fs(x)p 1998 1508 V 35 w(fix)p Fz(.)54 b(Finally)36 b Fs(dim)p 2714 1508 V 34 w(x)f Fz(and)g Fs(dim)p 3157 1508 V 33 w(u)g Fz(represen)m(t)h (the)191 1621 y(dimensions)30 b Fr(n)f Fz(and)h Fr(m)g Fz(of)h(the)f(corresp)s(onding)g(v)m(ectors.)332 1784 y(The)25 b(presen)m(ted)g(driv)m(er)f(is)i(protot)m(yp)s(ed)f(in)f(the) i(header)f(\014le)g Fs()p Fz(.)34 b(This)24 b(header)191 1896 y(is)40 b(included)f(b)m(y)h(the)g(global)h(header)e (\014le)h Fs()c Fz(automatically)-8 b(.)73 b(An)39 b(example)h(co)s(de)191 2009 y(that)27 b(sho)m(ws)f(also)h(the) f(exp)s(ected)h(signature)f(of)h(the)f(function)g(p)s(oin)m(ters)g(is)g (con)m(tained)i(in)e(the)g(directory)191 2122 y Fs (examples/additional_exam)o(ples)o(/fi)o(xpoi)o(nt_e)o(xam)o Fz(.)191 2281 y SDict begin H.S end 191 2281 a 191 2281 a SDict begin 13.6 H.A end 191 2281 a 191 2281 a SDict begin [/View [/XYZ H.V]/Dest (subsection.6.4) cvn /DEST pdfmark end 191 2281 a 145 x FA(6.4)112 b(Adv)-6 b(anced)38 b(algorithmic)h(di\013eren)m(tiation)f(of)g(Op)s(enMP)g(parallel)h (programs)191 2650 y Fz(ADOL-C)c(allo)m(ws)h(to)g(compute)f(deriv)-5 b(ativ)m(es)37 b(in)d(parallel)i(for)f(functions)g(con)m(taining)h(Op)s (enMP)e(par-)191 2763 y(allel)44 b(lo)s(ops.)79 b(This)42 b(implies)h(that)h(an)f(explicit)h(lo)s(op-handling)f(approac)m(h)g(is) g(applied.)78 b(A)43 b(t)m(ypical)191 2876 y(situation)f(is)g(sho)m(wn) f(in)1088 2893 y SDict begin H.S end 1088 2893 a Black -17 x Fz(Figure)31 b(5)p Black 1420 2814 a SDict begin H.R end 1420 2814 a 1420 2876 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (figure.5) cvn H.B /ANN pdfmark end 1420 2876 a Fz(,)44 b(where)d(the)h(Op)s(enMP-parallel)g(lo)s(op)f(is)h (preceded)f(b)m(y)g(a)h(serial)p Black Black Black 1174 4060 a @beginspecial 0 @llx 0 @lly 524 @urx 303 @ury 1133 @rhi @setspecial %%BeginDocument: multiplexed.eps %!PS-Adobe-2.0 EPSF-2.0 %%Title: multiplexed1.fig %%Creator: fig2dev Version 3.2 Patchlevel 5 %%CreationDate: Thu Dec 18 13:46:12 2008 %%For: awalther@localhost.localdomain (Andrea Walther) %%BoundingBox: 0 0 524 303 %Magnification: 1.0000 %%EndComments /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save newpath 0 303 moveto 0 0 lineto 524 0 lineto 524 303 lineto closepath clip newpath -71.3 320.2 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin 10 setmiterlimit 0 slj 0 slc 0.06000 0.06000 sc % % Fig objects follow % % % here starts figure with depth 50 % Polyline 0 slj 0 slc 7.500 slw n 5550 2625 m 5550 3525 l gs col0 s gr % Polyline 15.000 slw gs clippath 5216 427 m 5490 427 l 5490 322 l 5216 322 l 5216 322 l 5441 375 l 5216 427 l cp eoclip n 1275 375 m 5475 375 l gs col0 s gr gr % arrowhead n 5216 427 m 5441 375 l 5216 322 l 5261 375 l 5216 427 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 9566 427 m 9840 427 l 9840 322 l 9566 322 l 9566 322 l 9791 375 l 9566 427 l cp eoclip n 5625 375 m 9825 375 l gs col0 s gr gr % arrowhead n 9566 427 m 9791 375 l 9566 322 l 9611 375 l 9566 427 l cp gs 0.00 setgray ef gr col0 s % Polyline 7.500 slw n 1200 2625 m 1500 2625 l 1500 3525 l 1200 3525 l cp gs 0.15 setgray ef gr gs col0 s gr % Polyline n 9600 2625 m 9600 3525 l 9900 3525 l 9900 2625 l cp gs 0.15 setgray ef gr gs col0 s gr % Polyline n 2100 4425 m 4725 4425 l 4725 5325 l 2100 5325 l cp gs 0.75 setgray ef gr gs col0 s gr % Polyline n 2100 2625 m 4725 2625 l 4725 3525 l 2100 3525 l cp gs 0.75 setgray ef gr gs col0 s gr % Polyline n 2100 825 m 4725 825 l 4725 1725 l 2100 1725 l cp gs 0.75 setgray ef gr gs col0 s gr % Polyline n 6375 825 m 9000 825 l 9000 1725 l 6375 1725 l cp gs 0.75 setgray ef gr gs col0 s gr % Polyline n 6375 2625 m 9000 2625 l 9000 3525 l 6375 3525 l cp gs 0.75 setgray ef gr gs col0 s gr % Polyline n 6375 4425 m 9000 4425 l 9000 5325 l 6375 5325 l cp gs 0.75 setgray ef gr gs col0 s gr % Polyline n 5325 2625 m 5550 2625 l 5550 3525 l 5325 3525 l cp gs 0.90 setgray ef gr gs col0 s gr % Polyline n 5550 2625 m 5775 2625 l 5775 3525 l 5550 3525 l cp gs 0.90 setgray ef gr gs col0 s gr % Polyline 15.000 slw gs clippath 2067 1538 m 2154 1277 l 2054 1244 l 1968 1504 l 1968 1504 l 2089 1308 l 2067 1538 l cp eoclip n 1500 3075 m 2100 1275 l gs col0 s gr gr % arrowhead n 2067 1538 m 2089 1308 l 1968 1504 l 2032 1478 l 2067 1538 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 1841 3127 m 2115 3127 l 2115 3022 l 1841 3022 l 1841 3022 l 2066 3075 l 1841 3127 l cp eoclip n 1500 3075 m 2100 3075 l gs col0 s gr gr % arrowhead n 1841 3127 m 2066 3075 l 1841 3022 l 1886 3075 l 1841 3127 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 1968 4645 m 2054 4905 l 2154 4872 l 2067 4611 l 2067 4611 l 2089 4842 l 1968 4645 l cp eoclip n 1500 3075 m 2100 4875 l gs col0 s gr gr % arrowhead n 1968 4645 m 2089 4842 l 2067 4611 l 2032 4671 l 1968 4645 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 6342 1538 m 6429 1277 l 6329 1244 l 6243 1504 l 6243 1504 l 6364 1308 l 6342 1538 l cp eoclip n 5775 3075 m 6375 1275 l gs col0 s gr gr % arrowhead n 6342 1538 m 6364 1308 l 6243 1504 l 6307 1478 l 6342 1538 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 6116 3127 m 6390 3127 l 6390 3022 l 6116 3022 l 6116 3022 l 6341 3075 l 6116 3127 l cp eoclip n 5775 3075 m 6375 3075 l gs col0 s gr gr % arrowhead n 6116 3127 m 6341 3075 l 6116 3022 l 6161 3075 l 6116 3127 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 6243 4645 m 6329 4905 l 6429 4872 l 6342 4611 l 6342 4611 l 6364 4842 l 6243 4645 l cp eoclip n 5775 3075 m 6375 4875 l gs col0 s gr gr % arrowhead n 6243 4645 m 6364 4842 l 6342 4611 l 6307 4671 l 6243 4645 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 9468 2845 m 9554 3105 l 9654 3072 l 9567 2811 l 9567 2811 l 9589 3042 l 9468 2845 l cp eoclip n 9000 1275 m 9600 3075 l gs col0 s gr gr % arrowhead n 9468 2845 m 9589 3042 l 9567 2811 l 9532 2871 l 9468 2845 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 9341 3127 m 9615 3127 l 9615 3022 l 9341 3022 l 9341 3022 l 9566 3075 l 9341 3127 l cp eoclip n 9000 3075 m 9600 3075 l gs col0 s gr gr % arrowhead n 9341 3127 m 9566 3075 l 9341 3022 l 9386 3075 l 9341 3127 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 9567 3338 m 9654 3077 l 9554 3044 l 9468 3304 l 9468 3304 l 9589 3108 l 9567 3338 l cp eoclip n 9000 4875 m 9600 3075 l gs col0 s gr gr % arrowhead n 9567 3338 m 9589 3108 l 9468 3304 l 9532 3278 l 9567 3338 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 5193 2845 m 5279 3105 l 5379 3072 l 5292 2811 l 5292 2811 l 5314 3042 l 5193 2845 l cp eoclip n 5325 3075 m 4725 1275 l gs col0 s gr gr % arrowhead n 5193 2845 m 5314 3042 l 5292 2811 l 5257 2871 l 5193 2845 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 5066 3127 m 5340 3127 l 5340 3022 l 5066 3022 l 5066 3022 l 5291 3075 l 5066 3127 l cp eoclip n 5325 3075 m 4725 3075 l gs col0 s gr gr % arrowhead n 5066 3127 m 5291 3075 l 5066 3022 l 5111 3075 l 5066 3127 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 5292 3338 m 5379 3077 l 5279 3044 l 5193 3304 l 5193 3304 l 5314 3108 l 5292 3338 l cp eoclip n 5325 3075 m 4725 4875 l gs col0 s gr gr % arrowhead n 5292 3338 m 5314 3108 l 5193 3304 l 5257 3278 l 5292 3338 l cp gs 0.00 setgray ef gr col0 s % here ends figure; $F2psEnd rs showpage %%Trailer %EOF %%EndDocument @endspecial 1592 3774 a(.)1592 3808 y(.)1592 3841 y(.)2389 3774 y(.)2389 3808 y(.)2389 3841 y(.)1592 3442 y(.)1592 3475 y(.)1592 3509 y(.)2389 3442 y(.)2389 3475 y(.)2389 3509 y(.)1302 3077 y(function)30 b(ev)-5 b(al.)196 b(deriv)-5 b(ativ)m(e)32 b(calcul.)p Black 353 4273 a(Figure)f(5:)751 4273 y SDict begin H.S end 751 4273 a 751 4273 a SDict begin H.R end 751 4273 a 751 4273 a SDict begin [/View [/XYZ H.V]/Dest (figure.5) cvn /DEST pdfmark end 751 4273 a Fz(Basic)h(la)m(y)m(out)g(of)e(mixed)g(function)h(and)e(the)i (corresp)s(onding)e(deriv)-5 b(ation)31 b(pro)s(cess)p Black Black 191 4490 a(startup)f(calculation)i(and)e(follo)m(w)m(ed)i (b)m(y)f(a)f(serial)h(\014nalization)h(phase.)332 4653 y(Initialization)39 b(of)d(the)h(Op)s(enMP-parallel)g(regions)f(for)g (ADOL-C)h(is)f(only)h(a)f(matter)i(of)e(adding)191 4765 y(a)f(macro)g(to)h(the)f(outermost)g(Op)s(enMP)f(statemen)m(t.)55 b(Tw)m(o)35 b(macros)h(are)f(a)m(v)-5 b(ailable)37 b(that)e(only)g (di\013er)191 4878 y(in)d(the)g(w)m(a)m(y)h(the)g(global)g(tap)s(e)g (information)f(is)h(handled.)45 b(Using)32 b Fs(ADOLC)p 2753 4878 29 4 v 33 w(OPENMP)p Fz(,)f(this)h(information,)191 4991 y(including)27 b(the)h(v)-5 b(alues)28 b(of)g(the)f(augmen)m(ted)i (v)-5 b(ariables,)29 b(is)e(alw)m(a)m(ys)i(transferred)e(from)g(the)h (serial)g(to)h(the)191 5104 y(parallel)f(region)f(using)f Fq(\014rstprivate)i Fz(directiv)m(es)g(for)e(initialization.)42 b(F)-8 b(or)27 b(the)g(sp)s(ecial)g(case)h(of)e(iterativ)m(e)191 5217 y(co)s(des)38 b(where)g(parallel)h(regions,)i(w)m(orking)e(on)f (the)g(same)h(data)g(structures,)g(are)g(called)g(rep)s(eatedly)191 5330 y(the)28 b Fs(ADOLC)p 591 5330 V 33 w(OPENMP)p 912 5330 V 33 w(NC)f Fz(macro)i(can)f(b)s(e)f(used.)40 b(Then,)27 b(the)h(information)h(transfer)e(is)h(p)s(erformed)f(only)p Black Black eop end %%Page: 51 51 TeXDict begin 51 50 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.51) cvn /DEST pdfmark end 183 199 a Black 3700 307 a Fz(51)p Black 191 606 a(once)40 b(within)f(the)g(iterativ)m(e)j (pro)s(cess)d(up)s(on)f(encoun)m(ter)h(of)h(the)f(\014rst)g(parallel)h (region)g(through)f(use)191 719 y(of)32 b(the)f Fq(thr)-5 b(e)g(adprivate)35 b Fz(feature)d(of)g(Op)s(enMP)e(that)i(mak)m(es)g (use)f(of)h(thread-lo)s(cal)h(storage,)g(i.e.,)g(global)191 832 y(memory)40 b(lo)s(cal)i(to)g(a)e(thread.)72 b(Due)40 b(to)i(the)e(inserted)h(macro,)j(the)c(Op)s(enMP)g(statemen)m(t)i(has)f (the)191 945 y(follo)m(wing)32 b(structure:)p Black Black 457 1171 a Fp(#p)m(ragma)f(omp)g(...)41 b(ADOLC)p 1461 1171 28 4 v 32 w(OPENMP)395 b Fz(or)457 1284 y Fp(#p)m(ragma)31 b(omp)g(...)41 b(ADOLC)p 1461 1284 V 32 w(OPENMP)p 1874 1284 V 33 w(NC)191 1510 y Fz(Inside)35 b(the)h(parallel)g(region,)i (separate)f(tap)s(es)e(ma)m(y)h(then)g(b)s(e)f(created.)57 b(Eac)m(h)36 b(single)g(thread)g(w)m(orks)191 1623 y(in)30 b(its)g(o)m(wn)h(dedicated)f(AD-en)m(vironmen)m(t,)i(and)e(all)h (serial)g(facilities)h(of)f(ADOL-C)f(are)g(applicable)h(as)191 1736 y(usual.)61 b(The)36 b(global)j(deriv)-5 b(ativ)m(es)38 b(can)g(b)s(e)e(computed)i(using)e(the)i(tap)s(es)f(created)h(in)f(the) g(serial)h(and)191 1849 y(parallel)c(parts)f(of)g(the)g(function)g(ev) -5 b(aluation,)35 b(where)e(user)f(in)m(teraction)j(is)e(required)g (for)f(the)i(correct)191 1961 y(deriv)-5 b(ativ)m(e)32 b(concatenation)h(of)d(the)h(v)-5 b(arious)30 b(tap)s(es.)332 2124 y(F)-8 b(or)28 b(the)g(usage)f(of)h(the)f(parallel)i(facilities,)h (the)e Fs(configure)p Fz(-command)c(has)j(to)h(b)s(e)f(used)g(with)g (the)191 2237 y(option)k Fs(--with-openmp-flag=FLAG)o Fz(,)25 b(where)30 b Fs(FLAG)f Fz(stands)h(for)g(the)g(system)h(dep)s (enden)m(t)e(Op)s(enMP)191 2350 y(\015ag.)39 b(The)24 b(parallel)i(di\013eren)m(tiation)h(of)d(a)i(parallel)f(program)g(is)g (illustrated)g(b)m(y)g(the)g(example)g(program)191 2463 y Fs(openmp_exam.cpp)h Fz(con)m(tained)32 b(in)e Fs (examples/additional_exam)o(ple)o(s/op)o(enmp)o(_ex)o(am)p Fz(.)191 2618 y SDict begin H.S end 191 2618 a 191 2618 a SDict begin 13.6 H.A end 191 2618 a 191 2618 a SDict begin [/View [/XYZ H.V]/Dest (section.7) cvn /DEST pdfmark end 191 2618 a 179 x FD(7)135 b(T)-11 b(ap)t(eless)45 b(forw)l(ard)g(di\013eren)l(tiation)j(in)d(ADOL-C)191 3050 y Fz(Up)35 b(to)i(v)m(ersion)f(1.9.0,)j(the)d(dev)m(elopmen)m(t)h (of)f(the)g(ADOL-C)g(soft)m(w)m(are)h(pac)m(k)-5 b(age)38 b(w)m(as)e(based)g(on)g(the)191 3163 y(decision)30 b(to)h(store)g(all)g (data)f(necessary)h(for)e(deriv)-5 b(ativ)m(e)32 b(computation)f(on)f (tap)s(es,)g(where)f(large)j(appli-)191 3276 y(cations)j(require)e(the) g(tap)s(es)h(to)g(b)s(e)f(written)g(out)h(to)g(corresp)s(onding)e (\014les.)50 b(In)33 b(almost)h(all)g(cases)h(this)191 3388 y(means)28 b(a)h(considerable)g(dra)m(wbac)m(k)g(in)f(terms)h(of)f (run)f(time)i(due)f(to)h(the)g(excessiv)m(e)i(memory)d(accesses.)191 3501 y(Using)f(these)g(tap)s(es)f(enables)h(ADOL-C)g(to)g(o\013er)g(m)m (ultiple)g(functions.)39 b(Ho)m(w)m(ev)m(er,)30 b(it)d(is)g(not)f (necessary)191 3614 y(for)k(all)h(tasks)g(of)g(deriv)-5 b(ativ)m(e)32 b(computation)f(to)g(do)f(that.)332 3777 y(Starting)35 b(with)f(v)m(ersion)h(1.10.0,)j(ADOL-C)d(no)m(w)g (features)f(a)h(tap)s(eless)g(forw)m(ard)f(mo)s(de)h(for)f(com-)191 3890 y(puting)39 b(\014rst)h(order)f(deriv)-5 b(ativ)m(es)41 b(in)f(scalar)h(mo)s(de,)h(i.e.,)60 b(_)-41 b Fr(y)44 b Fz(=)d Fr(F)2517 3857 y Fl(0)2540 3890 y Fz(\()p Fr(x)p Fz(\))17 b(_)-42 b Fr(x)q Fz(,)43 b(and)c(in)h(v)m(ector)h(mo)s(de,)h (i.e.,)215 3980 y(_)191 4003 y Fr(Y)54 b Fz(=)33 b Fr(F)473 3970 y Fl(0)497 4003 y Fz(\()p Fr(x)p Fz(\))656 3980 y(_)619 4003 y Fr(X)8 b Fz(.)56 b(This)35 b(tap)s(eless)h(v)-5 b(arian)m(t)36 b(co)s(exists)h(with)e(the)h(more)f(univ)m(ersal)h(tap)s (e)g(based)f(mo)s(de)g(in)191 4116 y(the)e(pac)m(k)-5 b(age.)50 b(The)32 b(follo)m(wing)i(subsections)e(describ)s(e)h(the)f (source)h(co)s(de)g(mo)s(di\014cations)g(required)f(to)191 4229 y(use)e(the)h(tap)s(eless)g(forw)m(ard)e(mo)s(de)h(of)h(ADOL-C.) 191 4371 y SDict begin H.S end 191 4371 a 191 4371 a SDict begin 13.6 H.A end 191 4371 a 191 4371 a SDict begin [/View [/XYZ H.V]/Dest (subsection.7.1) cvn /DEST pdfmark end 191 4371 a 149 x FA(7.1)112 b(Mo)s(difying)39 b(the)f(Source)f(Co)s (de)191 4741 y Fz(Let)25 b(us)f(consider)h(the)g(co)s(ordinate)h (transformation)f(from)f(Cartesian)i(to)f(spherical)g(p)s(olar)g(co)s (ordinates)191 4854 y(giv)m(en)31 b(b)m(y)g(the)f(function)g Fr(F)39 b Fz(:)25 b Fe(R)1280 4821 y FC(3)1344 4854 y Fn(!)h Fe(R)1527 4821 y FC(3)1566 4854 y Fz(,)k Fr(y)e Fz(=)d Fr(F)13 b Fz(\()p Fr(x)p Fz(\),)32 b(with)326 5095 y Fr(y)371 5109 y FC(1)436 5095 y Fz(=)532 4984 y Fk(q)p 622 4984 497 4 v 622 5095 a Fr(x)674 5063 y FC(2)674 5121 y(1)734 5095 y Fz(+)20 b Fr(x)877 5063 y FC(2)877 5121 y(2)937 5095 y Fz(+)f Fr(x)1079 5063 y FC(2)1079 5121 y(3)1119 5095 y Fr(;)197 b(y)1386 5109 y FC(2)1450 5095 y Fz(=)25 b(arctan)1814 4966 y Fk(\022)1881 4984 y(q)p 1972 4984 294 4 v 111 x Fr(x)2024 5063 y FC(2)2024 5121 y(1)2084 5095 y Fz(+)20 b Fr(x)2227 5063 y FC(2)2227 5121 y(2)2266 5095 y Fr(=x)2363 5109 y FC(3)2403 4966 y Fk(\023)2485 5095 y Fr(;)197 b(y)2752 5109 y FC(3)2816 5095 y Fz(=)25 b(arctan)q(\()p Fr(x)3252 5109 y FC(2)3292 5095 y Fr(=x)3389 5109 y FC(1)3429 5095 y Fz(\))p Fr(;)191 5330 y Fz(as)i(an)h(example.)40 b(The)27 b(corresp)s(onding)f(source)h (co)s(de)h(is)f(sho)m(wn)f(in)2523 5348 y SDict begin H.S end 2523 5348 a Black -18 x Fz(Figure)31 b(6)p Black 2856 5268 a SDict begin H.R end 2856 5268 a 2856 5330 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (figure.6) cvn H.B /ANN pdfmark end 2856 5330 a Fz(.)39 b(Changes)27 b(to)h(the)g (source)p Black Black eop end %%Page: 52 52 TeXDict begin 52 51 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.52) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fz(52)972 b Ft(7)91 b(T)-8 b(APELESS)29 b(F)m(OR)-10 b(W)g(ARD)32 b(DIFFERENTIA)-8 b(TION)30 b(IN)h(ADOL-C)p Black Black 191 518 3600 4 v 191 2687 4 2169 v Black Black 382 722 a Fp(#include)f Fr(<)p Fp(iostream)p Fr(>)382 835 y Fp(using)g(namespace)h(std;)382 1060 y(int)f(main\(\))g Fn(f)500 1173 y Fp(double)h(x[3],)g(y[3];)500 1399 y(fo)m(r)g(\(int)f (i=0;)h(i)p Fr(<)p Fp(3;)f(++i\))708 b(//)32 b(Initialize)c Fr(x)2612 1413 y Fh(i)618 1512 y Fp(...)500 1738 y(y[0])j(=)f (sqrt\(x[0]*x[0]+x[1]*x[1]+x[2]*x[2])q(\);)500 1851 y(y[1])h(=)f (atan\(sqrt\(x[0]*x[0]+x[1]*x[1]\)/x[2]\);)500 1964 y(y[2])h(=)f (atan\(x[1]/x[0]\);)500 2189 y(cout)h Fr(<<)f Fp("y1=")h Fr(<<)f Fp(y[0])h Fr(<<)f Fp(")h(,)f(y2=")h Fr(<<)f Fp(y[1])h Fr(<<)f Fp(")g(,)h(y3=")g Fr(<<)e Fp(y[2])j Fr(<<)d Fp(endl;)500 2415 y(return)i(0;)382 2528 y Fn(g)p 3787 2687 V 191 2690 3600 4 v Black 1088 2844 a Fz(Figure)g(6:)1486 2844 y SDict begin H.S end 1486 2844 a 1486 2844 a SDict begin H.R end 1486 2844 a 1486 2844 a SDict begin [/View [/XYZ H.V]/Dest (figure.6) cvn /DEST pdfmark end 1486 2844 a Fz(Example)g(for)f(tap)s(eless)h(forw)m(ard)f(mo)s(de)p Black Black 191 3137 a(co)s(de)40 b(that)g(are)g(necessary)f(for)h (applying)f(the)h(tap)s(eless)g(forw)m(ard)f(ADOL-C)g(are)h(describ)s (ed)e(in)i(the)191 3250 y(follo)m(wing)c(t)m(w)m(o)g(subsections,)h (where)d(the)h(v)m(ector)h(mo)s(de)f(v)m(ersion)g(is)g(describ)s(ed)f (as)h(extension)h(of)f(the)191 3363 y(scalar)c(mo)s(de.)191 3695 y SDict begin H.S end 191 3695 a 191 3695 a SDict begin 13.6 H.A end 191 3695 a 191 3695 a SDict begin [/View [/XYZ H.V]/Dest (section*.5) cvn /DEST pdfmark end 191 3695 a Fw(The)k(scalar)g(mo)s(de)191 3925 y Fz(T)-8 b(o)37 b(use)g(the)g(tap)s(eless)g(forw)m(ard)g(mo)s(de,)h(one)f(has)g(to)g (include)g(one)g(of)g(the)g(header)g(\014les)g Fs(adolc.h)e Fz(or)191 4038 y Fs(adouble.h)g Fz(where)h(the)i(latter)g(should)f(b)s (e)f(preferred)g(since)i(it)g(do)s(es)f(not)g(include)g(the)h(tap)s(e)f (based)191 4151 y(functions)30 b(de\014ned)f(in)h(other)g(header)g (\014les.)41 b(Hence,)31 b(including)f Fs(adouble.h)d Fz(a)m(v)m(oids)32 b(mo)s(de)e(mixtures,)191 4264 y(since)37 b Fs(adolc.h)e Fz(is)h(just)h(a)g(wrapp)s(er)e(for)h(including)g(all)i (public)e(headers)g(of)h(the)g(ADOL-C)g(pac)m(k)-5 b(age)191 4377 y(and)40 b(do)s(es)g(not)g(o\013er)h(o)m(wn)g(functions.)70 b(Since)40 b(the)h(t)m(w)m(o)h(ADOL-C)e(forw)m(ard)g(mo)s(de)g(v)-5 b(arian)m(ts)41 b(tap)s(e-)191 4490 y(based)33 b(and)h(tap)s(eless,)h (are)f(protot)m(yp)s(ed)g(in)g(the)g(same)g(header)g(\014le,)h(the)f (compiler)g(needs)f(to)i(kno)m(w)f(if)191 4603 y(a)g(tap)s(eless)g(v)m (ersion)h(is)f(in)m(tended.)50 b(This)33 b(can)h(b)s(e)g(done)f(b)m(y)h (de\014ning)f(a)h(prepro)s(cessor)f(macro)h(named)191 4716 y Fp(ADOLC)p 497 4716 28 4 v 32 w(T)-8 b(APELESS)p Fz(.)30 b(Note)i(that)e(it)h(is)f(imp)s(ortan)m(t)h(to)f(de\014ne)g (this)g(macro)h(b)s(efore)e(the)i(header)e(\014le)i(is)191 4829 y(included.)40 b(Otherwise,)30 b(the)h(tap)s(e-based)f(v)m(ersion) h(of)g(ADOL-C)f(will)h(b)s(e)f(used.)332 4991 y(As)35 b(in)f(the)h(tap)s(e)g(based)f(forw)m(ard)g(v)m(ersion)i(of)e(ADOL-C)h (all)h(deriv)-5 b(ativ)m(e)36 b(calculations)h(are)e(in)m(tro-)191 5104 y(duced)k(b)m(y)i(calls)g(to)g(o)m(v)m(erloaded)h(op)s(erators.)71 b(Therefore,)43 b(similar)d(to)h(the)g(tap)s(e-based)f(v)m(ersion)h (all)191 5217 y(indep)s(enden)m(t,)h(in)m(termediate)g(and)d(dep)s (enden)m(t)h(v)-5 b(ariables)40 b(m)m(ust)h(b)s(e)e(declared)i(with)f (t)m(yp)s(e)g Fp(adouble)p Fz(.)191 5330 y(The)c(whole)h(tap)s(eless)g (functionalit)m(y)h(pro)m(vided)e(b)m(y)g Fs(adolc.h)f Fz(w)m(as)i(written)f(as)h(complete)h(inline)f(in-)p Black Black eop end %%Page: 53 53 TeXDict begin 53 52 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.53) cvn /DEST pdfmark end 183 199 a Black 191 307 a Ft(7.1)92 b(Mo)s(difying)30 b(the)h(Source)f(Co)s(de)2213 b Fz(53)p Black 191 606 a(tended)22 b(co)s(de)h(due)f(to)h(run)e(time)i (asp)s(ects,)i(where)d(the)g(real)i(p)s(ortion)e(of)g(inlined)g(co)s (de)h(can)g(b)s(e)f(in\015uenced)191 719 y(b)m(y)k(switc)m(hes)h(for)f (man)m(y)g(compilers.)39 b(Lik)m(ely)-8 b(,)29 b(the)d(whole)h(deriv)-5 b(ativ)m(e)27 b(co)s(de)g(is)f(inlined)g(b)m(y)f(default.)40 b(Our)191 832 y(exp)s(erimen)m(ts)24 b(with)h(the)f(tap)s(eless)h(mo)s (de)g(ha)m(v)m(e)g(pro)s(duced)e(complete)j(inlined)e(co)s(de)h(b)m(y)g (using)f(standard)191 945 y(switc)m(hes)31 b(\(optimization\))i(for)d (GNU)h(and)f(In)m(tel)h(C++)e(compiler.)332 1108 y(T)-8 b(o)43 b(a)m(v)m(oid)h(name)f(con\015icts)g(resulting)g(from)f(the)h (inlining)f(the)h(tap)s(eless)g(v)m(ersion)g(has)g(its)g(o)m(wn)191 1220 y(namespace)36 b Fs(adtl)p Fz(.)56 b(As)36 b(a)g(result)g(four)f (p)s(ossibilities)h(of)g(using)g(the)g Fp(adouble)g Fz(t)m(yp)s(e)g (are)g(a)m(v)-5 b(ailable)38 b(for)191 1333 y(the)31 b(tap)s(eless)f(v)m(ersion:)p Black 327 1541 a Fn(\017)p Black 46 w Fz(De\014ning)h(a)f(new)g(t)m(yp)s(e)p Black Black 1533 1723 a Fp(t)m(yp)s(edef)g(adtl::adouble)h(adouble;)1533 1835 y Fz(...)1533 1948 y Fp(adouble)f(tmp;)418 2135 y Fz(This)k(is)h(the)f(preferred)f(w)m(a)m(y)-8 b(.)55 b(Remem)m(b)s(er,)36 b(y)m(ou)e(can)h(not)g(write)g(an)f(o)m(wn)h Fp(adouble)f Fz(t)m(yp)s(e/class)418 2248 y(with)c(di\013eren)m(t)h (meaning)g(after)g(doing)f(the)h(t)m(yp)s(edef.)p Black 327 2424 a Fn(\017)p Black 46 w Fz(Declaring)h(with)e(namespace)h (pre\014x)p Black Black 1757 2613 a Fp(adtl::adouble)f(tmp;)418 2802 y Fz(Not)22 b(the)f(most)f(handsome)g(and)g(e\016cien)m(t)j(w)m(a) m(y)e(with)f(resp)s(ect)h(to)g(co)s(ding)g(but)f(without)h(an)m(y)f (doubt)418 2915 y(one)31 b(of)f(the)h(safest)g(w)m(a)m(ys.)42 b(The)29 b(iden)m(ti\014er)i Fp(adouble)f Fz(is)h(still)g(a)m(v)-5 b(ailable)33 b(for)d(user)g(t)m(yp)s(es/classes.)p Black 327 3091 a Fn(\017)p Black 46 w Fz(T)-8 b(rusting)30 b(macros)p Black Black 1535 3273 a Fp(#de\014ne)g(adouble)h (adtl::adouble)1535 3385 y Fz(...)1535 3498 y Fp(adouble)f(tmp;)418 3680 y Fz(This)25 b(approac)m(h)i(should)e(b)s(e)g(used)g(with)h(care,) i(since)e(standard)g(de\014nes)f(are)h(text)h(replacemen)m(ts.)p Black 327 3856 a Fn(\017)p Black 46 w Fz(Using)k(the)f(complete)i (namespace)p Black Black 1648 4037 a Fp(#using)e(namespace)h(adtl;)1648 4150 y Fz(...)1648 4263 y Fp(adouble)g(tmp;)418 4445 y Fz(A)42 b(v)m(ery)f(clear)h(approac)m(h)g(with)f(the)g(disadv)-5 b(an)m(tage)43 b(of)e(unco)m(v)m(ering)h(all)g(the)g(hidden)e(secrets.) 418 4558 y(Name)31 b(con\015icts)g(ma)m(y)g(arise!)191 4765 y(After)41 b(de\014ning)e(the)i(v)-5 b(ariables)41 b(only)f(t)m(w)m(o)i(things)f(are)f(left)i(to)f(do.)71 b(First)40 b(one)h(needs)f(to)h(initialize)191 4878 y(the)36 b(v)-5 b(alues)36 b(of)g(the)g(indep)s(enden)m(t)e(v)-5 b(ariables)36 b(for)g(the)g(function)f(ev)-5 b(aluation.)58 b(This)35 b(can)h(b)s(e)f(done)h(b)m(y)191 4991 y(assigning)27 b(the)g(v)-5 b(ariables)27 b(a)g Fp(double)g Fz(v)-5 b(alue.)40 b(The)26 b Fp(ad)p Fz(-v)-5 b(alue)27 b(is)g(set)g(to)g (zero)h(in)e(this)h(case.)40 b(Additionally)-8 b(,)191 5104 y(the)30 b(tap)s(eless)h(forw)m(ard)f(mo)s(de)f(v)-5 b(arian)m(t)32 b(of)e(ADOL-C)g(o\013ers)h(a)f(function)g(named)g Fp(setV)m(alue)g Fz(for)g(setting)191 5217 y(the)g(v)-5 b(alue)31 b(without)f(c)m(hanging)g(the)h Fp(ad)p Fz(-v)-5 b(alue.)41 b(T)-8 b(o)30 b(set)h(the)f Fp(ad)p Fz(-v)-5 b(alues)30 b(of)g(the)g(indep)s(enden)m(t)f(v)-5 b(ariables)191 5330 y(ADOL-C)30 b(o\013ers)h(t)m(w)m(o)h(p)s(ossibilities:)p Black Black eop end %%Page: 54 54 TeXDict begin 54 53 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.54) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fz(54)972 b Ft(7)91 b(T)-8 b(APELESS)29 b(F)m(OR)-10 b(W)g(ARD)32 b(DIFFERENTIA)-8 b(TION)30 b(IN)h(ADOL-C)p Black Black 327 606 a Fn(\017)p Black 46 w Fz(Using)g(the)f (constructor)p Black Black 1580 795 a Fp(adouble)g(x1\(2,1\),)j (x2\(4,0\),)g(y;)418 984 y Fz(This)23 b(w)m(ould)g(create)h(three)g (adoubles)f Fr(x)1782 998 y FC(1)1821 984 y Fz(,)i Fr(x)1923 998 y FC(2)1985 984 y Fz(and)e Fr(y)s Fz(.)38 b(Ob)m(viously)-8 b(,)25 b(the)f(latter)g(remains)f(uninitial-)418 1097 y(ized.)41 b(In)28 b(terms)h(of)h(function)f(ev)-5 b(aluation)30 b Fr(x)1949 1111 y FC(1)2018 1097 y Fz(holds)e(the)h(v)-5 b(alue)30 b(2)g(and)e Fr(x)2945 1111 y FC(2)3014 1097 y Fz(the)h(v)-5 b(alue)29 b(4)h(whereas)418 1210 y(the)h(deriv)-5 b(ativ)m(e)32 b(v)-5 b(alues)30 b(are)h(initialized)h(to)47 b(_)-41 b Fr(x)1996 1224 y FC(1)2061 1210 y Fz(=)25 b(1)31 b(and)45 b(_)-40 b Fr(x)2462 1224 y FC(2)2526 1210 y Fz(=)25 b(0.)p Black 327 1385 a Fn(\017)p Black 46 w Fz(Setting)31 b(p)s(oin)m(t)g(v)-5 b(alues)30 b(directly)p Black Black 1651 1566 a Fp(adouble)g(x1=2,)h(x2=4,)g(y;)1651 1679 y Fz(...)1651 1792 y Fp(x1.setAD)m(V)m(alue\(1\);)1651 1905 y(x2.setAD)m(V)m(alue\(0\);)418 2086 y Fz(The)41 b(same)h(example)g(as)f(ab)s(o)m(v)m(e)i(but)d(no)m(w)i(using)e Fp(setAD)m(V)m(alue)p Fz(-metho)s(d)h(for)g(initializing)j(the)418 2199 y(deriv)-5 b(ativ)m(e)32 b(v)-5 b(alues.)191 2406 y(The)35 b(deriv)-5 b(ativ)m(es)36 b(can)g(b)s(e)e(obtained)i(at)g(an)m (y)f(time)h(during)e(the)h(ev)-5 b(aluation)37 b(pro)s(cess)e(b)m(y)g (calling)i(the)191 2519 y Fp(getAD)m(V)m(alue)p Fz(-metho)s(d)p Black Black 1503 2718 a Fp(adouble)30 b(y;)1503 2831 y Fz(...)1503 2944 y Fp(cout)h Fr(<<)e Fp(y)-8 b(.getAD)m(V)m (alue\(\);)191 3162 y SDict begin H.S end 191 3162 a Black -18 x Fz(Figure)31 b(7)p Black 523 3082 a SDict begin H.R end 523 3082 a 523 3144 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (figure.7) cvn H.B /ANN pdfmark end 523 3144 a 27 w Fz(sho)m(ws)26 b(the)g(resulting)h(source)g(co)s(de)f(incorp)s (orating)h(all)g(required)f(c)m(hanges)h(for)f(the)h(example)191 3257 y(giv)m(en)k(ab)s(o)m(v)m(e.)191 3541 y SDict begin H.S end 191 3541 a 191 3541 a SDict begin 13.6 H.A end 191 3541 a 191 3541 a SDict begin [/View [/XYZ H.V]/Dest (section*.6) cvn /DEST pdfmark end 191 3541 a Fw(The)k(v)m(ector)g(mo)s (de)191 3763 y Fz(In)29 b(scalar)h(mo)s(de)f(only)g(one)h(direction)g (elemen)m(t)h(has)e(to)h(b)s(e)f(stored)h(p)s(er)e Fp(adouble)i Fz(whereas)f(a)g(\014eld)g(of)h Fr(p)191 3875 y Fz(elemen)m(ts)f(is)f (needed)g(in)g(the)g(v)m(ector)i(mo)s(de)d(to)i(co)m(v)m(er)h(the)e (computations)h(for)f(the)g(giv)m(en)h Fr(p)f Fz(directions.)191 3988 y(The)i(resulting)g(c)m(hanges)i(to)f(the)f(source)h(co)s(de)f (are)h(describ)s(ed)f(in)g(this)g(section.)332 4151 y(Similar)37 b(to)g(tap)s(eless)h(scalar)f(forw)m(ard)g(mo)s(de,)h(the)f(tap)s (eless)g(v)m(ector)h(forw)m(ard)f(mo)s(de)f(is)h(used)f(b)m(y)191 4264 y(de\014ning)44 b Fp(ADOLC)p 855 4264 28 4 v 32 w(T)-8 b(APELESS)p Fz(.)44 b(F)-8 b(urthermore,)49 b(one)44 b(has)h(to)g(de\014ne)f(an)g(additional)i(prepro)s(cessor)191 4377 y(macro)28 b(named)g Fp(NUMBER)p 1138 4377 V 31 w(DIRECTIONS)p Fz(.)g(This)f(macro)i(tak)m(es)g(the)f(maximal)h(n)m(um) m(b)s(er)d(of)i(directions)191 4490 y(to)38 b(b)s(e)e(used)g(within)g (the)i(resulting)f(v)m(ector)h(mo)s(de.)60 b(Just)36 b(as)i Fp(ADOLC)p 2696 4490 V 32 w(T)-8 b(APELESS)37 b Fz(the)g(new)f(macro)191 4603 y(m)m(ust)d(b)s(e)g(de\014ned)g(b)s (efore)g(including)g(the)h Fs()29 b Fz(header)k(\014le)h(since)g(it)g(is)g(ignored)191 4716 y(otherwise.)332 4878 y(In)c(man)m(y)g(situations)h(recompiling)h (the)e(source)h(co)s(de)f(to)i(get)f(a)g(new)f(n)m(um)m(b)s(er)f(of)i (directions)g(is)f(at)191 4991 y(least)c(undesirable.)37 b(ADOL-C)25 b(o\013ers)f(a)h(function)f(named)g Fp(setNumDir)g Fz(to)h(w)m(ork)g(around)e(this)h(problem)191 5104 y(partially)-8 b(.)82 b(Calling)44 b(this)g(function,)i(ADOL-C)e(do)s(es)f(not)h(tak)m (e)h(the)f(n)m(um)m(b)s(er)e(of)i(directions)g(from)191 5217 y(the)32 b(macro)h Fp(NUMBER)p 1010 5217 V 32 w(DIRECTIONS)e Fz(but)h(from)f(the)h(argumen)m(t)h(of)f Fp(setNumDir)p Fz(.)46 b(A)32 b(corresp)s(onding)191 5330 y(source)e(co)s(de)h(w)m (ould)f(con)m(tain)i(the)f(follo)m(wing)g(lines:)p Black Black eop end %%Page: 55 55 TeXDict begin 55 54 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.55) cvn /DEST pdfmark end 183 199 a Black 191 307 a Ft(7.1)92 b(Mo)s(difying)30 b(the)h(Source)f(Co)s(de)2213 b Fz(55)p Black Black 191 518 3600 4 v 191 3251 4 2734 v Black Black 415 722 a Fp(#include)30 b Fr(<)p Fp(iostream)p Fr(>)415 835 y Fp(using)g(namespace)h(std;)415 1060 y(#de\014ne)g (ADOLC)p 1051 1060 28 4 v 32 w(T)-8 b(APELESS)415 1173 y(#include)30 b Fr(<)p Fp(adouble.h)p Fr(>)415 1286 y Fp(t)m(yp)s(edef)h(adtl::adouble)f(adouble;)415 1512 y(int)g(main\(\))h Fn(f)533 1625 y Fp(adouble)g(x[3],)g(y[3];)533 1851 y(fo)m(r)g(\(int)g(i=0;)f(i)p Fr(<)p Fp(3;)g(++i\))709 b(//)31 b(Initialize)e Fr(x)2646 1865 y Fh(i)651 1964 y Fp(...)533 2189 y(x[0].setAD)m(V)m(alue\(1\);)711 b(//)31 b(derivative)f(of)h(f)f(with)g(resp)s(ect)h(to)f Fr(x)3321 2203 y FC(1)533 2302 y Fp(y[0])i(=)e (sqrt\(x[0]*x[0]+x[1]*x[1]+x[2]*x[2]\);)533 2415 y(y[1])i(=)e (atan\(sqrt\(x[0]*x[0]+x[1]*x[1]\)/x[2]\);)533 2528 y(y[2])i(=)e (atan\(x[1]/x[0]\);)533 2754 y(cout)h Fr(<<)f Fp("y1=")h Fr(<<)f Fp(y[0].getV)m(alue\(\))j Fr(<<)c Fp(")i(,)g(y2=")g Fr(<<)e Fp(y[1].getV)m(alue)j(...)41 b(;)533 2867 y(cout)31 b Fr(<<)f Fp("dy2/dx1)i(=)e(")h Fr(<<)e Fp(y[1].getAD)m(V)m(alue\(\))k Fr(<<)d Fp(endl;)533 2980 y(return)h(0;)415 3093 y Fn(g)p 3787 3251 4 2734 v 191 3254 3600 4 v Black 959 3409 a Fz(Figure)g(7:)1357 3409 y SDict begin H.S end 1357 3409 a 1357 3409 a SDict begin H.R end 1357 3409 a 1357 3409 a SDict begin [/View [/XYZ H.V]/Dest (figure.7) cvn /DEST pdfmark end 1357 3409 a Fz(Example)g(for)f(tap)s(eless)h(scalar) g(forw)m(ard)f(mo)s(de)p Black Black Black Black 1294 3952 a Fp(#de\014ne)g(NUMBER)p 2009 3952 28 4 v 32 w(DIRECTIONS)g(10) 1294 4065 y Fz(...)1294 4178 y Fp(adtl::setNumDir\(5\);)191 4829 y Fz(Note)37 b(that)e(using)g(this)g(function)g(do)s(es)g(not)h(c) m(hange)g(memory)g(requiremen)m(ts)f(that)h(can)f(b)s(e)g(roughly)191 4941 y(determined)30 b(b)m(y)g(\()p Fp(NUMBER)p 1213 4941 V 32 w(DIRECTIONS)p Fz(+1\)*\(n)m(um)m(b)s(er)h(of)f Fp(adouble)p Fz(s\).)332 5104 y(Compared)24 b(to)g(the)h(scalar)g(case) g(setting)g(and)f(getting)i(the)e(deriv)-5 b(ativ)m(e)26 b(v)-5 b(alues,)26 b(i.e.)40 b(the)24 b(directions,)191 5217 y(is)33 b(more)g(in)m(v)m(olv)m(ed.)50 b(Instead)33 b(of)g(w)m(orking)g(with)g(single)g Fp(double)g Fz(v)-5 b(alues,)34 b(p)s(oin)m(ter)f(to)h(\014elds)e(of)h Fp(double)p Fz(s)191 5330 y(are)e(used)e(as)i(illustrated)g(b)m(y)f(the)h(follo)m (wing)h(example:)p Black Black eop end %%Page: 56 56 TeXDict begin 56 55 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.56) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fz(56)972 b Ft(7)91 b(T)-8 b(APELESS)29 b(F)m(OR)-10 b(W)g(ARD)32 b(DIFFERENTIA)-8 b(TION)30 b(IN)h(ADOL-C)p Black Black Black 1013 594 a Fp(#de\014ne)g(NUMBER)p 1729 594 28 4 v 31 w(DIRECTIONS)g(10)1013 707 y Fz(...)1013 820 y Fp(adouble)g(x,)f(y;)1013 933 y(double)h(*ptr=new)g (double[NUMBER)p 2359 933 V 32 w(DIRECTIONS];)1013 1045 y Fz(...)1013 1158 y Fp(x1=2;)1013 1271 y(x1.setAD)m(V)m(alue\(ptr\);) 1013 1384 y Fz(...)1013 1497 y Fp(ptr=y)-8 b(.getAD)m(V)m(alue\(\);)191 1737 y Fz(Additionally)g(,)46 b(the)c(tap)s(eless)g(v)m(ector)h(forw)m (ard)e(mo)s(de)g(of)h(ADOL-C)f(o\013ers)h(t)m(w)m(o)h(new)e(metho)s(ds) g(for)191 1850 y(setting/getting)33 b(the)e(deriv)-5 b(ativ)m(e)31 b(v)-5 b(alues.)41 b(Similar)30 b(to)h(the)f(scalar)h (case,)h Fp(double)e Fz(v)-5 b(alues)31 b(are)f(used)f(but)191 1963 y(due)i(to)h(the)g(v)m(ector)i(mo)s(de)d(the)h(p)s(osition)g(of)f (the)h(desired)g(v)m(ector)h(elemen)m(t)g(m)m(ust)f(b)s(e)f(supplied)f (in)i(the)191 2076 y(argumen)m(t)f(list:)p Black Black 461 2316 a Fp(#de\014ne)g(NUMBER)p 1177 2316 V 32 w(DIRECTIONS)f(10)461 2429 y Fz(...)461 2542 y Fp(adouble)h(x,)f(y;)461 2655 y Fz(...)461 2768 y Fp(x1=2;)461 2881 y(x1.setAD)m(V)m(alue\(5,1\);)877 b(//)31 b(set)f(the)h(6th)f(p)s(oint)g(value)g(of)h(x)f(to)g(1.0)461 2994 y Fz(...)461 3106 y Fp(cout)h Fr(<<)f Fp(y)-8 b(.getAD)m(V)m (alue\(3\))32 b Fr(<<)e Fp(endl;)236 b(//)32 b(p)m(rint)e(the)g(4th)h (derivative)f(value)g(of)h(y)191 3347 y Fz(The)f(resulting)g(source)h (co)s(de)f(con)m(taining)i(all)g(c)m(hanges)f(that)g(are)g(required)e (is)i(sho)m(wn)e(in)3324 3364 y SDict begin H.S end 3324 3364 a Black -17 x Fz(Figure)h(8)p Black 3656 3285 a SDict begin H.R end 3656 3285 a 3656 3347 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (figure.8) cvn H.B /ANN pdfmark end 3656 3347 a 191 3508 a SDict begin H.S end 191 3508 a 191 3508 a SDict begin 13.6 H.A end 191 3508 a 191 3508 a SDict begin [/View [/XYZ H.V]/Dest (subsection.7.2) cvn /DEST pdfmark end 191 3508 a 148 x FA(7.2)112 b(Compiling)39 b(and)f(Linking)h(the)e(Source)h(Co)s(de)191 3881 y Fz(After)32 b(incorp)s(orating)h(the)f(required)f(c)m(hanges,)j(one)e(has)g(to)h (compile)f(the)h(source)f(co)s(de)g(and)g(link)g(the)191 3994 y(ob)5 b(ject)32 b(\014les)g(to)g(get)h(the)f(executable.)46 b(As)31 b(long)h(as)g(the)g(ADOL-C)g(header)f(\014les)g(are)h(not)g (included)f(in)191 4107 y(the)g(absolute)g(path)f(the)g(compile)i (sequence)e(should)g(b)s(e)g(similar)g(to)h(the)g(follo)m(wing)h (example:)p Black Black 734 4355 a Fp(g++)f(-I/home/username/adolc)p 1905 4355 28 4 v 36 w(base/include)g(-c)g(tap)s(eless)p 2848 4355 V 32 w(scala)m(r.cpp)191 4603 y Fz(The)d Fs(-I)h Fz(option)g(tells)h(the)f(compiler)g(where)g(to)g(searc)m(h)h(for)e (the)h(ADOL-C)g(header)g(\014les.)40 b(This)28 b(option)191 4716 y(can)f(b)s(e)f(omitted)h(when)f(the)h(headers)f(are)h(included)f (with)g(absolute)h(path)g(or)f(if)h(ADOL-C)f(is)h(installed)191 4829 y(in)j(a)h(\\global")h(directory)-8 b(.)332 4991 y(Since)28 b(the)g(tap)s(eless)h(forw)m(ard)e(v)m(ersion)h(of)g(ADOL-C) g(is)g(implemen)m(ted)h(in)e(the)i(header)e Fs(adouble.h)191 5104 y Fz(as)36 b(complete)h(inline)f(in)m(tended)f(v)m(ersion,)j(the)d (ob)5 b(ject)37 b(\014les)f(do)f(not)h(need)f(to)i(b)s(e)e(link)m(ed)g (against)i(an)m(y)191 5217 y(external)25 b(ADOL-C)g(co)s(de)g(or)g(the) f(ADOL-C)h(library)-8 b(.)39 b(Therefore,)26 b(the)e(example)i(started) f(ab)s(o)m(v)m(e)h(could)191 5330 y(b)s(e)k(\014nished)f(with)h(the)g (follo)m(wing)i(command:)p Black Black eop end %%Page: 57 57 TeXDict begin 57 56 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.57) cvn /DEST pdfmark end 183 199 a Black 191 307 a Ft(7.2)92 b(Compiling)30 b(and)g(Linking)g(the)h(Source)f(Co)s(de) 1699 b Fz(57)p Black Black 191 518 3600 4 v 191 4267 4 3750 v Black Black 434 722 a Fp(#include)30 b Fr(<)p Fp(iostream)p Fr(>)434 835 y Fp(using)g(namespace)h(std;)434 1060 y(#de\014ne)g(ADOLC)p 1070 1060 28 4 v 32 w(T)-8 b(APELESS)434 1173 y(#de\014ne)31 b(NUMBER)p 1150 1173 V 31 w(DIRECTIONS)g(3)434 1286 y(#include)f Fr(<)p Fp(adouble.h)p Fr(>)434 1399 y Fp(t)m(yp)s(edef)h(adtl::adouble)f(adouble;)434 1625 y(ADOLC)p 740 1625 V 32 w(T)-8 b(APELESS)p 1204 1625 V 33 w(UNIQUE)p 1573 1625 V 33 w(INTERNALS;)434 1851 y(int)30 b(main\(\))h Fn(f)552 1964 y Fp(adouble)g(x[3],)g(y[3];) 552 2189 y(fo)m(r)g(\(int)g(i=0;)f(i)p Fr(<)p Fp(3;)g(++i\))g Fn(f)670 2302 y Fp(...)710 b(//)31 b(Initialize)e Fr(x)1974 2316 y Fh(i)670 2415 y Fp(fo)m(r)i(\(int)g(j=0;)g(j)p Fr(<)p Fp(3;)g(++j\))f(if)g(\(i==j\))g(x[i].setAD)m(V)m(alue\(j,1\);) 552 2528 y Fn(g)552 2754 y Fp(y[0])h(=)f (sqrt\(x[0]*x[0]+x[1]*x[1]+x[2]*x[2])q(\);)552 2867 y(y[1])h(=)f (atan\(sqrt\(x[0]*x[0]+x[1]*x[1]\)/x[2]\);)552 2980 y(y[2])h(=)f (atan\(x[1]/x[0]\);)552 3206 y(cout)h Fr(<<)f Fp("y1=")h Fr(<<)f Fp(y[0].getV)m(alue\(\))j Fr(<<)c Fp(")i(,)g(y2=")g Fr(<<)e Fp(y[1].getV)m(alue)j(...)41 b(;)552 3319 y(cout)31 b Fr(<<)f Fp("jacobian)h(:)40 b(")31 b Fr(<<)f Fp(endl;)552 3431 y(fo)m(r)h(\(int)g(i=0;)f(i)p Fr(<)p Fp(3;)g(++i\))g Fn(f)670 3544 y Fp(fo)m(r)h(\(int)g(j=0;)g(j)p Fr(<)p Fp(3;)g(++j\))788 3657 y(cout)g Fr(<<)f Fp(y[i].getAD)m(V)m(alue\(j\))i Fr(<<)e Fp(")h(";)670 3770 y(cout)g Fr(<<)f Fp(endl;)552 3883 y Fn(g)552 3996 y Fp(return)h(0;)434 4109 y Fn(g)p 3787 4267 4 3750 v 191 4270 3600 4 v Black 952 4425 a Fz(Figure)g(8:)1350 4425 y SDict begin H.S end 1350 4425 a 1350 4425 a SDict begin H.R end 1350 4425 a 1350 4425 a SDict begin [/View [/XYZ H.V]/Dest (figure.8) cvn /DEST pdfmark end 1350 4425 a Fz(Example)f(for)g(tap)s(eless)h(v)m (ector)h(forw)m(ard)e(mo)s(de)p Black Black Black Black 1235 4812 a Fp(g++)g(-o)h(tap)s(eless)p 1862 4812 28 4 v 32 w(scala)m(r)f(tap)s(eless)p 2436 4812 V 32 w(scala)m(r.o)191 5217 y Fz(The)d(men)m(tioned)g(source)h(co)s(des)f Fp(tap)s(eless)p 1635 5217 V 32 w(scala)m(r.c)h Fz(and)e Fp(tap)s(eless)p 2445 5217 V 32 w(vecto)m(r.c)k Fz(illustrating)e(the)f(use)g(of)h(the) 191 5330 y(for)i(tap)s(eless)h(scalar)g(and)f(v)m(ector)i(mo)s(de)e (can)h(b)s(e)e(found)g(in)i(the)f(directory)h Fp(examples)p Fz(.)p Black Black eop end %%Page: 58 58 TeXDict begin 58 57 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.58) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fz(58)972 b Ft(7)91 b(T)-8 b(APELESS)29 b(F)m(OR)-10 b(W)g(ARD)32 b(DIFFERENTIA)-8 b(TION)30 b(IN)h(ADOL-C)p Black 191 515 a SDict begin H.S end 191 515 a 191 515 a SDict begin 13.6 H.A end 191 515 a 191 515 a SDict begin [/View [/XYZ H.V]/Dest (subsection.7.3) cvn /DEST pdfmark end 191 515 a 91 x FA(7.3)112 b(Concluding)39 b(Remarks)f(for)f(the)h(T) -9 b(ap)s(eless)38 b(F)-9 b(orw)m(ard)38 b(Mo)s(de)g(V)-9 b(arian)m(t)191 827 y Fz(As)31 b(man)m(y)h(other)f(AD)h(metho)s(ds)f (the)g(tap)s(eless)h(forw)m(ard)f(mo)s(de)g(pro)m(vided)g(b)m(y)g(the)g (ADOL-C)h(pac)m(k)-5 b(age)191 940 y(has)28 b(its)g(o)m(wn)g(strengths) g(and)f(dra)m(wbac)m(ks.)40 b(Please)30 b(read)d(the)i(follo)m(wing)g (section)g(carefully)g(to)f(b)s(ecome)191 1053 y(familiar)j(with)f(the) h(things)f(that)h(can)g(o)s(ccur:)p Black 327 1288 a Fn(\017)p Black 46 w Fz(Adv)-5 b(an)m(tages:)p Black 520 1474 a Fw({)p Black 46 w Fz(Co)s(de)30 b(sp)s(eed)618 1587 y(Increasing)25 b(computation)g(sp)s(eed)e(w)m(as)i(one)f(of)h (the)f(main)g(asp)s(ects)h(in)f(writing)g(the)g(tap)s(eless)618 1700 y(co)s(de.)41 b(In)30 b(man)m(y)g(cases)i(higher)e(p)s(erformance) f(can)i(b)s(e)f(exp)s(ected)g(this)h(w)m(a)m(y)-8 b(.)p Black 520 1845 a Fw({)p Black 46 w Fz(Easier)31 b(linking)f(pro)s(cess) 618 1958 y(As)39 b(another)g(result)g(from)f(the)h(co)s(de)g(inlining)f (the)h(ob)5 b(ject)40 b(co)s(de)f(do)s(es)f(not)h(need)g(to)g(b)s(e)618 2071 y(link)m(ed)31 b(against)h(an)e(ADOL-C)g(library)-8 b(.)p Black 520 2216 a Fw({)p Black 46 w Fz(Smaller)31 b(o)m(v)m(erall)h(memory)f(requiremen)m(ts)618 2329 y(T)-8 b(ap)s(eless)40 b(ADOL-C)h(do)s(es)e(not)h(write)h(tap)s(es)f(an)m (ymore,)j(as)d(the)g(name)g(implies.)70 b(Lo)s(op)618 2442 y("unrolling")35 b(can)f(b)s(e)f(a)m(v)m(oided)i(this)e(w)m(a)m(y) -8 b(.)52 b(Considered)33 b(main)h(memory)f(plus)g(disk)g(space)618 2555 y(as)g(o)m(v)m(erall)i(memory)d(requiremen)m(ts)g(the)h(tap)s (eless)g(v)m(ersion)g(can)g(b)s(e)e(executed)j(in)e(a)h(more)618 2668 y(e\016cien)m(t)f(w)m(a)m(y)-8 b(.)p Black 327 2854 a Fn(\017)p Black 46 w Fz(Dra)m(wbac)m(ks:)p Black 520 3040 a Fw({)p Black 46 w Fz(Main)31 b(memory)f(limitations)618 3153 y(The)k(abilit)m(y)h(to)g(compute)f(deriv)-5 b(ativ)m(es)36 b(to)f(a)f(giv)m(en)h(function)f(is)g(b)s(ounded)e(b)m(y)i(the)g(main) 618 3266 y(memory)g(plus)e(sw)m(ap)i(size)g(when)f(using)g(tap)s(eless) h(ADOL-C.)g(Computation)g(from)f(sw)m(ap)618 3379 y(should)f(b)s(e)h(a) m(v)m(oided)h(an)m(yw)m(a)m(y)h(as)e(far)g(as)g(p)s(ossible)f(since)i (it)f(slo)m(ws)h(do)m(wn)e(the)i(computing)618 3492 y(time)27 b(drastically)-8 b(.)41 b(Therefore,)27 b(if)f(the)g(program)g (execution)h(is)f(terminated)g(without)g(error)618 3605 y(message)41 b(insu\016cien)m(t)e(memory)g(size)h(can)g(b)s(e)f(the)g (reason)h(among)f(other)h(things.)67 b(The)618 3718 y(memory)30 b(requiremen)m(ts)h Fr(M)40 b Fz(can)31 b(b)s(e)f(determined)g(roughly) g(as)g(follo)m(w)m(ed:)p Black 697 3863 a Fn(\003)p Black 46 w Fz(Scalar)h(mo)s(de:)41 b Fr(M)35 b Fz(=\(n)m(um)m(b)s(er)29 b(of)i Fp(adouble)p Fz(s\))p Fn(\003)p Fz(2)21 b(+)f Fr(M)2659 3877 y Fh(p)p Black 697 3992 a Fn(\003)p Black 46 w Fz(V)-8 b(ector)31 b(mo)s(de:)40 b Fr(M)35 b Fz(=\(n)m(um)m(b)s (er)28 b(of)i Fp(adouble)p Fz(s\)*\()p Fp(NUMBER)p 2846 3992 28 4 v 33 w(DIRECTIONS)p Fz(+1\))18 b(+)g Fr(M)3751 4006 y Fh(p)618 4137 y Fz(where)30 b(the)h(storage)h(size)f(of)f(all)i (non)d Fp(adouble)i Fz(based)f(v)-5 b(ariables)31 b(is)f(describ)s(ed)g (b)m(y)g Fr(M)3591 4151 y Fh(p)3631 4137 y Fz(.)p Black 520 4282 a Fw({)p Black 46 w Fz(Compile)h(time)618 4395 y(As)c(discussed)e(in)i(the)f(previous)h(sections,)h(the)f(tap)s(eless) g(forw)m(ard)f(mo)s(de)g(of)h(the)g(ADOL-C)618 4508 y(pac)m(k)-5 b(age)37 b(is)d(implemen)m(ted)h(as)f(inline)h(in)m(tended)f(v)m (ersion.)53 b(Using)34 b(this)g(approac)m(h)h(results)618 4621 y(in)29 b(a)h(higher)f(source)g(co)s(de)h(size,)g(since)g(ev)m (ery)g(op)s(eration)g(in)m(v)m(olving)h(at)f(least)g(one)g Fp(adouble)618 4733 y Fz(stands)37 b(for)g(the)g(op)s(eration)h(itself) g(as)f(w)m(ell)i(as)e(for)g(the)h(corresp)s(onding)e(deriv)-5 b(ativ)m(e)38 b(co)s(de)618 4846 y(after)23 b(the)f(inlining)g(pro)s (cess.)37 b(Therefore,)24 b(the)e(compilation)h(time)g(needed)e(for)h (the)g(tap)s(eless)618 4959 y(v)m(ersion)31 b(ma)m(y)g(b)s(e)f(higher)g (than)g(that)h(of)f(the)h(tap)s(e)g(based)f(co)s(de.)p Black 520 5104 a Fw({)p Black 46 w Fz(Co)s(de)g(Size)618 5217 y(A)35 b(second)g(dra)m(wbac)m(k)g(and)g(result)f(of)h(the)g(co)s (de)h(inlining)e(is)h(the)g(increase)h(of)f(co)s(de)g(sizes)618 5330 y(for)d(the)g(binaries.)44 b(The)31 b(increase)i(factor)f (compared)g(to)h(the)f(corresp)s(onding)e(tap)s(e)i(based)p Black Black eop end %%Page: 59 59 TeXDict begin 59 58 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.59) cvn /DEST pdfmark end 183 199 a Black 3700 307 a Fz(59)p Black 618 606 a(program)37 b(is)h(di\016cult)f(to)h(quan) m(tify)f(as)h(it)g(is)f(task)h(dep)s(enden)m(t.)60 b(Practical)39 b(results)e(ha)m(v)m(e)618 719 y(sho)m(wn)28 b(that)h(v)-5 b(alues)29 b(b)s(et)m(w)m(een)g(1.0)h(and)e(2.0)i(can)e(b)s(e)g(exp)s (ected.)41 b(F)-8 b(actors)30 b(higher)e(than)h(2.0)618 832 y(are)i(p)s(ossible)f(to)s(o)h(and)f(ev)m(en)h(v)-5 b(alues)31 b(b)s(elo)m(w)f(1.0)i(ha)m(v)m(e)f(b)s(een)f(observ)m(ed.) 191 983 y SDict begin H.S end 191 983 a 191 983 a SDict begin 13.6 H.A end 191 983 a 191 983 a SDict begin [/View [/XYZ H.V]/Dest (section.8) cvn /DEST pdfmark end 191 983 a 182 x FD(8)135 b(Installing)46 b(and)f(Using)g(ADOL-C)191 1278 y SDict begin H.S end 191 1278 a 191 1278 a SDict begin 13.6 H.A end 191 1278 a 191 1278 a SDict begin [/View [/XYZ H.V]/Dest (subsection.8.1) cvn /DEST pdfmark end 191 1278 a 143 x FA(8.1)112 b(Generating)39 b(the)e(ADOL-C)h(Library)191 1642 y Fz(The)30 b(curren)m(tly)g(built)g(system)h(is)f(b)s(est)g (summarized)g(b)m(y)g(the)h(ubiquitous)e(gn)m(u)i(install)g(triplet)p Black Black 1223 1862 a Fs(configure)46 b(-)h(make)g(-)g(make)g (install)28 b Fz(.)191 2082 y(Executing)f(this)g(three)g(steps)g(from)g (the)g(pac)m(k)-5 b(age)28 b(base)f(directory)h Fs ()20 b Fz(will)191 2195 y(compile)36 b(the)g(static)h(and)e(the)h(dynamic)f(ADOL-C)h(library)f(with)h (default)f(options)h(and)f(install)i(the)191 2308 y(pac)m(k)-5 b(age)27 b(\(libraries)f(and)f(headers\))h(in)m(to)g(the)g(default)f (installation)j(directory)e Fs(<$HOME/adolc)p 3502 2308 29 4 v 31 w(base>)p Fz(.)191 2421 y(Inside)35 b(the)i(install)f (directory)h(the)f(sub)s(directory)f Fs(include)f Fz(will)j(con)m(tain) g(all)g(the)f(installed)h(header)191 2534 y(\014les)c(that)h(ma)m(y)g (b)s(e)f(included)f(b)m(y)h(the)h(user)f(program,)h(the)f(sub)s (directory)f Fs(lib)h Fz(will)g(con)m(tain)i(the)f(32-)191 2647 y(bit)i(compiled)h(library)f(and)g(the)g(sub)s(directory)f Fs(lib64)g Fz(will)i(con)m(tain)h(the)e(64-bit)i(compiled)e(library)-8 b(.)191 2760 y(Dep)s(ending)30 b(on)g(the)h(compiler)g(only)f(one)h(of) f Fs(lib)g Fz(or)g Fs(lib64)f Fz(ma)m(y)i(b)s(e)f(created.)332 2922 y(Before)45 b(doing)f(so)h(the)f(user)f(ma)m(y)i(mo)s(dify)e(the)i (header)f(\014le)g Fs(usrparms.h)d Fz(in)j(order)g(to)g(tailor)191 3035 y(the)39 b(ADOL-C)g(pac)m(k)-5 b(age)40 b(to)g(the)f(needs)f(in)g (the)h(particular)g(system)g(en)m(vironmen)m(t)g(as)g(discussed)f(in) 191 3148 y SDict begin H.S end 191 3148 a Black Fz(Section)31 b(2.2)p Black 625 3086 a SDict begin H.R end 625 3086 a 625 3148 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.2.2) cvn H.B /ANN pdfmark end 625 3148 a Fz(.)60 b(The)36 b(con\014gure)h(pro)s(cedure)e(whic)m(h)i(creates)h(the)f(necessary)g Fs(Makefile)p Fz(s)e(can)i(b)s(e)f(cus-)191 3261 y(tomized)c(b)m(y)f (use)g(of)h(some)f(switc)m(hes.)44 b(Av)-5 b(ailable)33 b(options)f(and)e(their)i(meaning)f(can)h(b)s(e)e(obtained)i(b)m(y)191 3374 y(executing)g Fs(./configure)44 b(--help)29 b Fz(from)h(the)g(pac) m(k)-5 b(age)33 b(base)d(directory)-8 b(.)332 3537 y(All)44 b(ob)5 b(ject)44 b(\014les)g(and)e(other)i(in)m(termediately)h (generated)g(\014les)e(can)h(b)s(e)e(remo)m(v)m(ed)j(b)m(y)e(the)g (call)191 3650 y Fs(make)k(clean)p Fz(.)39 b(Uninstalling)31 b(ADOL-C)g(b)m(y)f(executing)h Fs(make)47 b(uninstall)28 b Fz(is)i(only)h(reasonable)g(after)191 3763 y(a)c(previous)e(called)j Fs(make)46 b(install)25 b Fz(and)g(will)i(remo)m(v)m(e)g(all)h (installed)e(pac)m(k)-5 b(age)29 b(\014les)d(but)f(will)i(lea)m(v)m(e)i (the)191 3875 y(created)i(directories)h(b)s(ehind.)332 4038 y(The)46 b(sparse)g(driv)m(ers)g(are)h(included)f(in)g(the)g (ADOL-C)h(libraries)f(if)h(the)g Fs(./configure)c Fz(com-)191 4151 y(mand)f(is)g(executed)h(with)g(the)f(option)h Fs(--enable-sparse) p Fz(.)73 b(The)42 b(ColP)m(ac)m(k)i(library)e(a)m(v)-5 b(ailable)45 b(at)191 4264 y Fs(http://www.cscapes.org/c)o(olor)o(ing)o (page)o(/sof)o(twa)o(re.h)o(tm)16 b Fz(is)22 b(required)f(to)i(compute) g(the)f(sparse)191 4377 y(structures,)41 b(and)d(is)h(searc)m(hed)h (for)f(in)f(all)i(the)g(default)f(lo)s(cations)h(as)g(w)m(ell)g(as)f (in)g(the)g(sub)s(directory)191 4490 y Fs()p Fz(.)33 b(In)25 b(case)i(the)f(library)f(and)g(its)i(headers)e(are)h (installed)h(in)e(a)h(nonstandard)191 4603 y(path)32 b(this)g(ma)m(y)h(b)s(e)e(sp)s(eci\014ed)h(with)f(the)i Fs(--with-colpack=PATH)27 b Fz(option.)46 b(It)32 b(is)g(assumed)g (that)h(the)191 4716 y(library)g(and)f(its)i(header)f(\014les)g(ha)m(v) m(e)h(the)g(follo)m(wing)g(directory)g(structure:)46 b Fs(PATH/include)30 b Fz(con)m(tains)191 4829 y(all)c(the)f(header)g (\014les,)i Fs(PATH/lib)22 b Fz(con)m(tains)27 b(the)e(32-bit)h (compiled)g(library)f(and)f Fs(PATH/lib64)f Fz(con)m(tains)191 4941 y(the)38 b(64-bit)h(compiled)f(library)-8 b(.)64 b(Dep)s(ending)37 b(on)h(the)g(compiler)g(used)f(to)i(compile)g Fp(ADOL-C)e Fz(one)i(of)191 5054 y(these)31 b(libraries)f(will)h(b)s(e) f(used)f(for)h(linking.)332 5217 y(The)f(option)h Fs (--disable-stdczero)24 b Fz(turns)k(o\013)i(the)f(initialization)k(in)c (the)g Fp(adouble)h Fz(default)f(con-)191 5330 y(structor.)40 b(This)27 b(will)h(impro)m(v)m(e)h(e\016ciency)g(but)e(requires)h(that) g(there)h(b)s(e)e(no)h(implicit)h(arra)m(y)f(initializa-)p Black Black eop end %%Page: 60 60 TeXDict begin 60 59 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.60) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fz(60)1861 b Ft(8)91 b(INST)-8 b(ALLING)30 b(AND)h(USING)g(ADOL-C)p Black 191 606 a Fz(tion)g(in)f(the)g(co)s(de,)h(see)1022 606 y SDict begin H.S end 1022 606 a Black Fz(Section)g(2.3)p Black 1457 544 a SDict begin H.R end 1457 544 a 1457 606 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.2.3) cvn H.B /ANN pdfmark end 1457 606 a Fz(.)191 834 y SDict begin H.S end 191 834 a 191 834 a SDict begin 13.6 H.A end 191 834 a 191 834 a SDict begin [/View [/XYZ H.V]/Dest (subsection.8.2) cvn /DEST pdfmark end 191 834 a 148 x FA(8.2)112 b(Compiling)39 b(and)f(Linking)h(the)e(Example)i(Programs) 191 1220 y Fz(The)28 b(installation)j(pro)s(cedure)c(describ)s(ed)h(in) 1776 1220 y SDict begin H.S end 1776 1220 a Black Fz(Section)j(8.1)p Black 2210 1158 a SDict begin H.R end 2210 1158 a 2210 1220 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.8.1) cvn H.B /ANN pdfmark end 2210 1220 a 29 w Fz(also)e(pro)m(vides)g(the)g Fs(Makefile)p Fz(s)d(to)k(compile)191 1333 y(the)43 b(example)g(programs)f(in)h(the)f(directories)i Fs(/ADOL-C/exam)o(ple)o(s)37 b Fz(and)42 b(the)h(ad-)191 1446 y(ditional)32 b(examples)f(in)g Fs(/ADOL-C/ex)o(ampl)o(es/a)o(ddi)o(tion)o(al_e)o(xam)o (ples)o Fz(.)36 b(Ho)m(w)m(ev)m(er,)191 1559 y(one)42 b(has)f(to)h(execute)g(the)g Fs(configure)c Fz(command)j(with)g (appropriate)h(options)f(for)g(the)h(ADOL-C)191 1672 y(pac)m(k)-5 b(age)32 b(to)f(enable)g(the)g(compilation)h(of)e (examples.)42 b(Av)-5 b(ailable)32 b(options)e(are:)p Black Black 674 1962 a Fs(--enable-docexa)95 b Fz(build)29 b(all)j(examples)f(discussed)e(in)h(this)g(man)m(ual)1489 2075 y(\(compare)1888 2075 y SDict begin H.S end 1888 2075 a Black Fz(Section)i(9)p Black 2252 2013 a SDict begin H.R end 2252 2013 a 2252 2075 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (section.9) cvn H.B /ANN pdfmark end 2252 2075 a Fz(\))674 2188 y Fs(--enable-addexa)95 b Fz(build)29 b(all)j(additional)f(examples)1489 2301 y(\(See)g(\014le)g Fs(README)d Fz(in)i(the)h(v)-5 b(arious)30 b(sub)s(directories\))332 2584 y(Just)38 b(calling)i Fs(make)d Fz(from)h(the)h(pac)m(k)-5 b(ages)40 b(base)e(directory)h(generates)h(all)f(con\014gured)f (examples)191 2697 y(and)26 b(the)h(library)g(if)g(necessary)-8 b(.)40 b(Compiling)27 b(from)g(sub)s(directory)f Fs(examples)e Fz(or)j(one)h(of)f(its)g(subfolders)191 2810 y(is)i(p)s(ossible)f(to)s (o.)40 b(A)m(t)30 b(least)g(one)e(kind)g(of)h(the)g(ADOL-C)f(library)g (\(static)j(or)d(shared\))g(m)m(ust)h(ha)m(v)m(e)g(b)s(een)191 2922 y(built)h(previously)g(in)g(that)h(case.)42 b(Hence,)31 b(building)f(the)h(library)f(is)g(alw)m(a)m(ys)i(the)e(\014rst)g(step.) 332 3085 y(F)-8 b(or)28 b(Compiling)f(the)h(library)f(and)f(the)i(do)s (cumen)m(ted)f(examples)g(on)g(Windo)m(ws)h(using)e(Visual)i(Stu-)191 3198 y(dio)20 b(please)h(refer)f(to)h(the)g Fs()15 b Fz(\014les)21 b(in)f(the)g Fs()p Fz(,)g Fs ()191 3311 y Fz(and)30 b Fs()25 b Fz(sub)s(directories.)191 3541 y SDict begin H.S end 191 3541 a 191 3541 a SDict begin 13.6 H.A end 191 3541 a 191 3541 a SDict begin [/View [/XYZ H.V]/Dest (subsection.8.3) cvn /DEST pdfmark end 191 3541 a 146 x FA(8.3)112 b(Description)38 b(of)g(Imp)s(ortan)m(t)f(Header)h(Files)191 3925 y Fz(The)43 b(application)i(of)f(the)f(facilities)j(of)e(ADOL-C)g(requires)f(the)h (user)e(source)i(co)s(de)g(\(program)g(or)191 4038 y(mo)s(dule\))32 b(to)i(include)e(appropriate)h(header)g(\014les)f(where)g(the)h (desired)f(data)i(t)m(yp)s(es)f(and)f(routines)g(are)191 4151 y(protot)m(yp)s(ed.)44 b(The)31 b(new)g(hierarc)m(h)m(y)h(of)f (header)h(\014les)f(enables)h(the)f(user)g(to)h(tak)m(e)h(one)f(of)f(t) m(w)m(o)i(p)s(ossible)191 4264 y(w)m(a)m(ys)26 b(to)f(access)h(the)f (righ)m(t)g(in)m(terfaces.)41 b(The)24 b(\014rst)g(and)g(easy)h(w)m(a)m (y)h(is)f(recommended)f(to)i(b)s(eginners:)37 b(As)191 4377 y(indicated)22 b(in)674 4377 y SDict begin H.S end 674 4377 a Black Fz(T)-8 b(able)31 b(5)p Black 969 4314 a SDict begin H.R end 969 4314 a 969 4377 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (table.5) cvn H.B /ANN pdfmark end 969 4377 a 22 w Fz(the)22 b(pro)m(vided)f Fq(glob)-5 b(al)23 b Fz(header)e(\014le)h Fs()c Fz(can)k(b)s(e)f (included)g(b)m(y)g(an)m(y)191 4490 y(user)28 b(co)s(de)h(to)h(supp)s (ort)d(all)j(capabilities)h(of)e(ADOL-C)g(dep)s(ending)f(on)h(the)g (particular)g(programming)191 4603 y(language)j(of)e(the)h(source.)332 4765 y(The)i(second)h(w)m(a)m(y)h(is)f(mean)m(t)h(for)e(the)h(more)g (adv)-5 b(anced)34 b(ADOL-C)g(user:)47 b(Some)34 b(source)g(co)s(de)g (in-)191 4878 y(cludes)39 b(only)g(those)h(in)m(terfaces)g(used)f(b)m (y)g(the)g(particular)h(application.)68 b(The)39 b(resp)s(ectiv)m(ely)h (needed)191 4991 y(header)32 b(\014les)g(are)h(indicated)g(throughout)f (the)g(man)m(ual.)47 b(Existing)33 b(application)h(determined)e(dep)s (en-)191 5104 y(dences)22 b(b)s(et)m(w)m(een)g(the)g(pro)m(vided)g (ADOL-C)f(routines)h(are)g(realized)h(b)m(y)f(automatic)i(includes)d (of)h(headers)191 5217 y(in)32 b(order)f(to)i(main)m(tain)h(easy)e (use.)46 b(The)32 b(header)g(\014les)g(imp)s(ortan)m(t)g(to)h(the)g (user)e(are)i(describ)s(ed)e(in)h(the)191 5330 y SDict begin H.S end 191 5330 a Black Fz(T)-8 b(able)31 b(6)p Black 486 5267 a SDict begin H.R end 486 5267 a 486 5330 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (table.6) cvn H.B /ANN pdfmark end 486 5330 a 31 w Fz(and)693 5330 y SDict begin H.S end 693 5330 a Black Fz(T)-8 b(able)31 b(7)p Black 989 5267 a SDict begin H.R end 989 5267 a 989 5330 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (table.7) cvn H.B /ANN pdfmark end 989 5330 a Fz(.)p Black Black eop end %%Page: 61 61 TeXDict begin 61 60 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.61) cvn /DEST pdfmark end 183 199 a Black 191 307 a Ft(8.4)92 b(Compiling)30 b(and)g(Linking)g(C/C++)g(Programs)1624 b Fz(61)p Black Black Black Black 226 518 3530 4 v 224 817 4 299 v 276 688 a Fd()p 1174 817 V 1276 588 a Fc(!)100 b Fx(global)26 b(header)h(\014le)h(a)n(v)-5 b(ailable)26 b(for)h(easy)g(use)g(of)h(ADOL-C;)1303 687 y Fb(\017)126 b Fx(includes)36 b(all)g(ADOL-C)g(header)g(\014les)g(dep) r(ending)h(on)f(whether)g(the)1471 787 y(users)26 b(source)h(is)g(C++)g (or)g(C)g(co)r(de.)p 3754 817 V 226 820 3530 4 v 224 1318 4 499 v 276 1090 a Fd()p 1174 1318 V 1276 890 a Fc(!)100 b Fx(user)27 b(customization)f(of)i(ADOL-C)f (pac)n(k)-5 b(age)27 b(\(see)3105 890 y SDict begin H.S end 3105 890 a Black Fx(Section)h(2.2)p Black 3502 833 a SDict begin H.R end 3502 833 a 3502 890 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.2.2) cvn H.B /ANN pdfmark end 3502 890 a Fx(\);)1303 990 y Fb(\017)126 b Fx(after)20 b(a)g(c)n(hange)f(of)i(user)f(options)f(the)i(ADOL-C)g(library)e Fd(libadolc.*)1471 1089 y Fx(has)27 b(to)g(b)r(e)h(rebuilt)g(\(see)2267 1089 y SDict begin H.S end 2267 1089 a Black Fx(Section)g(8.1)p Black 2664 1033 a SDict begin H.R end 2664 1033 a 2664 1089 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.8.1) cvn H.B /ANN pdfmark end 2664 1089 a Fx(\);)1303 1189 y Fb(\017)126 b Fx(is)35 b(included)g(b)n(y)g(all)g(ADOL-C)g (header)f(\014les)h(and)g(th)n(us)h(b)n(y)f(all)f(user)1471 1289 y(programs.)p 3754 1318 4 499 v 226 1322 3530 4 v Black 1441 1476 a Fz(T)-8 b(able)31 b(5:)1802 1476 y SDict begin H.S end 1802 1476 a 1802 1476 a SDict begin H.R end 1802 1476 a 1802 1476 a SDict begin [/View [/XYZ H.V]/Dest (table.5) cvn /DEST pdfmark end 1802 1476 a Fz(Global)h(header)e(\014les)p Black Black Black Black Black 202 1589 3578 4 v 201 1788 4 200 v 252 1710 a Fd()p 1198 1788 V 1299 1659 a Fc(!)100 b Fx(pro)n(vides)33 b(the)h(in)n(terface)g(to)g(the)g(basic)g(activ)n (e)f(scalar)g(data)g(t)n(yp)r(e)h(of)1494 1759 y(ADOL-C:)28 b Fi(class)f(adouble)f Fx(\(see)2524 1759 y SDict begin H.S end 2524 1759 a Black Fx(Section)h(1)p Black 2856 1702 a SDict begin H.R end 2856 1702 a 2856 1759 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (section.1) cvn H.B /ANN pdfmark end 2856 1759 a Fx(\);)p 3778 1788 4 200 v 202 1792 3578 4 v 201 2190 4 399 v 252 2012 a Fd()p 1198 2190 V 1299 1861 a Fc(!)100 b Fx(pro)n(vides)29 b(functions)i(to)f(start/stop)f(the)i(tracing)e(of)h(activ)n(e)g (sections)1494 1961 y(\(see)1670 1961 y SDict begin H.S end 1670 1961 a Black Fx(Section)d(1.3)p Black 2067 1904 a SDict begin H.R end 2067 1904 a 2067 1961 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.1.3) cvn H.B /ANN pdfmark end 2067 1961 a Fx(\))37 b(as)f(w)n(ell)g(as)g(utilities)i(to)e (obtain)h(tap)r(e)g(statistics)1494 2061 y(\(see)1661 2061 y SDict begin H.S end 1661 2061 a Black Fx(Section)27 b(2.1)p Black 2057 2004 a SDict begin H.R end 2057 2004 a 2057 2061 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.2.1) cvn H.B /ANN pdfmark end 2057 2061 a Fx(\);)1326 2160 y Fb(\017)126 b Fx(is)28 b(included)g(b)n(y)f(the)h(header)f Fd()p Fx(.)p 3778 2190 4 399 v 202 2194 3578 4 v Black 1048 2353 a Fz(T)-8 b(able)31 b(6:)1409 2353 y SDict begin H.S end 1409 2353 a 1409 2353 a SDict begin H.R end 1409 2353 a 1409 2353 a SDict begin [/View [/XYZ H.V]/Dest (table.6) cvn /DEST pdfmark end 1409 2353 a Fz(Imp)s(ortan)m(t)g(header)f(\014les:)40 b(tracing/taping)p Black Black 191 2552 a SDict begin H.S end 191 2552 a 191 2552 a SDict begin 13.6 H.A end 191 2552 a 191 2552 a SDict begin [/View [/XYZ H.V]/Dest (subsection.8.4) cvn /DEST pdfmark end 191 2552 a 91 x FA(8.4)112 b(Compiling)39 b(and)f(Linking)h(C/C++)f(Programs)191 2869 y Fz(T)-8 b(o)37 b(compile)h(a)g(C/C++)e(program)h(or)g(single)h (mo)s(dule)e(using)h(ADOL-C)g(data)g(t)m(yp)s(es)g(and)g(routines)191 2982 y(one)32 b(has)f(to)i(ensure)e(that)h(all)g(necessary)g(header)g (\014les)f(according)i(to)2650 2982 y SDict begin H.S end 2650 2982 a Black Fz(Section)f(8.3)p Black 3085 2920 a SDict begin H.R end 3085 2920 a 3085 2982 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.8.3) cvn H.B /ANN pdfmark end 3085 2982 a 31 w Fz(are)g(included.)44 b(All)191 3095 y(mo)s(dules)27 b(in)m(v)m(olving)j Fq(active)e Fz(data)h(t)m(yp)s(es)f(as)g Fp(adouble)g Fz(ha)m(v)m(e)h(to)g(b)s(e)f (compiled)g(as)g(C++.)39 b(Mo)s(dules)28 b(that)191 3208 y(mak)m(e)k(use)e(of)h(a)g(previously)f(generated)i(tap)s(e)f(to)g(ev) -5 b(aluate)32 b(deriv)-5 b(ativ)m(es)32 b(can)f(either)g(b)s(e)f (programmed)191 3321 y(in)45 b(ANSI-C)f(\(while)i(a)m(v)m(oiding)h(all) f(C++)e(in)m(terfaces\))j(or)e(in)f(C++.)84 b(Dep)s(ending)45 b(on)g(the)g(c)m(hosen)191 3434 y(programming)31 b(language)i(the)f (header)f(\014les)h(pro)m(vide)f(the)h(righ)m(t)g(ADOL-C)g(protot)m(yp) s(es.)44 b(F)-8 b(or)33 b(linking)191 3547 y(the)e(resulting)f(ob)5 b(ject)31 b(co)s(des)g(the)f(library)g Fs(libadolc.*)e Fz(m)m(ust)i(b)s(e)g(used)f(\(see)2942 3547 y SDict begin H.S end 2942 3547 a Black Fz(Section)i(8.1)p Black 3376 3485 a SDict begin H.R end 3376 3485 a 3376 3547 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.8.1) cvn H.B /ANN pdfmark end 3376 3547 a Fz(\).)191 3721 y SDict begin H.S end 191 3721 a 191 3721 a SDict begin 13.6 H.A end 191 3721 a 191 3721 a SDict begin [/View [/XYZ H.V]/Dest (subsection.8.5) cvn /DEST pdfmark end 191 3721 a 143 x FA(8.5)112 b(Adding)38 b(Quadratures)h(as)f(Sp)s(ecial)h(F)-9 b(unctions)191 4090 y Fz(Supp)s(ose)29 b(an)h(in)m(tegral)1674 4311 y Fr(f)10 b Fz(\()p Fr(x)p Fz(\))25 b(=)2018 4169 y Fh(x)1972 4187 y Fk(Z)1979 4447 y FC(0)2078 4311 y Fr(g)s Fz(\()p Fr(t)p Fz(\))p Fr(dt)191 4599 y Fz(is)30 b(ev)-5 b(aluated)32 b(n)m(umerically)f(b)m(y)f(a)h(user-supplied)e(function)p Black Black 1410 4852 a Fp(double)h(myintegral\(double&)i(x\);)191 5104 y Fz(Similarly)-8 b(,)29 b(let)g(us)e(supp)s(ose)g(that)i(the)f (in)m(tegrand)g(itself)h(is)f(ev)-5 b(aluated)29 b(b)m(y)f(a)g (user-supplied)f(blo)s(c)m(k)h(of)g(C)191 5217 y(co)s(de)g Fp(integrand)p Fz(,)h(whic)m(h)f(computes)h(a)f(v)-5 b(ariable)29 b(with)f(the)h(\014xed)e(name)i Fp(val)e Fz(from)h(a)h(v)-5 b(ariable)29 b(with)f(the)191 5330 y(\014xed)i(name)g Fp(a)m(rg)p Fz(.)41 b(In)30 b(man)m(y)h(cases)g(of)f (in)m(terest,)i Fp(integrand)e Fz(will)h(simply)f(b)s(e)g(of)g(the)h (form)p Black Black eop end %%Page: 62 62 TeXDict begin 62 61 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.62) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fz(62)1861 b Ft(8)91 b(INST)-8 b(ALLING)30 b(AND)h(USING)g(ADOL-C)p Black Black Black Black 202 518 3578 4 v 201 1016 4 499 v 252 788 a Fd()p 1198 1016 V 1299 588 a Fc(!)100 b Fx(pro)n(vides)25 b(in)n(terfaces)h(to)g(the)h Fi(fo)n(rw)n(a)n(rd)f Fx(and)g Fi(reverse)h Fx(routines)f(as)g(basic) 1494 687 y(v)n(ersions)g(of)i(deriv)-5 b(ativ)n(e)26 b(ev)-5 b(aluation)27 b(\(see)2850 687 y SDict begin H.S end 2850 687 a Black Fx(Section)g(5)p Black 3182 631 a SDict begin H.R end 3182 631 a 3182 687 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (section.5) cvn H.B /ANN pdfmark end 3182 687 a Fx(\);)1326 787 y Fb(\017)126 b Fx(comprises)27 b(C++,)f(C,)i(and)g(F)-7 b(ortran-callable)25 b(v)n(ersions;)1326 887 y Fb(\017)126 b Fx(includes)28 b(the)g(header)f Fd()o Fx(;)1326 986 y Fb(\017)126 b Fx(is)28 b(included)g(b)n(y)f(the)h(header)f Fd()o Fx(.)p 3778 1016 4 499 v 202 1020 3578 4 v 201 1318 4 299 v 252 1190 a Fd()p 1198 1318 V 1299 1089 a Fc(!)100 b Fx(pro)n(vides)32 b(\\easy)g(to)i(use")f(driv)n(ers)f(for)h(solving)f(optimization)h (prob-)1494 1189 y(lems)28 b(and)f(nonlinear)g(equations)g(\(see)2748 1189 y SDict begin H.S end 2748 1189 a Black Fx(Section)h(3.1)p Black 3145 1132 a SDict begin H.R end 3145 1132 a 3145 1189 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.3.1) cvn H.B /ANN pdfmark end 3145 1189 a Fx(\);)1326 1289 y Fb(\017)126 b Fx(comprises)27 b(C)g(and)h(F)-7 b(ortran-callable)25 b(v)n(ersions.)p 3778 1318 4 299 v 202 1322 3578 4 v 201 1820 4 499 v 252 1541 a Fd()p 1198 1820 V 1299 1391 a Fc(!)100 b Fx(pro)n(vides)20 b(the)i(\\easy)e(to)h(use")g(sparse)f (driv)n(ers)g(to)h(exploit)g(the)h(sparsit)n(y)1494 1491 y(structure)27 b(of)h(Jacobians)e(\(see)2491 1491 y SDict begin H.S end 2491 1491 a Black Fx(Section)i(3.3)p Black 2888 1434 a SDict begin H.R end 2888 1434 a 2888 1491 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.3.3) cvn H.B /ANN pdfmark end 2888 1491 a Fx(\);)1299 1591 y Fc(!)100 b Fx(pro)n(vides)24 b(in)n(terfaces)g(to)h(C++)o(-callable)f(v)n (ersions)g(of)h Fi(fo)n(rw)n(a)n(rd)f Fx(and)h Fi(re-)1494 1690 y(verse)j Fx(routines)f(propagating)f(bit)i(patterns)f(\(see)3098 1690 y SDict begin H.S end 3098 1690 a Black Fx(Section)h(5.3)p Black 3495 1634 a SDict begin H.R end 3495 1634 a 3495 1690 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.5.3) cvn H.B /ANN pdfmark end 3495 1690 a Fx(\);)1326 1790 y Fb(\017)126 b Fx(is)28 b(included)g(b)n(y)f(the)h(header)f Fd()p Fx(.)p 3778 1820 4 499 v 202 1823 3578 4 v 201 2022 4 200 v 252 1893 a Fd()p 1198 2022 V 1299 1893 a Fc(!)100 b Fx(pro)n(vides)23 b(in)n(terfaces)g(to)h(the)g(underlying)g (C-callable)f(v)n(ersions)f(of)i Fi(fo)n(r-)1494 1993 y(w)n(a)n(rd)j Fx(and)h Fi(reverse)g Fx(routines)f(propagating)e(bit)j (patterns.)p 3778 2022 V 202 2026 3578 4 v 201 2424 4 399 v 252 2204 a Fd()p 1198 2424 V 1299 2095 a Fc(!)100 b Fx(pro)n(vides)31 b(\\easy)h(to)g(use")g(driv)n(ers)f(for)h(n)n(umerical)g(solution)g(of) g(ordi-)1494 2195 y(nary)27 b(di\013eren)n(tial)g(equations)g(\(see) 2640 2195 y SDict begin H.S end 2640 2195 a Black Fx(Section)g(3.2)p Black 3036 2138 a SDict begin H.R end 3036 2138 a 3036 2195 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.3.2) cvn H.B /ANN pdfmark end 3036 2195 a Fx(\);)1326 2295 y Fb(\017)126 b Fx(comprises)27 b(C++,)f(C,)i(and)g(F)-7 b(ortran-callable)25 b(v)n(ersions;)1326 2394 y Fb(\017)126 b Fx(includes)28 b(the)g(header)f Fd()o Fx(.)p 3778 2424 4 399 v 202 2428 3578 4 v 201 2826 4 399 v 252 2597 a Fd()p 1198 2826 V 1299 2497 a Fc(!)100 b Fx(pro)n(vides)34 b(\\easy)g(to)h(use")f(driv)n(ers)g(for)h(ev)-5 b(aluation)34 b(of)h(higher)g(order)1494 2597 y(deriv)-5 b(ativ)n(e)30 b(tensors)g(\(see)2334 2597 y SDict begin H.S end 2334 2597 a Black Fx(Section)e(3.4)p Black 2731 2540 a SDict begin H.R end 2731 2540 a 2731 2597 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.3.4) cvn H.B /ANN pdfmark end 2731 2597 a Fx(\))j(and)g(in)n(v)n(erse/implicit)f(func-)1494 2697 y(tion)e(di\013eren)n(tiation)f(\(see)2367 2697 y SDict begin H.S end 2367 2697 a Black Fx(Section)g(3.5)p Black 2763 2640 a SDict begin H.R end 2763 2640 a 2763 2697 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.3.5) cvn H.B /ANN pdfmark end 2763 2697 a Fx(\);)1326 2796 y Fb(\017)126 b Fx(comprises)27 b(C++)f(and)i(C-callable)e(v)n(ersions.)p 3778 2826 4 399 v 202 2829 3578 4 v 201 3029 4 200 v 252 2950 a Fd()p 1198 3029 V 1299 2899 a Fc(!)100 b Fx(pro)n(vides)31 b(C++)h(and)h(C)f(functions)h(for)f (allo)r(cation)g(of)h(v)n(ectors,)f(ma-)1494 2999 y(trices)27 b(and)h(three)f(dimensional)g(arra)n(ys)e(of)j Fi(double)p Fx(s.)p 3778 3029 V 202 3032 3578 4 v Black 855 3186 a Fz(T)-8 b(able)31 b(7:)1216 3186 y SDict begin H.S end 1216 3186 a 1216 3186 a SDict begin H.R end 1216 3186 a 1216 3186 a SDict begin [/View [/XYZ H.V]/Dest (table.7) cvn /DEST pdfmark end 1216 3186 a Fz(Imp)s(ortan)m(t)f(header) g(\014les:)41 b(ev)-5 b(aluation)32 b(of)e(deriv)-5 b(ativ)m(es)p Black Black Black Black 1475 3443 a Fn(f)31 b Fp(val)f(=)g(exp)m (ression\(a)m(rg\))i Fn(g)46 b Fz(.)191 3657 y(In)24 b(general,)j(the)e(\014nal)g(assignmen)m(t)g(to)h Fp(val)e Fz(ma)m(y)h(b)s(e)g(preceded)f(b)m(y)h(sev)m(eral)h(in)m(termediate)g (calculations,)191 3769 y(p)s(ossibly)k(in)m(v)m(olving)i(lo)s(cal)f (activ)m(e)i(v)-5 b(ariables)31 b(of)g(t)m(yp)s(e)f Fp(adouble)p Fz(,)h(but)f(no)g(external)i(or)e(static)i(v)-5 b(ariables)191 3882 y(of)29 b(that)h(t)m(yp)s(e.)41 b(Ho)m(w)m(ev)m(er,)31 b Fp(integrand)e Fz(ma)m(y)h(in)m(v)m(olv)m(e)i(lo)s(cal)e(or)f(global) i(v)-5 b(ariables)30 b(of)f(t)m(yp)s(e)g Fp(double)h Fz(or)f Fp(int)p Fz(,)191 3995 y(pro)m(vided)36 b(they)g(do)h(not)f (dep)s(end)f(on)h(the)g(v)-5 b(alue)37 b(of)g Fp(a)m(rg)p Fz(.)59 b(The)35 b(v)-5 b(ariables)37 b Fp(a)m(rg)g Fz(and)f Fp(val)g Fz(are)g(declared)191 4108 y(automatically;)d(and)d(as)g Fp(integrand)g Fz(is)g(a)h(blo)s(c)m(k)g(rather)f(than)g(a)g(function,) g Fp(integrand)g Fz(should)f(ha)m(v)m(e)j(no)191 4221 y(header)e(line.)332 4384 y(No)m(w)d(the)g(function)f Fp(myintegral)h Fz(can)f(b)s(e)g(o)m(v)m(erloaded)j(for)d Fp(adouble)h Fz(argumen)m(ts)f(and)g(th)m(us)g(included)191 4497 y(in)k(the)h(library)f(of)g(elemen)m(tary)i(functions)e(b)m(y)g (the)h(follo)m(wing)h(mo)s(di\014cations:)191 4583 y SDict begin H.S end 191 4583 a 191 4583 a SDict begin 13.6 H.A end 191 4583 a 191 4583 a SDict begin [/View [/XYZ H.V]/Dest (Item.6) cvn /DEST pdfmark end 191 4583 a Black 302 4711 a Fz(1.)p Black 46 w(A)m(t)g(the)e(end)g(of)g(the)h (\014le)f Fs()p Fz(,)d(include)k(the)f(full)g(co)s(de)h (de\014ning)418 4824 y Fp(double)g(myintegral\(double&)g(x\))p Fz(,)g(and)f(add)f(the)i(line)p Black Black 1418 5020 a Fp(extend)p 1672 5020 28 4 v 34 w(quad\(myintegral,)f(integrand\);) 418 5217 y Fz(This)35 b(macro)h(is)f(extended)h(to)g(the)g (de\014nition)f(of)g Fp(adouble)h(myintegral\(adouble&)g(a)m(rg\))p Fz(.)57 b(Then)418 5330 y(remak)m(e)32 b(the)e(library)g Fs(libadolc.*)e Fz(\(see)1874 5330 y SDict begin H.S end 1874 5330 a Black Fz(Section)j(8.1)p Black 2308 5268 a SDict begin H.R end 2308 5268 a 2308 5330 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.8.1) cvn H.B /ANN pdfmark end 2308 5330 a Fz(\).)p Black Black eop end %%Page: 63 63 TeXDict begin 63 62 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.63) cvn /DEST pdfmark end 183 199 a Black 3700 307 a Fz(63)p Black 191 515 a SDict begin H.S end 191 515 a 191 515 a SDict begin 13.6 H.A end 191 515 a 191 515 a SDict begin [/View [/XYZ H.V]/Dest (Item.7) cvn /DEST pdfmark end 191 515 a Black 302 606 a Fz(2.)p Black 46 w(In)34 b(the)h(de\014nition)f(of)h(the)g(class)h Fp(ADOLC)p 1898 606 28 4 v 32 w(DLL)p 2094 606 V 33 w(EXPORT)e(adouble) h Fz(in)f Fs()p Fz(,)418 719 y(add)c(the)h(statemen)m (t)p Black Black 1393 941 a Fp(friend)f(adouble)h (myintegral\(adouble&\))p Fz(.)191 1176 y(In)38 b(the)h(\014rst)f(mo)s (di\014cation,)j Fp(myintegral)e Fz(represen)m(ts)g(the)f(name)h(of)g (the)g Fp(double)g Fz(function,)i(whereas)191 1289 y Fp(integrand)30 b Fz(represen)m(ts)h(the)f(actual)i(blo)s(c)m(k)f(of)f (C)g(co)s(de.)332 1452 y(F)-8 b(or)28 b(example,)h(in)e(case)h(of)g (the)f(in)m(v)m(erse)h(h)m(yp)s(erb)s(olic)f(cosine,)i(w)m(e)e(ha)m(v)m (e)i Fp(myintegral)e Fz(=)g Fp(acosh)p Fz(.)40 b(Then)191 1565 y Fp(integrand)30 b Fz(can)h(b)s(e)f(written)g(as)h Fn(f)g Fp(val)e(=)h(sqrt\(a)m(rg*a)m(rg-1\);)k Fn(g)c Fz(so)h(that)g(the)g(line)p Black Black 1185 1800 a Fp(extend)p 1439 1800 V 34 w(quad\(acosh,val)f(=)g(sqrt\(a)m(rg*a)m(rg-1\)\);)191 2035 y Fz(can)e(b)s(e)f(added)g(to)h(the)g(\014le)f Fs()p Fz(.)36 b(A)28 b(mathematically)i(equiv)-5 b(alen)m(t)29 b(but)e(longer)h(represen-)191 2148 y(tation)k(of)e Fp(integrand)h Fz(is)p Black Black Black Black 867 2384 a Fn(f)f Fp(adouble)h(temp)g (=)f(a)m(rg;)1265 2496 y(temp)h(=)f(temp*temp;)1265 2609 y(val)g(=)g(sqrt\(temp-1\);)i Fn(g)191 2845 y Fz(The)24 b(co)s(de)h(blo)s(c)m(k)g Fp(integrand)f Fz(ma)m(y)h(call)h(on)e(an)m (y)h(elemen)m(tary)h(function)e(that)h(has)f(already)h(b)s(een)f (de\014ned)191 2957 y(in)30 b(\014le)g Fs()p Fz(,)d(so)k(that)g(one)g(ma)m(y)g(also)g(in)m(tro)s(duce)f(iterated)i (in)m(tegrals.)191 3114 y SDict begin H.S end 191 3114 a 191 3114 a SDict begin 13.6 H.A end 191 3114 a 191 3114 a SDict begin [/View [/XYZ H.V]/Dest (section.9) cvn /DEST pdfmark end 191 3114 a 179 x FD(9)135 b(Example)46 b(Co)t(des)191 3546 y Fz(The)29 b(follo)m(wing)i(listings)g(are)f(all)g(simpli\014ed)f (v)m(ersions)h(of)g(co)s(des)g(that)g(are)g(con)m(tained)h(in)e(the)h (example)191 3659 y(sub)s(directory)23 b Fs(/ADOL-C/exam)o (ple)o(s)18 b Fz(of)25 b(ADOL-C.)g(In)e(particular,)j(w)m(e)f(ha)m(v)m (e)g(left)g(out)191 3772 y(timings,)31 b(whic)m(h)f(are)h(included)e (in)i(the)f(complete)i(co)s(des.)191 3916 y SDict begin H.S end 191 3916 a 191 3916 a SDict begin 13.6 H.A end 191 3916 a 191 3916 a SDict begin [/View [/XYZ H.V]/Dest (subsection.9.1) cvn /DEST pdfmark end 191 3916 a 149 x FA(9.1)112 b(Sp)s(eelp)s(enning's)40 b(Example)f(\()p Fa(speelpenning.cpp)p FA(\))191 4286 y Fz(The)30 b(\014rst)f(example)j(ev)-5 b(aluates)31 b(the)g(gradien)m(t)g(and)f(the)h(Hessian)f(of)h(the)g (function)1593 4566 y Fr(y)53 b Fz(=)d Fr(f)10 b Fz(\()p Fr(x)p Fz(\))51 b(=)2161 4453 y Fh(n)p Fl(\000)p FC(1)2169 4480 y Fk(Y)2170 4675 y Fh(i)p FC(=0)2309 4566 y Fr(x)2361 4580 y Fh(i)191 4845 y Fz(using)30 b(the)g(appropriate)h(driv)m(ers)f Fp(gradient)g Fz(and)g Fp(hessian)p Fz(.)p Black Black 191 5104 a Fs(#include)45 b()712 b(//)47 b(use)g(of)g(active)f(doubles)g(and)h(taping)191 5217 y(#include)e()328 b(//)47 b(use)g(of)g("Easy)f (to)i(Use")e(drivers)1861 5330 y(//)i(gradient\(.\))c(and)j (hessian\(.\))p Black Black eop end %%Page: 64 64 TeXDict begin 64 63 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.64) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fz(64)2563 b Ft(9)91 b(EXAMPLE)31 b(CODES)p Black 191 606 a Fs(#include)45 b()760 b(//)47 b(use)g(of)g (taping)191 719 y(...)191 832 y(void)g(main\(\))f({)191 945 y(int)h(n,i,j;)191 1058 y(size_t)f(tape_stats[STAT_SIZE];)191 1171 y(cout)h(<<)g("SPEELPENNINGS)d(PRODUCT)h(\(ADOL-C)h(Documented)f (Example\))h(\\n";)191 1284 y(cout)h(<<)g("number)f(of)h(independent)d (variables)i(=)h(?)95 b(\\n";)191 1396 y(cin)47 b(>>)g(n;)191 1509 y(double*)f(xp)h(=)g(new)g(double[n];)191 1622 y(double)94 b(yp)47 b(=)g(0.0;)191 1735 y(adouble*)e(x)j(=)f(new)g(adouble[n];)191 1848 y(adouble)93 b(y)48 b(=)f(1;)191 1961 y(for\(i=0;i>=)f(yp;)286 2638 y(delete[])f(x;)191 2751 y(trace_off\(\);)191 2864 y(tapestats\(1,tape_stats\);)518 b(//)48 b(reading)d(of)j(tape)e(statistics)191 2977 y(cout<<"maxlive)e ("<j\))1096 b(//)48 b(lower)e(half)h(of)g(hessian)477 4671 y(errh)g(+=)g (fabs\(H[i][j]-g[i]/xp[j]\);)41 b(})47 b(})191 4784 y(cout)g(<<)g (yp-1/\(1.0+n\))d(<<)j(")h(error)e(in)h(function)f(\\n";)191 4897 y(cout)h(<<)g(errg)f(<<")h(error)g(in)g(gradient)e(\\n";)191 5010 y(cout)i(<<)g(errh)f(<<")h(consistency)e(check)h(\\n";)191 5122 y(})1622 b(//)48 b(end)e(main)p Black Black eop end %%Page: 65 65 TeXDict begin 65 64 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.65) cvn /DEST pdfmark end 183 199 a Black 191 307 a Ft(9.2)92 b(P)m(o)m(w)m(er)32 b(Example)e(\()p Fs(powexam.cpp)p Ft(\))2055 b Fz(65)p Black 191 515 a SDict begin H.S end 191 515 a 191 515 a SDict begin 13.6 H.A end 191 515 a 191 515 a SDict begin [/View [/XYZ H.V]/Dest (subsection.9.2) cvn /DEST pdfmark end 191 515 a 91 x FA(9.2)112 b(P)m(o)m(w)m(er)37 b(Example)h(\()p Fa(powexam.cpp)p FA(\))191 827 y Fz(The)24 b(second)g(example)h(function)f(ev)-5 b(aluates)26 b(the)e Fr(n)p Fz(-th)g(p)s(o)m(w)m(er)h(of)f(a)h(real)g(v)-5 b(ariable)25 b Fr(x)f Fz(in)g(log)3316 849 y FC(2)3371 827 y Fr(n)g Fz(m)m(ultipli-)191 940 y(cations)31 b(b)m(y)g(recursiv)m (e)f(halving)h(of)f(the)h(exp)s(onen)m(t.)41 b(Since)30 b(there)g(is)h(only)f(one)h(indep)s(enden)m(t)e(v)-5 b(ariable,)191 1053 y(the)36 b(scalar)i(deriv)-5 b(ativ)m(e)37 b(can)g(b)s(e)f(computed)g(b)m(y)g(using)g(b)s(oth)f Fp(fo)m(rw)m(a)m(rd)j Fz(and)e Fp(reverse)p Fz(,)j(and)c(the)i(results) 191 1166 y(are)31 b(subsequen)m(tly)f(compared.)p Black Black 191 1387 a Fs(#include)45 b()808 b(//)47 b(use)g(of)g(ALL)g(ADOL-C)f(interfaces)191 1613 y(adouble)g(power\(adouble)e(x,)j(int)g(n\))g({)191 1726 y(adouble)f(z=1;)191 1839 y(if)h(\(n>0\))f({)1193 b(//)48 b(recursion)d(and)i(branches)286 1952 y(int)g(nh)g(=n/2;)1001 b(//)48 b(that)e(do)h(not)g(depend)f(on)286 2065 y(z)i(=)f (power\(x,nh\);)808 b(//)48 b(adoubles)d(are)i(fine)g(!!!!)286 2178 y(z)h(*=)f(z;)286 2291 y(if)h(\(2*nh)e(!=)h(n\))382 2404 y(z)g(*=)g(x;)286 2517 y(return)f(z;)i(})1049 b(//)48 b(end)e(if)191 2629 y(else)h({)286 2742 y(if)h(\(n==0\))1143 b(//)48 b(the)e(local)h(adouble)f(z)h(dies)382 2855 y(return)f(z;)1049 b(//)48 b(as)f(it)g(goes)g(out)f(of)i(scope.)286 2968 y(else)382 3081 y(return)e(1/power\(x,-n\);)e(})381 b(//)48 b(end)e(else)191 3194 y(})h(//)h(end)e(power)191 3415 y Fz(The)25 b(function)h Fp(p)s(o)m(w)m(er)h Fz(ab)s(o)m(v)m(e)g(w)m (as)f(obtained)g(from)f(the)h(original)h(undi\013eren)m(tiated)f(v)m (ersion)h(b)m(y)e(simply)191 3528 y(c)m(hanging)30 b(the)g(t)m(yp)s(e)f (of)h(all)g Fp(double)p Fz(s)f(including)g(the)h(return)e(v)-5 b(ariable)30 b(to)g Fp(adouble)p Fz(s.)41 b(The)28 b(new)h(v)m(ersion) 191 3641 y(can)i(no)m(w)f(b)s(e)g(called)h(from)f(within)g(an)m(y)h (activ)m(e)h(section,)g(as)f(in)f(the)g(follo)m(wing)i(main)f(program.) p Black Black 191 3862 a Fs(#include)45 b(...)1097 b(//)48 b(as)f(above)191 3975 y(int)g(main\(\))f({)191 4088 y(int)h(i,n,tag=1;) 191 4201 y(cout)g(<<"COMPUTATION)c(OF)48 b(N-TH)e(POWER)h(\(ADOL-C)e (Documented)g(Example\)\\n\\n";)191 4314 y(cout<<"monomial)f(degree=?)h (\\n";)285 b(//)48 b(input)e(the)h(desired)f(degree)191 4427 y(cin)h(>>)g(n;)1861 4540 y(//)h(allocations)c(and)j (initializations)191 4653 y(double*)f(Y[1];)191 4765 y(*Y)h(=)h(new)e(double[n+2];)191 4878 y(double*)g(X[1];)1048 b(//)48 b(allocate)d(passive)h(variables)f(with)191 4991 y(*X)i(=)h(new)e(double[n+4];)665 b(//)48 b(extra)e(dimension)f(for)i (derivatives)191 5104 y(X[0][0])f(=)h(0.5;)1001 b(//)48 b(function)d(value)h(=)i(0.)f(coefficient)191 5217 y(X[0][1])f(=)h (1.0;)1001 b(//)48 b(first)e(derivative)f(=)i(1.)h(coefficient)191 5330 y(for\(i=0;i>=)g(Y[0][0];)1000 b(//)48 b(only)e(one)h(dependent)e (adouble)191 1622 y(trace_off\(\);)1094 b(//)48 b(no)f(global)f (adouble)g(has)h(died)1861 1735 y(//)h(end)e(of)i(active)e(section)191 1848 y(double)g(u[1];)1096 b(//)48 b(weighting)d(vector)191 1961 y(u[0]=1;)1334 b(//)48 b(for)e(reverse)g(call)191 2074 y(for\(i=0;i)712 b(//)47 b(use)g(of)g(active)f(doubles)g(and)h(taping)p Black Black eop end %%Page: 67 67 TeXDict begin 67 66 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.67) cvn /DEST pdfmark end 183 199 a Black 191 307 a Ft(9.3)92 b(Determinan)m(t)32 b(Example)e(\()p Fs(detexam.cpp)p Ft(\))1795 b Fz(67)p Black 191 606 a Fs(#include)45 b ()568 b(//)47 b(use)g(of)g(basic)f(forward/reverse) 1861 719 y(//)i(interfaces)d(of)i(ADOL-C)191 832 y(adouble**)e(A;)1097 b(//)48 b(A)f(is)g(an)g(n)h(x)f(n)h(matrix)191 945 y(int)f(i,n;)1287 b(//)48 b(k)f(<=)g(n)h(is)f(the)g(order)191 1058 y(adouble)f(det\(int)g (k,)h(int)g(m\))g({)381 b(//)48 b(of)f(the)g(sub-matrix)191 1171 y(if)g(\(m)g(==)g(0\))h(return)e(1.0)h(;)524 b(//)48 b(its)e(column)h(indices)191 1284 y(else)g({)1383 b(//)48 b(are)e(encoded)g(in)h(m)286 1396 y(adouble*)f(pt)h(=)h(A[k-1];)286 1509 y(adouble)e(t)i(=)f(zero;)762 b(//)48 b(zero)e(is)h(predefined)286 1622 y(int)g(s,)g(p)h(=1;)286 1735 y(if)g(\(k\0452\))e(s)h(=)h(1;)f (else)g(s)g(=)h(-1;)286 1848 y(for\(i=0;i=)i(p\))f({)477 2187 y(if)g(\(m)h(==)f(p\))g({)573 2300 y(if)g(\(s>0\))f(t)i(+=)f(*pt;) g(else)f(t)i(-=)f(*pt;)f(})477 2413 y(else)h({)573 2526 y(if)g(\(s>0\))668 2638 y(t)h(+=)f(*pt*det\(k-1,m-p\);)138 b(//)48 b(recursive)d(call)h(to)i(det)573 2751 y(else)668 2864 y(t)g(-=)f(*pt*det\(k-1,m-p\);)c(})k(//)h(recursive)d(call)h(to)i (det)477 2977 y(s)g(=)f(-s;})382 3090 y(++pt;)382 3203 y(p)g(=)h(p1;})286 3316 y(return)e(t;)i(})191 3429 y(})1622 b(//)48 b(end)e(det)191 3702 y Fz(As)28 b(one)f(can)h(see,)h(the)f(o)m (v)m(erloading)i(mec)m(hanism)e(has)f(no)h(problem)f(with)g(p)s(oin)m (ters)h(and)f(lo)s(oks)h(exactly)191 3815 y(the)f(same)h(as)f(the)g (original)h(undi\013eren)m(tiated)g(function)e(except)i(for)f(the)g(c)m (hange)h(of)g(t)m(yp)s(e)f(from)f Fp(double)191 3928 y Fz(to)g Fp(adouble)p Fz(.)39 b(If)25 b(the)g(t)m(yp)s(e)g(of)h(the)f (temp)s(orary)g Fp(t)g Fz(or)g(the)g(p)s(oin)m(ter)h Fp(pt)f Fz(had)f(not)i(b)s(een)e(c)m(hanged,)j(a)f(compile)191 4041 y(time)31 b(error)f(w)m(ould)g(ha)m(v)m(e)i(resulted.)40 b(No)m(w)31 b(consider)g(a)f(corresp)s(onding)g(calling)i(program.)p Black Black 191 4314 a Fs(#include)45 b(...)1097 b(//)48 b(as)f(above)191 4427 y(int)g(main\(\))f({)191 4540 y(int)h(i,j,)f (m=1,tag=1,keep=1;)191 4653 y(cout)h(<<)g("COMPUTATION)d(OF)j (DETERMINANTS)e(\(ADOL-C)h(Documented)f(Example\)\\n\\n";)191 4765 y(cout)i(<<)g("order)f(of)h(matrix)f(=)i(?)f(\\n";)94 b(//)48 b(select)e(matrix)g(size)191 4878 y(cin)h(>>)g(n;)191 4991 y(A)g(=)h(new)f(adouble*[n];)191 5104 y(trace_on\(tag,keep\);)758 b(//)48 b(tag=1=keep)286 5217 y(double)e(detout=0.0,)f(diag)i(=)g(1.0;) 142 b(//)48 b(here)e(keep)h(the)g(intermediates)d(for)286 5330 y(for\(i=0;i>=)i(detout;)523 b(//)48 b(actual)e(function)f(call)286 1509 y(printf\("\\n)g(\045f)j(-) f(\045f)g(=)h(\045f)95 b(\(should)45 b(be)j(0\)\\n",detout,diag,detou)o (t-d)o(iag\))o(;)191 1622 y(trace_off\(\);)191 1735 y(double)e(u[1];) 191 1848 y(u[0])h(=)g(1.0;)191 1961 y(double*)f(B)h(=)h(new)f (double[n*n];)191 2074 y(reverse\(tag,1,n*n,1,u,B\))o(;)191 2187 y(cout)g(<<")f(\\n)i(first)e(base?)g(:)i(";)191 2300 y(for)f(\(i=0;i)855 b(//)47 b(use)g(of)g(active)f(doubles)g(and)h(taping)191 4427 y(#include)e()328 b(//)47 b(use)g(of)g("Easy)g(To)g(use")f(ODE)h(drivers)191 4540 y(#include)e()855 b(//)47 b(use)g(of)g(ADOL-C)f (allocation)f(utilities)191 4765 y(void)i(tracerhs\(short)c(int)k(tag,) g(double*)f(py,)h(double*)f(pyprime\))f({)191 4878 y(adouble)h(y[3];) 1192 b(//)47 b(this)f(time)h(we)g(left)g(the)g(parameters)191 4991 y(adouble)f(yprime[3];)952 b(//)47 b(passive)f(and)g(use)h(the)g (vector)f(types)191 5104 y(trace_on\(tag\);)191 5217 y(for)h(\(int)f(i=0;)h(i<3;)g(i++\))430 5330 y(y[i])f(<<=)h(py[i];)858 b(//)47 b(initialize)e(and)i(mark)f(independents)p Black Black eop end %%Page: 69 69 TeXDict begin 69 68 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.69) cvn /DEST pdfmark end 183 199 a Black 191 307 a Ft(9.4)92 b(Ordinary)29 b(Di\013eren)m(tial)k(Equation)d(Example)h (\()p Fs(odexam.cpp)p Ft(\))1116 b Fz(69)p Black 191 606 a Fs(yprime[0])45 b(=)j(-sin\(y[2]\))d(+)i(1e8*y[2]*\(1-1/y[0]\);) 191 719 y(yprime[1])e(=)j(-10*y[0])d(+)j(3e7*y[2]*\(1-y[1]\);)191 832 y(yprime[2])d(=)j(-yprime[0])d(-)i(yprime[1];)191 945 y(yprime)f(>>=)h(pyprime;)905 b(//)47 b(mark)f(and)h(pass)g (dependents)191 1058 y(trace_off\(tag\);)191 1171 y(})1766 b(//)47 b(end)g(tracerhs)191 1387 y Fz(The)33 b(Jacobian)i(of)f(the)h (righ)m(t-hand)f(side)g(has)f(large)i(negativ)m(e)i(eigen)m(v)-5 b(alues,)37 b(whic)m(h)c(mak)m(e)j(the)e(ODE)191 1500 y(quite)f(sti\013.)48 b(W)-8 b(e)34 b(ha)m(v)m(e)g(added)d(some)i(n)m (umerically)h(b)s(enign)e(transcenden)m(tals)h(to)g(mak)m(e)h(the)f (di\013eren-)191 1613 y(tiation)k(more)f(in)m(teresting.)57 b(The)35 b(follo)m(wing)i(main)f(program)f(uses)g Fp(fo)m(ro)s(de)i Fz(to)f(calculate)i(the)d(T)-8 b(a)m(ylor)191 1726 y(series)34 b(de\014ned)e(b)m(y)i(the)g(ODE)g(at)g(the)g(giv)m(en)h(p)s(oin)m(t)e Fr(y)2080 1740 y FC(0)2153 1726 y Fz(and)g Fp(reverse)i Fz(as)f(w)m(ell)h(as)e Fp(acco)s(de)i Fz(to)f(compute)191 1839 y(the)d(Jacobians)f(of)h(the)g(co)s(e\016cien)m(t)h(v)m(ectors)g (with)e(resp)s(ect)g(to)h Fr(x)2438 1853 y FC(0)2478 1839 y Fz(.)p Black Black 191 2056 a Fs(#include)45 b(.......)905 b(//)48 b(as)f(above)191 2169 y(int)g(main\(\))f({)191 2281 y(int)h(i,j,deg;)191 2394 y(int)g(n=3;)191 2507 y(double)f(py[3];)191 2620 y(double)g(pyp[3];)191 2733 y(cout)h(<<)g("MODIFIED)e(ROBERTSON)g(TEST)i(PROBLEM)f(\(ADOL-C)g (Documented)f(Example\)\\n";)191 2846 y(cout)i(<<)g("degree)f(of)h (Taylor)f(series)g(=?\\n";)191 2959 y(cin)h(>>)g(deg;)191 3072 y(double)f(**X;)191 3185 y(X=\(double**\)malloc\(n*siz)o(eof\()o (dou)o(ble*)o(\)\);)191 3298 y(for\(i=0;i // use of active doubles #include // use of basic forward/reverse // interfaces of ADOL-C #include // use of taping #include using namespace std; /****************************************************************************/ /* ADOUBLE ROUTINE */ int n; adouble **A; // A is an n x n matrix adouble zero = 0; adouble det(int k, int m) // k <= n is the order of the submatrix { if (m == 0) // its column indices return 1.0; else // are encoded in m { adouble *pt = A[k-1]; adouble t = zero; int p = 1; int s; if (k%2) s = 1; else s = -1; for(int i=0; i= p) { if (m == p) { if (s>0) t += *pt; else t -= *pt; } else { if (s>0) t += *pt*det(k-1, m-p); // recursive call to det else t -= *pt*det(k-1, m-p); // recursive call to det } s = -s; } ++pt; p = p1; } return t; } } /****************************************************************************/ /* MAIN PROGRAM */ int main() { int i,j, m = 1; int tag = 1; int keep = 1; cout << "COMPUTATION OF DETERMINANTS (ADOL-C Documented Example)\n\n"; cout << "order of matrix = ? \n"; // select matrix size cin >> n; A = new adouble*[n]; adouble ad; trace_on(tag,keep); // tag=1=keep double detout = 0.0, diag = 1.0;// here keep the intermediates for for (i=0; i>= detout; printf("\n %f - %f = %f (should be 0)\n",detout,diag,detout-diag); trace_off(); double u[1]; u[0] = 1.0; double* B = new double[n*n]; reverse(tag,1,n*n,0,u,B); // call reverse to calculate the gradient cout << " \n first base? : "; for (i=0; i /* use of ALL ADOL-C interfaces */ #include using namespace std; /****************************************************************************/ /* ADOUBLE ROUTINE */ adouble power(adouble x, int n) { adouble z = 1; if (n>0) /* Recursion and branches */ { int nh = n/2; /* that do not depend on */ z = power(x,nh); /* adoubles are fine !!!! */ z *= z; if (2*nh != n) z *= x; return z; } /* end if */ else { if (n==0) /* The local adouble z dies */ return z; /* as it goes out of scope. */ else return 1/power(x,-n); } /* end else */ } /* end power */ /****************************************************************************/ /* MAIN PROGRAM */ int main() { int i,tag = 1; int n; cout << "COMPUTATION OF N-TH POWER (ADOL-C Documented Example)\n\n"; cout << "monomial degree=? \n"; /* input the desired degree */ cin >> n; /* allocations and initializations */ double** X; double** Y; X = myalloc2(1,n+4); Y = myalloc2(1,n+4); X[0][0] = 0.5; /* function value = 0. coefficient */ X[0][1] = 1.0; /* first derivative = 1. coefficient */ for(i=0; i>= Y[0][0]; /* only one dependent adouble */ trace_off(); /* no global adouble has died */ /* end of active section */ double u[1]; /* weighting vector */ u[0]=1; /* for reverse call */ for(i=0; i // use of active doubles #include // use of "Easy to Use" drivers // gradient(.) and hessian(.) #include // use of taping #include using namespace std; #include #include /****************************************************************************/ /* MAIN PROGRAM */ int main() { int n,i,j; size_t tape_stats[STAT_SIZE]; cout << "SPEELPENNINGS PRODUCT (ADOL-C Documented Example)\n\n"; cout << "number of independent variables = ? \n"; cin >> n; double *xp = new double[n]; double yp = 0.0; adouble *x = new adouble[n]; adouble y = 1; for(i=0; i>= yp; delete[] x; trace_off(1); tapestats(1,tape_stats); // reading of tape statistics cout<<"maxlive "<j) // lower half of hessian errh += fabs(H[i][j]-g[i]/xp[j]); } // end for } // end for cout << yp-1/(1.0+n) << " error in function \n"; cout << errg <<" error in gradient \n"; cout << errh <<" consistency check \n"; return 0; } // end main ADOL-C-2.4.1/ADOL-C/examples/additional_examples/0000755000076600007660000000000012120272604017612 5ustar coincoinADOL-C-2.4.1/ADOL-C/examples/additional_examples/lufact/0000755000076600007660000000000012120272604021070 5ustar coincoinADOL-C-2.4.1/ADOL-C/examples/additional_examples/lufact/LUdet.cpp0000644000076600007660000001235411732376410022626 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: LUdet.cpp Revision: $Id: LUdet.cpp 299 2012-03-21 16:08:40Z kulshres $ Contents: example for * Computation of the determinant of a matrix by LU-decomposition of the system matrix without pivoting * application of tapedoc to observe taping of the new op_codes for the elementary operations y += x1 * x2; y -= x1 * x2; Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ /****************************************************************************/ /* INCLUDES */ #include "LU.h" /****************************************************************************/ /* MAIN PROGRAM */ int main() { /*------------------------------------------------------------------------*/ /* variables */ const int tag = 1; // tape tag const int size = 5; // system size const int indep = size*size; // # of indeps const int depen = 1; // # of deps double A[size][size], a1[size], a2[size], det; // passive variables adouble **AA, *AAp, Adet; // active variables double *args = myalloc1(indep); // arguments double *grad = myalloc1(indep); // the gradient double **hess = myalloc2(indep,indep); // the hessian int i,j; /*------------------------------------------------------------------------*/ /* Info */ fprintf(stdout,"DETERMINANT by LU-DECOMPOSITION (ADOL-C Example)\n\n"); /*------------------------------------------------------------------------*/ /* Allcoation und initialization of the system matrix */ AA = new adouble*[size]; AAp = new adouble[size*size]; for (i=0; i>= det; trace_off(); fprintf(stdout," Determinant (original): %16.4E\n",det); /*------------------------------------------------------------------------*/ /* Recomputation of determinant */ function(tag,depen,indep,args,&det); fprintf(stdout," Determinant (from tape): %16.4E\n",det); /*------------------------------------------------------------------------*/ /* Computation of gradient */ gradient(tag,indep,args,grad); fprintf(stdout," Gradient:\n"); for (i=0; i=0; i--) { for (j=i+1; j // use of ALL ADOL-C interfaces /****************************************************************************/ /* Simple LU-factorization according to Crout's algorithm without pivoting */ void LUfact(int n, adouble **A); /****************************************************************************/ /* Solution of A*x=b by forward and backward substitution */ void LUsolve(int n, adouble **A, adouble *bx); /****************************************************************************/ /* END OF FILE */ #endif ADOL-C-2.4.1/ADOL-C/examples/additional_examples/lufact/Makefile.am0000644000076600007660000000213312032277512023130 0ustar coincoin############################################################################## ## Makefile.am -- Process this file with automake to produce Makefile.in ## Revision: $Id: Makefile.am 354 2012-10-01 11:32:26Z kulshres $ ## ## Copyright (C) Andrea Walther, Andreas Griewank, Andreas Kowarz, ## Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_srcdir)/ADOL-C/include LDADD = -ladolc AM_LDFLAGS = -L$(top_builddir)/ADOL-C/src EXTRA_DIST = LU.h MAINTAINERCLEANFILES = Makefile.in tape.tex *~ *.orig if ADDEXA noinst_PROGRAMS = LUsolve LUdet endif LUsolve_SOURCES = LUsolve.cpp LU.cpp LUdet_SOURCES = LUdet.cpp LU.cpp ADOL-C-2.4.1/ADOL-C/examples/additional_examples/lufact/LUsolve.cpp0000644000076600007660000001263011732376410023177 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: LUsolve.cpp Revision: $Id: LUsolve.cpp 299 2012-03-21 16:08:40Z kulshres $ Contents: example for * Computation of the determinant of a matrix by LU-decomposition of the system matrix without pivoting * application of tapedoc to observe taping of the new op_codes for the elementary operations y += x1 * x2; y -= x1 * x2; Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ /****************************************************************************/ /* INCLUDES */ #include "LU.h" /****************************************************************************/ /* MAIN PROGRAM */ int main() { /*------------------------------------------------------------------------*/ /* variables */ const int tag = 1; // tape tag const int size = 5; // system size const int indep = size*size+size; // # of indeps const int depen = size; // # of deps double A[size][size], a1[size], a2[size], // passive variables b[size], x[size]; adouble **AA, *AAp, *Abx; // active variables double *args = myalloc1(indep); // arguments double **jac = myalloc2(depen,indep); // the Jacobian double *laghessvec = myalloc1(indep); // Hessian-vector product int i,j; /*------------------------------------------------------------------------*/ /* Info */ fprintf(stdout,"LINEAR SYSTEM SOLVING by " "LU-DECOMPOSITION (ADOL-C Example)\n\n"); /*------------------------------------------------------------------------*/ /* Allocation und initialization of the system matrix */ AA = new adouble*[size]; AAp = new adouble[size*size]; for (i=0; i>= x[i]; trace_off(); fprintf(stdout," x[0] (original): %16.4E\n",x[0]); /*------------------------------------------------------------------------*/ /* Recomputation */ function(tag,depen,indep,args,x); fprintf(stdout," x[0] (from tape): %16.4E\n",x[0]); /*------------------------------------------------------------------------*/ /* Computation of Jacobian */ jacobian(tag,depen,indep,args,jac); fprintf(stdout," Jacobian:\n"); for (i=0; i/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @ADDEXA_TRUE@noinst_PROGRAMS = LUsolve$(EXEEXT) LUdet$(EXEEXT) subdir = ADOL-C/examples/additional_examples/lufact DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/autoconf/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_LUdet_OBJECTS = LUdet.$(OBJEXT) LU.$(OBJEXT) LUdet_OBJECTS = $(am_LUdet_OBJECTS) LUdet_LDADD = $(LDADD) LUdet_DEPENDENCIES = AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am_LUsolve_OBJECTS = LUsolve.$(OBJEXT) LU.$(OBJEXT) LUsolve_OBJECTS = $(am_LUsolve_OBJECTS) LUsolve_LDADD = $(LDADD) LUsolve_DEPENDENCIES = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/ADOL-C/src depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(LUdet_SOURCES) $(LUsolve_SOURCES) DIST_SOURCES = $(LUdet_SOURCES) $(LUsolve_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH_FALSE = @ADVBRANCH_FALSE@ ADVBRANCH_TRUE = @ADVBRANCH_TRUE@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF_FALSE = @ATRIG_ERF_FALSE@ ATRIG_ERF_TRUE = @ATRIG_ERF_TRUE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COLPACK_CFLAGS = @COLPACK_CFLAGS@ COLPACK_LIBS = @COLPACK_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_srcdir)/ADOL-C/include LDADD = -ladolc AM_LDFLAGS = -L$(top_builddir)/ADOL-C/src EXTRA_DIST = LU.h MAINTAINERCLEANFILES = Makefile.in tape.tex *~ *.orig LUsolve_SOURCES = LUsolve.cpp LU.cpp LUdet_SOURCES = LUdet.cpp LU.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/lufact/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/lufact/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list LUdet$(EXEEXT): $(LUdet_OBJECTS) $(LUdet_DEPENDENCIES) $(EXTRA_LUdet_DEPENDENCIES) @rm -f LUdet$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(LUdet_OBJECTS) $(LUdet_LDADD) $(LIBS) LUsolve$(EXEEXT): $(LUsolve_OBJECTS) $(LUsolve_DEPENDENCIES) $(EXTRA_LUsolve_DEPENDENCIES) @rm -f LUsolve$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(LUsolve_OBJECTS) $(LUsolve_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LU.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LUdet.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LUsolve.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.4.1/ADOL-C/examples/additional_examples/lufact/README0000644000076600007660000000267611227416777022005 0ustar coincoin############################################################################## ## README -- additional information ## Revision: $Id: README 300 2009-02-26 10:42:44Z awalther $ ## ## Copyright (C) Andrea Walther, Andreas Griewank, Andreas Kowarz, ## Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## -------------------------------------------------------------- This directory contains example programs using the LU-decomposition of a square matrix. The aim is to show the application of the new elementary operations y += x1 * x2; y -= x1 * x2; by the tape_doc output. -------------------------------------------------------------- CONTENTS OF THE DIRECTORY LUdet --> Computation of the determinant of a matrix by LU-decomposition of the system matrix without pivoting LUdet.cpp LU.cpp LU.h LUsolve --> Solution of a linear equation system by LU-decomposition of the system matrix without pivoting LUsolve.cpp LU.cpp LU.h ADOL-C-2.4.1/ADOL-C/examples/additional_examples/pow/0000755000076600007660000000000012120272604020417 5ustar coincoinADOL-C-2.4.1/ADOL-C/examples/additional_examples/pow/powexam.cpp0000644000076600007660000001033311452356477022625 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: powexam.cpp Revision: $Id: powexam.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: example for computation of n-th power Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ /****************************************************************************/ /* INCLUDES */ #include // use of ALL ADOL-C interfaces #include using namespace std; #include /****************************************************************************/ /* MAIN PROGRAM */ int main() { int i,tag = 1; int n; double e; cout << "COMPUTATION OF x^e\n\n"; cout << "e=? \n"; // input the desired degree cin >> e; n = (int) e; if (n < 0) n = -n; // allocations and initializations double** X; double** Y; X = myalloc2(1,n+4); Y = myalloc2(1,n+4); cout << "value of x=? \n"; cin >> X[0][0]; // function value = 0. coefficient X[0][1] = 1.0; // first derivative = 1. coefficient X[0][2] = 0.0; // second derivative = 2. coefficient for(i=1; i>= Y[0][0]; // only one dependent adouble trace_off(); // no global adouble has died // end of active section */ double u[1]; // weighting vector u[0]=1; // for reverse call for(i=0; i>= Y[0][0]; // only one dependent adouble trace_off(); // no global adouble has died // end of active section */ u[0]=1; // for reverse call for(i=0; i/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @ADDEXA_TRUE@noinst_PROGRAMS = powexam$(EXEEXT) subdir = ADOL-C/examples/additional_examples/pow DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/autoconf/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_powexam_OBJECTS = powexam.$(OBJEXT) powexam_OBJECTS = $(am_powexam_OBJECTS) powexam_LDADD = $(LDADD) powexam_DEPENDENCIES = AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/ADOL-C/src depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(powexam_SOURCES) DIST_SOURCES = $(powexam_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH_FALSE = @ADVBRANCH_FALSE@ ADVBRANCH_TRUE = @ADVBRANCH_TRUE@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF_FALSE = @ATRIG_ERF_FALSE@ ATRIG_ERF_TRUE = @ATRIG_ERF_TRUE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COLPACK_CFLAGS = @COLPACK_CFLAGS@ COLPACK_LIBS = @COLPACK_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_srcdir)/ADOL-C/include LDADD = -ladolc AM_LDFLAGS = -L$(top_builddir)/ADOL-C/src MAINTAINERCLEANFILES = Makefile.in *~ *.orig powexam_SOURCES = powexam.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/pow/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/pow/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list powexam$(EXEEXT): $(powexam_OBJECTS) $(powexam_DEPENDENCIES) $(EXTRA_powexam_DEPENDENCIES) @rm -f powexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(powexam_OBJECTS) $(powexam_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/powexam.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.4.1/ADOL-C/examples/additional_examples/pow/README0000644000076600007660000000135611227416777021326 0ustar coincoin############################################################################## ## README -- additional information ## Revision: $Id: README 299 2009-02-26 09:20:11Z awalther $ ## ## Copyright (C) Andrea Walther, Andreas Griewank, Andreas Kowarz, ## Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## CONTENTS OF THE DIRECTORY powexam --> calculate x^e, both given as user input powexam.cpp ADOL-C-2.4.1/ADOL-C/examples/additional_examples/checkpointing/0000755000076600007660000000000012120272604022437 5ustar coincoinADOL-C-2.4.1/ADOL-C/examples/additional_examples/checkpointing/Makefile.am0000644000076600007660000000164312032277512024504 0ustar coincoin############################################################################## ## Makefile.am -- Process this file with automake to produce Makefile.in ## Revision: $Id: Makefile.am 354 2012-10-01 11:32:26Z kulshres $ ## ## Copyright (C) Andrea Walther ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_srcdir)/ADOL-C/include LDADD = -ladolc AM_LDFLAGS = -L$(top_builddir)/ADOL-C/src MAINTAINERCLEANFILES = Makefile.in *~ *.orig if ADDEXA noinst_PROGRAMS = checkpointing endif checkpointing_SOURCES = checkpointing.cpp ADOL-C-2.4.1/ADOL-C/examples/additional_examples/checkpointing/Makefile.in0000644000076600007660000004142312062606346024521 0ustar coincoin# Makefile.in generated by automake 1.12.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @ADDEXA_TRUE@noinst_PROGRAMS = checkpointing$(EXEEXT) subdir = ADOL-C/examples/additional_examples/checkpointing DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/autoconf/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_checkpointing_OBJECTS = checkpointing.$(OBJEXT) checkpointing_OBJECTS = $(am_checkpointing_OBJECTS) checkpointing_LDADD = $(LDADD) checkpointing_DEPENDENCIES = AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/ADOL-C/src depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(checkpointing_SOURCES) DIST_SOURCES = $(checkpointing_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH_FALSE = @ADVBRANCH_FALSE@ ADVBRANCH_TRUE = @ADVBRANCH_TRUE@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF_FALSE = @ATRIG_ERF_FALSE@ ATRIG_ERF_TRUE = @ATRIG_ERF_TRUE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COLPACK_CFLAGS = @COLPACK_CFLAGS@ COLPACK_LIBS = @COLPACK_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_srcdir)/ADOL-C/include LDADD = -ladolc AM_LDFLAGS = -L$(top_builddir)/ADOL-C/src MAINTAINERCLEANFILES = Makefile.in *~ *.orig checkpointing_SOURCES = checkpointing.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/checkpointing/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/checkpointing/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list checkpointing$(EXEEXT): $(checkpointing_OBJECTS) $(checkpointing_DEPENDENCIES) $(EXTRA_checkpointing_DEPENDENCIES) @rm -f checkpointing$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(checkpointing_OBJECTS) $(checkpointing_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/checkpointing.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.4.1/ADOL-C/examples/additional_examples/checkpointing/checkpointing.cpp0000644000076600007660000000567011452356477026022 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: checkpointing.cpp Revision: $Id: checkpointing.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: example for checkpointing Copyright (c) Andrea Walther This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #include #include #define h 0.01 #define steps 100 // time step function // double version int euler_step(int n, double *y); // adouble version int euler_step_act(int n, adouble *y); int tag_full, tag_part, tag_check; int main() { // time interval double t0, tf; // state, double and adouble version adouble y[2]; int n; // control, double and adouble version adouble con[2]; double conp[2]; // target value; double f; //variables for derivative caluclation double grad[2]; int i; // tape identifiers tag_full = 1; tag_part = 2; tag_check = 3; // two input and output variables for checkpointing function n = 2; // time interval t0 = 0.0; tf = 1.0; //control conp[0] = 1.0; conp[1] = 1.0; // basis variant: full taping of time step loop trace_on(tag_full); con[0] <<= conp[0]; con[1] <<= conp[1]; y[0] = con[0]; y[1] = con[1]; for(i=0;i>= f; trace_off(1); gradient(tag_full,2,conp,grad); printf(" full taping:\n gradient=( %f, %f)\n\n",grad[0],grad[1]); // Now using checkpointing facilities // define checkpointing procedure // generate checkpointing context => define active variante of the time step CP_Context cpc(euler_step_act); // double variante of the time step function cpc.setDoubleFct(euler_step); // number of time steps to perform cpc.setNumberOfSteps(steps); // number of checkpoint cpc.setNumberOfCheckpoints(5); // dimension of input/output cpc.setDimensionXY(n); // input vector cpc.setInput(y); // output vector cpc.setOutput(y); // tape number for checkpointing cpc.setTapeNumber(tag_check); // always retape or not ? cpc.setAlwaysRetaping(false); trace_on(tag_part); con[0] <<= conp[0]; con[1] <<= conp[1]; y[0] = con[0]; y[1] = con[1]; cpc.checkpointing(); y[0] + y[1] >>= f; trace_off(1); gradient(tag_part,2,conp,grad); printf(" taping with checkpointing facility:\n gradient=( %f, %f)\n\n",grad[0],grad[1]); return 0; } int euler_step(int n, double *y) { // Euler step, double version y[0] = y[0]+h*y[0]; y[1] = y[1]+h*2*y[1]; return 1; } int euler_step_act(int n, adouble *y) { // Euler step, adouble version y[0] = y[0]+h*y[0]; y[1] = y[1]+h*2*y[1]; return 1; } ADOL-C-2.4.1/ADOL-C/examples/additional_examples/checkpointing/README0000644000076600007660000000127611227416777023347 0ustar coincoin############################################################################## ## README -- additional information ## Revision: $Id: README 267 2008-12-15 13:19:25Z awalther $ ## ## Copyright (C) Andrea Walther ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## CONTENTS OF THE DIRECTORY checkpointing --> Integration of ode with automated checkpointing of time step loop checkpointing.cpp ADOL-C-2.4.1/ADOL-C/examples/additional_examples/tapesave/0000755000076600007660000000000012120272604021422 5ustar coincoinADOL-C-2.4.1/ADOL-C/examples/additional_examples/tapesave/createTape.cpp0000644000076600007660000000715211452356477024232 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: createTape.cpp Revision: $Id: createTape.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: How to create a tape with ADOL-C ================================ Application of ADOL-C to the example function of Tony Wong to obtain the tape, which will be saved on HD for future use Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ /****************************************************************************/ /* INCLUDES */ /* use of ALL ADOL-C interfaces */ #include /****************************************************************************/ /* ACTIVATING FUNCTIONS */ /* Example of a C function */ double myf ( double x, double y, double z) { return x*x + y*y*y + z*z*z*z + 2.0*x*x*x*x*y*y*y + z*z*z*z*x*x*x*x*x + 3.0*z*z*z*y; } /* Example of the corresponding 'active' C function */ adouble myf ( adouble x, adouble y, adouble z) { return x*x + y*y*y + z*z*z*z + 2.0*x*x*x*x*y*y*y + z*z*z*z*x*x*x*x*x + 3.0*z*z*z*y; } /****************************************************************************/ /* GENERATING THE EVALUATION TAPE */ int main() { double xyz[3], f; /* variables */ adouble ax, ay, az, af; /* active varaibles */ xyz[0] = 1.2; xyz[1] = 2.6; /* initialize any values */ xyz[2] = 0.03; /* TRACING THE EVALUATION TAPE */ trace_on(1); /* start tracing of an evaluation tape with the identifier 1 */ ax <<= xyz[0]; /* marking independent variables */ ay <<= xyz[1]; az <<= xyz[2]; af = myf(ax,ay,az); /* calling the 'active' version of the function to be differentiated to generate a tape of the evaluation process; NOTE: Instead of calling a C function the whole evaluation code can be placed here (see example file DEX/powerexam.C) */ af >>= f; /* marking the only one dependent variable */ trace_off(1); /* stop tracing */ /* NOTE: trace_off(..) is called with the value 1 (for the optional ! argument). This forces ADOL-C to save the generated tapes ! on harddisc. In particular these are the files ! ! _adol-op_tape.1 (operations = opcodes) ! _adol-in_tape.1 (integers = locations) ! _adol-rl_tape.1 (real values = doubles) ! ! The appendix '1' is determined by the used tape ! identifier, which was passed to trace_on(..). */ } ADOL-C-2.4.1/ADOL-C/examples/additional_examples/tapesave/Makefile.am0000644000076600007660000000172112032326061023456 0ustar coincoin############################################################################## ## Makefile.am -- Process this file with automake to produce Makefile.in ## Revision: $Id: Makefile.am 356 2012-10-01 14:44:01Z kulshres $ ## ## Copyright (C) Andrea Walther, Andreas Kowarz ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_srcdir)/ADOL-C/include LDADD = -ladolc AM_LDFLAGS = -L$(top_builddir)/ADOL-C/src MAINTAINERCLEANFILES = Makefile.in *~ *.orig if ADDEXA noinst_PROGRAMS = createTape useTape endif createTape_SOURCES = createTape.cpp useTape_SOURCES = useTape.cpp ADOL-C-2.4.1/ADOL-C/examples/additional_examples/tapesave/useTape.cpp0000644000076600007660000000556611452356477023572 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: createTape.cpp Revision: $Id: useTape.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: How to use a tape with ADOL-C ============================= Application of ADOL-C to the example function of Tony Wong to use a tape, which was previously saved on HD Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ /****************************************************************************/ /* INCLUDES */ /* use of ALL ADOL-C interfaces */ #include #include /****************************************************************************/ /* USING THE EVALUATION TAPE */ int main() { double xyz[3], f, gradf[3]; /* variables */ xyz[0] = 1.0; xyz[1] = 1.0; /* initialize any values */ xyz[2] = 1.0; /* USING THE TAPE FOR DERIVATIVE COMPUTATION */ function(1, /* the tape identifier 1 (tag) */ 1, /* number of dependent variables = dimension of f */ 3, /* number of independent variables = dimension of xyz */ xyz, /* the point where the function has to be differentiated */ &f); /* contains the function value (after calling 'function(..)') */ gradient(1, /* the tape identifier 1 (tag) */ 3, /* number of independent variables = dimension of xyz */ xyz, /* the point where the function has to be differentiated */ gradf); /* contains the gradient (after calling 'gradient(..)') */ /* print the results */ fprintf(stdout,"f = %E\n",f); fprintf(stdout,"df = (%E, %E, %E)\n",gradf[0],gradf[1],gradf[2]); return 0; } ADOL-C-2.4.1/ADOL-C/examples/additional_examples/tapesave/Makefile.in0000644000076600007660000004223712062606346023510 0ustar coincoin# Makefile.in generated by automake 1.12.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @ADDEXA_TRUE@noinst_PROGRAMS = createTape$(EXEEXT) useTape$(EXEEXT) subdir = ADOL-C/examples/additional_examples/tapesave DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/autoconf/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_createTape_OBJECTS = createTape.$(OBJEXT) createTape_OBJECTS = $(am_createTape_OBJECTS) createTape_LDADD = $(LDADD) createTape_DEPENDENCIES = AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am_useTape_OBJECTS = useTape.$(OBJEXT) useTape_OBJECTS = $(am_useTape_OBJECTS) useTape_LDADD = $(LDADD) useTape_DEPENDENCIES = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/ADOL-C/src depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(createTape_SOURCES) $(useTape_SOURCES) DIST_SOURCES = $(createTape_SOURCES) $(useTape_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH_FALSE = @ADVBRANCH_FALSE@ ADVBRANCH_TRUE = @ADVBRANCH_TRUE@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF_FALSE = @ATRIG_ERF_FALSE@ ATRIG_ERF_TRUE = @ATRIG_ERF_TRUE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COLPACK_CFLAGS = @COLPACK_CFLAGS@ COLPACK_LIBS = @COLPACK_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_srcdir)/ADOL-C/include LDADD = -ladolc AM_LDFLAGS = -L$(top_builddir)/ADOL-C/src MAINTAINERCLEANFILES = Makefile.in *~ *.orig createTape_SOURCES = createTape.cpp useTape_SOURCES = useTape.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/tapesave/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/tapesave/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list createTape$(EXEEXT): $(createTape_OBJECTS) $(createTape_DEPENDENCIES) $(EXTRA_createTape_DEPENDENCIES) @rm -f createTape$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(createTape_OBJECTS) $(createTape_LDADD) $(LIBS) useTape$(EXEEXT): $(useTape_OBJECTS) $(useTape_DEPENDENCIES) $(EXTRA_useTape_DEPENDENCIES) @rm -f useTape$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(useTape_OBJECTS) $(useTape_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/createTape.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/useTape.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.4.1/ADOL-C/examples/additional_examples/tapesave/README0000644000076600007660000000230411227416777022323 0ustar coincoin############################################################################## ## README -- additional information ## Revision: $Id: README 299 2009-02-26 09:20:11Z awalther $ ## ## Copyright (C) Andrea Walther, Andreas Griewank, Andreas Kowarz, ## Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## -------------------------------------------------------------- This directory contains example programs to demonstrate how to separate tape creation and tape usage into different programs. -------------------------------------------------------------- CONTENTS OF THE DIRECTORY createTape --> C++ program to create a tape of the function of interest. createTape.cpp useTape --> C++ program which uses the tape created with createTape to compute the gradient. useTape.cpp ADOL-C-2.4.1/ADOL-C/examples/additional_examples/ext_diff_func/0000755000076600007660000000000012120272604022415 5ustar coincoinADOL-C-2.4.1/ADOL-C/examples/additional_examples/ext_diff_func/Makefile.am0000644000076600007660000000165412032277512024464 0ustar coincoin############################################################################## ## Makefile.am -- Process this file with automake to produce Makefile.in ## Revision: $Id: Makefile.am 354 2012-10-01 11:32:26Z kulshres $ ## ## Copyright (C) Andrea Walther ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_srcdir)/ADOL-C/include LDADD = -ladolc AM_LDFLAGS = -L$(top_builddir)/ADOL-C/src MAINTAINERCLEANFILES = Makefile.in *~ *.orig if ADDEXA noinst_PROGRAMS = ext_diff_func endif ext_diff_func_SOURCES = ext_diff_func.cpp ADOL-C-2.4.1/ADOL-C/examples/additional_examples/ext_diff_func/ext_diff_func.cpp0000644000076600007660000000745112053423074025737 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: ext_diff_func.cpp Revision: $Id: ext_diff_func.cpp 370 2012-11-22 13:18:52Z kulshres $ Contents: example for external differentiated functions Copyright (c) Andrea Walther This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #include #include #define h 0.01 #define steps 100 // time step function // double version int euler_step(int n, double *yin, int m, double *yout); // adouble version void euler_step_act(int n, adouble *yin, int m, adouble *yout); // versions for usage as external differentiated function ADOLC_ext_fct zos_for_euler_step; ADOLC_ext_fct_fos_reverse fos_rev_euler_step; ext_diff_fct *edf; int tag_full, tag_part, tag_ext_fct; int main() { // time interval double t0, tf; // state, double and adouble version adouble y[2]; adouble ynew[2]; int n, m; // control, double and adouble version adouble con[2]; double conp[2]; // target value; double f; //variables for derivative caluclation double yp[2], ynewp[2]; double u[2], z[2]; double grad[2]; int i,j; // tape identifiers tag_full = 1; tag_part = 2; tag_ext_fct = 3; // two input variables for external differentiated function n = 2; // two output variables for external differentiated function m = 2; // time interval t0 = 0.0; tf = 1.0; //control conp[0] = 1.0; conp[1] = 1.0; trace_on(tag_full); con[0] <<= conp[0]; con[1] <<= conp[1]; y[0] = con[0]; y[1] = con[1]; for(i=0;i>= f; trace_off(1); gradient(tag_full,2,conp,grad); printf(" full taping:\n gradient=( %f, %f)\n\n",grad[0],grad[1]); // Now using external function facilities // tape external differentiated function trace_on(tag_ext_fct); y[0] <<= conp[0]; y[1] <<= conp[1]; euler_step_act(2,y,2,ynew); ynew[0] >>= f; ynew[1] >>= f; trace_off(1); // register external function edf = reg_ext_fct(euler_step); // information for Zero-Order-Scalar (=zos) forward // yp = new double[2]; // ynewp = new double[2]; edf->zos_forward = zos_for_euler_step; edf->dp_x = yp; edf->dp_y = ynewp; // information for First-Order-Scalar (=fos) reverse edf->fos_reverse = fos_rev_euler_step; edf->dp_U = u; edf->dp_Z = z; trace_on(tag_part); con[0] <<= conp[0]; con[1] <<= conp[1]; y[0] = con[0]; y[1] = con[1]; for(i=0;i>= f; trace_off(1); gradient(tag_part,2,conp,grad); printf(" taping with external function facility:\n gradient=( %f, %f)\n\n",grad[0],grad[1]); return 0; } void euler_step_act(int n, adouble *yin, int m, adouble *yout) { // Euler step, adouble version yout[0] = yin[0]+h*yin[0]; yout[1] = yin[1]+h*2*yin[1]; } int euler_step(int n, double *yin, int m, double *yout) { // Euler step, double version yout[0] = yin[0]+h*yin[0]; yout[1] = yin[1]+h*2*yin[1]; return 1; } int zos_for_euler_step(int n, double *yin, int m, double *yout) { int rc; rc = zos_forward(tag_ext_fct, 2, 2, 0, yin, yout); return rc; } int fos_rev_euler_step(int n, double *u, int m, double *z, double */* unused */, double */*unused*/) { int rc; zos_forward(tag_ext_fct, 2, 2, 1, edf->dp_x, edf->dp_y); rc = fos_reverse(tag_ext_fct, 2, 2, u, z); return rc; } ADOL-C-2.4.1/ADOL-C/examples/additional_examples/ext_diff_func/Makefile.in0000644000076600007660000004142312062606346024477 0ustar coincoin# Makefile.in generated by automake 1.12.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @ADDEXA_TRUE@noinst_PROGRAMS = ext_diff_func$(EXEEXT) subdir = ADOL-C/examples/additional_examples/ext_diff_func DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/autoconf/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_ext_diff_func_OBJECTS = ext_diff_func.$(OBJEXT) ext_diff_func_OBJECTS = $(am_ext_diff_func_OBJECTS) ext_diff_func_LDADD = $(LDADD) ext_diff_func_DEPENDENCIES = AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/ADOL-C/src depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(ext_diff_func_SOURCES) DIST_SOURCES = $(ext_diff_func_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH_FALSE = @ADVBRANCH_FALSE@ ADVBRANCH_TRUE = @ADVBRANCH_TRUE@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF_FALSE = @ATRIG_ERF_FALSE@ ATRIG_ERF_TRUE = @ATRIG_ERF_TRUE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COLPACK_CFLAGS = @COLPACK_CFLAGS@ COLPACK_LIBS = @COLPACK_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_srcdir)/ADOL-C/include LDADD = -ladolc AM_LDFLAGS = -L$(top_builddir)/ADOL-C/src MAINTAINERCLEANFILES = Makefile.in *~ *.orig ext_diff_func_SOURCES = ext_diff_func.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/ext_diff_func/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/ext_diff_func/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list ext_diff_func$(EXEEXT): $(ext_diff_func_OBJECTS) $(ext_diff_func_DEPENDENCIES) $(EXTRA_ext_diff_func_DEPENDENCIES) @rm -f ext_diff_func$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(ext_diff_func_OBJECTS) $(ext_diff_func_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ext_diff_func.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.4.1/ADOL-C/examples/additional_examples/ext_diff_func/README0000644000076600007660000000130311227416777023314 0ustar coincoin############################################################################## ## README -- additional information ## Revision: $Id: README 268 2008-12-15 10:32:03Z awalther $ ## ## Copyright (C) Andrea Walther ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## CONTENTS OF THE DIRECTORY ext_diff_func --> Integration of ode with time step as external differentiated function ext_diff_func.cpp ADOL-C-2.4.1/ADOL-C/examples/additional_examples/clock/0000755000076600007660000000000012120272604020705 5ustar coincoinADOL-C-2.4.1/ADOL-C/examples/additional_examples/clock/Makefile.am0000644000076600007660000000121511412425466022751 0ustar coincoin############################################################################## ## Makefile.am -- Process this file with automake to produce Makefile.in ## Revision: $Id: Makefile.am 106 2010-06-29 17:19:50Z kulshres $ ## ## Copyright (C) Andrea Walther, Andreas Kowarz ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## EXTRA_DIST = myclock.h MAINTAINERCLEANFILES = Makefile.in *~ *.orig ADOL-C-2.4.1/ADOL-C/examples/additional_examples/clock/myclock.cpp0000644000076600007660000000231111452356477023071 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: myclock.cpp Revision: $Id: myclock.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: timing utilities Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ /****************************************************************************/ /* INCLUDES */ #include #include #include "myclock.h" /****************************************************************************/ /* CLOCK UTILITIES */ double myclock( int normalize ) { struct timeb tb; ftime(&tb); return ((double)tb.time+(double)tb.millitm/1000.); } void normalize() {} ADOL-C-2.4.1/ADOL-C/examples/additional_examples/clock/Makefile.in0000644000076600007660000002577712062606346023005 0ustar coincoin# Makefile.in generated by automake 1.12.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = ADOL-C/examples/additional_examples/clock DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH_FALSE = @ADVBRANCH_FALSE@ ADVBRANCH_TRUE = @ADVBRANCH_TRUE@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF_FALSE = @ATRIG_ERF_FALSE@ ATRIG_ERF_TRUE = @ATRIG_ERF_TRUE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COLPACK_CFLAGS = @COLPACK_CFLAGS@ COLPACK_LIBS = @COLPACK_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = myclock.h MAINTAINERCLEANFILES = Makefile.in *~ *.orig all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/clock/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/clock/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags: TAGS TAGS: ctags: CTAGS CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.4.1/ADOL-C/examples/additional_examples/clock/myclock.h0000644000076600007660000000244411227420735022532 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: myclock.h Revision: $Id: myclock.h 42 2009-07-15 18:37:17Z awalther $ Contents: timing utilities Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #ifndef _MYCLOCK_H_ #define _MYCLOCK_H_ /****************************************************************************/ /* CLOCKS PER SECOND */ extern double clocksPerSecond; /****************************************************************************/ /* CLOCK */ double myclock(int normalize = 0); /****************************************************************************/ /* NORMALIZE CLOCK */ void normalizeMyclock( void ); #endif ADOL-C-2.4.1/ADOL-C/examples/additional_examples/timing/0000755000076600007660000000000012120272604021101 5ustar coincoinADOL-C-2.4.1/ADOL-C/examples/additional_examples/timing/detexam.ctrl0000644000076600007660000000150711227416777023443 0ustar coincoin0 problem dimension (n) 0 # of evaluations to average over use forward 0 optional degree for higher order stuff (--> keep) 0 # of vectors in vector forward mode (p) 0 # of vectors in vector reverse mode (p) 0 # of vectors in tensor_eval (p) 1 test zos_forward or not 1 test fos_forward or not 1 test hos_forward or not 1 test fov_forward or not 1 test hov_forward or not 1 test fos_reverse or not 1 test hos_reverse or not 1 test fov_reverse or not 1 test hov_reverse or not 1 test Function or not 1 test Gradient/Jacobian or not 1 test Vector-Gradient/Jacobian-Product or not 1 test Gradient/Jacobian-Vector-Product or not 1 test Hessian or not 1 test Hessian-Vector-Product or not 1 test Lagrange-Hessian-Vector-Product or not 1 test Tensors or not 1 test Inverse tensors or not ADOL-C-2.4.1/ADOL-C/examples/additional_examples/timing/ficexam.ctrl0000644000076600007660000000150711227416777023430 0ustar coincoin0 problem dimension (n) 0 # of evaluations to average over use forward 0 optional degree for higher order stuff (--> keep) 0 # of vectors in vector forward mode (p) 0 # of vectors in vector reverse mode (p) 0 # of vectors in tensor_eval (p) 1 test zos_forward or not 1 test fos_forward or not 1 test hos_forward or not 1 test fov_forward or not 1 test hov_forward or not 1 test fos_reverse or not 1 test hos_reverse or not 1 test fov_reverse or not 1 test hov_reverse or not 1 test Function or not 1 test Gradient/Jacobian or not 1 test Vector-Gradient/Jacobian-Product or not 1 test Gradient/Jacobian-Vector-Product or not 1 test Hessian or not 1 test Hessian-Vector-Product or not 1 test Lagrange-Hessian-Vector-Product or not 1 test Tensors or not 1 test Inverse tensors or not ADOL-C-2.4.1/ADOL-C/examples/additional_examples/timing/rosenbrockexam.ctrl0000644000076600007660000000150711227416777025036 0ustar coincoin0 problem dimension (n) 0 # of evaluations to average over use forward 0 optional degree for higher order stuff (--> keep) 0 # of vectors in vector forward mode (p) 0 # of vectors in vector reverse mode (p) 0 # of vectors in tensor_eval (p) 1 test zos_forward or not 1 test fos_forward or not 1 test hos_forward or not 1 test fov_forward or not 1 test hov_forward or not 1 test fos_reverse or not 1 test hos_reverse or not 1 test fov_reverse or not 1 test hov_reverse or not 1 test Function or not 1 test Gradient/Jacobian or not 1 test Vector-Gradient/Jacobian-Product or not 1 test Gradient/Jacobian-Vector-Product or not 0 test Hessian or not 1 test Hessian-Vector-Product or not 1 test Lagrange-Hessian-Vector-Product or not 0 test Tensors or not 0 test Inverse tensors or not ADOL-C-2.4.1/ADOL-C/examples/additional_examples/timing/sfunc_power.cpp0000644000076600007660000001135111452356477024162 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: sfunc_power.cpp Revision: $Id: sfunc_power.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: function module containing the power example Each << function module >> contains: (1) const char* const controlFileName (2) int indepDim; (3) void initProblemParameters( void ) (4) void initIndependents( double* indeps ) (5) double originalScalarFunction( double* indeps ) (6) double tapingScalarFunction( int tag, double* indeps ) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #define _SFUNC_POWER_C_ /****************************************************************************/ /* INCLUDES */ #include #include #include /****************************************************************************/ /* GLOBAL VARIABLES */ /*--------------------------------------------------------------------------*/ /* Control file name */ const char* controlFileName = "powexam.ctrl"; /*--------------------------------------------------------------------------*/ /* Dimensions */ int indepDim; /*--------------------------------------------------------------------------*/ /* Other problem dependent parameters */ int exponent; //static unsigned short int dx[3]; /* variable needed by erand48(.) */ /****************************************************************************/ /* INIT PROBLEM PARAMETERS */ void initProblemParameters( void ) { fprintf(stdout,"COMPUTATION OF n-th POWER (ADOL-C Example)\n\n"); indepDim = 1; fprintf(stdout," n = ? "); fscanf(stdin,"%d",&exponent); fprintf(stdout,"\n"); /* Init erand48(); */ struct tm s; time_t t; time(&t); s=*localtime(&t); srand(s.tm_sec*s.tm_min); /* dx[0]=rand(); dx[1]=rand(); dx[2]=rand();*/ } /****************************************************************************/ /* INITIALIZE INDEPs */ void initIndependents( double* indeps ) { indeps[0] = (double)rand(); } /****************************************************************************/ /* ORIGINAL SCALAR FUNCTION */ /*--------------------------------------------------------------------------*/ /* The recursive determinant function */ double power( double x, int n ) { double z = 1; if (n > 0) { int nh =n/2; z = power(x,nh); z *= z; if (2*nh != n) z *= x; return z; } else if (n == 0) return z; else return 1.0/power(x,-n); } /*--------------------------------------------------------------------------*/ /* The interface function */ double originalScalarFunction( double* indeps ) { return power(indeps[0],exponent); } /****************************************************************************/ /* TAPING SCALAR FUNCTION */ /*--------------------------------------------------------------------------*/ /* The recursive power function */ adouble activePower( adouble x, int n) { adouble z = 1; if (n > 0) { int nh =n/2; z = activePower(x,nh); z *= z; if (2*nh != n) z *= x; return z; } else if (n == 0) return z; else return 1.0/activePower(x,-n); } /*--------------------------------------------------------------------------*/ /* The interface function */ double tapingScalarFunction( int tag, double* indeps ) { trace_on(tag); adouble activeIndep; activeIndep <<= *indeps; adouble ares = activePower(activeIndep,exponent); double res = 0; ares >>= res; trace_off(); return res; } #undef _SFUNC_POWER_C_ ADOL-C-2.4.1/ADOL-C/examples/additional_examples/timing/rotations.cpp0000644000076600007660000002754311452356477023664 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: rotations.cpp Revision: $Id: rotations.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: ... contains elementary rotations used by the machine tool example of gearing (vfunc_pargear.C) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #define _ROTATIONS_C_ /****************************************************************************/ /* INCLUDES */ #include #include "rotations.h" #include /****************************************************************************/ /* ELEMENTARY ROTATIONS */ /*--------------------------------------------------------------------------*/ void D1 ( double * vec, double & alpha ) { double locCos=cos(alpha); double locSin=sin(alpha); double tmpVec2=locSin*vec[1] + locCos*vec[2]; vec[1]=locCos*vec[1] - locSin*vec[2]; vec[2]=tmpVec2; } void D1 ( double * depVec, double * indepVec, double & alpha ) { if ( indepVec == depVec ) { D1(depVec,alpha); return; } double locCos=cos(alpha); double locSin=sin(alpha); depVec[0]=indepVec[0]; depVec[1]=locCos*indepVec[1] - locSin*indepVec[2]; depVec[2]=locSin*indepVec[1] + locCos*indepVec[2]; } void D1T ( double * vec, double & alpha ) { double locCos=cos(alpha); double locSin=sin(alpha); double tmpVec2=-locSin*vec[1] + locCos*vec[2]; vec[1]=locCos*vec[1] + locSin*vec[2]; vec[2]=tmpVec2; } void D1T ( double * depVec, double * indepVec, double & alpha ) { if ( indepVec == depVec ) { D1T(depVec,alpha); return; } double locCos=cos(alpha); double locSin=sin(alpha); depVec[0]=indepVec[0]; depVec[1]=locCos*indepVec[1] + locSin*indepVec[2]; depVec[2]=-locSin*indepVec[1] + locCos*indepVec[2]; } /*--------------------------------------------------------------------------*/ void D2 ( double * vec, double & alpha ) { double locCos=cos(alpha); double locSin=sin(alpha); double tmpVec2=-locSin*vec[0] + locCos*vec[2]; vec[0]=locCos*vec[0] + locSin*vec[2]; vec[2]=tmpVec2; } void D2 ( double * depVec, double * indepVec, double & alpha ) { if ( indepVec == depVec ) { D2(depVec,alpha); return; } double locCos=cos(alpha); double locSin=sin(alpha); depVec[0]=locCos*indepVec[0] + locSin*indepVec[2]; depVec[1]=indepVec[1]; depVec[2]=-locSin*indepVec[0] + locCos*indepVec[2]; } void D2T ( double * vec, double & alpha ) { double locCos=cos(alpha); double locSin=sin(alpha); double tmpVec2=locSin*vec[0] + locCos*vec[2]; vec[0]=locCos*vec[0] - locSin*vec[2]; vec[2]=tmpVec2; } void D2T ( double * depVec, double * indepVec, double & alpha ) { if ( indepVec == depVec ) { D2T(depVec,alpha); return; } double locCos=cos(alpha); double locSin=sin(alpha); depVec[0]=locCos*indepVec[0] - locSin*indepVec[2]; depVec[1]=indepVec[1]; depVec[2]=locSin*indepVec[0] + locCos*indepVec[2]; } /*--------------------------------------------------------------------------*/ void D3 ( double * vec, double & alpha ) { double locCos=cos(alpha); double locSin=sin(alpha); double tmpVec1=locSin*vec[0] + locCos*vec[1]; vec[0]=locCos*vec[0] - locSin*vec[1]; vec[1]=tmpVec1; } void D3 ( double * depVec, double * indepVec, double & alpha ) { if ( indepVec == depVec ) { D3(depVec,alpha); return; } double locCos=cos(alpha); double locSin=sin(alpha); depVec[0]=locCos*indepVec[0] - locSin*indepVec[1]; depVec[1]=locSin*indepVec[0] + locCos*indepVec[1]; depVec[2]=indepVec[2]; } void D3T ( double * vec, double & alpha ) { double locCos=cos(alpha); double locSin=sin(alpha); double tmpVec1=-locSin*vec[0] + locCos*vec[1]; vec[0]=locCos*vec[0] + locSin*vec[1]; vec[1]=tmpVec1; } void D3T ( double * depVec, double * indepVec, double & alpha ) { if ( indepVec == depVec ) { D3T(depVec,alpha); return; } double locCos=cos(alpha); double locSin=sin(alpha); depVec[0]=locCos*indepVec[0] + locSin*indepVec[1]; depVec[1]=-locSin*indepVec[0] + locCos*indepVec[1]; depVec[2]=indepVec[2]; } /****************************************************************************/ /* ACTIVATED ELEMENTARY ROTATIONS */ /*--------------------------------------------------------------------------*/ void D1 ( adouble * vec, double & alpha ) { double locCos=cos(alpha); double locSin=sin(alpha); adouble tmpVec2=locSin*vec[1] + locCos*vec[2]; vec[1]=locCos*vec[1] - locSin*vec[2]; vec[2]=tmpVec2; } void D1 ( adouble * depVec, adouble * indepVec, double & alpha ) { if ( indepVec == depVec ) { D1(depVec,alpha); return; } double locCos=cos(alpha); double locSin=sin(alpha); depVec[0]=indepVec[0]; depVec[1]=locCos*indepVec[1] - locSin*indepVec[2]; depVec[2]=locSin*indepVec[1] + locCos*indepVec[2]; } void D1 ( adouble * vec, adouble & alpha ) { adouble locCos=cos(alpha); adouble locSin=sin(alpha); adouble tmpVec2=locSin*vec[1] + locCos*vec[2]; vec[1]=locCos*vec[1] - locSin*vec[2]; vec[2]=tmpVec2; } void D1 ( adouble * depVec, adouble * indepVec, adouble & alpha ) { if ( indepVec == depVec ) { D1(depVec,alpha); return; } adouble locCos=cos(alpha); adouble locSin=sin(alpha); depVec[0]=indepVec[0]; depVec[1]=locCos*indepVec[1] - locSin*indepVec[2]; depVec[2]=locSin*indepVec[1] + locCos*indepVec[2]; } void D1T ( adouble * vec, double & alpha ) { double locCos=cos(alpha); double locSin=sin(alpha); adouble tmpVec2=-locSin*vec[1] + locCos*vec[2]; vec[1]=locCos*vec[1] + locSin*vec[2]; vec[2]=tmpVec2; } void D1T ( adouble * depVec, adouble * indepVec, double & alpha ) { if ( indepVec == depVec ) { D1T(depVec,alpha); return; } double locCos=cos(alpha); double locSin=sin(alpha); depVec[0]=indepVec[0]; depVec[1]=locCos*indepVec[1] + locSin*indepVec[2]; depVec[2]=-locSin*indepVec[1] + locCos*indepVec[2]; } void D1T ( adouble * vec, adouble & alpha ) { adouble locCos=cos(alpha); adouble locSin=sin(alpha); adouble tmpVec2=-locSin*vec[1] + locCos*vec[2]; vec[1]=locCos*vec[1] + locSin*vec[2]; vec[2]=tmpVec2; } void D1T ( adouble * depVec, adouble * indepVec, adouble & alpha ) { if ( indepVec == depVec ) { D1T(depVec,alpha); return; } adouble locCos=cos(alpha); adouble locSin=sin(alpha); depVec[0]=indepVec[0]; depVec[1]=locCos*indepVec[1] + locSin*indepVec[2]; depVec[2]=-locSin*indepVec[1] + locCos*indepVec[2]; } /*--------------------------------------------------------------------------*/ void D2 ( adouble * vec, double & alpha ) { double locCos=cos(alpha); double locSin=sin(alpha); adouble tmpVec2=-locSin*vec[0] + locCos*vec[2]; vec[0]=locCos*vec[0] + locSin*vec[2]; vec[2]=tmpVec2; } void D2 ( adouble * depVec, adouble * indepVec, double & alpha ) { if ( indepVec == depVec ) { D2(depVec,alpha); return; } double locCos=cos(alpha); double locSin=sin(alpha); depVec[0]=locCos*indepVec[0] + locSin*indepVec[2]; depVec[1]=indepVec[1]; depVec[2]=-locSin*indepVec[0] + locCos*indepVec[2]; } void D2 ( adouble * vec, adouble & alpha ) { adouble locCos=cos(alpha); adouble locSin=sin(alpha); adouble tmpVec2=-locSin*vec[0] + locCos*vec[2]; vec[0]=locCos*vec[0] + locSin*vec[2]; vec[2]=tmpVec2; } void D2 ( adouble * depVec, adouble * indepVec, adouble & alpha ) { if ( indepVec == depVec ) { D2(depVec,alpha); return; } adouble locCos=cos(alpha); adouble locSin=sin(alpha); depVec[0]=locCos*indepVec[0] + locSin*indepVec[2]; depVec[1]=indepVec[1]; depVec[2]=-locSin*indepVec[0] + locCos*indepVec[2]; } void D2T ( adouble * vec, double & alpha ) { double locCos=cos(alpha); double locSin=sin(alpha); adouble tmpVec2=locSin*vec[0] + locCos*vec[2]; vec[0]=locCos*vec[0] - locSin*vec[2]; vec[2]=tmpVec2; } void D2T ( adouble * depVec, adouble * indepVec, double & alpha ) { if ( indepVec == depVec ) { D2T(depVec,alpha); return; } double locCos=cos(alpha); double locSin=sin(alpha); depVec[0]=locCos*indepVec[0] - locSin*indepVec[2]; depVec[1]=indepVec[1]; depVec[2]=locSin*indepVec[0] + locCos*indepVec[2]; } void D2T ( adouble * vec, adouble & alpha ) { adouble locCos=cos(alpha); adouble locSin=sin(alpha); adouble tmpVec2=locSin*vec[0] + locCos*vec[2]; vec[0]=locCos*vec[0] - locSin*vec[2]; vec[2]=tmpVec2; } void D2T ( adouble * depVec, adouble * indepVec, adouble & alpha ) { if ( indepVec == depVec ) { D2T(depVec,alpha); return; } adouble locCos=cos(alpha); adouble locSin=sin(alpha); depVec[0]=locCos*indepVec[0] - locSin*indepVec[2]; depVec[1]=indepVec[1]; depVec[2]=locSin*indepVec[0] + locCos*indepVec[2]; } /*--------------------------------------------------------------------------*/ void D3 ( adouble * vec, double & alpha ) { double locCos=cos(alpha); double locSin=sin(alpha); adouble tmpVec1=locSin*vec[0] + locCos*vec[1]; vec[0]=locCos*vec[0] - locSin*vec[1]; vec[1]=tmpVec1; } void D3 ( adouble * depVec, adouble * indepVec, double & alpha ) { if ( indepVec == depVec ) { D3(depVec,alpha); return; } double locCos=cos(alpha); double locSin=sin(alpha); depVec[0]=locCos*indepVec[0] - locSin*indepVec[1]; depVec[1]=locSin*indepVec[0] + locCos*indepVec[1]; depVec[2]=indepVec[2]; } void D3 ( adouble * vec, adouble & alpha ) { adouble locCos=cos(alpha); adouble locSin=sin(alpha); adouble tmpVec1=locSin*vec[0] + locCos*vec[1]; vec[0]=locCos*vec[0] - locSin*vec[1]; vec[1]=tmpVec1; } void D3 ( adouble * depVec, adouble * indepVec, adouble & alpha ) { if ( indepVec == depVec ) { D3(depVec,alpha); return; } adouble locCos=cos(alpha); adouble locSin=sin(alpha); depVec[0]=locCos*indepVec[0] - locSin*indepVec[1]; depVec[1]=locSin*indepVec[0] + locCos*indepVec[1]; depVec[2]=indepVec[2]; } void D3T ( adouble * vec, double & alpha ) { double locCos=cos(alpha); double locSin=sin(alpha); adouble tmpVec1=-locSin*vec[0] + locCos*vec[1]; vec[0]=locCos*vec[0] + locSin*vec[1]; vec[1]=tmpVec1; } void D3T ( adouble * depVec, adouble * indepVec, double & alpha ) { if ( indepVec == depVec ) { D3T(depVec,alpha); return; } double locCos=cos(alpha); double locSin=sin(alpha); depVec[0]=locCos*indepVec[0] + locSin*indepVec[1]; depVec[1]=-locSin*indepVec[0] + locCos*indepVec[1]; depVec[2]=indepVec[2]; } void D3T ( adouble * vec, adouble & alpha ) { adouble locCos=cos(alpha); adouble locSin=sin(alpha); adouble tmpVec1=-locSin*vec[0] + locCos*vec[1]; vec[0]=locCos*vec[0] + locSin*vec[1]; vec[1]=tmpVec1; } void D3T ( adouble * depVec, adouble * indepVec, adouble & alpha ) { if ( indepVec == depVec ) { D3T(depVec,alpha); return; } adouble locCos=cos(alpha); adouble locSin=sin(alpha); depVec[0]=locCos*indepVec[0] + locSin*indepVec[1]; depVec[1]=-locSin*indepVec[0] + locCos*indepVec[1]; depVec[2]=indepVec[2]; } #undef _ROTATIONS_C_ ADOL-C-2.4.1/ADOL-C/examples/additional_examples/timing/vgenmain.cpp0000644000076600007660000012111511732376410023422 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: vgenmain.cpp Revision: $Id: vgenmain.cpp 299 2012-03-21 16:08:40Z kulshres $ Contents: Vector Generic Main File: for use with function modules containing several vector function examples (e.g. the sinple example in vfunc_simplevec.cpp) Each << function module >> contains: (1) const char* const controlFileName (2) int indepDim; (3) int depDim; (4) void initProblemParameters( void ) (5) void initIndependents( double* indeps ) (6) void originalVectorFunction( double* indeps, double* deps ) (7) void tapingVectorFunction( int tag, double* indeps, double* deps ) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #define _VGENMAIN_C_ /****************************************************************************/ /* INCLUDES */ #include #include "../clock/myclock.h" #include #include /****************************************************************************/ /* MACROS */ #define TIMEFORMAT " %12.6E units, %12.6E seconds\n" /****************************************************************************/ /* EXTERNAL STUFF FROM FUNCTION MODULES*/ /*--------------------------------------------------------------------------*/ /* Control file name */ const extern char* controlFileName; /*--------------------------------------------------------------------------*/ /* Dimensions */ extern int indepDim; extern int depDim; /*--------------------------------------------------------------------------*/ /* Init Problem Parameters */ extern void initProblemParameters( void ); /*--------------------------------------------------------------------------*/ /* Initialize indeps */ extern void initIndependents( double* indeps ); /*--------------------------------------------------------------------------*/ /* Original scalar function */ extern void originalVectorFunction( double* indeps, double* deps ); /*--------------------------------------------------------------------------*/ /* Taping scalar function */ extern void tapingVectorFunction( int tag, double* indeps, double* deps ); /****************************************************************************/ /* CONTROL STUFF */ enum controlParameter { cpIndepDimension, cpDepDimension, cpAverageCount, cpDegree, cpVecCountFW, cpVecCountRV, cpVecCountTR, cpZosFW, cpFosFW, cpHosFW, cpFovFW, cpHovFW, cpFosRV, cpHosRV, cpFovRV, cpHovRV, cpFunction, cpJacobian, cpVecJac, cpJacVec, cpLagHessVec, cpTensor, cpInvTensor, cpCount }; /****************************************************************************/ /* PROVIDE RANDOM INITs */ //unsigned short int dx[3]; /* variable needed by erand48(.) */ void initRand ( void ) /* a function to initialize dx using actual time */ { struct tm s; time_t t; time(&t); s=*localtime(&t); srand(s.tm_sec*s.tm_min); /* dx[0]=rand(); dx[1]=rand(); dx[2]=rand();*/ } /****************************************************************************/ /* MAIN PROGRAM */ int main() { int i, j, k; int tag = 1; /* tape tag */ int taskCount = 0; int pFW, pRV, pTR, degree, keep; /* forward/reverse parameters */ int evalCount; /* # of evaluations */ /****************************************************************************/ /* READ CONTROL PARAMETERS FROM FILE */ int controlParameters[cpCount]; FILE* controlFile; /*------------------------------------------------------------------------*/ /* open file to read */ if ((controlFile = fopen(controlFileName,"r")) == NULL) { fprintf(stdout,"ERROR: Could not open control file %s\n", controlFileName); exit(-1); } /*------------------------------------------------------------------------*/ /* read all values */ for (i=0; i always */ fprintf(stdout,"\nTASK %d: Original function evaluation\n", taskCount++); t00 = myclock(1); for (i=0; i always */ fprintf(stdout,"--------------------------------------------------------"); fprintf(stdout,"\nTASK %d: Taping the function\n", taskCount++); t00 = myclock(1); /* NOTE: taping will be performed ONCE only */ tapingVectorFunction(tag,indeps,deps); t01 = myclock(); size_t tape_stats[STAT_SIZE]; tapestats(tag,tape_stats); fprintf(stdout,"\n independents %d\n",tape_stats[NUM_INDEPENDENTS]); fprintf(stdout," dependents %d\n",tape_stats[NUM_DEPENDENTS]); fprintf(stdout," operations %d\n",tape_stats[NUM_OPERATIONS]); fprintf(stdout," operations buffer size %d\n",tape_stats[OP_BUFFER_SIZE]); fprintf(stdout," locations buffer size %d\n",tape_stats[LOC_BUFFER_SIZE]); fprintf(stdout," constants buffer size %d\n",tape_stats[VAL_BUFFER_SIZE]); fprintf(stdout," maxlive %d\n",tape_stats[NUM_MAX_LIVES]); fprintf(stdout," valstack size %d\n\n",tape_stats[TAY_STACK_SIZE]); fprintf(stdout," "); fprintf(stdout,TIMEFORMAT,(t01-t00)*timeUnit*evalCount, (t01-t00)); /****************************************************************************/ /* 2. ZOS_FORWARD */ if (controlParameters[cpZosFW]) { fprintf(stdout,"--------------------------------------------------------"); fprintf(stdout,"\nTASK %d: forward(tag, m=%d, n=%d, keep, X[n], Y[m])\n", taskCount++,depDim,indepDim); fprintf(stdout," ---> zos_forward\n"); /*----------------------------------------------------------------------*/ /* NO KEEP */ t00 = myclock(1); for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } } /****************************************************************************/ /* 3. FOS_FORWARD */ if (controlParameters[cpFosFW]) { fprintf(stdout,"--------------------------------------------------------"); fprintf(stdout,"\nTASK %d: forward(tag, m=%d, n=%d, d=1, keep, X[n][d+1], Y[m][d+1])\n", taskCount++,depDim,indepDim); fprintf(stdout," ---> fos_forward\n"); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ XPP = new double*[indepDim]; for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } /*----------------------------------------------------------------------*/ /* Free tensors */ for (i=0; i hos_forward\n"); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ XPP = new double*[indepDim]; for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } /*----------------------------------------------------------------------*/ /* Free tensors */ for (i=0; i fov_forward\n"); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ XPP = new double*[indepDim]; for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } /*----------------------------------------------------------------------*/ /* Free tensors */ for (i=0; i hov_forward\n"); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ XPPP = new double**[indepDim]; for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } /*----------------------------------------------------------------------*/ /* Free tensors */ for (i=0; i fos_reverse\n"); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ ZP = new double[indepDim]; UP = new double[depDim]; for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } /*----------------------------------------------------------------------*/ /* Free tensors */ delete[] ZP; delete[] UP; } /****************************************************************************/ /* 8. HOS_REVERSE */ if (controlParameters[cpHosRV]) { fprintf(stdout,"--------------------------------------------------------"); fprintf(stdout,"\nTASK %d: reverse(tag, m=%d, n=%d, d=%d, u[m], Z[n][d+1])\n", taskCount++,depDim,indepDim,degree); fprintf(stdout," ---> hos_reverse\n"); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ ZPP = new double*[indepDim]; for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } /*----------------------------------------------------------------------*/ /* Free tensors */ for (i=0; i fov_reverse\n"); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ ZPP = new double*[pRV]; for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } /*----------------------------------------------------------------------*/ /* Free tensors */ for (i=0; i hov_reverse\n"); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ ZPPP = new double**[pRV]; for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } /*----------------------------------------------------------------------*/ /* Free tensors */ for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } } /****************************************************************************/ /* 12. JACOBIAN */ if (controlParameters[cpJacobian]) { fprintf(stdout,"--------------------------------------------------------"); fprintf(stdout,"\nTASK %d: jacobian(tag, m=%d, n=%d, X[n], J[m][n])\n", taskCount++,depDim,indepDim); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ JPP = new double*[depDim]; for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } /*----------------------------------------------------------------------*/ /* Free tensors */ for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } /*----------------------------------------------------------------------*/ /* Free tensors */ delete[] UP; delete[] VP; } /****************************************************************************/ /* 14. JACVEC */ if (controlParameters[cpJacVec]) { fprintf(stdout,"--------------------------------------------------------"); fprintf(stdout,"\nTASK %d: jac_vec(tag, m=%d, n=%d, X[n], V[n], U[m])\n", taskCount++,depDim,indepDim); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ UP = new double[depDim]; VP = new double[indepDim]; for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } /*----------------------------------------------------------------------*/ /* Free tensors */ delete[] UP; delete[] VP; } /****************************************************************************/ /* 15. LAGHESSVEC */ if (controlParameters[cpLagHessVec]) { fprintf(stdout,"--------------------------------------------------------"); fprintf(stdout,"\nTASK %d: lagra_hess_vec(tag, m=%d, n=%d, X[n], U[m], V[n], W[n])\n", taskCount++,depDim,indepDim); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ UP = new double[depDim]; for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } /*----------------------------------------------------------------------*/ /* Free tensors */ delete[] VP; delete[] WP; delete[] UP; } /****************************************************************************/ /* 16. TENSOR */ if (controlParameters[cpTensor]) { fprintf(stdout,"--------------------------------------------------------"); fprintf(stdout,"\nTASK %d: tensor_eval(tag, m =%d, n=%d, d=%d, p=%d, X[n], tensor[m][dim], S[n][p])\n", taskCount++,depDim,indepDim,degree, pTR); fprintf(stdout,"\n dim = ((p+d) over d)\n"); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ dim = binomi(pTR+degree,degree); TPP = new double*[depDim]; for (i=0; i 1) {} /*----------------------------------------------------------------------*/ /* Free tensors */ for (i=0; i 1) {} /*----------------------------------------------------------------------*/ /* Free tensors */ for (i=0; i> contains: (1) const char* const controlFileName (2) int indepDim; (3) int depDim; (4) void initProblemParameters( void ) (5) void initIndependents( double* indeps ) (6) void originalVectorFunction( double* indeps, double* deps ) (7) void tapingVectorFunction( int tag, double* indeps, double* deps ) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #define _VFUNC_SIMPLEVEC_C_ /****************************************************************************/ /* INCLUDES */ #include #include #include /****************************************************************************/ /* GLOBAL VARIABLES */ /*--------------------------------------------------------------------------*/ /* Control file name */ const char* controlFileName = "simplevec.ctrl"; /*--------------------------------------------------------------------------*/ /* Dimensions */ int indepDim; int depDim; /*--------------------------------------------------------------------------*/ /* Other problem dependent parameters */ //static unsigned short int dx[3]; /* variable needed by erand48(.) */ /****************************************************************************/ /* INIT PROBLEM PARAMETERS */ void initProblemParameters( void ) { fprintf(stdout,"A SIMPLE VECTOR FUNCTION (ADOL-C Example)\n\n"); /* number of indeps & deps */ if (indepDim < 1) { fprintf(stdout," # of independents = ? "); fscanf(stdin,"%d",&indepDim); fprintf(stdout,"\n"); } if (depDim < 1) { fprintf(stdout," # of dependents = ? "); fscanf(stdin,"%d",&depDim); fprintf(stdout,"\n"); } /* Init erand48(); */ struct tm s; time_t t; time(&t); s=*localtime(&t); srand(s.tm_sec*s.tm_min); /* dx[0]=rand(); dx[1]=rand(); dx[2]=rand();*/ } /****************************************************************************/ /* INITIALIZE INDEPs */ void initIndependents( double* indeps ) { for (int i=0; i>= *iP++; trace_off(); } #undef _VFUNC_SIMPLEVEC_C_ ADOL-C-2.4.1/ADOL-C/examples/additional_examples/timing/sfunc_experimental.cpp0000644000076600007660000001101211452356477025515 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: sfunc_experimental.cpp Revision: $Id: sfunc_experimental.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: function module containing an experimental function Each << function module >> contains: (1) const char* const controlFileName (2) int indepDim; (3) void initProblemParameters( void ) (4) void initIndependents( double* indeps ) (5) double originalScalarFunction( double* indeps ) (6) double tapingScalarFunction( int tag, double* indeps ) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #define _SFUNC_EXPERIMENTAL_C_ /****************************************************************************/ /* INCLUDES */ #include #include #include /****************************************************************************/ /* GLOBAL VARIABLES */ /*--------------------------------------------------------------------------*/ /* Control file name */ const char* controlFileName = "experimental.ctrl"; /*--------------------------------------------------------------------------*/ /* Dimensions */ int indepDim; /*--------------------------------------------------------------------------*/ /* Other problem dependent parameters */ //#define CODE sqrt(indeps[i]) #define CODE sin(indeps[i]) //#define CODE indeps[i]*indeps[i] /****************************************************************************/ /* INIT PROBLEM PARAMETERS */ void initProblemParameters( void ) { fprintf(stdout,"EXPERIMENTAL EXAMPLE (ADOL-C Example)\n\n"); if (indepDim <= 0) { fprintf(stdout," number of independent variables = ? "); fscanf(stdin,"%d",&indepDim); fprintf(stdout,"\n"); } } /****************************************************************************/ /* INITIALIZE INDEPs */ void initIndependents( double* indeps ) { int i; for (i=0; i>= res; trace_off(); return res; } #undef _SFUNC_EXPERIMENTAL_C_ ADOL-C-2.4.1/ADOL-C/examples/additional_examples/timing/sfunc_griewank.cpp0000644000076600007660000001133511452356477024637 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: sfunc_griewank.cpp Revision: $Id: sfunc_griewank.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: function module containing Griewanks function Each << function module >> contains: (1) const char* const controlFileName (2) int indepDim; (3) void initProblemParameters( void ) (4) void initIndependents( double* indeps ) (5) double originalScalarFunction( double* indeps ) (6) double tapingScalarFunction( int tag, double* indeps ) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #define _SFUNC_GRIEWANK_C_ /****************************************************************************/ /* INCLUDES */ #include #include /****************************************************************************/ /* GLOBAL VARIABLES */ /*--------------------------------------------------------------------------*/ /* Control file name */ const char* controlFileName = "griewankexam.ctrl"; /*--------------------------------------------------------------------------*/ /* Dimensions */ int indepDim; /*--------------------------------------------------------------------------*/ /* Other problem dependent parameters */ const double D = 4000.0; /****************************************************************************/ /* INIT PROBLEM PARAMETERS */ void initProblemParameters( void ) { fprintf(stdout,"GRIEWANKs FUNCTION (ADOL-C Example)\n\n"); if (indepDim <= 0) { fprintf(stdout," number of independent variables = ? "); fscanf(stdin,"%d",&indepDim); fprintf(stdout,"\n"); } } /****************************************************************************/ /* INITIALIZE INDEPs */ void initIndependents( double* indeps ) { int i; for (i=0; i>= res; trace_off(); return res; } #undef _SFUNC_GRIEWANK_C_ ADOL-C-2.4.1/ADOL-C/examples/additional_examples/timing/vfunc_pargear.cpp0000644000076600007660000005453711452356477024467 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: vfunc_pargear.cpp Revision: $Id: vfunc_pargear.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: Example of function module containing the machine tool example of gearing (parametrized version) Each << function module >> contains: (1) const char* const controlFileName (2) int indepDim; (3) int depDim; (4) void initProblemParameters( void ) (5) void initIndependents( double* indeps ) (6) void originalVectorFunction( double* indeps, double* deps ) (7) void tapingVectorFunction( int tag, double* indeps, double* deps ) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #define _VFUNC_PARGEAR_C_ /****************************************************************************/ /* INCLUDES */ #include #include "rotations.h" #include #include #include /****************************************************************************/ /* GLOBAL VARIABLES */ #define Pi 3.141592654 /*--------------------------------------------------------------------------*/ /* Control file name */ const char* controlFileName = "pargearexam.ctrl"; /*--------------------------------------------------------------------------*/ /* Dimensions */ int indepDim; int depDim; int radMotDegree; int verMotDegree; int horMotDegree; int helMotDegree; int angMotDegree; int modRolDegree; /*--------------------------------------------------------------------------*/ /* important machine tool parameters */ // example bet06-23 convex pinion flank int konvex= 1; // konvexe oder konkave Flanke int zz= 6; // Zaehnezahl double xmk= -17.50195; // Messerversatz double ymk= 80.0; // MK-Versatz double kopspw= 0.0; // Kopfspanwinkel double flaspw= 0.0; // Flankenspanwinkel double meschw= 0.0; // Messerschwenkwinkel double flkrrd= 101.44158; // Spitzenradius, Flugkreisr. double e= 0.0; // MK-Exzentrizitaet double exzenw= 0.0; // Exzentrizitaetswinkel double thetas= 0.0; // Messerkopfschwenkung double thetan= 0.0; // Messerkopfneigung double xmw= 24.63350; // MK-x double ymw= -73.69500; // MK-y double zmw= 96.15919; // MK-z double thetaw=-314.52420; // Wiegenwinkel=Waelztrommelwinkel double m= 0.0; // Erzeugungs-Achsversatz double zwr= 0.0; // Verschiebung Werkradachse double delta= 14.62090; // Kegelwinkel double omega= 0.0; double c= 0.0; double r= 2.1; // Kopfradius double rs= 2594.425; // Sphaerikradius double ys= 876.147; // Sphaerik-Mitte-Y double zs= -2442.015; // Sphaerik-Mitte-Z /*--------------------------------------------------------------------------*/ /* Other problem dependent parameters */ //static unsigned short int dx[3]; /* variable needed by erand48(.) */ /****************************************************************************/ /* INIT PROBLEM PARAMETERS */ void initProblemParameters( void ) { fprintf(stdout,"PARGEAREXAM (ADOL-C Example)\n\n"); /* number of indeps & deps */ depDim = 3; indepDim = 3; fprintf(stdout," Radial motion degree = ? [-1=no polynomial,0,...,6]"); fscanf(stdin,"%d",&radMotDegree); fprintf(stdout,"\n"); if (radMotDegree>=0) indepDim += radMotDegree + 1; fprintf(stdout," Vertical motion degree = ? "); fscanf(stdin,"%d",&verMotDegree); fprintf(stdout,"\n"); if (verMotDegree>=0) indepDim += verMotDegree + 1; fprintf(stdout," Horizontal motion degree = ? "); fscanf(stdin,"%d",&horMotDegree); fprintf(stdout,"\n"); if (horMotDegree>=0) indepDim += horMotDegree + 1; fprintf(stdout," Helical motion degree = ? "); fscanf(stdin,"%d",&helMotDegree); fprintf(stdout,"\n"); if (helMotDegree>=0) indepDim += helMotDegree + 1; fprintf(stdout," Angular motion degree = ? "); fscanf(stdin,"%d",&angMotDegree); fprintf(stdout,"\n"); if (angMotDegree>=0) indepDim += angMotDegree + 1; fprintf(stdout," Modified roll degree = ? "); fscanf(stdin,"%d",&modRolDegree); fprintf(stdout,"\n"); if (modRolDegree>=0) indepDim += modRolDegree + 1; /* Init erand48(); */ struct tm s; time_t t; time(&t); s=*localtime(&t); srand(s.tm_sec*s.tm_min); /* dx[0]=rand(); dx[1]=rand(); dx[2]=rand();*/ } /****************************************************************************/ /* INITIALIZE INDEPs */ void initIndependents( double* indeps ) { for (int i=0; i (-xNeu) f[1] += hgZmw; // FLB1-z-Achse zeigt nach rechts -> (yNeu) f[2] += hgYmw; // FLB1-y-Achse zeigt aus der Wiege -> (zNeu) // Wiegenwinkel thetaW, entspricht dem wert t=0 D3(f,hgThetaW); // ZUSATZBEWEGUNG Radial motion if (radialMotionDegree >= 0) { ah = 0.0; for (i=radialMotionDegree; i>0; i--) { ah += radialMotionCoeff[i]; ah *= z[2]; } ah += radialMotionCoeff[0]; f[1] += ah; // radiale Verschiebung des Messerkopfes } // Wiegenbewegung mit Parameter t D3(f,z[2]); // ZUSATZBEWEGUNG Vertical motion if (verticalMotionDegree >= 0) { ah = 0.0; for (i=verticalMotionDegree; i>0; i--) { ah += verticalMotionCoeff[i]; ah *= z[2]; } ah += verticalMotionCoeff[0]; f[0] += ah; // Achsversatz in positive x-Richtung } // originaler Achsversatz f[0] += hgM; // ZUSATZBEWEGUNG Horizontal motion if (horizontalMotionDegree >= 0) { ah = 0.0; for (i=horizontalMotionDegree; i>0; i--) { ah += horizontalMotionCoeff[i]; ah *= z[2]; } ah += horizontalMotionCoeff[0]; f[1] += ah; // Achsversatz in positive y-Richtung } // ZUSATZBEWEGUNG Helical motion if (helicalMotionDegree >= 0) { ah = 0.0; for (i=helicalMotionDegree; i>0; i--) { ah += helicalMotionCoeff[i]; ah *= z[2]; } ah += helicalMotionCoeff[0]; f[2] -= ah; // Tiefenposition in negative z-Richtung } // Eindrehen in Orientierung des Werkrades f[0] = -f[0]; ah = f[1]; f[1] = -f[2]; f[2] = -ah; // ZUSATZBEWEGUNG Angular motion if (angularMotionDegree >= 0) { ah = 0.0; for (i=angularMotionDegree; i>0; i--) { ah += angularMotionCoeff[i]; ah *= z[2]; } ah += angularMotionCoeff[0]; D1(f,ah); // umgekehrte Drehung um die x-Achse } // Teilkegeloeffnungswinkel delta - y-Achsen entgegengesetzt D1(f,hgDelta); // neue Verschiebung der Werkradachse f[2] += hgZwr; // z-Achse zeigt zu Spitze // ZUSATZBEWEGUNG Modified roll if (modifiedRollDegree >= 0) { ah = 0.0; for (i=modifiedRollDegree; i>1; i--) { ah += modifiedRollCoeff[i]; ah *= z[2]; } if (modifiedRollDegree > 0) ah += modifiedRollCoeff[1]; ah += hgOmega; ah *= z[2]; ah += modifiedRollCoeff[0]; } else { ah = hgOmega; ah *= z[2]; } ah += hgC*z[1]; // c*v + omega * t // gekoppelte Werkraddrehung in Abhaengigkeit von t und v D3(f,ah); } /*--------------------------------------------------------------------------*/ /* The interface function */ void originalVectorFunction( double* indeps, double* deps ) { int i = 3; double * radMotCoeff = indeps+i; i += radMotDegree; double * verMotCoeff = indeps+i; i += verMotDegree; double * horMotCoeff = indeps+i; i += horMotDegree; double * helMotCoeff = indeps+i; i += helMotDegree; double * angMotCoeff = indeps+i; i += angMotDegree; double * modRolCoeff = indeps+i; gearFunction( indeps, deps, // jetzt kommen die ganzen Parameter xmk, // Messerversatz ymk, // MK-Versatz kopspw, // Kopfspanwinkel flaspw, // Flankenspanwinkel meschw, // Messerschwenkwinkel flkrrd, // Flugkreisradius e, // Exzentrizitaet exzenw, // Exzentrizitaetswinkel thetas, // Messerkopfschwenkung thetan, // Messerkopfneigung xmw, // MK-x ymw, // MK-y zmw, // MK-z thetaw, // Wiegenwinkel m, // Achsversatz zwr, // Verschiebung Werkradachse delta, // Teilkegeloeffnungswinkel omega, // c, r, // Kopfradius rs, // Sphaerikradius ys, // Sphaerik-Mitte-Y zs, // Sphaerik-Mitte-Z // jetzt die Zusatzbewegungen radMotDegree, radMotCoeff, verMotDegree, verMotCoeff, horMotDegree, horMotCoeff, helMotDegree, helMotCoeff, angMotDegree, angMotCoeff, modRolDegree, modRolCoeff ); } /****************************************************************************/ /* TAPING SCALAR FUNCTION */ /*--------------------------------------------------------------------------*/ /* The model function */ /*--------------------------------------------------------------------------*/ // parametrized cutting edge void def_messer( adouble * z, adouble * messer, // jetzt kommen die Parameter double hgR, // Kopfradius double hgRs, // Sphaerikradius double hgYs, // Sphaerik-Mitte-Y double hgZs // Sphaerik-Mitte-Z ) { double u0, uOri, phi0; adouble h; phi0= asin((hgR+hgYs)/(hgR+hgRs)); if (konvex==1) { u0=hgRs*phi0; uOri=1.0; } else { u0=hgRs*(phi0-Pi); uOri=-1.0; }; h= (z[0]-u0)/(uOri*hgRs); messer[0]=hgZs+hgRs*cos(h); messer[1]=0.0; messer[2]=-hgYs-hgRs*sin(h); } /*--------------------------------------------------------------------------*/ // the main function void activeGearFunction( adouble* z, // (u,v,t) Parametrisierung der Bewegung der Messerschneide adouble* f, // (x,y,z) Bewegte Messerschneide // jetzt kommen die ganzen Parameter double hgXmk, // Messerversatz double hgYmk, // MK-Versatz double hgKopSpW, // Kopfspanwinkel double hgFlaSpW, // Flankenspanwinkel double hgMeSchW, // Messerschwenkwinkel double hgFlKrRd, // Flugkreisradius double hgE, // Exzentrizitaet double hgExzenW, // Exzentrizitaetswinkel double hgThetaS, // Messerkopfschwenkung double hgThetaN, // Messerkopfneigung double hgXmw, // MK-x double hgYmw, // MK-y double hgZmw, // MK-z double hgThetaW, // Wiegenwinkel double hgM, // Achsversatz double hgZwr, // Verschiebung Werkradachse double hgDelta, // Teilkegeloeffnungswinkel double hgOmega, // double hgC, double hgR, // Kopfradius double hgRs, // Sphaerikradius double hgYs, // Sphaerik-Mitte-Y double hgZs, // Sphaerik-Mitte-Z // jetzt die Zusatzbewegungen int radialMotionDegree, adouble* radialMotionCoeff, int verticalMotionDegree, adouble* verticalMotionCoeff, int horizontalMotionDegree, adouble* horizontalMotionCoeff, int helicalMotionDegree, adouble* helicalMotionCoeff, int angularMotionDegree, adouble* angularMotionCoeff, int modifiedRollDegree, adouble* modifiedRollCoeff ) { int i; adouble ah; // Definition der Schneide def_messer(z,f,hgR,hgRs,hgYs,hgZs); // Position der Schneide am Messerkopf // (jetzt die Ber"ucksichtigung von hgKopSpW, hgFlaSpW, hgMeSchW) D2T(f,hgMeSchW); // Messerschwenkwinkel Theta_M D3T(f,hgFlaSpW); // Flankenspanwinkel Theta_F D1(f,hgKopSpW); // Kopfspanwinkel Theta_K // Position der Schneide am Messerkopf f[0] += hgFlKrRd; // Flugkreisradius f[1] -= hgXmk; // Messerversatz // Messerkopfrotation mit Parameter v D3(f,z[1]); // Lage des Messerkopfs auf der Wiege f[2] -= hgYmk; // Beruecksichtigung der Messerkopf-Exzentrizitaet f[0] += hgE * cos(hgExzenW); f[1] -= hgE * sin(hgExzenW); // Eindrehen in Orientierung der Wiege ah = f[0]; f[0] = f[1]; f[1] = ah; f[2] = -f[2]; // Beruecksichtigung von Messerkopf-Schwenkwinkel hgThetaS // und der Messerkopfneigung hgThetaN D3T(f,hgThetaS); // Einschwenken in die Neigungsachse D1T(f,hgThetaN); // Neigung um x-Achse D3(f,hgThetaS); // Rueckschwenken aus der Neigungsachse // Verschiebung f[0] -= hgXmw; // FLB1-x-Achse zeigt nach oben -> (-xNeu) f[1] += hgZmw; // FLB1-z-Achse zeigt nach rechts -> (yNeu) f[2] += hgYmw; // FLB1-y-Achse zeigt aus der Wiege -> (zNeu) // Wiegenwinkel thetaW, entspricht dem wert t=0 D3(f,hgThetaW); // ZUSATZBEWEGUNG Radial motion if (radialMotionDegree >= 0) { ah = 0.0; for (i=radialMotionDegree; i>0; i--) { ah += radialMotionCoeff[i]; ah *= z[2]; } ah += radialMotionCoeff[0]; f[1] += ah; // radiale Verschiebung des Messerkopfes } // Wiegenbewegung mit Parameter t D3(f,z[2]); // ZUSATZBEWEGUNG Vertical motion if (verticalMotionDegree >= 0) { ah = 0.0; for (i=verticalMotionDegree; i>0; i--) { ah += verticalMotionCoeff[i]; ah *= z[2]; } ah += verticalMotionCoeff[0]; f[0] += ah; // Achsversatz in positive x-Richtung } // originaler Achsversatz f[0] += hgM; // ZUSATZBEWEGUNG Horizontal motion if (horizontalMotionDegree >= 0) { ah = 0.0; for (i=horizontalMotionDegree; i>0; i--) { ah += horizontalMotionCoeff[i]; ah *= z[2]; } ah += horizontalMotionCoeff[0]; f[1] += ah; // Achsversatz in positive y-Richtung } // ZUSATZBEWEGUNG Helical motion if (helicalMotionDegree >= 0) { ah = 0.0; for (i=helicalMotionDegree; i>0; i--) { ah += helicalMotionCoeff[i]; ah *= z[2]; } ah += helicalMotionCoeff[0]; f[2] -= ah; // Tiefenposition in negative z-Richtung } // Eindrehen in Orientierung des Werkrades f[0] = -f[0]; ah = f[1]; f[1] = -f[2]; f[2] = -ah; // ZUSATZBEWEGUNG Angular motion if (angularMotionDegree >= 0) { ah = 0.0; for (i=angularMotionDegree; i>0; i--) { ah += angularMotionCoeff[i]; ah *= z[2]; } ah += angularMotionCoeff[0]; D1(f,ah); // umgekehrte Drehung um die x-Achse } // Teilkegeloeffnungswinkel delta - y-Achsen entgegengesetzt D1(f,hgDelta); // neue Verschiebung der Werkradachse f[2] += hgZwr; // z-Achse zeigt zu Spitze // ZUSATZBEWEGUNG Modified roll if (modifiedRollDegree >= 0) { ah = 0.0; for (i=modifiedRollDegree; i>1; i--) { ah += modifiedRollCoeff[i]; ah *= z[2]; } if (modifiedRollDegree > 0) ah += modifiedRollCoeff[1]; ah += hgOmega; ah *= z[2]; ah += modifiedRollCoeff[0]; } else { ah = hgOmega; ah *= z[2]; } ah += hgC*z[1]; // c*v + omega * t // gekoppelte Werkraddrehung in Abhaengigkeit von t und v D3(f,ah); } /*--------------------------------------------------------------------------*/ /* The interface function */ void tapingVectorFunction( int tag, double* indeps, double* deps ) { int i; trace_on(tag); adouble* activeIndeps = new adouble[indepDim]; adouble* activeDeps = new adouble[depDim]; adouble* aIP = activeIndeps; double* iP = indeps; for (i=0; i>= *iP++; trace_off(); delete [] activeDeps; delete [] activeIndeps; } #undef _VFUNC_GEAR_C_ ADOL-C-2.4.1/ADOL-C/examples/additional_examples/timing/sfunc_speelpenning.cpp0000644000076600007660000001064411452356477025521 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: sfunc_speelpenning.cpp Revision: $Id: sfunc_speelpenning.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: function module containing Speepennings product Each << function module >> contains: (1) const char* const controlFileName (2) int indepDim; (3) void initProblemParameters( void ) (4) void initIndependents( double* indeps ) (5) double originalScalarFunction( double* indeps ) (6) double tapingScalarFunction( int tag, double* indeps ) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #define _SFUNC_SPEELPENNING_C_ /****************************************************************************/ /* INCLUDES */ #include #include /****************************************************************************/ /* GLOBAL VARIABLES */ /*--------------------------------------------------------------------------*/ /* Control file name */ const char* controlFileName = "speelpenning.ctrl"; /*--------------------------------------------------------------------------*/ /* Dimensions */ int indepDim; /*--------------------------------------------------------------------------*/ /* Other problem dependent parameters */ /****************************************************************************/ /* INIT PROBLEM PARAMETERS */ void initProblemParameters( void ) { fprintf(stdout,"SPEELPENNINGS PRODUCT Type 2 (ADOL-C Example)\n\n"); if (indepDim <= 0) { fprintf(stdout," number of independent variables = ? "); fscanf(stdin,"%d",&indepDim); fprintf(stdout,"\n"); } } /****************************************************************************/ /* INITIALIZE INDEPs */ void initIndependents( double* indeps ) { int i; for (i=0; i>= res; trace_off(); return res; } #undef _SFUNC_SPEELPENNING_C_ ADOL-C-2.4.1/ADOL-C/examples/additional_examples/timing/eutrophexam.ctrl0000644000076600007660000000144111227416777024352 0ustar coincoin0 problem dimension (n) 0 problem dimension (m) 0 # of evaluations to average over use forward 0 optional degree for higher order stuff (--> keep) 0 # of vectors in vector forward mode (p) 0 # of vectors in vector reverse mode (p) 0 # of vectors in tensor_eval (p) 1 test zos_forward or not 1 test fos_forward or not 1 test hos_forward or not 1 test fov_forward or not 1 test hov_forward or not 1 test fos_reverse or not 1 test hos_reverse or not 1 test fov_reverse or not 1 test hov_reverse or not 1 test Function or not 1 test Gradient/Jacobian or not 1 test Vector-Gradient/Jacobian-Product or not 1 test Gradient/Jacobian-Vector-Product or not 1 test Lagrange-Hessian-Vector-Product or not 1 test Tensors or not 0 test Inverse tensors or not ADOL-C-2.4.1/ADOL-C/examples/additional_examples/timing/vfunc_shuttle.cpp0000644000076600007660000001724411452356477024530 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: vfunc_shuttle.cpp Revision: $Id: vfunc_shuttle.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: Example of function module containing the shuttle example (based on shuttlexam.c of version 1.7) Each << function module >> contains: (1) const char* const controlFileName (2) int indepDim; (3) int depDim; (4) void initProblemParameters( void ) (5) void initIndependents( double* indeps ) (6) void originalVectorFunction( double* indeps, double* deps ) (7) void tapingVectorFunction( int tag, double* indeps, double* deps ) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #define _VFUNC_SHUTTLE_C_ /****************************************************************************/ /* INCLUDES */ #include #include /****************************************************************************/ /* GLOBAL VARIABLES */ /*--------------------------------------------------------------------------*/ /* Control file name */ const char* controlFileName = "shuttlexam.ctrl"; /*--------------------------------------------------------------------------*/ /* Dimensions */ int indepDim; int depDim; /*--------------------------------------------------------------------------*/ /* Other problem dependent parameters */ const double Pi = 3.141592654; const double ae = 20902900.0; const double mu = 0.14E+17; const double a = 40.0; const double S = 2690.0; const double crtd = 180.0/Pi; const double cl = 0.84-0.48*(38.0-a*crtd)/26.0; const double C0 = 3.974960446019; const double C1 = -0.01448947694635; const double C2 = -0.2156171551995e-4; const double C3 = -0.1089609507291e-7; const double V0 = 0.0; const double ma = 5964.496499824; const double Om = .72921159e-4; /****************************************************************************/ /* INIT PROBLEM PARAMETERS */ void initProblemParameters( void ) { fprintf(stdout,"SHUTTLEXAM (ADOL-C Example)\n\n"); /* number of indeps & deps */ indepDim = 14; depDim = 7; } /****************************************************************************/ /* INITIALIZE INDEPs */ void initIndependents( double* indeps ) { indeps[0] = 264039.328; /* H */ indeps[1] = 177.718047; /* x */ indeps[2] = 32.0417885; /* l */ indeps[3] = 24317.0798; /* V */ indeps[4] = -0.749986488; /* g */ indeps[5] = 62.7883367; /* A */ indeps[6] = 41.100771834; /* b */ indeps[7] = -318; /* Hp */ indeps[8] = 0.01; /* xp */ indeps[9] = 0.1; /* lp */ indeps[10] = -3.6; /* Vp */ indeps[11] = 0.001; /* gp */ indeps[12] = 0.1; /* Ap */ indeps[13] = 0.06; /* bp */ } /****************************************************************************/ /* ORIGINAL SCALAR FUNCTION */ /*--------------------------------------------------------------------------*/ /* The shuttle function */ void shuttle( double* indeps, double* deps ) { double r,gr,rho,L,cd,Z; double sing,cosg,sinA,cosA,sinl,cosl,tanl; r = indeps[0]+ae; gr = mu/(r*r); rho= 0.002378*exp(-indeps[0]/23800.0); L = 0.5*rho*cl*S*indeps[3]*indeps[3]; cd = 0.78-0.58*(38.0-a*crtd)/26.0; Z = .5*rho*cd*S*indeps[3]*indeps[3]; // evaluate the dynamic equations ... sinA = sin(indeps[5]); cosA = cos(indeps[5]); sing = sin(indeps[4]); cosg = cos(indeps[4]); sinl = sin(indeps[2]); cosl = cos(indeps[2]); tanl = sinl/cosl; deps[0] = indeps[3]*sing-indeps[7]; deps[1] = indeps[3]*cosg*sinA/(r*cosl)-indeps[8]; deps[2] = indeps[3]*cosg*cosA/r-indeps[9]; deps[3] = -Z/ma-gr*sing-Om*Om*r*cosl *(sinl*cosA*cosg-cosl*sing)-indeps[10]; deps[4] = L*cos(indeps[6])/(ma*indeps[3]) +cosl/indeps[3]*(indeps[3]*indeps[3]/r-gr) +2*Om*cosl*sinA +Om*Om*r*cosl/indeps[3]*(sinl*cosA*sing+cosl*cosg) -indeps[11]; deps[5] = L*sin(indeps[6])/(ma*indeps[3]*cosg)+indeps[3]/r*cosg*sinA*tanl -2*Om*(cosl*cosA*sing/cosg-sinl) +Om*Om*r*cosl*sinl*sinA/(indeps[3]*cosg)-indeps[12]; deps[6] = Z/ma -(C0+(indeps[3]-V0)*(C1+(indeps[3]-V0)*(C2+(indeps[3]-V0)*C3))); } /*--------------------------------------------------------------------------*/ /* The interface function */ void originalVectorFunction( double* indeps, double* deps ) { shuttle(indeps,deps); } /****************************************************************************/ /* TAPING SCALAR FUNCTION */ /*--------------------------------------------------------------------------*/ /* The active shuttle function */ void activeShuttle( adouble* indeps, adouble* deps ) { adouble r,gr,rho,L,cd,Z; adouble sing,cosg,sinA,cosA,sinl,cosl,tanl; r = indeps[0]+ae; gr = mu/(r*r); rho= 0.002378*exp(-indeps[0]/23800.0); L = 0.5*rho*cl*S*indeps[3]*indeps[3]; cd = 0.78-0.58*(38.0-a*crtd)/26.0; Z = .5*rho*cd*S*indeps[3]*indeps[3]; // evaluate the dynamic equations ... sinA = sin(indeps[5]); cosA = cos(indeps[5]); sing = sin(indeps[4]); cosg = cos(indeps[4]); sinl = sin(indeps[2]); cosl = cos(indeps[2]); tanl = sinl/cosl; deps[0] = indeps[3]*sing-indeps[7]; deps[1] = indeps[3]*cosg*sinA/(r*cosl)-indeps[8]; deps[2] = indeps[3]*cosg*cosA/r-indeps[9]; deps[3] = -Z/ma-gr*sing-Om*Om*r*cosl *(sinl*cosA*cosg-cosl*sing)-indeps[10]; deps[4] = L*cos(indeps[6])/(ma*indeps[3]) +cosl/indeps[3]*(indeps[3]*indeps[3]/r-gr) +2*Om*cosl*sinA +Om*Om*r*cosl/indeps[3]*(sinl*cosA*sing+cosl*cosg) -indeps[11]; deps[5] = L*sin(indeps[6])/(ma*indeps[3]*cosg)+indeps[3]/r*cosg*sinA*tanl -2*Om*(cosl*cosA*sing/cosg-sinl) +Om*Om*r*cosl*sinl*sinA/(indeps[3]*cosg)-indeps[12]; deps[6] = Z/ma -(C0+(indeps[3]-V0)*(C1+(indeps[3]-V0)*(C2+(indeps[3]-V0)*C3))); } /*--------------------------------------------------------------------------*/ /* The interface function */ void tapingVectorFunction( int tag, double* indeps, double* deps ) { int i; trace_on(tag); adouble* activeIndeps = new adouble[indepDim]; adouble* activeDeps = new adouble[depDim]; adouble* aIP = activeIndeps; double* iP = indeps; for (i=0; i>= *iP++; trace_off(); } #undef _VFUNC_SHUTTLE_C_ ADOL-C-2.4.1/ADOL-C/examples/additional_examples/timing/robertsonexam.ctrl0000644000076600007660000000144111227416777024701 0ustar coincoin0 problem dimension (n) 0 problem dimension (m) 0 # of evaluations to average over use forward 0 optional degree for higher order stuff (--> keep) 0 # of vectors in vector forward mode (p) 0 # of vectors in vector reverse mode (p) 0 # of vectors in tensor_eval (p) 1 test zos_forward or not 1 test fos_forward or not 1 test hos_forward or not 1 test fov_forward or not 1 test hov_forward or not 1 test fos_reverse or not 1 test hos_reverse or not 1 test fov_reverse or not 1 test hov_reverse or not 1 test Function or not 1 test Gradient/Jacobian or not 1 test Vector-Gradient/Jacobian-Product or not 1 test Gradient/Jacobian-Vector-Product or not 1 test Lagrange-Hessian-Vector-Product or not 1 test Tensors or not 1 test Inverse tensors or not ADOL-C-2.4.1/ADOL-C/examples/additional_examples/timing/simplevec.ctrl0000644000076600007660000000144111227416777024000 0ustar coincoin0 problem dimension (n) 0 problem dimension (m) 0 # of evaluations to average over use forward 0 optional degree for higher order stuff (--> keep) 0 # of vectors in vector forward mode (p) 0 # of vectors in vector reverse mode (p) 0 # of vectors in tensor_eval (p) 1 test zos_forward or not 1 test fos_forward or not 1 test hos_forward or not 1 test fov_forward or not 1 test hov_forward or not 1 test fos_reverse or not 1 test hos_reverse or not 1 test fov_reverse or not 1 test hov_reverse or not 1 test Function or not 1 test Gradient/Jacobian or not 1 test Vector-Gradient/Jacobian-Product or not 1 test Gradient/Jacobian-Vector-Product or not 1 test Lagrange-Hessian-Vector-Product or not 1 test Tensors or not 0 test Inverse tensors or not ADOL-C-2.4.1/ADOL-C/examples/additional_examples/timing/sfunc_helmholtz.cpp0000644000076600007660000001261011452356477025033 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: sfunc_helmholtz.cpp Revision: $Id: sfunc_helmholtz.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: function module containing Helmholtz energy function Each << function module >> contains: (1) const char* const controlFileName (2) int indepDim; (3) void initProblemParameters( void ) (4) void initIndependents( double* indeps ) (5) double originalScalarFunction( double* indeps ) (6) double tapingScalarFunction( int tag, double* indeps ) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #define _SFUNC_HELMHOLTZ_C_ /****************************************************************************/ /* INCLUDES */ #include #include /****************************************************************************/ /* GLOBAL VARIABLES */ /*--------------------------------------------------------------------------*/ /* Control file name */ const char* controlFileName = "helmholtzexam.ctrl"; /*--------------------------------------------------------------------------*/ /* Dimensions */ int indepDim; /*--------------------------------------------------------------------------*/ /* Other problem dependent parameters */ double *bv = NULL; const double R = sqrt(2.0); const double TE= 0.01; /* originally 0.0 */ /****************************************************************************/ /* INIT PROBLEM PARAMETERS */ void initProblemParameters( void ) { fprintf(stdout,"HELMHOLTZ ENERGY (ADOL-C Example)\n\n"); if (indepDim <= 0) { fprintf(stdout," number of independent variables = ? "); fscanf(stdin,"%d",&indepDim); fprintf(stdout,"\n"); } } /****************************************************************************/ /* INITIALIZE INDEPs */ void initIndependents( double* indeps ) { int i; double r = 1.0/indepDim; if (bv) delete[] bv; bv = new double[indepDim]; for (i=0; i>= res; trace_off(); return res; } #undef _SFUNC_HELMHOLTZ_C_ ADOL-C-2.4.1/ADOL-C/examples/additional_examples/timing/Makefile.am0000644000076600007660000000741312032277512023147 0ustar coincoin############################################################################## ## Makefile.am -- Process this file with automake to produce Makefile.in ## Revision: $Id: Makefile.am 354 2012-10-01 11:32:26Z kulshres $ ## ## Copyright (C) Andrea Walther, Andreas Griewank, Andreas Kowarz, ## Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_srcdir)/ADOL-C/include LDADD = -ladolc AM_LDFLAGS = -L$(top_builddir)/ADOL-C/src CTRLFILES = detexam.ctrl \ eutrophexam.ctrl \ experimental.ctrl \ ficexam.ctrl \ gearexam.ctrl \ griewankexam.ctrl \ helmholtzexam.ctrl \ michalewitzexam.ctrl \ pargearexam.ctrl \ powexam.ctrl \ robertsonexam.ctrl \ rosenbrockexam.ctrl \ shuttlexam.ctrl \ simplevec.ctrl \ speelpenning.ctrl EXTRA_DIST = rotations.h $(CTRLFILES) MAINTAINERCLEANFILES = Makefile.in in_tape.1 op_tape.1 vs_tape1 *~ *.orig if ADDEXA noinst_PROGRAMS = detexam speelpenning griewankexam michalewitzexam \ rosenbrockexam powexam helmholtzexam shuttlexam \ gearexam pargearexam simplevec eutrophexam \ robertsonexam ficexam experimental endif detexam_SOURCES = sfunc_determinant.cpp sgenmain.cpp \ $(srcdir)/../clock/myclock.cpp speelpenning_SOURCES = sfunc_speelpenning.cpp sgenmain.cpp \ $(srcdir)/../clock/myclock.cpp griewankexam_SOURCES = sfunc_griewank.cpp sgenmain.cpp \ $(srcdir)/../clock/myclock.cpp michalewitzexam_SOURCES = sfunc_michalewitz.cpp sgenmain.cpp \ $(srcdir)/../clock/myclock.cpp rosenbrockexam_SOURCES = sfunc_rosenbrock.cpp sgenmain.cpp \ $(srcdir)/../clock/myclock.cpp powexam_SOURCES = sfunc_power.cpp sgenmain.cpp \ $(srcdir)/../clock/myclock.cpp helmholtzexam_SOURCES = sfunc_helmholtz.cpp sgenmain.cpp \ $(srcdir)/../clock/myclock.cpp shuttlexam_SOURCES = vfunc_shuttle.cpp vgenmain.cpp \ $(srcdir)/../clock/myclock.cpp gearexam_SOURCES = vfunc_gear.cpp vgenmain.cpp \ $(srcdir)/../clock/myclock.cpp pargearexam_SOURCES = vfunc_pargear.cpp rotations.cpp vgenmain.cpp \ $(srcdir)/../clock/myclock.cpp simplevec_SOURCES = vfunc_simplevec.cpp vgenmain.cpp \ $(srcdir)/../clock/myclock.cpp eutrophexam_SOURCES = $(srcdir)/../ode/vfunc_eutroph.cpp vgenmain.cpp \ $(srcdir)/../clock/myclock.cpp robertsonexam_SOURCES = $(srcdir)/../ode/vfunc_robertson.cpp vgenmain.cpp \ $(srcdir)/../clock/myclock.cpp ficexam_SOURCES = $(srcdir)/../ode/vfunc_fic.cpp vgenmain.cpp \ $(srcdir)/../clock/myclock.cpp experimental_SOURCES = sfunc_experimental.cpp sgenmain.cpp \ $(srcdir)/../clock/myclock.cpp ADOL-C-2.4.1/ADOL-C/examples/additional_examples/timing/vfunc_gear.cpp0000644000076600007660000002650711452356477023760 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: vfunc_gear.cpp Revision: $Id: vfunc_gear.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: Example of function module containing the machine tool example of gearing Each << function module >> contains: (1) const char* const controlFileName (2) int indepDim; (3) int depDim; (4) void initProblemParameters( void ) (5) void initIndependents( double* indeps ) (6) void originalVectorFunction( double* indeps, double* deps ) (7) void tapingVectorFunction( int tag, double* indeps, double* deps ) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #define _VFUNC_GEAR_C_ /****************************************************************************/ /* INCLUDES */ #include #include #include #include /****************************************************************************/ /* GLOBAL VARIABLES */ /*--------------------------------------------------------------------------*/ /* Control file name */ const char* controlFileName = "gearexam.ctrl"; /*--------------------------------------------------------------------------*/ /* Dimensions */ int indepDim; int depDim; /*--------------------------------------------------------------------------*/ /* Other problem dependent parameters */ //static unsigned short int dx[3]; /* variable needed by erand48(.) */ /****************************************************************************/ /* INIT PROBLEM PARAMETERS */ void initProblemParameters( void ) { fprintf(stdout,"GEAREXAM (ADOL-C Example)\n\n"); /* number of indeps & deps */ indepDim = 3; depDim = 3; /* Init erand48(); */ struct tm s; time_t t; time(&t); s=*localtime(&t); srand(s.tm_sec*s.tm_min); /* dx[0]=rand(); dx[1]=rand(); dx[2]=rand();*/ } /****************************************************************************/ /* INITIALIZE INDEPs */ void initIndependents( double* indeps ) { for (int i=0; i>= *iP++; trace_off(); } #undef _VFUNC_GEAR_C_ ADOL-C-2.4.1/ADOL-C/examples/additional_examples/timing/shuttlexam.ctrl0000644000076600007660000000144111227416777024207 0ustar coincoin0 problem dimension (n) 0 problem dimension (m) 0 # of evaluations to average over use forward 0 optional degree for higher order stuff (--> keep) 0 # of vectors in vector forward mode (p) 0 # of vectors in vector reverse mode (p) 0 # of vectors in tensor_eval (p) 1 test zos_forward or not 1 test fos_forward or not 1 test hos_forward or not 1 test fov_forward or not 1 test hov_forward or not 1 test fos_reverse or not 1 test hos_reverse or not 1 test fov_reverse or not 1 test hov_reverse or not 1 test Function or not 1 test Gradient/Jacobian or not 1 test Vector-Gradient/Jacobian-Product or not 1 test Gradient/Jacobian-Vector-Product or not 1 test Lagrange-Hessian-Vector-Product or not 1 test Tensors or not 1 test Inverse tensors or not ADOL-C-2.4.1/ADOL-C/examples/additional_examples/timing/speelpenning.ctrl0000644000076600007660000000151011227416777024475 0ustar coincoin0 problem dimension (n) 0 # of evaluations to average over use forward 0 optional degree for higher order stuff (--> keep) 0 # of vectors in vector forward mode (p) 0 # of vectors in vector reverse mode (p) 0 # of vectors in tensor_eval (p) 1 test zos_forward or not 1 test fos_forward or not 1 test hos_forward or not 1 test fov_forward or not 1 test hov_forward or not 1 test fos_reverse or not 1 test hos_reverse or not 1 test fov_reverse or not 1 test hov_reverse or not 1 test Function or not 1 test Gradient/Jacobian or not 1 test Vector-Gradient/Jacobian-Product or not 1 test Gradient/Jacobian-Vector-Product or not 0 test Hessian or not 1 test Hessian-Vector-Product or not 1 test Lagrange-Hessian-Vector-Product or not 1 test Tensors or not 1 test Inverse tensors or not ADOL-C-2.4.1/ADOL-C/examples/additional_examples/timing/rotations.h0000644000076600007660000000707511227420735023314 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: rotations.h Revision: $Id: rotations.h 42 2009-07-15 18:37:17Z awalther $ Contents: ... contains elementary rotations used by the machine tool example of gearing (vfunc_pargear.C) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #ifndef _ROTATIONS_H_ #define _ROTATIONS_H_ class adouble; /****************************************************************************/ /* ELEMENTARY ROTATIONS */ /*--------------------------------------------------------------------------*/ void D1 ( double * vec, double & alpha ); void D1 ( double * depVec, double * indepVec, double & alpha ); void D1T ( double * vec, double & alpha ); void D1T ( double * depVec, double * indepVec, double & alpha ); /*--------------------------------------------------------------------------*/ void D2 ( double * vec, double & alpha ); void D2 ( double * depVec, double * indepVec, double & alpha ); void D2T ( double * vec, double & alpha ); void D2T ( double * depVec, double * indepVec, double & alpha ); /*--------------------------------------------------------------------------*/ void D3 ( double * vec, double & alpha ); void D3 ( double * depVec, double * indepVec, double & alpha ); void D3T ( double * vec, double & alpha ); void D3T ( double * depVec, double * indepVec, double & alpha ); /****************************************************************************/ /* ACTIVATED ELEMENTARY ROTATIONS */ /*--------------------------------------------------------------------------*/ void D1 ( adouble * vec, double & alpha ); void D1 ( adouble * depVec, adouble * indepVec, double & alpha ); void D1T ( adouble * vec, double & alpha ); void D1T ( adouble * depVec, adouble * indepVec, double & alpha ); void D1 ( adouble * vec, adouble & alpha ); void D1 ( adouble * depVec, adouble * indepVec, adouble & alpha ); void D1T ( adouble * vec, adouble & alpha ); void D1T ( adouble * depVec, adouble * indepVec, adouble & alpha ); /*--------------------------------------------------------------------------*/ void D2 ( adouble * vec, double & alpha ); void D2 ( adouble * depVec, adouble * indepVec, double & alpha ); void D2T ( adouble * vec, double & alpha ); void D2T ( adouble * depVec, adouble * indepVec, double & alpha ); void D2 ( adouble * vec, adouble & alpha ); void D2 ( adouble * depVec, adouble * indepVec, adouble & alpha ); void D2T ( adouble * vec, adouble & alpha ); void D2T ( adouble * depVec, adouble * indepVec, adouble & alpha ); /*--------------------------------------------------------------------------*/ void D3 ( adouble * vec, double & alpha ); void D3 ( adouble * depVec, adouble * indepVec, double & alpha ); void D3T ( adouble * vec, double & alpha ); void D3T ( adouble * depVec, adouble * indepVec, double & alpha ); void D3 ( adouble * vec, adouble & alpha ); void D3 ( adouble * depVec, adouble * indepVec, adouble & alpha ); void D3T ( adouble * vec, adouble & alpha ); void D3T ( adouble * depVec, adouble * indepVec, adouble & alpha ); #endif ADOL-C-2.4.1/ADOL-C/examples/additional_examples/timing/Makefile.in0000644000076600007660000010621712062606346023166 0ustar coincoin# Makefile.in generated by automake 1.12.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @ADDEXA_TRUE@noinst_PROGRAMS = detexam$(EXEEXT) speelpenning$(EXEEXT) \ @ADDEXA_TRUE@ griewankexam$(EXEEXT) michalewitzexam$(EXEEXT) \ @ADDEXA_TRUE@ rosenbrockexam$(EXEEXT) powexam$(EXEEXT) \ @ADDEXA_TRUE@ helmholtzexam$(EXEEXT) shuttlexam$(EXEEXT) \ @ADDEXA_TRUE@ gearexam$(EXEEXT) pargearexam$(EXEEXT) \ @ADDEXA_TRUE@ simplevec$(EXEEXT) eutrophexam$(EXEEXT) \ @ADDEXA_TRUE@ robertsonexam$(EXEEXT) ficexam$(EXEEXT) \ @ADDEXA_TRUE@ experimental$(EXEEXT) subdir = ADOL-C/examples/additional_examples/timing DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/autoconf/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_detexam_OBJECTS = sfunc_determinant.$(OBJEXT) sgenmain.$(OBJEXT) \ myclock.$(OBJEXT) detexam_OBJECTS = $(am_detexam_OBJECTS) detexam_LDADD = $(LDADD) detexam_DEPENDENCIES = AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am_eutrophexam_OBJECTS = vfunc_eutroph.$(OBJEXT) vgenmain.$(OBJEXT) \ myclock.$(OBJEXT) eutrophexam_OBJECTS = $(am_eutrophexam_OBJECTS) eutrophexam_LDADD = $(LDADD) eutrophexam_DEPENDENCIES = am_experimental_OBJECTS = sfunc_experimental.$(OBJEXT) \ sgenmain.$(OBJEXT) myclock.$(OBJEXT) experimental_OBJECTS = $(am_experimental_OBJECTS) experimental_LDADD = $(LDADD) experimental_DEPENDENCIES = am_ficexam_OBJECTS = vfunc_fic.$(OBJEXT) vgenmain.$(OBJEXT) \ myclock.$(OBJEXT) ficexam_OBJECTS = $(am_ficexam_OBJECTS) ficexam_LDADD = $(LDADD) ficexam_DEPENDENCIES = am_gearexam_OBJECTS = vfunc_gear.$(OBJEXT) vgenmain.$(OBJEXT) \ myclock.$(OBJEXT) gearexam_OBJECTS = $(am_gearexam_OBJECTS) gearexam_LDADD = $(LDADD) gearexam_DEPENDENCIES = am_griewankexam_OBJECTS = sfunc_griewank.$(OBJEXT) sgenmain.$(OBJEXT) \ myclock.$(OBJEXT) griewankexam_OBJECTS = $(am_griewankexam_OBJECTS) griewankexam_LDADD = $(LDADD) griewankexam_DEPENDENCIES = am_helmholtzexam_OBJECTS = sfunc_helmholtz.$(OBJEXT) \ sgenmain.$(OBJEXT) myclock.$(OBJEXT) helmholtzexam_OBJECTS = $(am_helmholtzexam_OBJECTS) helmholtzexam_LDADD = $(LDADD) helmholtzexam_DEPENDENCIES = am_michalewitzexam_OBJECTS = sfunc_michalewitz.$(OBJEXT) \ sgenmain.$(OBJEXT) myclock.$(OBJEXT) michalewitzexam_OBJECTS = $(am_michalewitzexam_OBJECTS) michalewitzexam_LDADD = $(LDADD) michalewitzexam_DEPENDENCIES = am_pargearexam_OBJECTS = vfunc_pargear.$(OBJEXT) rotations.$(OBJEXT) \ vgenmain.$(OBJEXT) myclock.$(OBJEXT) pargearexam_OBJECTS = $(am_pargearexam_OBJECTS) pargearexam_LDADD = $(LDADD) pargearexam_DEPENDENCIES = am_powexam_OBJECTS = sfunc_power.$(OBJEXT) sgenmain.$(OBJEXT) \ myclock.$(OBJEXT) powexam_OBJECTS = $(am_powexam_OBJECTS) powexam_LDADD = $(LDADD) powexam_DEPENDENCIES = am_robertsonexam_OBJECTS = vfunc_robertson.$(OBJEXT) \ vgenmain.$(OBJEXT) myclock.$(OBJEXT) robertsonexam_OBJECTS = $(am_robertsonexam_OBJECTS) robertsonexam_LDADD = $(LDADD) robertsonexam_DEPENDENCIES = am_rosenbrockexam_OBJECTS = sfunc_rosenbrock.$(OBJEXT) \ sgenmain.$(OBJEXT) myclock.$(OBJEXT) rosenbrockexam_OBJECTS = $(am_rosenbrockexam_OBJECTS) rosenbrockexam_LDADD = $(LDADD) rosenbrockexam_DEPENDENCIES = am_shuttlexam_OBJECTS = vfunc_shuttle.$(OBJEXT) vgenmain.$(OBJEXT) \ myclock.$(OBJEXT) shuttlexam_OBJECTS = $(am_shuttlexam_OBJECTS) shuttlexam_LDADD = $(LDADD) shuttlexam_DEPENDENCIES = am_simplevec_OBJECTS = vfunc_simplevec.$(OBJEXT) vgenmain.$(OBJEXT) \ myclock.$(OBJEXT) simplevec_OBJECTS = $(am_simplevec_OBJECTS) simplevec_LDADD = $(LDADD) simplevec_DEPENDENCIES = am_speelpenning_OBJECTS = sfunc_speelpenning.$(OBJEXT) \ sgenmain.$(OBJEXT) myclock.$(OBJEXT) speelpenning_OBJECTS = $(am_speelpenning_OBJECTS) speelpenning_LDADD = $(LDADD) speelpenning_DEPENDENCIES = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/ADOL-C/src depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(detexam_SOURCES) $(eutrophexam_SOURCES) \ $(experimental_SOURCES) $(ficexam_SOURCES) $(gearexam_SOURCES) \ $(griewankexam_SOURCES) $(helmholtzexam_SOURCES) \ $(michalewitzexam_SOURCES) $(pargearexam_SOURCES) \ $(powexam_SOURCES) $(robertsonexam_SOURCES) \ $(rosenbrockexam_SOURCES) $(shuttlexam_SOURCES) \ $(simplevec_SOURCES) $(speelpenning_SOURCES) DIST_SOURCES = $(detexam_SOURCES) $(eutrophexam_SOURCES) \ $(experimental_SOURCES) $(ficexam_SOURCES) $(gearexam_SOURCES) \ $(griewankexam_SOURCES) $(helmholtzexam_SOURCES) \ $(michalewitzexam_SOURCES) $(pargearexam_SOURCES) \ $(powexam_SOURCES) $(robertsonexam_SOURCES) \ $(rosenbrockexam_SOURCES) $(shuttlexam_SOURCES) \ $(simplevec_SOURCES) $(speelpenning_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH_FALSE = @ADVBRANCH_FALSE@ ADVBRANCH_TRUE = @ADVBRANCH_TRUE@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF_FALSE = @ATRIG_ERF_FALSE@ ATRIG_ERF_TRUE = @ATRIG_ERF_TRUE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COLPACK_CFLAGS = @COLPACK_CFLAGS@ COLPACK_LIBS = @COLPACK_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_srcdir)/ADOL-C/include LDADD = -ladolc AM_LDFLAGS = -L$(top_builddir)/ADOL-C/src CTRLFILES = detexam.ctrl \ eutrophexam.ctrl \ experimental.ctrl \ ficexam.ctrl \ gearexam.ctrl \ griewankexam.ctrl \ helmholtzexam.ctrl \ michalewitzexam.ctrl \ pargearexam.ctrl \ powexam.ctrl \ robertsonexam.ctrl \ rosenbrockexam.ctrl \ shuttlexam.ctrl \ simplevec.ctrl \ speelpenning.ctrl EXTRA_DIST = rotations.h $(CTRLFILES) MAINTAINERCLEANFILES = Makefile.in in_tape.1 op_tape.1 vs_tape1 *~ *.orig detexam_SOURCES = sfunc_determinant.cpp sgenmain.cpp \ $(srcdir)/../clock/myclock.cpp speelpenning_SOURCES = sfunc_speelpenning.cpp sgenmain.cpp \ $(srcdir)/../clock/myclock.cpp griewankexam_SOURCES = sfunc_griewank.cpp sgenmain.cpp \ $(srcdir)/../clock/myclock.cpp michalewitzexam_SOURCES = sfunc_michalewitz.cpp sgenmain.cpp \ $(srcdir)/../clock/myclock.cpp rosenbrockexam_SOURCES = sfunc_rosenbrock.cpp sgenmain.cpp \ $(srcdir)/../clock/myclock.cpp powexam_SOURCES = sfunc_power.cpp sgenmain.cpp \ $(srcdir)/../clock/myclock.cpp helmholtzexam_SOURCES = sfunc_helmholtz.cpp sgenmain.cpp \ $(srcdir)/../clock/myclock.cpp shuttlexam_SOURCES = vfunc_shuttle.cpp vgenmain.cpp \ $(srcdir)/../clock/myclock.cpp gearexam_SOURCES = vfunc_gear.cpp vgenmain.cpp \ $(srcdir)/../clock/myclock.cpp pargearexam_SOURCES = vfunc_pargear.cpp rotations.cpp vgenmain.cpp \ $(srcdir)/../clock/myclock.cpp simplevec_SOURCES = vfunc_simplevec.cpp vgenmain.cpp \ $(srcdir)/../clock/myclock.cpp eutrophexam_SOURCES = $(srcdir)/../ode/vfunc_eutroph.cpp vgenmain.cpp \ $(srcdir)/../clock/myclock.cpp robertsonexam_SOURCES = $(srcdir)/../ode/vfunc_robertson.cpp vgenmain.cpp \ $(srcdir)/../clock/myclock.cpp ficexam_SOURCES = $(srcdir)/../ode/vfunc_fic.cpp vgenmain.cpp \ $(srcdir)/../clock/myclock.cpp experimental_SOURCES = sfunc_experimental.cpp sgenmain.cpp \ $(srcdir)/../clock/myclock.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/timing/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/timing/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list detexam$(EXEEXT): $(detexam_OBJECTS) $(detexam_DEPENDENCIES) $(EXTRA_detexam_DEPENDENCIES) @rm -f detexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(detexam_OBJECTS) $(detexam_LDADD) $(LIBS) eutrophexam$(EXEEXT): $(eutrophexam_OBJECTS) $(eutrophexam_DEPENDENCIES) $(EXTRA_eutrophexam_DEPENDENCIES) @rm -f eutrophexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(eutrophexam_OBJECTS) $(eutrophexam_LDADD) $(LIBS) experimental$(EXEEXT): $(experimental_OBJECTS) $(experimental_DEPENDENCIES) $(EXTRA_experimental_DEPENDENCIES) @rm -f experimental$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(experimental_OBJECTS) $(experimental_LDADD) $(LIBS) ficexam$(EXEEXT): $(ficexam_OBJECTS) $(ficexam_DEPENDENCIES) $(EXTRA_ficexam_DEPENDENCIES) @rm -f ficexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(ficexam_OBJECTS) $(ficexam_LDADD) $(LIBS) gearexam$(EXEEXT): $(gearexam_OBJECTS) $(gearexam_DEPENDENCIES) $(EXTRA_gearexam_DEPENDENCIES) @rm -f gearexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(gearexam_OBJECTS) $(gearexam_LDADD) $(LIBS) griewankexam$(EXEEXT): $(griewankexam_OBJECTS) $(griewankexam_DEPENDENCIES) $(EXTRA_griewankexam_DEPENDENCIES) @rm -f griewankexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(griewankexam_OBJECTS) $(griewankexam_LDADD) $(LIBS) helmholtzexam$(EXEEXT): $(helmholtzexam_OBJECTS) $(helmholtzexam_DEPENDENCIES) $(EXTRA_helmholtzexam_DEPENDENCIES) @rm -f helmholtzexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(helmholtzexam_OBJECTS) $(helmholtzexam_LDADD) $(LIBS) michalewitzexam$(EXEEXT): $(michalewitzexam_OBJECTS) $(michalewitzexam_DEPENDENCIES) $(EXTRA_michalewitzexam_DEPENDENCIES) @rm -f michalewitzexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(michalewitzexam_OBJECTS) $(michalewitzexam_LDADD) $(LIBS) pargearexam$(EXEEXT): $(pargearexam_OBJECTS) $(pargearexam_DEPENDENCIES) $(EXTRA_pargearexam_DEPENDENCIES) @rm -f pargearexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(pargearexam_OBJECTS) $(pargearexam_LDADD) $(LIBS) powexam$(EXEEXT): $(powexam_OBJECTS) $(powexam_DEPENDENCIES) $(EXTRA_powexam_DEPENDENCIES) @rm -f powexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(powexam_OBJECTS) $(powexam_LDADD) $(LIBS) robertsonexam$(EXEEXT): $(robertsonexam_OBJECTS) $(robertsonexam_DEPENDENCIES) $(EXTRA_robertsonexam_DEPENDENCIES) @rm -f robertsonexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(robertsonexam_OBJECTS) $(robertsonexam_LDADD) $(LIBS) rosenbrockexam$(EXEEXT): $(rosenbrockexam_OBJECTS) $(rosenbrockexam_DEPENDENCIES) $(EXTRA_rosenbrockexam_DEPENDENCIES) @rm -f rosenbrockexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(rosenbrockexam_OBJECTS) $(rosenbrockexam_LDADD) $(LIBS) shuttlexam$(EXEEXT): $(shuttlexam_OBJECTS) $(shuttlexam_DEPENDENCIES) $(EXTRA_shuttlexam_DEPENDENCIES) @rm -f shuttlexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(shuttlexam_OBJECTS) $(shuttlexam_LDADD) $(LIBS) simplevec$(EXEEXT): $(simplevec_OBJECTS) $(simplevec_DEPENDENCIES) $(EXTRA_simplevec_DEPENDENCIES) @rm -f simplevec$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(simplevec_OBJECTS) $(simplevec_LDADD) $(LIBS) speelpenning$(EXEEXT): $(speelpenning_OBJECTS) $(speelpenning_DEPENDENCIES) $(EXTRA_speelpenning_DEPENDENCIES) @rm -f speelpenning$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(speelpenning_OBJECTS) $(speelpenning_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/myclock.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rotations.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sfunc_determinant.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sfunc_experimental.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sfunc_griewank.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sfunc_helmholtz.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sfunc_michalewitz.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sfunc_power.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sfunc_rosenbrock.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sfunc_speelpenning.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sgenmain.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vfunc_eutroph.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vfunc_fic.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vfunc_gear.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vfunc_pargear.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vfunc_robertson.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vfunc_shuttle.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vfunc_simplevec.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vgenmain.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< myclock.o: $(srcdir)/../clock/myclock.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT myclock.o -MD -MP -MF $(DEPDIR)/myclock.Tpo -c -o myclock.o `test -f '$(srcdir)/../clock/myclock.cpp' || echo '$(srcdir)/'`$(srcdir)/../clock/myclock.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/myclock.Tpo $(DEPDIR)/myclock.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$(srcdir)/../clock/myclock.cpp' object='myclock.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o myclock.o `test -f '$(srcdir)/../clock/myclock.cpp' || echo '$(srcdir)/'`$(srcdir)/../clock/myclock.cpp myclock.obj: $(srcdir)/../clock/myclock.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT myclock.obj -MD -MP -MF $(DEPDIR)/myclock.Tpo -c -o myclock.obj `if test -f '$(srcdir)/../clock/myclock.cpp'; then $(CYGPATH_W) '$(srcdir)/../clock/myclock.cpp'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../clock/myclock.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/myclock.Tpo $(DEPDIR)/myclock.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$(srcdir)/../clock/myclock.cpp' object='myclock.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o myclock.obj `if test -f '$(srcdir)/../clock/myclock.cpp'; then $(CYGPATH_W) '$(srcdir)/../clock/myclock.cpp'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../clock/myclock.cpp'; fi` vfunc_eutroph.o: $(srcdir)/../ode/vfunc_eutroph.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT vfunc_eutroph.o -MD -MP -MF $(DEPDIR)/vfunc_eutroph.Tpo -c -o vfunc_eutroph.o `test -f '$(srcdir)/../ode/vfunc_eutroph.cpp' || echo '$(srcdir)/'`$(srcdir)/../ode/vfunc_eutroph.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/vfunc_eutroph.Tpo $(DEPDIR)/vfunc_eutroph.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$(srcdir)/../ode/vfunc_eutroph.cpp' object='vfunc_eutroph.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o vfunc_eutroph.o `test -f '$(srcdir)/../ode/vfunc_eutroph.cpp' || echo '$(srcdir)/'`$(srcdir)/../ode/vfunc_eutroph.cpp vfunc_eutroph.obj: $(srcdir)/../ode/vfunc_eutroph.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT vfunc_eutroph.obj -MD -MP -MF $(DEPDIR)/vfunc_eutroph.Tpo -c -o vfunc_eutroph.obj `if test -f '$(srcdir)/../ode/vfunc_eutroph.cpp'; then $(CYGPATH_W) '$(srcdir)/../ode/vfunc_eutroph.cpp'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../ode/vfunc_eutroph.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/vfunc_eutroph.Tpo $(DEPDIR)/vfunc_eutroph.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$(srcdir)/../ode/vfunc_eutroph.cpp' object='vfunc_eutroph.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o vfunc_eutroph.obj `if test -f '$(srcdir)/../ode/vfunc_eutroph.cpp'; then $(CYGPATH_W) '$(srcdir)/../ode/vfunc_eutroph.cpp'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../ode/vfunc_eutroph.cpp'; fi` vfunc_fic.o: $(srcdir)/../ode/vfunc_fic.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT vfunc_fic.o -MD -MP -MF $(DEPDIR)/vfunc_fic.Tpo -c -o vfunc_fic.o `test -f '$(srcdir)/../ode/vfunc_fic.cpp' || echo '$(srcdir)/'`$(srcdir)/../ode/vfunc_fic.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/vfunc_fic.Tpo $(DEPDIR)/vfunc_fic.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$(srcdir)/../ode/vfunc_fic.cpp' object='vfunc_fic.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o vfunc_fic.o `test -f '$(srcdir)/../ode/vfunc_fic.cpp' || echo '$(srcdir)/'`$(srcdir)/../ode/vfunc_fic.cpp vfunc_fic.obj: $(srcdir)/../ode/vfunc_fic.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT vfunc_fic.obj -MD -MP -MF $(DEPDIR)/vfunc_fic.Tpo -c -o vfunc_fic.obj `if test -f '$(srcdir)/../ode/vfunc_fic.cpp'; then $(CYGPATH_W) '$(srcdir)/../ode/vfunc_fic.cpp'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../ode/vfunc_fic.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/vfunc_fic.Tpo $(DEPDIR)/vfunc_fic.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$(srcdir)/../ode/vfunc_fic.cpp' object='vfunc_fic.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o vfunc_fic.obj `if test -f '$(srcdir)/../ode/vfunc_fic.cpp'; then $(CYGPATH_W) '$(srcdir)/../ode/vfunc_fic.cpp'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../ode/vfunc_fic.cpp'; fi` vfunc_robertson.o: $(srcdir)/../ode/vfunc_robertson.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT vfunc_robertson.o -MD -MP -MF $(DEPDIR)/vfunc_robertson.Tpo -c -o vfunc_robertson.o `test -f '$(srcdir)/../ode/vfunc_robertson.cpp' || echo '$(srcdir)/'`$(srcdir)/../ode/vfunc_robertson.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/vfunc_robertson.Tpo $(DEPDIR)/vfunc_robertson.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$(srcdir)/../ode/vfunc_robertson.cpp' object='vfunc_robertson.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o vfunc_robertson.o `test -f '$(srcdir)/../ode/vfunc_robertson.cpp' || echo '$(srcdir)/'`$(srcdir)/../ode/vfunc_robertson.cpp vfunc_robertson.obj: $(srcdir)/../ode/vfunc_robertson.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT vfunc_robertson.obj -MD -MP -MF $(DEPDIR)/vfunc_robertson.Tpo -c -o vfunc_robertson.obj `if test -f '$(srcdir)/../ode/vfunc_robertson.cpp'; then $(CYGPATH_W) '$(srcdir)/../ode/vfunc_robertson.cpp'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../ode/vfunc_robertson.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/vfunc_robertson.Tpo $(DEPDIR)/vfunc_robertson.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$(srcdir)/../ode/vfunc_robertson.cpp' object='vfunc_robertson.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o vfunc_robertson.obj `if test -f '$(srcdir)/../ode/vfunc_robertson.cpp'; then $(CYGPATH_W) '$(srcdir)/../ode/vfunc_robertson.cpp'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../ode/vfunc_robertson.cpp'; fi` mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.4.1/ADOL-C/examples/additional_examples/timing/michalewitzexam.ctrl0000644000076600007660000000150711227416777025207 0ustar coincoin0 problem dimension (n) 0 # of evaluations to average over use forward 0 optional degree for higher order stuff (--> keep) 0 # of vectors in vector forward mode (p) 0 # of vectors in vector reverse mode (p) 0 # of vectors in tensor_eval (p) 1 test zos_forward or not 1 test fos_forward or not 1 test hos_forward or not 1 test fov_forward or not 1 test hov_forward or not 1 test fos_reverse or not 1 test hos_reverse or not 1 test fov_reverse or not 1 test hov_reverse or not 1 test Function or not 1 test Gradient/Jacobian or not 1 test Vector-Gradient/Jacobian-Product or not 1 test Gradient/Jacobian-Vector-Product or not 0 test Hessian or not 1 test Hessian-Vector-Product or not 1 test Lagrange-Hessian-Vector-Product or not 0 test Tensors or not 0 test Inverse tensors or not ADOL-C-2.4.1/ADOL-C/examples/additional_examples/timing/sfunc_determinant.cpp0000644000076600007660000001403011452356477025335 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: sfunc_determinant.cpp Revision: $Id: sfunc_determinant.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: function module containing the determinant example Each << function module >> contains: (1) const char* const controlFileName (2) int indepDim; (3) void initProblemParameters( void ) (4) void initIndependents( double* indeps ) (5) double originalScalarFunction( double* indeps ) (6) double tapingScalarFunction( int tag, double* indeps ) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #define _SFUNC_DETERMINANT_C_ /****************************************************************************/ /* INCLUDES */ #include /****************************************************************************/ /* GLOBAL VARIABLES */ /*--------------------------------------------------------------------------*/ /* Control file name */ const char* controlFileName = "detexam.ctrl"; /*--------------------------------------------------------------------------*/ /* Dimensions */ int indepDim; /*--------------------------------------------------------------------------*/ /* Other problem dependent parameters */ int matrixDim; int mRec; /****************************************************************************/ /* INIT PROBLEM PARAMETERS */ void initProblemParameters( void ) { fprintf(stdout,"COMPUTATION OF DETERMINANTS Type 2 (ADOL-C Example)\n\n"); if (indepDim > 0) matrixDim = indepDim; else { fprintf(stdout," order of matrix = ? "); fscanf(stdin,"%d",&matrixDim); fprintf(stdout,"\n"); } indepDim = matrixDim * matrixDim; } /****************************************************************************/ /* INITIALIZE INDEPs */ void initIndependents( double* indeps ) { int i, j; double* iP = indeps; mRec = 1; for (i=0; i= p) { if (m == p) { if (s > 0) t += *pt; else t -= *pt; } else { if (s > 0) t += (*pt)*det(k-1, m-p, indeps); else t -= (*pt)*det(k-1, m-p, indeps); } s = -s; } ++pt; p = p1; } return t; } } /*--------------------------------------------------------------------------*/ /* The interface function */ double originalScalarFunction( double* indeps ) { return det(matrixDim, mRec-1, indeps); } /****************************************************************************/ /* TAPING SCALAR FUNCTION */ /*--------------------------------------------------------------------------*/ /* The recursive determinant function */ adouble activeDet( int k, int m, adouble* indeps ) { int i; if (m == 0) return 1.0; else { adouble* pt = indeps + ((k-1)*matrixDim); adouble t = 0; int p = 1; int p1, s; if (k%2) s = 1; else s = -1; for (i=0; i= p) { if (m == p) { if (s > 0) t += *pt; else t -= *pt; } else { if (s > 0) t += (*pt)*activeDet(k-1, m-p, indeps); else t -= (*pt)*activeDet(k-1, m-p, indeps); } s = -s; } ++pt; p = p1; } return t; } } /*--------------------------------------------------------------------------*/ /* The interface function */ double tapingScalarFunction( int tag, double* indeps ) { int i; trace_on(tag); adouble* activeIndeps = new adouble[indepDim]; adouble* aIP = activeIndeps; double* iP = indeps; for (i=0; i>= res; trace_off(); return res; } #undef _SFUNC_DETERMINANT_C_ ADOL-C-2.4.1/ADOL-C/examples/additional_examples/timing/sfunc_rosenbrock.cpp0000644000076600007660000001131711452356477025177 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: sfunc_rosenbrock.cpp Revision: $Id: sfunc_rosenbrock.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: function module containing Rosenbrock's function Each << function module >> contains: (1) const char* const controlFileName (2) int indepDim; (3) void initProblemParameters( void ) (4) void initIndependents( double* indeps ) (5) double originalScalarFunction( double* indeps ) (6) double tapingScalarFunction( int tag, double* indeps ) Copyright (c) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #define _SFUNC_ROSENBROCK_C_ /****************************************************************************/ /* INCLUDES */ #include #include /****************************************************************************/ /* GLOBAL VARIABLES */ /*--------------------------------------------------------------------------*/ /* Control file name */ const char* controlFileName = "rosenbrockexam.ctrl"; /*--------------------------------------------------------------------------*/ /* Dimensions */ int indepDim; /*--------------------------------------------------------------------------*/ /* Other problem dependent parameters */ /****************************************************************************/ /* INIT PROBLEM PARAMETERS */ void initProblemParameters( void ) { fprintf(stdout,"ROSENBROCKs FUNCTION (ADOL-C Example)\n\n"); if (indepDim <= 0) { fprintf(stdout," number of independent variables = ? "); fscanf(stdin,"%d",&indepDim); fprintf(stdout,"\n"); } } /****************************************************************************/ /* INITIALIZE INDEPs */ void initIndependents( double* indeps ) { int i; for (i=0; i>= res; trace_off(); return res; } #undef _SFUNC_ROSENBROCK_C_ ADOL-C-2.4.1/ADOL-C/examples/additional_examples/timing/powexam.ctrl0000644000076600007660000000150711227416777023474 0ustar coincoin0 problem dimension (n) 0 # of evaluations to average over use forward 0 optional degree for higher order stuff (--> keep) 0 # of vectors in vector forward mode (p) 0 # of vectors in vector reverse mode (p) 0 # of vectors in tensor_eval (p) 1 test zos_forward or not 1 test fos_forward or not 1 test hos_forward or not 1 test fov_forward or not 1 test hov_forward or not 1 test fos_reverse or not 1 test hos_reverse or not 1 test fov_reverse or not 1 test hov_reverse or not 1 test Function or not 1 test Gradient/Jacobian or not 1 test Vector-Gradient/Jacobian-Product or not 1 test Gradient/Jacobian-Vector-Product or not 1 test Hessian or not 1 test Hessian-Vector-Product or not 1 test Lagrange-Hessian-Vector-Product or not 0 test Tensors or not 0 test Inverse tensors or not ADOL-C-2.4.1/ADOL-C/examples/additional_examples/timing/griewankexam.ctrl0000644000076600007660000000150711227416777024476 0ustar coincoin0 problem dimension (n) 0 # of evaluations to average over use forward 0 optional degree for higher order stuff (--> keep) 0 # of vectors in vector forward mode (p) 0 # of vectors in vector reverse mode (p) 0 # of vectors in tensor_eval (p) 1 test zos_forward or not 1 test fos_forward or not 1 test hos_forward or not 1 test fov_forward or not 1 test hov_forward or not 1 test fos_reverse or not 1 test hos_reverse or not 1 test fov_reverse or not 1 test hov_reverse or not 1 test Function or not 1 test Gradient/Jacobian or not 1 test Vector-Gradient/Jacobian-Product or not 1 test Gradient/Jacobian-Vector-Product or not 0 test Hessian or not 1 test Hessian-Vector-Product or not 1 test Lagrange-Hessian-Vector-Product or not 0 test Tensors or not 0 test Inverse tensors or not ADOL-C-2.4.1/ADOL-C/examples/additional_examples/timing/helmholtzexam.ctrl0000644000076600007660000000150611227416777024674 0ustar coincoin0 problem dimension (n) 0 # of evaluations to average over use forward 0 optional degree for higher order stuff (--> keep) 0 # of vectors in vector forward mode (p) 0 # of vectors in vector reverse mode (p) 0 # of vectors in tensor_eval (p) 1 test zos_forward or not 1 test fos_forward or not 1 test hos_forward or not 1 test fov_forward or not 1 test hov_forward or not 1 test fos_reverse or not 1 test hos_reverse or not 1 test fov_reverse or not 1 test hov_reverse or not 1 test Function or not 1 test Gradient/Jacobian or not 1 test Vector-Gradient/Jacobian-Product or not 1 test Gradient/Jacobian-Vector-Product or not 1 test Hessian or not 1 test Hessian-Vector-Product or not 1 test Lagrange-Hessian-Vector-Product or not 0 test Tensors or not 0 test Inverse tensors or not ADOL-C-2.4.1/ADOL-C/examples/additional_examples/timing/sfunc_michalewitz.cpp0000644000076600007660000001103211452356477025342 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: sfunc_michalewitz.cpp Revision: $Id: sfunc_michalewitz.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: function module containing Michalewitz' function Each << function module >> contains: (1) const char* const controlFileName (2) int indepDim; (3) void initProblemParameters( void ) (4) void initIndependents( double* indeps ) (5) double originalScalarFunction( double* indeps ) (6) double tapingScalarFunction( int tag, double* indeps ) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #define _SFUNC_MICHALEWITZ_C_ /****************************************************************************/ /* INCLUDES */ #include #include /****************************************************************************/ /* GLOBAL VARIABLES */ /*--------------------------------------------------------------------------*/ /* Control file name */ const char* controlFileName = "michalewitzexam.ctrl"; /*--------------------------------------------------------------------------*/ /* Dimensions */ int indepDim; /*--------------------------------------------------------------------------*/ /* Other problem dependent parameters */ #define Pi 3.141592654 const double M = 10.0; /****************************************************************************/ /* INIT PROBLEM PARAMETERS */ void initProblemParameters( void ) { fprintf(stdout,"MICHALEWITZ' FUNCTION (ADOL-C Example)\n\n"); if (indepDim <= 0) { fprintf(stdout," number of independent variables = ? "); fscanf(stdin,"%d",&indepDim); fprintf(stdout,"\n"); } } /****************************************************************************/ /* INITIALIZE INDEPs */ void initIndependents( double* indeps ) { int i; for (i=0; i>= res; trace_off(); return res; } #undef _SFUNC_MICHALEWITZ_C_ ADOL-C-2.4.1/ADOL-C/examples/additional_examples/timing/README0000644000076600007660000001042411227416777022004 0ustar coincoin############################################################################## ## README -- additional information ## Revision: $Id: README 299 2009-02-26 09:20:11Z awalther $ ## ## Copyright (C) Andrea Walther, Andreas Griewank, Andreas Kowarz, ## Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## ------------------------------------------------------------- This directory contains example programs that perform user time measurements and checks of nearly all ADOL-C drivers applied to several test problems. -------------------------------------------------------------- CONTENTS OF THE DIRECTORY (A) SCALAR VALUED TEST FUNCTIONS/PROBLEMS ----------------------------------------- detexam --> Computation of determinants sfunc_determinant.cpp detexam.ctrl speelpenning --> Speelpenning's product sfunc_speelpenning.cpp speelpenning.ctrl griewankexam --> Griewank's function [1st ICSC'96] sfunc_griewank.cpp griewankexam.ctrl michalewitzexam --> Michalewitz' function [1st ICSC'96] sfunc_michalewitz.cpp michalewitzexam.ctrl rosenbrockexam --> Rosenbrock's test function sfunc_rosenbrock.cpp rosenbrockexam.ctrl powexam --> Computation of n-th power sfunc_power.cpp powexam.ctrl helmholtzexam --> Helmholtz energy function sfunc_helmholtz.cpp helmholtzexam.ctrl experimental --> Generic example to make experiments with modifications of Speelpennings product sfunc_experimental.cpp experimental.ctrl NOTE: all above example programs make use of the "generic" module sgenmain.cpp and the clock utility provided in subdirectory ../clock. (B) VECTOR VALUED TEST FUNCTIONS/PROBLEMS ----------------------------------------- simplevec --> A simple vector example (scalable dimensions) vfunc_simplevec.cpp simplevec.ctrl gearexam --> Virtual Machine Tool of gearing (R^3 --> R^3) vfunc_gear.C gearexam.ctrl pargearexam --> Virtual Machine Tool of gearing (R^3 x R^? --> R^3) parametrized version vfunc_pargear.cpp pargearexam.ctrl rotations.cpp shuttlexam --> Another vector example with practical background (R^14 --> R^7) vfunc_shuttle.cpp shuttlexam.ctrl eutrophexam --> An ODE example (R^5 --> R^5) ../ode/vfunc_eutroph.cpp eutrophexam.ctrl robertsonexam --> Another ODE example: Robertson test problem (R^3 --> R^3) ../ode/vfunc_robertson.cpp robertsonexam.ctrl ficexam --> Another ODE example: flow in channel (scalable dimension) ../ode/vfunc_fic.cpp ficexam.ctrl NOTE: all above example programs make use of the "generic" module vgenmain.cpp and the clock utility provided in subdirectory ../clock. -------------------------------------------------------------- THE CONTROL FILES The control files *.ctrl can be used to specify some problem parameters and to decide, for which ADOL-C routines/drivers time measurements or checks should be performed. Following flag values are possible 0 don't perform anything 1 perform timings > 1 perform timings and special tests specified by the value (check of results etc.) NOTE: Most checks we think of are not implemented up to now! The modification of the "generic" modules sgenmain.cpp and vgenmain.cpp in order to make some own tests should be fairly easy. ADOL-C-2.4.1/ADOL-C/examples/additional_examples/timing/sgenmain.cpp0000644000076600007660000012433411732376410023425 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: sgenmain.cpp Revision: $Id: sgenmain.cpp 299 2012-03-21 16:08:40Z kulshres $ Contents: Scalar Generic Main File: for use with function modules containing several scalar examples (e.g. the determinant example in sfunc_determinant.cpp) Each << function module >> contains: (1) const char* const controlFileName (2) int indepDim; (3) void initProblemParameters( void ) (4) void initIndependents( double* indeps ) (5) double originalScalarFunction( double* indeps ) (6) double tapingScalarFunction( int tag, double* indeps ) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #define _SGENMAIN_C_ /****************************************************************************/ /* INCLUDES */ #include #include "../clock/myclock.h" #include #include /****************************************************************************/ /* MACROS */ #define TIMEFORMAT " %12.6E units, %12.6E seconds\n" /****************************************************************************/ /* EXTERNAL STUFF FROM FUNCTION MODULES*/ /*--------------------------------------------------------------------------*/ /* Control file name */ const extern char* controlFileName; /*--------------------------------------------------------------------------*/ /* Dimensions */ extern int indepDim; /*--------------------------------------------------------------------------*/ /* Init Problem Parameters */ extern void initProblemParameters( void ); /*--------------------------------------------------------------------------*/ /* Initialize indeps */ extern void initIndependents( double* indeps ); /*--------------------------------------------------------------------------*/ /* Original scalar function */ extern double originalScalarFunction( double* indeps ); /*--------------------------------------------------------------------------*/ /* Taping scalar function */ extern double tapingScalarFunction( int tag, double* indeps ); /****************************************************************************/ /* CONTROL STUFF */ enum controlParameter { cpDimension, cpAverageCount, cpDegree, cpVecCountFW, cpVecCountRV, cpVecCountTR, cpZosFW, cpFosFW, cpHosFW, cpFovFW, cpHovFW, cpFosRV, cpHosRV, cpFovRV, cpHovRV, cpFunction, cpJacobian, cpVecJac, cpJacVec, cpHessian, cpHessVec, cpLagHessVec, cpTensor, cpInvTensor, cpCount }; /****************************************************************************/ /* PROVIDE RANDOM INITs */ //unsigned short int dx[3]; /* variable needed by erand48(.) */ void initRand ( void ) /* a function to initialize dx using actual time */ { struct tm s; time_t t; time(&t); s=*localtime(&t); srand(s.tm_sec*s.tm_min); /* dx[0]=rand(); dx[1]=rand(); dx[2]=rand();*/ } /****************************************************************************/ /* MAIN PROGRAM */ int main() { int i, j, k; int tag = 1; /* tape tag */ int taskCount = 0; int pFW, pRV, pTR, degree, keep; /* forward/reverse parameters */ int evalCount; /* # of evaluations */ /****************************************************************************/ /* READ CONTROL PARAMETERS FROM FILE */ int controlParameters[cpCount]; FILE* controlFile; /*------------------------------------------------------------------------*/ /* open file to read */ if ((controlFile = fopen(controlFileName,"r")) == NULL) { fprintf(stdout,"ERROR: Could not open control file %s\n", controlFileName); exit(-1); } /*------------------------------------------------------------------------*/ /* read all values */ for (i=0; i always */ fprintf(stdout,"\nTASK %d: Original function evaluation\n", taskCount++); t00 = myclock(); for (i=0; i always */ fprintf(stdout,"--------------------------------------------------------"); fprintf(stdout,"\nTASK %d: Taping the function\n", taskCount++); t00 = myclock(); /* NOTE: taping will be performed ONCE only */ depTape = tapingScalarFunction(tag,indeps); t01 = myclock(); size_t tape_stats[STAT_SIZE]; tapestats(tag,tape_stats); fprintf(stdout,"\n independents %d\n",tape_stats[NUM_INDEPENDENTS]); fprintf(stdout," dependents %d\n",tape_stats[NUM_DEPENDENTS]); fprintf(stdout," operations %d\n",tape_stats[NUM_OPERATIONS]); fprintf(stdout," operations buffer size %d\n",tape_stats[OP_BUFFER_SIZE]); fprintf(stdout," locations buffer size %d\n",tape_stats[LOC_BUFFER_SIZE]); fprintf(stdout," constants buffer size %d\n",tape_stats[VAL_BUFFER_SIZE]); fprintf(stdout," maxlive %d\n",tape_stats[NUM_MAX_LIVES]); fprintf(stdout," valstack size %d\n\n",tape_stats[TAY_STACK_SIZE]); fprintf(stdout," "); fprintf(stdout,TIMEFORMAT,(t01-t00)*timeUnit*evalCount, (t01-t00)); /****************************************************************************/ /* 2. ZOS_FORWARD */ if (controlParameters[cpZosFW]) { fprintf(stdout,"--------------------------------------------------------"); fprintf(stdout,"\nTASK %d: forward(tag, m=1, n=%d, keep, X[n], Y[m])\n", taskCount++,indepDim); fprintf(stdout," ---> zos_forward\n"); /*----------------------------------------------------------------------*/ /* NO KEEP */ t00 = myclock(); for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); fprintf(stdout," Should be the same values:\n"); fprintf(stdout," (original) %12.8E =? %12.8E (forward from tape)\n", depOrig,depTape); } } /****************************************************************************/ /* 3. FOS_FORWARD */ if (controlParameters[cpFosFW]) { fprintf(stdout,"--------------------------------------------------------"); fprintf(stdout,"\nTASK %d: forward(tag, m=1, n=%d, d=1, keep, X[n][d+1], Y[d+1])\n", taskCount++,indepDim); fprintf(stdout," ---> fos_forward\n"); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ XPP = new double*[indepDim]; for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); fprintf(stdout," Should be the same values:\n"); fprintf(stdout," (original) %12.8E =? %12.8E (forward from tape)\n", depOrig,YP[0]); } /*----------------------------------------------------------------------*/ /* Free tensors */ for (i=0; i hos_forward\n"); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ XPP = new double*[indepDim]; for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); fprintf(stdout," Should be the same values:\n"); fprintf(stdout," (original) %12.8E =? %12.8E (forward from tape)\n", depOrig,YP[0]); } /*----------------------------------------------------------------------*/ /* Free tensors */ for (i=0; i fov_forward\n"); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ XPP = new double*[indepDim]; for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } /*----------------------------------------------------------------------*/ /* Free tensors */ for (i=0; i hov_forward\n"); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ XPPP = new double**[indepDim]; for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } /*----------------------------------------------------------------------*/ /* Free tensors */ for (i=0; i fos_reverse\n"); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ ZP = new double[indepDim]; u = (double)rand(); /*----------------------------------------------------------------------*/ /* Forward with keep*/ forward(tag,1,indepDim,1,indeps,&depTape); /*----------------------------------------------------------------------*/ /* Reverse */ t00 = myclock(); for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } /*----------------------------------------------------------------------*/ /* Free tensors */ delete[] ZP; } /****************************************************************************/ /* 8. HOS_REVERSE */ if (controlParameters[cpHosRV]) { fprintf(stdout,"--------------------------------------------------------"); fprintf(stdout,"\nTASK %d: reverse(tag, m=1, n=%d, d=%d, u, Z[n][d+1])\n", taskCount++,indepDim,degree); fprintf(stdout," ---> hos_reverse\n"); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ ZPP = new double*[indepDim]; for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } /*----------------------------------------------------------------------*/ /* Free tensors */ for (i=0; i fov_reverse\n"); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ ZPP = new double*[pRV]; for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } /*----------------------------------------------------------------------*/ /* Free tensors */ for (i=0; i hov_reverse\n"); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ ZPPP = new double**[pRV]; for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } /*----------------------------------------------------------------------*/ /* Free tensors */ for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); fprintf(stdout," Should be the same values:\n"); fprintf(stdout," (original) %12.8E =? %12.8E (forward from tape)\n", depOrig,depTape); } } /****************************************************************************/ /* 12. JACOBIAN */ if (controlParameters[cpJacobian]) { fprintf(stdout,"--------------------------------------------------------"); fprintf(stdout,"\nTASK %d: gradient(tag, n=%d, X[n], G[n])\n", taskCount++,indepDim); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ JP = new double[indepDim]; /*----------------------------------------------------------------------*/ /* Gradient evaluation */ t00 = myclock(); for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } /*----------------------------------------------------------------------*/ /* Free tensors */ delete[] JP; } /****************************************************************************/ /* 13. VECJAC */ if (controlParameters[cpVecJac]) { fprintf(stdout,"--------------------------------------------------------"); fprintf(stdout,"\nTASK %d: vec_jac(tag, m=1, n=%d, repeat, X[n], U[m], V[n])\n", taskCount++,indepDim); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ UP = new double[1]; UP[0] = (double)rand(); VP = new double[indepDim]; /*----------------------------------------------------------------------*/ /* Evaluation without repeat */ t00 = myclock(); for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } /*----------------------------------------------------------------------*/ /* Free tensors */ delete[] UP; delete[] VP; } /****************************************************************************/ /* 14. JACVEC */ if (controlParameters[cpJacVec]) { fprintf(stdout,"--------------------------------------------------------"); fprintf(stdout,"\nTASK %d: jac_vec(tag, m=1, n=%d, X[n], V[n], U[m])\n", taskCount++,indepDim); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ UP = new double[1]; VP = new double[indepDim]; for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } /*----------------------------------------------------------------------*/ /* Free tensors */ delete[] UP; delete[] VP; } /****************************************************************************/ /* 15. HESSIAN */ if (controlParameters[cpHessian]) { fprintf(stdout,"--------------------------------------------------------"); fprintf(stdout,"\nTASK %d: hessian(tag, n=%d, X[n], lower triangle of H[n][n])\n", taskCount++,indepDim); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ HPP = new double*[indepDim]; for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } /*----------------------------------------------------------------------*/ /* Free tensors */ for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } /*----------------------------------------------------------------------*/ /* Free tensors */ delete[] VP; delete[] WP; } /****************************************************************************/ /* 17. LAGHESSVEC */ if (controlParameters[cpLagHessVec]) { fprintf(stdout,"--------------------------------------------------------"); fprintf(stdout,"\nTASK %d: lagra_hess_vec(tag, m=1, n=%d, X[n], U[m], V[n], W[n])\n", taskCount++,indepDim); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ UP = new double[1]; UP[0] = (double)rand(); VP = new double[indepDim]; for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } /*----------------------------------------------------------------------*/ /* Free tensors */ delete[] VP; delete[] WP; delete[] UP; } /****************************************************************************/ /* 18. TENSOR */ if (controlParameters[cpTensor]) { fprintf(stdout,"--------------------------------------------------------"); fprintf(stdout,"\nTASK %d: tensor_eval(tag, m =1, n=%d, d=%d, p=%d, X[n], tensor[m][dim], S[n][p])\n", taskCount++,indepDim,degree, pTR); fprintf(stdout,"\n dim = ((p+d) over d)\n"); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ dim = binomi(pTR+degree,degree); TPP = new double*[1]; TPP[0] = new double[dim]; SPP = new double*[indepDim]; for (i=0; i 1) {} /*----------------------------------------------------------------------*/ /* Free tensors */ delete[] TPP[0]; delete[] TPP; for (i=0; i 1) {} /*----------------------------------------------------------------------*/ /* Free tensors */ delete[] TPP[0]; delete[] TPP; delete[] SPP[0]; delete[] SPP; } return 1; } #undef _SGENMAIN_C_ ADOL-C-2.4.1/ADOL-C/examples/additional_examples/timing/experimental.ctrl0000644000076600007660000000151011227416777024503 0ustar coincoin0 problem dimension (n) 0 # of evaluations to average over use forward 0 optional degree for higher order stuff (--> keep) 0 # of vectors in vector forward mode (p) 0 # of vectors in vector reverse mode (p) 0 # of vectors in tensor_eval (p) 0 test zos_forward or not 0 test fos_forward or not 0 test hos_forward or not 0 test fov_forward or not 0 test hov_forward or not 0 test fos_reverse or not 0 test hos_reverse or not 0 test fov_reverse or not 0 test hov_reverse or not 1 test Function or not 1 test Gradient/Jacobian or not 1 test Vector-Gradient/Jacobian-Product or not 1 test Gradient/Jacobian-Vector-Product or not 0 test Hessian or not 0 test Hessian-Vector-Product or not 0 test Lagrange-Hessian-Vector-Product or not 0 test Tensors or not 0 test Inverse tensors or not ADOL-C-2.4.1/ADOL-C/examples/additional_examples/timing/pargearexam.ctrl0000644000076600007660000000144111227416777024305 0ustar coincoin0 problem dimension (n) 0 problem dimension (m) 0 # of evaluations to average over use forward 0 optional degree for higher order stuff (--> keep) 0 # of vectors in vector forward mode (p) 0 # of vectors in vector reverse mode (p) 0 # of vectors in tensor_eval (p) 1 test zos_forward or not 1 test fos_forward or not 1 test hos_forward or not 1 test fov_forward or not 1 test hov_forward or not 1 test fos_reverse or not 1 test hos_reverse or not 1 test fov_reverse or not 1 test hov_reverse or not 1 test Function or not 1 test Gradient/Jacobian or not 1 test Vector-Gradient/Jacobian-Product or not 1 test Gradient/Jacobian-Vector-Product or not 1 test Lagrange-Hessian-Vector-Product or not 1 test Tensors or not 1 test Inverse tensors or not ADOL-C-2.4.1/ADOL-C/examples/additional_examples/timing/gearexam.ctrl0000644000076600007660000000144111227416777023602 0ustar coincoin0 problem dimension (n) 0 problem dimension (m) 0 # of evaluations to average over use forward 0 optional degree for higher order stuff (--> keep) 0 # of vectors in vector forward mode (p) 0 # of vectors in vector reverse mode (p) 0 # of vectors in tensor_eval (p) 1 test zos_forward or not 1 test fos_forward or not 1 test hos_forward or not 1 test fov_forward or not 1 test hov_forward or not 1 test fos_reverse or not 1 test hos_reverse or not 1 test fov_reverse or not 1 test hov_reverse or not 1 test Function or not 1 test Gradient/Jacobian or not 1 test Vector-Gradient/Jacobian-Product or not 1 test Gradient/Jacobian-Vector-Product or not 1 test Lagrange-Hessian-Vector-Product or not 1 test Tensors or not 1 test Inverse tensors or not ADOL-C-2.4.1/ADOL-C/examples/additional_examples/ode/0000755000076600007660000000000012120272604020361 5ustar coincoinADOL-C-2.4.1/ADOL-C/examples/additional_examples/ode/vgenodemain.cpp0000644000076600007660000003022311732376410023371 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: vgenodemain.cpp Revision: $Id: vgenodemain.cpp 299 2012-03-21 16:08:40Z kulshres $ Contents: example for ODE Generic Main File: for use with function modules containing vector examples (e.g. vgen_eutroph.C) Each << function module >> contains: (1) const char* const controlFileName (2) int indepDim; (3) int depDim; (4) void initProblemParameters( void ) (5) void initIndependents( double* indEPS_ ) (6) void originalVectorFunction( double* indEPS_, double* dEPS_ ) (7) void tapingVectorFunction( int tag, double* indEPS_, double* dEPS_ ) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ /****************************************************************************/ /* INCLUDES */ #include #include "../clock/myclock.h" #include /****************************************************************************/ /* MACROS */ #define TIMEFORMAT " %12.6E units, %12.6E scunits, %12.6E seconds\n" /****************************************************************************/ /* EXTERNAL STUFF FROM FUNCTION MODULES*/ /*--------------------------------------------------------------------------*/ /* Dimensions */ extern int indepDim; extern int depDim; /*--------------------------------------------------------------------------*/ /* Init Problem Parameters */ extern void initProblemParameters( void ); /*--------------------------------------------------------------------------*/ /* Initialize indeps */ extern void initIndependents( double* indeps ); /*--------------------------------------------------------------------------*/ /* original RHS */ extern void originalVectorFunction( double* indeps, double* deps ); /*--------------------------------------------------------------------------*/ /* taping RHS */ extern void tapingVectorFunction( int tag, double* indeps, double* deps ); /****************************************************************************/ /* MAIN */ int main() { int degree, evalCount, taskCount; int tag = 1; /* tape tag */ int i, j, k, yes; double tau; fprintf(stdout,"GENERIC ODE EXAMPLE (ADOL-C Example)\n\n"); /*------------------------------------------------------------------------*/ /* Initialize all problem parameters (including dimension) */ initProblemParameters(); if (indepDim != depDim) { fprintf(stdout," ERROR indepDim (%d) != depDim (%d)\n",indepDim,depDim); exit(-1); } /*------------------------------------------------------------------------*/ /* Check main parameters */ fprintf(stdout," Highest derivatives =? \n "); scanf("%d",°ree); fprintf(stdout," Number of evaluations =? \n "); scanf("%d",&evalCount); fprintf(stdout," Nonzero scaling paramater =?\n "); scanf("%le",&tau); /*------------------------------------------------------------------------*/ /* Initialize the independent variables */ double* indeps = new double[indepDim]; double* deps = new double[depDim]; double** indeps2 = myalloc(indepDim,degree+1); initIndependents(indeps); for (i=0; i always */ taskCount = 0; fprintf(stdout,"\nTASK %d: Original function evaluation\n", taskCount++); double t00 = myclock(); for (i=1; i<=evalCount; i++) { indeps[1] = 1.0/i; originalVectorFunction(indeps,deps); } double t01 = myclock(); double rtu, stu; if (t01-t00) { stu = 2.0/(t01-t00)/((double)degree)/(((double)degree)+1.0); rtu = 1.0/(t01-t00); fprintf(stdout," "); fprintf(stdout,TIMEFORMAT,1.0,2.0/((double)degree)/(((double)degree)+1.0), (t01-t00)/evalCount); } else { fprintf(stdout," !!! zero timing !!!\n"); fprintf(stdout," set time unit to 1.0\n"); rtu = 1.0; stu = 2.0/((double)degree)/(((double)degree)+1.0); } /****************************************************************************/ /* 1. TAPING THE FUNCTION */ /* ---> always */ fprintf(stdout,"--------------------------------------------------------"); fprintf(stdout,"\nTASK %d: Taping the function\n", taskCount++); t00 = myclock(1); /* NOTE: taping will be performed ONCE only */ tapingVectorFunction(tag,indeps,deps); t01 = myclock(); size_t tape_stats[STAT_SIZE]; tapestats(tag,tape_stats); fprintf(stdout,"\n independents %d\n",tape_stats[NUM_INDEPENDENTS]); fprintf(stdout," dependents %d\n",tape_stats[NUM_DEPENDENTS]); fprintf(stdout," operations %d\n",tape_stats[NUM_OPERATIONS]); fprintf(stdout," operations buffer size %d\n",tape_stats[OP_BUFFER_SIZE]); fprintf(stdout," locations buffer size %d\n",tape_stats[LOC_BUFFER_SIZE]); fprintf(stdout," constants buffer size %d\n",tape_stats[VAL_BUFFER_SIZE]); fprintf(stdout," maxlive %d\n",tape_stats[NUM_MAX_LIVES]); fprintf(stdout," valstack size %d\n\n",tape_stats[TAY_STACK_SIZE]); fprintf(stdout," "); fprintf(stdout,TIMEFORMAT,(t01-t00)*rtu*evalCount, (t01-t00)*stu*evalCount, (t01-t00)); /****************************************************************************/ /* 2. FORODE */ fprintf(stdout,"--------------------------------------------------------"); fprintf(stdout,"\nTASK %d: forode(tag, n=%d, tau=%f, dnew=%d, X[n][d+1])\n", taskCount++,indepDim,tau,degree); t00 = myclock(); for (j=0; j %14.6E\n", i,err); } return 1; } /****************************************************************************/ /* THAT'S ALL */ ADOL-C-2.4.1/ADOL-C/examples/additional_examples/ode/Makefile.am0000644000076600007660000000237412032277512022430 0ustar coincoin############################################################################## ## Makefile.am -- Process this file with automake to produce Makefile.in ## Revision: $Id: Makefile.am 354 2012-10-01 11:32:26Z kulshres $ ## ## Copyright (C) Andrea Walther, Andreas Griewank, Andreas Kowarz, ## Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_srcdir)/ADOL-C/include LDADD = -ladolc AM_LDFLAGS = -L$(top_builddir)/ADOL-C/src MAINTAINERCLEANFILES = Makefile.in *~ *.orig if ADDEXA noinst_PROGRAMS = odexam od2exam od3exam endif odexam_SOURCES = vfunc_robertson.cpp vgenodemain.cpp $(srcdir)/../clock/myclock.cpp od2exam_SOURCES = vfunc_eutroph.cpp vgenodemain.cpp $(srcdir)/../clock/myclock.cpp od3exam_SOURCES = vfunc_fic.cpp vgenodemain.cpp $(srcdir)/../clock/myclock.cpp ADOL-C-2.4.1/ADOL-C/examples/additional_examples/ode/vfunc_robertson.cpp0000644000076600007660000001131011452356477024321 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: vfunc_robertson.cpp Revision: $Id: vfunc_robertson.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: example for function module containing the Robertson test problem (based on odexam.C of version 1.7) Each << function module >> contains: (1) const char* const controlFileName (2) int indepDim; (3) int depDim; (4) void initProblemParameters( void ) (5) void initIndependents( double* indEPS_ ) (6) void originalVectorFunction( double* indEPS_, double* dEPS_ ) (7) void tapingVectorFunction( int tag, double* indEPS_, double* dEPS_ ) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #define _VFUNC_ROBERTSON_C_ /****************************************************************************/ /* INCLUDES */ #include #include /****************************************************************************/ /* GLOBAL VARIABLES */ /*--------------------------------------------------------------------------*/ /* Control file name */ const char* controlFileName = "robertsonexam.ctrl"; /*--------------------------------------------------------------------------*/ /* Dimensions */ int indepDim; int depDim; /*--------------------------------------------------------------------------*/ /* Other problem dependent parameters */ /****************************************************************************/ /* INIT PROBLEM PARAMETERS */ void initProblemParameters( void ) { fprintf(stdout,"ROBERTSONEXAM (ADOL-C Example)\n\n"); /* number of indeps & deps */ indepDim = 3; depDim = 3; } /****************************************************************************/ /* INITIALIZE INDEPs */ void initIndependents( double* indeps ) { indeps[0] = 1.0; indeps[1] = 0.01; /* originally 0.0 */ indeps[2] = 0.02; /* originally 0.0 */ } /****************************************************************************/ /* ORIGINAL SCALAR FUNCTION */ /*--------------------------------------------------------------------------*/ /* The Robertson test problem */ void robertson( double* indeps, double* deps ) { deps[0] = -sin(indeps[2]) + 1.0e8*indeps[2]*(1.0-1.0/indeps[0]); deps[1] = -10.0*indeps[0] + 3.0e7*indeps[2]*(1.0-indeps[1]); deps[2] = -deps[0] - deps[1]; } /*--------------------------------------------------------------------------*/ /* The interface function */ void originalVectorFunction( double* indeps, double* deps ) { robertson(indeps,deps); } /****************************************************************************/ /* TAPING SCALAR FUNCTION */ /*--------------------------------------------------------------------------*/ /* The active Robertson test problem */ void activeRobertson( adouble* indeps, adouble* deps ) { deps[0] = -sin(indeps[2]) + 1.0e8*indeps[2]*(1.0-1.0/indeps[0]); deps[1] = -10.0*indeps[0] + 3.0e7*indeps[2]*(1.0-indeps[1]); deps[2] = -deps[0] - deps[1]; } /*--------------------------------------------------------------------------*/ /* The interface function */ void tapingVectorFunction( int tag, double* indeps, double* deps ) { int i; trace_on(tag); adouble* activeIndeps = new adouble[indepDim]; adouble* activeDeps = new adouble[depDim]; adouble* aIP = activeIndeps; double* iP = indeps; for (i=0; i>= *iP++; trace_off(); } #undef _VFUNC_ROBERTSON_C_ ADOL-C-2.4.1/ADOL-C/examples/additional_examples/ode/Makefile.in0000644000076600007660000004764012062606346022452 0ustar coincoin# Makefile.in generated by automake 1.12.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @ADDEXA_TRUE@noinst_PROGRAMS = odexam$(EXEEXT) od2exam$(EXEEXT) \ @ADDEXA_TRUE@ od3exam$(EXEEXT) subdir = ADOL-C/examples/additional_examples/ode DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/autoconf/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_od2exam_OBJECTS = vfunc_eutroph.$(OBJEXT) vgenodemain.$(OBJEXT) \ myclock.$(OBJEXT) od2exam_OBJECTS = $(am_od2exam_OBJECTS) od2exam_LDADD = $(LDADD) od2exam_DEPENDENCIES = AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am_od3exam_OBJECTS = vfunc_fic.$(OBJEXT) vgenodemain.$(OBJEXT) \ myclock.$(OBJEXT) od3exam_OBJECTS = $(am_od3exam_OBJECTS) od3exam_LDADD = $(LDADD) od3exam_DEPENDENCIES = am_odexam_OBJECTS = vfunc_robertson.$(OBJEXT) vgenodemain.$(OBJEXT) \ myclock.$(OBJEXT) odexam_OBJECTS = $(am_odexam_OBJECTS) odexam_LDADD = $(LDADD) odexam_DEPENDENCIES = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/ADOL-C/src depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(od2exam_SOURCES) $(od3exam_SOURCES) $(odexam_SOURCES) DIST_SOURCES = $(od2exam_SOURCES) $(od3exam_SOURCES) $(odexam_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH_FALSE = @ADVBRANCH_FALSE@ ADVBRANCH_TRUE = @ADVBRANCH_TRUE@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF_FALSE = @ATRIG_ERF_FALSE@ ATRIG_ERF_TRUE = @ATRIG_ERF_TRUE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COLPACK_CFLAGS = @COLPACK_CFLAGS@ COLPACK_LIBS = @COLPACK_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_srcdir)/ADOL-C/include LDADD = -ladolc AM_LDFLAGS = -L$(top_builddir)/ADOL-C/src MAINTAINERCLEANFILES = Makefile.in *~ *.orig odexam_SOURCES = vfunc_robertson.cpp vgenodemain.cpp $(srcdir)/../clock/myclock.cpp od2exam_SOURCES = vfunc_eutroph.cpp vgenodemain.cpp $(srcdir)/../clock/myclock.cpp od3exam_SOURCES = vfunc_fic.cpp vgenodemain.cpp $(srcdir)/../clock/myclock.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/ode/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/ode/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list od2exam$(EXEEXT): $(od2exam_OBJECTS) $(od2exam_DEPENDENCIES) $(EXTRA_od2exam_DEPENDENCIES) @rm -f od2exam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(od2exam_OBJECTS) $(od2exam_LDADD) $(LIBS) od3exam$(EXEEXT): $(od3exam_OBJECTS) $(od3exam_DEPENDENCIES) $(EXTRA_od3exam_DEPENDENCIES) @rm -f od3exam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(od3exam_OBJECTS) $(od3exam_LDADD) $(LIBS) odexam$(EXEEXT): $(odexam_OBJECTS) $(odexam_DEPENDENCIES) $(EXTRA_odexam_DEPENDENCIES) @rm -f odexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(odexam_OBJECTS) $(odexam_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/myclock.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vfunc_eutroph.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vfunc_fic.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vfunc_robertson.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vgenodemain.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< myclock.o: $(srcdir)/../clock/myclock.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT myclock.o -MD -MP -MF $(DEPDIR)/myclock.Tpo -c -o myclock.o `test -f '$(srcdir)/../clock/myclock.cpp' || echo '$(srcdir)/'`$(srcdir)/../clock/myclock.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/myclock.Tpo $(DEPDIR)/myclock.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$(srcdir)/../clock/myclock.cpp' object='myclock.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o myclock.o `test -f '$(srcdir)/../clock/myclock.cpp' || echo '$(srcdir)/'`$(srcdir)/../clock/myclock.cpp myclock.obj: $(srcdir)/../clock/myclock.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT myclock.obj -MD -MP -MF $(DEPDIR)/myclock.Tpo -c -o myclock.obj `if test -f '$(srcdir)/../clock/myclock.cpp'; then $(CYGPATH_W) '$(srcdir)/../clock/myclock.cpp'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../clock/myclock.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/myclock.Tpo $(DEPDIR)/myclock.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$(srcdir)/../clock/myclock.cpp' object='myclock.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o myclock.obj `if test -f '$(srcdir)/../clock/myclock.cpp'; then $(CYGPATH_W) '$(srcdir)/../clock/myclock.cpp'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../clock/myclock.cpp'; fi` mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.4.1/ADOL-C/examples/additional_examples/ode/vfunc_eutroph.cpp0000644000076600007660000002041011452356477023773 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: vfunc_eutroph.cpp Revision: $Id: vfunc_eutroph.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: example for function module containing the eutroph example (based on eutroph.C of version 1.7) Each << function module >> contains: (1) const char* const controlFileName (2) int indepDim; (3) int depDim; (4) void initProblemParameters( void ) (5) void initIndependents( double* indEPS_ ) (6) void originalVectorFunction( double* indEPS_, double* dEPS_ ) (7) void tapingVectorFunction( int tag, double* indEPS_, double* dEPS_ ) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #define _VFUNC_EUTROPH_C_ /****************************************************************************/ /* INCLUDES */ #include #include /****************************************************************************/ /* GLOBAL VARIABLES */ /*--------------------------------------------------------------------------*/ /* Control file name */ const char* controlFileName = "eutrophexam.ctrl"; /*--------------------------------------------------------------------------*/ /* Dimensions */ int indepDim; int depDim; /*--------------------------------------------------------------------------*/ /* Other problem dependent parameters */ const double IK = 0.11 ; const double FRZ = 0.3 ; const double EFFUZ = 0.6; const double PRITZ = 1.0e-3; const double RESP = 5.0e-3; const double sinK = 5.0e-3; const double PRITA = 0.1; const double RZ = 1.0e-2; const double K2 = 4.0e-2; const double K3 = 5.0e-1; const double KSP = 2.0e2; const double KSF = 1.0; const double BETA = 100.0/1.25; const double ALPHA = 0.002; const double TRZ = 2.0; const double EPS_P = 0.4; const double FI1 = 230.4; const double FI3 = 282.8; const double FI4 = 127.5; const double FI5 = 141.9; const double p = 40.0; const double DEPTH = 45; const double MORITZ= 0.075; const double Q = 0.786E6; const double VND = 0.265E9; /* fix controls */ const double PRFOS = 0.5*p; const double M = 0.1; const double ZMIX = (45+RZ)/2; const double QIV = 0.297E-02/3; /****************************************************************************/ /* INIT PROBLEM PARAMETERS */ void initProblemParameters( void ) { fprintf(stdout,"EUTROPHEXAM (ADOL-C Example)\n\n"); /* number of indEPS_ & dEPS_ */ indepDim = 5; depDim = 5; } /****************************************************************************/ /* INITIALIZE INDEPS_ */ void initIndependents( double* indEPS_ ) { indEPS_[0] = 0.5; indEPS_[1] = 0.0005; indEPS_[2] = 4.0; indEPS_[3] = 0.01; /* originally 0.0 */ indEPS_[4] = 0.02; /* originally 0.0 */ } /****************************************************************************/ /* ORIGINAL SCALAR FUNCTION */ /*--------------------------------------------------------------------------*/ /* The eutroph function */ void eutroph( double* indEPS_, double* dEPS_ ) { double T, TEMP, FOTOP, I, PIDI, EPS_, temp, temp2, GROW; double V; T = indEPS_[4]; TEMP = 9.5+7.9*sin(T+FI1); FOTOP = 12.0+4.19*sin(T+280.0); I = 229.0+215.0*sin(T+FI3)+15.3*sin(2.0*T+FI4)+ 21.7*sin(3.0*T+FI5); PIDI = 0.8+.25*cos(T)-.12*cos(2.*T); V = VND; if (T < 72) I *= 0.603; EPS_ = ALPHA * indEPS_[0] + indEPS_[3] + EPS_P; temp = I * exp(-EPS_*ZMIX); temp2 = 2*IK*FOTOP; GROW = 1.2*FOTOP/EPS_/ZMIX * (1.333 * atan (I / temp2) -IK*FOTOP / I * log( 1 + pow((I /temp2 ),2)) -1.333 * atan (temp / temp2) +IK*FOTOP/temp* log( 1+pow(temp/temp2, 2) )) * indEPS_[2] /(KSF+indEPS_[2]) * 0.366 * pow(K2,0.52) * exp(0.09*TEMP) * pow(indEPS_[0],(1-0.52)); dEPS_[0] = GROW - RESP * TEMP * indEPS_[0] - FRZ * indEPS_[0] * indEPS_[1] - sinK * PIDI * indEPS_[0] + (PRITA - indEPS_[0]) * Q/VND; dEPS_[1] = FRZ * indEPS_[0] / K2 * indEPS_[1] / 1000 * EFFUZ*KSP / KSP+indEPS_[0] - RZ * indEPS_[1] - MORITZ * indEPS_[1] + (PRITZ - indEPS_[1] ) * Q/V; dEPS_[2] = K3 * (-GROW + RESP * TEMP * indEPS_[0] + FRZ * indEPS_[0] * indEPS_[1] * (1 - EFFUZ*KSP /(KSP+indEPS_[0]) ) + RZ * K2 * 1000 * indEPS_[1] + MORITZ * K2 * 1000 * indEPS_[1] ) + (PRFOS - indEPS_[2])* Q/V; dEPS_[3] = (- indEPS_[3] * Q + BETA * M / TRZ)/VND; dEPS_[4] = 1; } /*--------------------------------------------------------------------------*/ /* The interface function */ void originalVectorFunction( double* indEPS_, double* dEPS_ ) { eutroph(indEPS_,dEPS_); } /****************************************************************************/ /* TAPING SCALAR FUNCTION */ /*--------------------------------------------------------------------------*/ /* The active eutroph function */ void activeEutroph( adouble* indEPS_, adouble* dEPS_ ) { adouble T, TEMP, FOTOP, I, PIDI, EPS_, temp, temp2, GROW; double V; T = indEPS_[4]; TEMP = 9.5+7.9*sin(T+FI1); FOTOP = 12.0+4.19*sin(T+280.0); I = 229.0+215.0*sin(T+FI3)+15.3*sin(2.0*T+FI4)+ 21.7*sin(3.0*T+FI5); PIDI = 0.8+.25*cos(T)-.12*cos(2.*T); V = VND; if (T < 72) I *= 0.603; EPS_ = ALPHA * indEPS_[0] + indEPS_[3] + EPS_P; temp = I * exp(-EPS_*ZMIX); temp2 = 2*IK*FOTOP; GROW = 1.2*FOTOP/EPS_/ZMIX * (1.333 * atan (I / temp2) -IK*FOTOP / I * log( 1 + pow((I /temp2 ),2)) -1.333 * atan (temp / temp2) +IK*FOTOP/temp* log( 1+pow(temp/temp2, 2) )) * indEPS_[2] /(KSF+indEPS_[2]) * 0.366 * pow(K2,0.52) * exp(0.09*TEMP) * pow(indEPS_[0],(1-0.52)); dEPS_[0] = GROW - RESP * TEMP * indEPS_[0] - FRZ * indEPS_[0] * indEPS_[1] - sinK * PIDI * indEPS_[0] + (PRITA - indEPS_[0]) * Q/VND; dEPS_[1] = FRZ * indEPS_[0] / K2 * indEPS_[1] / 1000 * EFFUZ*KSP / KSP+indEPS_[0] - RZ * indEPS_[1] - MORITZ * indEPS_[1] + (PRITZ - indEPS_[1] ) * Q/V; dEPS_[2] = K3 * (-GROW + RESP * TEMP * indEPS_[0] + FRZ * indEPS_[0] * indEPS_[1] * (1 - EFFUZ*KSP /(KSP+indEPS_[0]) ) + RZ * K2 * 1000 * indEPS_[1] + MORITZ * K2 * 1000 * indEPS_[1] ) + (PRFOS - indEPS_[2])* Q/V; dEPS_[3] = (- indEPS_[3] * Q + BETA * M / TRZ)/VND; dEPS_[4] = 1; } /*--------------------------------------------------------------------------*/ /* The interface function */ void tapingVectorFunction( int tag, double* indEPS_, double* dEPS_ ) { int i; trace_on(tag); adouble* activeIndEPS_ = new adouble[indepDim]; adouble* activeDEPS_ = new adouble[depDim]; adouble* aIP = activeIndEPS_; double* iP = indEPS_; for (i=0; i>= *iP++; trace_off(); } #undef _VFUNC_EUTROPH_C_ ADOL-C-2.4.1/ADOL-C/examples/additional_examples/ode/README0000644000076600007660000000320011227416777021256 0ustar coincoin############################################################################## ## README -- additional information ## Revision: $Id: README 299 2009-02-26 09:20:11Z awalther $ ## ## Copyright (C) Andrea Walther, Andreas Griewank, Andreas Kowarz, ## Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## -------------------------------------------------------------- This directory contains example programs that perform user time measurements of the special ADOL-C drivers forode(..) and accode(..) usually used to solve ordinary differential equations (ODEs). For a demonstration how to apply the drivers to solve ODEs have a look at the documented example code ../../odexam.cpp -------------------------------------------------------------- CONTENTS OF THE DIRECTORY odexam --> A simple ODE example (R^3 --> R^3) [based on the Robertson test problem] vfunc_robertson.cpp od2exam --> Another ODE example (R^5 --> R^5) [based on a eutrophy problem] vfunc_eutroph.cpp od3exam --> Another ODE example (scalable dimension) [flow in channel] vfunc_fic.cpp NOTE: all example programs make use of the "generic" module vgenodemain.cpp and the clock utility provided in subdirectory ../clock. ADOL-C-2.4.1/ADOL-C/examples/additional_examples/ode/vfunc_fic.cpp0000644000076600007660000003017411452356477023056 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: vfunc_fic.cpp Revision: $Id: vfunc_fic.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: example for function module containing the flow in a channel Each << function module >> contains: (1) const char* const controlFileName (2) int indepDim; (3) int depDim; (4) void initProblemParameters( void ) (5) void initIndependents( double* indEPS_ ) (6) void originalVectorFunction( double* indEPS_, double* dEPS_ ) (7) void tapingVectorFunction( int tag, double* indEPS_, double* dEPS_ ) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #define _VFUNC_FIC_C_ /****************************************************************************/ /* INCLUDES */ #include #include /****************************************************************************/ /* GLOBAL VARIABLES */ /*--------------------------------------------------------------------------*/ /* Control file name */ const char* controlFileName = "ficexam.ctrl"; /*--------------------------------------------------------------------------*/ /* Dimensions */ int indepDim; int depDim; /*--------------------------------------------------------------------------*/ /* Other problem dependent parameters */ int nIntern; double r__; /****************************************************************************/ /* INIT PROBLEM PARAMETERS */ void initProblemParameters( void ) { fprintf(stdout,"FICEXAM Flow in a channel (ADOL-C Example)\n\n"); /* number of indeps & deps */ if (indepDim > 0) nIntern = indepDim; else { fprintf(stdout," number of independents/8 = ? "); fscanf(stdin,"%d",&nIntern); fprintf(stdout,"\n"); } indepDim = nIntern*8; depDim = indepDim; } /****************************************************************************/ /* INITIALIZE INDEPs */ void initIndependents( double* indeps ) { int i, j, var; double xt, h; h = 1.0/nIntern; xt = 0.0; for (i=1; i<=nIntern; i++) { var = 8*(i-1); indeps[var] = xt*xt*(3.0-2.0*xt); indeps[var+1] = 6.0 * xt * (1.0 - xt); indeps[var+2] = 6.0 * (1.0 -2.0*xt); indeps[var+3] = -12.0; for (j=1; j<=4; j++) indeps[var+3+j] = 0.0; xt = xt + h; } r__ = 0; } /****************************************************************************/ /* ORIGINAL SCALAR FUNCTION */ /*--------------------------------------------------------------------------*/ /* The fic function */ int pdficfj ( int n, double* x, double* fvec, double r__, int nIntern ) { /* Initialized data */ static double rho[4] = { .0694318413734436035, .330009490251541138, .66999053955078125, .930568158626556396 }; /* System generated locals */ int i__1; /* Local variables */ static double h__; static int i__, j, k, m; static double w[5], nf, hm, dw[40] /* was [5][8] */, rhnfhk[1280] /* was [4][8][8][5] */, rhoijh; static int eqn, var; --fvec; --x; /* Function Body */ /* Initialization. */ h__ = 1. / (double) (nIntern); hm = 1.; for (m = 0; m <= 4; ++m) { for (i__ = 1; i__ <= 4; ++i__) { rhoijh = hm; for (j = 0; j <= 7; ++j) { nf = 1.; for (k = 0; k <= 7; ++k) { rhnfhk[i__ + (j + (k + (m << 3) << 3) << 2) - 1] = rhoijh / nf; nf *= (double) (k + 1); } rhoijh *= rho[i__ - 1]; } } hm *= h__; } /* Evaluate the function */ /* Initialize arrays. */ i__1 = n; for (j = 1; j <= i__1; ++j) { fvec[j] = 0.; } for (k = 1; k <= 8; ++k) { for (j = 1; j <= 5; ++j) { dw[j + k * 5 - 6] = 0.; } } /* Set up the boundary equations at t = 0. u(0) = 0, u'(0) = 0. */ fvec[1] = x[1]; fvec[2] = x[2]; i__1 = nIntern; for (i__ = 1; i__ <= i__1; ++i__) { var = i__ - 1 << 3; /* Set up the collocation equations. */ eqn = var + 2; for (k = 1; k <= 4; ++k) { for (m = 1; m <= 5; ++m) { w[m - 1] = 0.; for (j = m; j <= 4; ++j) { w[m - 1] += rhnfhk[k + (j - m + (j - m + (j - m << 3) << 3) << 2) - 1] * x[var + j]; dw[m + j * 5 - 6] = rhnfhk[k + (j - m + (j - m + (j - m << 3) << 3) << 2) - 1]; } for (j = 1; j <= 4; ++j) { w[m - 1] += rhnfhk[k + (j + 4 - m + (j + 4 - m + (4 - m + 1 << 3) << 3) << 2) - 1] * x[var + 4 + j]; dw[m + (j + 4) * 5 - 6] = rhnfhk[k + (j + 4 - m + (j + 4 - m + (4 - m + 1 << 3) << 3) << 2) - 1]; } } fvec[eqn + k] = w[4] - r__ * (w[1] * w[2] - w[0] * w[3]); } /* Set up the continuity equations. */ eqn = var + 6; for (m = 1; m <= 4; ++m) { w[m - 1] = 0.; for (j = m; j <= 4; ++j) { w[m - 1] += rhnfhk[(j - m + (j - m << 3)) * 32] * x[var + j] ; dw[m + j * 5 - 6] = rhnfhk[(j - m + (j - m << 3)) * 32]; } for (j = 1; j <= 4; ++j) { w[m - 1] += rhnfhk[(j + 4 - m + (4 - m + 1 << 3)) * 32] * x[ var + 4 + j]; dw[m + (j + 4) * 5 - 6] = rhnfhk[(j + 4 - m + (4 - m + 1 << 3) ) * 32]; } } if (i__ == nIntern) { goto L230; } for (m = 1; m <= 4; ++m) { fvec[eqn + m] = x[var + 8 + m] - w[m - 1]; } } /* Set up the boundary equations at t = 1. u(1) = 1, u'(1) = 0. */ L230: fvec[n - 1] = w[0] - 1.; fvec[n] = w[1]; return 0; } /*--------------------------------------------------------------------------*/ /* The interface function */ void originalVectorFunction( double* indeps, double* deps ) { pdficfj(indepDim,indeps,deps,r__,nIntern); } /****************************************************************************/ /* TAPING SCALAR FUNCTION */ /*--------------------------------------------------------------------------*/ /* The active fic function */ int dficfj( int n, adouble* x, adouble* fvec, double r__, int nIntern ) { /* Initialized data */ static adouble rho[4] = { .0694318413734436035, .330009490251541138, .66999053955078125, .930568158626556396 }; /* System generated locals */ int i__1; /* Local variables */ static adouble h__; static int i__, j, k, m; static adouble nf, hm, dw[40] /* was [5][8] */, rhnfhk[1280] /* was [4][8][8][5] */, rhoijh; static int eqn, var; adouble w[5]; --fvec; --x; /* Function Body */ /* Initialization. */ h__ = 1. / (double) (nIntern); hm = 1.; for (m = 0; m <= 4; ++m) { for (i__ = 1; i__ <= 4; ++i__) { rhoijh = hm; for (j = 0; j <= 7; ++j) { nf = 1.; for (k = 0; k <= 7; ++k) { rhnfhk[i__ + (j + (k + (m << 3) << 3) << 2) - 1] = rhoijh / nf; nf *= (double) (k + 1); } rhoijh *= rho[i__ - 1]; } } hm *= h__; } /* Evaluate the function */ /* Initialize arrays. */ i__1 = n; for (j = 1; j <= i__1; ++j) { fvec[j] = 0.; } for (k = 1; k <= 8; ++k) { for (j = 1; j <= 5; ++j) { dw[j + k * 5 - 6] = 0.; } } /* Set up the boundary equations at t = 0. u(0) = 0, u'(0) = 0. */ fvec[1] = x[1]; fvec[2] = x[2]; i__1 = nIntern; for (i__ = 1; i__ <= i__1; ++i__) { var = i__ - 1 << 3; /* Set up the collocation equations. */ eqn = var + 2; for (k = 1; k <= 4; ++k) { for (m = 1; m <= 5; ++m) { w[m - 1] = 0.; for (j = m; j <= 4; ++j) { w[m - 1] += rhnfhk[k + (j - m + (j - m + (j - m << 3) << 3) << 2) - 1] * x[var + j]; dw[m + j * 5 - 6] = rhnfhk[k + (j - m + (j - m + (j - m << 3) << 3) << 2) - 1]; } for (j = 1; j <= 4; ++j) { w[m - 1] += rhnfhk[k + (j + 4 - m + (j + 4 - m + (4 - m + 1 << 3) << 3) << 2) - 1] * x[var + 4 + j]; dw[m + (j + 4) * 5 - 6] = rhnfhk[k + (j + 4 - m + (j + 4 - m + (4 - m + 1 << 3) << 3) << 2) - 1]; } } fvec[eqn + k] = w[4] - r__ * (w[1] * w[2] - w[0] * w[3]); } /* Set up the continuity equations. */ eqn = var + 6; for (m = 1; m <= 4; ++m) { w[m - 1] = 0.; for (j = m; j <= 4; ++j) { w[m - 1] += rhnfhk[(j - m + (j - m << 3)) * 32] * x[var + j] ; dw[m + j * 5 - 6] = rhnfhk[(j - m + (j - m << 3)) * 32]; } for (j = 1; j <= 4; ++j) { w[m - 1] += rhnfhk[(j + 4 - m + (4 - m + 1 << 3)) * 32] * x[ var + 4 + j]; dw[m + (j + 4) * 5 - 6] = rhnfhk[(j + 4 - m + (4 - m + 1 << 3) ) * 32]; } } if (i__ != nIntern) { for (m = 1; m <= 4; ++m) { fvec[eqn + m] = x[var + 8 + m] - w[m - 1]; } } } /* Set up the boundary equations at t = 1. u(1) = 1, u'(1) = 0. */ fvec[n - 1] = w[0] - 1.; fvec[n] = w[1]; return 0; } /*--------------------------------------------------------------------------*/ /* The interface function */ void tapingVectorFunction( int tag, double* indeps, double* deps ) { int i; trace_on(tag); adouble* activeIndeps = new adouble[indepDim]; adouble* activeDeps = new adouble[depDim]; adouble* aIP = activeIndeps; double* iP = indeps; for (i=0; i>= *iP++; trace_off(); } #undef _VFUNC_FIC_C_ ADOL-C-2.4.1/ADOL-C/examples/additional_examples/speelpenning/0000755000076600007660000000000012120272604022301 5ustar coincoinADOL-C-2.4.1/ADOL-C/examples/additional_examples/speelpenning/speelpenning.cpp0000644000076600007660000001674011732376410025514 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: speelpenning.cpp Revision: $Id: speelpenning.cpp 299 2012-03-21 16:08:40Z kulshres $ Contents: example for computation of sparse hessians Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ /****************************************************************************/ /* INCLUDES */ #include #include "../clock/myclock.h" /****************************************************************************/ /* MACROS */ #define abs(x) ((x >= 0) ? (x) : -(x)) #define maxabs(x,y) (((x)>abs(y)) ? (x) : abs(y)) #define TAG 1 /****************************************************************************/ /* MAIN PROGRAM */ int main() { int n,i,it; size_t tape_stats[STAT_SIZE]; /*--------------------------------------------------------------------------*/ /* Input */ fprintf(stdout,"SPEELPENNINGS PRODUCT Type 1 (ADOL-C Example)\n\n"); fprintf(stdout,"number of independent variables = ? \n"); scanf("%d",&n); int itu; fprintf(stdout,"number of evaluations = ? \n"); scanf("%d",&itu); /*--------------------------------------------------------------------------*/ double yp=0.0; /* 0. time (undifferentiated double code) */ double *xp = new double[n]; /* Init */ for (i=0;i>= yout; delete [] x; trace_off(); double t11 = myclock(); fprintf(stdout,"%E =? %E function values should be the same \n",yout,yp); /*--------------------------------------------------------------------------*/ tapestats(TAG,tape_stats); fprintf(stdout,"\n independents %d\n",tape_stats[NUM_INDEPENDENTS]); fprintf(stdout," dependents %d\n",tape_stats[NUM_DEPENDENTS]); fprintf(stdout," operations %d\n",tape_stats[NUM_OPERATIONS]); fprintf(stdout," operations buffer size %d\n",tape_stats[OP_BUFFER_SIZE]); fprintf(stdout," locations buffer size %d\n",tape_stats[LOC_BUFFER_SIZE]); fprintf(stdout," constants buffer size %d\n",tape_stats[VAL_BUFFER_SIZE]); fprintf(stdout," maxlive %d\n",tape_stats[NUM_MAX_LIVES]); fprintf(stdout," valstack size %d\n\n",tape_stats[TAY_STACK_SIZE]); /*--------------------------------------------------------------------------*/ double **r = new double*[1]; r[0] = new double[1]; r[0][0] = yp; double err; double *z = new double[n]; double *g = new double[n]; double* h = new double[n]; double *ind = new double[n]; /*--------------------------------------------------------------------------*/ double t60 = myclock(); /* 6. time (forward no keep) */ for (it=0; it zero timing due to small problem dimension \n"); return 1; } ADOL-C-2.4.1/ADOL-C/examples/additional_examples/speelpenning/Makefile.am0000644000076600007660000000171012032277512024341 0ustar coincoin############################################################################## ## Makefile.am -- Process this file with automake to produce Makefile.in ## Revision: $Id: Makefile.am 354 2012-10-01 11:32:26Z kulshres $ ## ## Copyright (C) Andrea Walther, Andreas Kowarz ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_srcdir)/ADOL-C/include LDADD = -ladolc AM_LDFLAGS = -L$(top_builddir)/ADOL-C/src MAINTAINERCLEANFILES = Makefile.in *~ *.orig if ADDEXA noinst_PROGRAMS = speelpenning endif speelpenning_SOURCES = speelpenning.cpp $(srcdir)/../clock/myclock.cpp ADOL-C-2.4.1/ADOL-C/examples/additional_examples/speelpenning/Makefile.in0000644000076600007660000004543012062606346024365 0ustar coincoin# Makefile.in generated by automake 1.12.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @ADDEXA_TRUE@noinst_PROGRAMS = speelpenning$(EXEEXT) subdir = ADOL-C/examples/additional_examples/speelpenning DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/autoconf/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_speelpenning_OBJECTS = speelpenning.$(OBJEXT) myclock.$(OBJEXT) speelpenning_OBJECTS = $(am_speelpenning_OBJECTS) speelpenning_LDADD = $(LDADD) speelpenning_DEPENDENCIES = AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/ADOL-C/src depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(speelpenning_SOURCES) DIST_SOURCES = $(speelpenning_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH_FALSE = @ADVBRANCH_FALSE@ ADVBRANCH_TRUE = @ADVBRANCH_TRUE@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF_FALSE = @ATRIG_ERF_FALSE@ ATRIG_ERF_TRUE = @ATRIG_ERF_TRUE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COLPACK_CFLAGS = @COLPACK_CFLAGS@ COLPACK_LIBS = @COLPACK_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_srcdir)/ADOL-C/include LDADD = -ladolc AM_LDFLAGS = -L$(top_builddir)/ADOL-C/src MAINTAINERCLEANFILES = Makefile.in *~ *.orig speelpenning_SOURCES = speelpenning.cpp $(srcdir)/../clock/myclock.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/speelpenning/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/speelpenning/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list speelpenning$(EXEEXT): $(speelpenning_OBJECTS) $(speelpenning_DEPENDENCIES) $(EXTRA_speelpenning_DEPENDENCIES) @rm -f speelpenning$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(speelpenning_OBJECTS) $(speelpenning_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/myclock.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/speelpenning.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< myclock.o: $(srcdir)/../clock/myclock.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT myclock.o -MD -MP -MF $(DEPDIR)/myclock.Tpo -c -o myclock.o `test -f '$(srcdir)/../clock/myclock.cpp' || echo '$(srcdir)/'`$(srcdir)/../clock/myclock.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/myclock.Tpo $(DEPDIR)/myclock.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$(srcdir)/../clock/myclock.cpp' object='myclock.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o myclock.o `test -f '$(srcdir)/../clock/myclock.cpp' || echo '$(srcdir)/'`$(srcdir)/../clock/myclock.cpp myclock.obj: $(srcdir)/../clock/myclock.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT myclock.obj -MD -MP -MF $(DEPDIR)/myclock.Tpo -c -o myclock.obj `if test -f '$(srcdir)/../clock/myclock.cpp'; then $(CYGPATH_W) '$(srcdir)/../clock/myclock.cpp'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../clock/myclock.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/myclock.Tpo $(DEPDIR)/myclock.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$(srcdir)/../clock/myclock.cpp' object='myclock.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o myclock.obj `if test -f '$(srcdir)/../clock/myclock.cpp'; then $(CYGPATH_W) '$(srcdir)/../clock/myclock.cpp'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../clock/myclock.cpp'; fi` mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.4.1/ADOL-C/examples/additional_examples/speelpenning/README0000644000076600007660000000134111227416777023202 0ustar coincoin############################################################################## ## README -- additional information ## Revision: $Id: README 299 2009-02-26 09:20:11Z awalther $ ## ## Copyright (C) Andrea Walther, Andreas Griewank, Andreas Kowarz, ## Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## CONTENTS OF THE DIRECTORY speelpenning --> Speelpennings product speelpenning.cpp ADOL-C-2.4.1/ADOL-C/examples/additional_examples/fixpoint_exam/0000755000076600007660000000000012120272604022464 5ustar coincoinADOL-C-2.4.1/ADOL-C/examples/additional_examples/fixpoint_exam/fixpoint_exam.cpp0000644000076600007660000000461711452356477026074 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: fixpoint_exam.cpp Revision: $Id: fixpoint_exam.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: example for differentiation of fixpoint iterations Copyright (c) Andrea Walther This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #include #include #define imax 100 #define imax_deriv 100 // fixpoint iteration // double version int fixpoint_iter(double *x, double *u, double *y, int dim_x, int dim_u); double norm(double *x, int dim_x); // adouble version int fixpoint_iter_act(adouble *x, adouble *u, adouble *y, int dim_x, int dim_u); adouble norm(adouble *x, int dim_x); int tag_full, tag_part, tag_fixpoint; int main() { adouble x[1]; adouble u[1]; adouble y[1]; adouble diff[1]; double eps=1.0e-6; double up[1]; double yp[1]; double grad[1]; int i; tag_full = 1; tag_part = 2; tag_fixpoint = 3; trace_on(tag_full); i = 0; u[0] <<= 0.5; y[0] = 1.57079632679; do { i++; x[0] = y[0]; fixpoint_iter_act(x,u,y,1,1); printf(" i = %3d y = %12.9f\n",i,y[0].value()); diff[0] = x[0]-y[0]; } while((norm(diff,1)>eps) && (i>= yp[0]; trace_off(1); up[0] = 0.5; gradient(tag_full,1,up,grad); printf("\n full taping:\n gradient = ( %f )\n",grad[0]); printf("\n taping with fixpoint facility:\n\n"); trace_on(tag_part); i = 0; u[0] <<= 0.5; x[0] = 1.57079632679; fp_iteration(tag_fixpoint,fixpoint_iter,fixpoint_iter_act,norm,norm,eps,eps,imax,imax_deriv,x,u,y,1,1); y[0] >>= yp[0]; trace_off(1); up[0] = 0.5; gradient(tag_part,1,up,grad); printf("\n=> gradient = ( %f )\n",grad[0]); return 0; } int fixpoint_iter(double *x, double *u, double *y, int dim_x, int dim_u) { y[0] = u[0]*(x[0]+cos(x[0])); return 0; } double norm(double *x, int dim_x) { return fabs(x[0]); } int fixpoint_iter_act(adouble *x, adouble *u, adouble *y, int dim_x, int dim_u) { y[0] = u[0]*(x[0]+cos(x[0])); return 0; } adouble norm(adouble *x, int dim_x) { return fabs(x[0]); } ADOL-C-2.4.1/ADOL-C/examples/additional_examples/fixpoint_exam/Makefile.am0000644000076600007660000000165412032277512024533 0ustar coincoin############################################################################## ## Makefile.am -- Process this file with automake to produce Makefile.in ## Revision: $Id: Makefile.am 354 2012-10-01 11:32:26Z kulshres $ ## ## Copyright (C) Andrea Walther ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_srcdir)/ADOL-C/include LDADD = -ladolc AM_LDFLAGS = -L$(top_builddir)/ADOL-C/src MAINTAINERCLEANFILES = Makefile.in *~ *.orig if ADDEXA noinst_PROGRAMS = fixpoint_exam endif fixpoint_exam_SOURCES = fixpoint_exam.cpp ADOL-C-2.4.1/ADOL-C/examples/additional_examples/fixpoint_exam/Makefile.in0000644000076600007660000004142312062606346024546 0ustar coincoin# Makefile.in generated by automake 1.12.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @ADDEXA_TRUE@noinst_PROGRAMS = fixpoint_exam$(EXEEXT) subdir = ADOL-C/examples/additional_examples/fixpoint_exam DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/autoconf/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_fixpoint_exam_OBJECTS = fixpoint_exam.$(OBJEXT) fixpoint_exam_OBJECTS = $(am_fixpoint_exam_OBJECTS) fixpoint_exam_LDADD = $(LDADD) fixpoint_exam_DEPENDENCIES = AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/ADOL-C/src depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(fixpoint_exam_SOURCES) DIST_SOURCES = $(fixpoint_exam_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH_FALSE = @ADVBRANCH_FALSE@ ADVBRANCH_TRUE = @ADVBRANCH_TRUE@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF_FALSE = @ATRIG_ERF_FALSE@ ATRIG_ERF_TRUE = @ATRIG_ERF_TRUE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COLPACK_CFLAGS = @COLPACK_CFLAGS@ COLPACK_LIBS = @COLPACK_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_srcdir)/ADOL-C/include LDADD = -ladolc AM_LDFLAGS = -L$(top_builddir)/ADOL-C/src MAINTAINERCLEANFILES = Makefile.in *~ *.orig fixpoint_exam_SOURCES = fixpoint_exam.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/fixpoint_exam/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/fixpoint_exam/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list fixpoint_exam$(EXEEXT): $(fixpoint_exam_OBJECTS) $(fixpoint_exam_DEPENDENCIES) $(EXTRA_fixpoint_exam_DEPENDENCIES) @rm -f fixpoint_exam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(fixpoint_exam_OBJECTS) $(fixpoint_exam_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fixpoint_exam.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.4.1/ADOL-C/examples/additional_examples/fixpoint_exam/README0000644000076600007660000000132111227416777023363 0ustar coincoin############################################################################## ## README -- additional information ## Revision: $Id: README 268 2008-12-15 10:32:03Z awalther $ ## ## Copyright (C) Andrea Walther ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## CONTENTS OF THE DIRECTORY fixpoint_exam --> example for the exploitation of a fixpoint iteration in the differentiation process fixpoint_exam.cpp ADOL-C-2.4.1/ADOL-C/examples/additional_examples/Makefile.am0000644000076600007660000000211611412425466021657 0ustar coincoin############################################################################## ## Makefile.am -- Process this file with automake to produce Makefile.in ## Revision: $Id: Makefile.am 106 2010-06-29 17:19:50Z kulshres $ ## ## Copyright (C) Andrea Walther, Andreas Kowarz ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## MAINTAINERCLEANFILES = Makefile.in *~ if ADDEXA SUBDIRS = clock hessmat lufact ode sparse tapesave timing \ detexam helm lighthouse scal speelpenning taylor pow \ checkpointing ext_diff_func fixpoint_exam openmp_exam endif if PAREXA SUBDIRS = clock hessmat lufact ode sparse tapesave timing \ detexam helm lighthouse scal speelpenning taylor pow \ checkpointing ext_diff_func fixpoint_exam openmp_exam endif ADOL-C-2.4.1/ADOL-C/examples/additional_examples/hessmat/0000755000076600007660000000000012120272604021256 5ustar coincoinADOL-C-2.4.1/ADOL-C/examples/additional_examples/hessmat/Makefile.am0000644000076600007660000000163712032277512023326 0ustar coincoin############################################################################## ## Makefile.am -- Process this file with automake to produce Makefile.in ## Revision: $Id: Makefile.am 354 2012-10-01 11:32:26Z kulshres $ ## ## Copyright (C) Andrea Walther, Andreas Kowarz ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_srcdir)/ADOL-C/include LDADD = -ladolc AM_LDFLAGS = -L$(top_builddir)/ADOL-C/src MAINTAINERCLEANFILES = Makefile.in *~ *.orig if ADDEXA noinst_PROGRAMS = hessmat endif hessmat_SOURCES = hessmat.cpp ADOL-C-2.4.1/ADOL-C/examples/additional_examples/hessmat/Makefile.in0000644000076600007660000004121612062606346023340 0ustar coincoin# Makefile.in generated by automake 1.12.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @ADDEXA_TRUE@noinst_PROGRAMS = hessmat$(EXEEXT) subdir = ADOL-C/examples/additional_examples/hessmat DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/autoconf/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_hessmat_OBJECTS = hessmat.$(OBJEXT) hessmat_OBJECTS = $(am_hessmat_OBJECTS) hessmat_LDADD = $(LDADD) hessmat_DEPENDENCIES = AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/ADOL-C/src depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(hessmat_SOURCES) DIST_SOURCES = $(hessmat_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH_FALSE = @ADVBRANCH_FALSE@ ADVBRANCH_TRUE = @ADVBRANCH_TRUE@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF_FALSE = @ATRIG_ERF_FALSE@ ATRIG_ERF_TRUE = @ATRIG_ERF_TRUE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COLPACK_CFLAGS = @COLPACK_CFLAGS@ COLPACK_LIBS = @COLPACK_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_srcdir)/ADOL-C/include LDADD = -ladolc AM_LDFLAGS = -L$(top_builddir)/ADOL-C/src MAINTAINERCLEANFILES = Makefile.in *~ *.orig hessmat_SOURCES = hessmat.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/hessmat/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/hessmat/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list hessmat$(EXEEXT): $(hessmat_OBJECTS) $(hessmat_DEPENDENCIES) $(EXTRA_hessmat_DEPENDENCIES) @rm -f hessmat$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(hessmat_OBJECTS) $(hessmat_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hessmat.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.4.1/ADOL-C/examples/additional_examples/hessmat/hessmat.cpp0000644000076600007660000002002212100524437023424 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: hessmat.cpp Revision: $Id: hessmat.cpp 387 2013-01-25 15:47:43Z kulshres $ Contents: example for testing the routines: hov_wk_forward ( = Higher Order Vector forward With Keep ) hos_ov_reverse ( = Higher Order Scalar reverse over vectors) Copyright (c) Andrea Walther, Andreas Kowarz, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ /****************************************************************************/ /* INCLUDES */ #include #include #include using namespace std; /****************************************************************************/ /* MAIN */ int main() { int i,j,l,m,n,d,q,bd, keep; /*--------------------------------------------------------------------------*/ /* inputs */ cout << "vector x Hessian x matrix for the function \n\n"; cout << " y[0] = cos(x[0])* ...*cos(x[n]) \n"; cout << " y[1] = x[0]^n \n"; cout << " y[2] = condassign(y[i],y[0]>y[1],y[1],y[0]) \n"; cout << " y[3] = sin(x[0])+ ...+sin(x[n]) \n"; cout << " y[4] = exp(x[0])- ...-exp(x[n]) \n"; cout << " y[5] = pow(y[1],3) \n"; cout << " y[6] += y[5]*y[4] \n"; cout << " y[7] -= y[6]*y[5] \n"; cout << " y[j] = 1/x[0]/ .../x[n], j > 3 \n\n"; cout << " Number of independents = ?\n "; cin >> n; cout << " Number of dependents = ?\n "; cin >> m; cout << " Degree d (for forward) = ?\n"; cin >> d; cout << " keep (degree of corresponding reverse = keep-1) = ?\n"; cout << " keep <= d+1 must be valid \n"; cin >> keep; cout << " Number of directions = ?\n "; cin >> q; /*--------------------------------------------------------------------------*/ /* allocations and inits */ double* xp = new double[n]; /* passive indeps */ double* yp = new double[m]; /* passive depends */ /* vector x Hessian x matrix = Upp x H x XPPP */ double* Up = myalloc(m); /* vector on left-hand side */ double** Upp = myalloc(m,d+1); /* vector on left-hand side */ double*** Xppp = myalloc(n,q,d); /* matrix on right-hand side */ double*** Zppp = myalloc(q,n,d+1); /* result of Up x H x XPPP */ double*** Yppp = myalloc(m,q,d); /* results of needed hos_wk_forward */ /* check results with usual lagra-Hess-vec */ double** Xpp = myalloc(n,d); double** V = myalloc(n,q); double** W = myalloc(q,n); double** H = myalloc(n,n); double** Ypp = myalloc(m,d); double** Zpp = myalloc(n,d+1); /* inits */ for (l=0; ly[1]),y[1],y[0]); #else condassign(y[i],(y[0]>y[1]),y[1],y[0]); #endif break; case 3 : y[i] -= sin(x[j]); break; case 4 : y[i] -= exp(x[j]); break; case 5 : y[5] = pow(y[1],3); case 6 : y[6] += y[5]*y[4]; case 7 : y[7] -= y[6]*y[5]; default : y[i] /= x[j]; } } for (i=0; i>= yp[i] ; trace_off(); /*--------------------------------------------------------------------------*/ /* work on the tape */ /* compute results of lagra_hess_vec */ /* the following is equal to calls inside of lagra_hess_vec(..) */ /* direct calls to the basic routines hos_forward and hos_reverse */ /* seem to be faster than call of lagra_hess_vec(..) */ /* at least in some of our test cases */ hos_forward(1,m,n,d,keep,xp,Xpp,yp,Ypp); hos_reverse(1,m,n,keep-1,Up,Zpp); printf("\n Results of hos_reverse:\n\n"); for (i=0; i<=d; i++) { printf(" d = %d \n",i); for (j=0;j Computation of hessian x matrix hessmat.cpp ADOL-C-2.4.1/ADOL-C/examples/additional_examples/lighthouse/0000755000076600007660000000000012120272604021765 5ustar coincoinADOL-C-2.4.1/ADOL-C/examples/additional_examples/lighthouse/cubic-iter-2.cpp0000644000076600007660000000672311732376410024676 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: cubic-iter-2.cpp Revision: $Id: cubic-iter-2.cpp 299 2012-03-21 16:08:40Z kulshres $ Contents: example for cubic lighthouse example of Griewank's Book using iterative solvers (output of z_k and dz_k for fixed t) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ /****************************************************************************/ /* INCLUDES */ #include #include /****************************************************************************/ /* ADOUBLE ROUTINE */ adouble g( adouble z, adouble t ) { adouble v1, v15, v2, v3, res; v1 = z - 2.0; v15 = v1*v1*v1; v15 += 0.4; v2 = tan(t); v15 -= z * v2; v3 = 3.0*v1*v1-v2; v3 = fabs(v3); res = z - v15/v3; return res; } /****************************************************************************/ /* MAIN PROGRAM */ int main() { int j, ic; int tag = 1; double z, dz, z0, dz0, t; double x[2], gradg[2]; /*--------------------------------------------------------------------------*/ /* Preparation */ fprintf(stdout,"CUBIC LIGHTHOUSE Using ITERATION 2 (ADOL-C Example)\n\n"); z0 = 2.1; dz0 = 0.0; fprintf(stdout,"t = ? \n"); scanf("%le",&t); fprintf(stdout,"How many iterations = ? \n"); scanf("%d",&ic); /*--------------------------------------------------------------------------*/ /* 0. time (taping) */ trace_on(tag); adouble az,at; az <<= z0; at <<= t; az = g(az,at); az >>= z; trace_off(); /*--------------------------------------------------------------------------*/ size_t tape_stats[STAT_SIZE]; tapestats(tag,tape_stats); fprintf(stdout,"\n independents %d\n",tape_stats[NUM_INDEPENDENTS]); fprintf(stdout," dependents %d\n",tape_stats[NUM_DEPENDENTS]); fprintf(stdout," operations %d\n",tape_stats[NUM_OPERATIONS]); fprintf(stdout," operations buffer size %d\n",tape_stats[OP_BUFFER_SIZE]); fprintf(stdout," locations buffer size %d\n",tape_stats[LOC_BUFFER_SIZE]); fprintf(stdout," constants buffer size %d\n",tape_stats[VAL_BUFFER_SIZE]); fprintf(stdout," maxlive %d\n",tape_stats[NUM_MAX_LIVES]); fprintf(stdout," valstack size %d\n\n",tape_stats[TAY_STACK_SIZE]); /*--------------------------------------------------------------------------*/ x[1] = t; x[0] = z0; dz = dz0; fprintf(stdout," %e %e\n",x[0],dz); for (j=0; j #include #define PI 3.1415926536 /****************************************************************************/ /* ADOUBLE ROUTINE */ adouble activeCubicLighthouse( adouble t ) { adouble p, q, d, r, u, u1, u2, v, a, b, c, z; /*---------------------*/ p = tan(t); q = p - 0.2; p /= 3.0; d = q*q; d -= p*p*p; /* 1. branch ----------*/ r = sqrt(d); u = q + r; u1 = pow(fabs(u),1.0/3.0); u2 = -u1; condassign(u,u,u1,u2); v = q - r; u1 = pow(fabs(v),1.0/3.0); u2 = -u1; condassign(v,v,u1,u2); c = u + v; /* 2. branch ----------*/ p = fabs(p); p = sqrt(p); q /= p*p*p; a = acos(q); a /= 3.0; z = cos(a); b = a + PI/3.0; b = -cos(b); z = fmin(z,b); b = a - PI/3.0; b = -cos(b); z = fmin(z,b); z = 2.0*z*p; /*---------------------*/ condassign(z,d,c); z += 2.0; return z; } /****************************************************************************/ /* MAIN PROGRAM */ int main() { int i, vc; int tag = 1; double z, t, tmin, tmax, tdist, dz; /*--------------------------------------------------------------------------*/ /* Preparation */ fprintf(stdout,"CUBIC LIGHTHOUSE Using CARDAN (ADOL-C Example)\n\n"); tmin = 0.15; tmax = 0.24; fprintf(stdout,"How many values = ? \n"); scanf("%d",&vc); /*--------------------------------------------------------------------------*/ t = 0.1; adouble az,at; trace_on(tag); at <<= t; az = activeCubicLighthouse(at); az >>= z; trace_off(); /*--------------------------------------------------------------------------*/ size_t tape_stats[STAT_SIZE]; tapestats(tag,tape_stats); fprintf(stdout,"\n independents %d\n",tape_stats[NUM_INDEPENDENTS]); fprintf(stdout," dependents %d\n",tape_stats[NUM_DEPENDENTS]); fprintf(stdout," operations %d\n",tape_stats[NUM_OPERATIONS]); fprintf(stdout," operations buffer size %d\n",tape_stats[OP_BUFFER_SIZE]); fprintf(stdout," locations buffer size %d\n",tape_stats[LOC_BUFFER_SIZE]); fprintf(stdout," constants buffer size %d\n",tape_stats[VAL_BUFFER_SIZE]); fprintf(stdout," maxlive %d\n",tape_stats[NUM_MAX_LIVES]); fprintf(stdout," valstack size %d\n\n",tape_stats[TAY_STACK_SIZE]); /*--------------------------------------------------------------------------*/ tdist = (tmax-tmin)/((double) (vc-1)); t = tmin; for (i=0; i/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @ADDEXA_TRUE@noinst_PROGRAMS = cubic$(EXEEXT) cubic-2$(EXEEXT) \ @ADDEXA_TRUE@ cubic-iter$(EXEEXT) cubic-iter-2$(EXEEXT) subdir = ADOL-C/examples/additional_examples/lighthouse DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/autoconf/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_cubic_OBJECTS = cubic.$(OBJEXT) cubic_OBJECTS = $(am_cubic_OBJECTS) cubic_LDADD = $(LDADD) cubic_DEPENDENCIES = AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am_cubic_2_OBJECTS = cubic-2.$(OBJEXT) cubic_2_OBJECTS = $(am_cubic_2_OBJECTS) cubic_2_LDADD = $(LDADD) cubic_2_DEPENDENCIES = am_cubic_iter_OBJECTS = cubic-iter.$(OBJEXT) cubic_iter_OBJECTS = $(am_cubic_iter_OBJECTS) cubic_iter_LDADD = $(LDADD) cubic_iter_DEPENDENCIES = am_cubic_iter_2_OBJECTS = cubic-iter-2.$(OBJEXT) cubic_iter_2_OBJECTS = $(am_cubic_iter_2_OBJECTS) cubic_iter_2_LDADD = $(LDADD) cubic_iter_2_DEPENDENCIES = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/ADOL-C/src depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(cubic_SOURCES) $(cubic_2_SOURCES) $(cubic_iter_SOURCES) \ $(cubic_iter_2_SOURCES) DIST_SOURCES = $(cubic_SOURCES) $(cubic_2_SOURCES) \ $(cubic_iter_SOURCES) $(cubic_iter_2_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH_FALSE = @ADVBRANCH_FALSE@ ADVBRANCH_TRUE = @ADVBRANCH_TRUE@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF_FALSE = @ATRIG_ERF_FALSE@ ATRIG_ERF_TRUE = @ATRIG_ERF_TRUE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COLPACK_CFLAGS = @COLPACK_CFLAGS@ COLPACK_LIBS = @COLPACK_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_srcdir)/ADOL-C/include LDADD = -ladolc AM_LDFLAGS = -L$(top_builddir)/ADOL-C/src MAINTAINERCLEANFILES = Makefile.in *~ *.orig cubic_SOURCES = cubic.cpp cubic_2_SOURCES = cubic-2.cpp cubic_iter_SOURCES = cubic-iter.cpp cubic_iter_2_SOURCES = cubic-iter-2.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/lighthouse/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/lighthouse/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list cubic$(EXEEXT): $(cubic_OBJECTS) $(cubic_DEPENDENCIES) $(EXTRA_cubic_DEPENDENCIES) @rm -f cubic$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(cubic_OBJECTS) $(cubic_LDADD) $(LIBS) cubic-2$(EXEEXT): $(cubic_2_OBJECTS) $(cubic_2_DEPENDENCIES) $(EXTRA_cubic_2_DEPENDENCIES) @rm -f cubic-2$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(cubic_2_OBJECTS) $(cubic_2_LDADD) $(LIBS) cubic-iter$(EXEEXT): $(cubic_iter_OBJECTS) $(cubic_iter_DEPENDENCIES) $(EXTRA_cubic_iter_DEPENDENCIES) @rm -f cubic-iter$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(cubic_iter_OBJECTS) $(cubic_iter_LDADD) $(LIBS) cubic-iter-2$(EXEEXT): $(cubic_iter_2_OBJECTS) $(cubic_iter_2_DEPENDENCIES) $(EXTRA_cubic_iter_2_DEPENDENCIES) @rm -f cubic-iter-2$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(cubic_iter_2_OBJECTS) $(cubic_iter_2_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cubic-2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cubic-iter-2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cubic-iter.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cubic.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.4.1/ADOL-C/examples/additional_examples/lighthouse/README0000644000076600007660000000316111227416777022670 0ustar coincoin############################################################################## ## README -- additional information ## Revision: $Id: README 299 2009-02-26 09:20:11Z awalther $ ## ## Copyright (C) Andrea Walther, Andreas Griewank, Andreas Kowarz, ## Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## -------------------------------------------------------------- This directory contains example programs concerning the lighthouse example of Griewank's book 'Evaluating Derivatives: Principles and Techniques of Algorithmic Differentiation' -------------------------------------------------------------- CONTENTS OF THE DIRECTORY cubic --> Cubic lighthouse example using Cardan's formula with two tapes. cubic.cpp cubic-2 --> Cubic lighthouse example using Cardan's formula with one tape and condassign(..). cubic-2.cpp cubic-iter --> Cubic lighthouse example: iterative computation of lightpoints including derivatives. cubic-iter.cpp cubic-iter-2 --> Cubic lighthouse example: iterative computation of one lightpoint including the derivative. cubic-iter-2.cpp ADOL-C-2.4.1/ADOL-C/examples/additional_examples/lighthouse/cubic.cpp0000644000076600007660000001230711732376410023571 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: cubic.cpp Revision: $Id: cubic.cpp 299 2012-03-21 16:08:40Z kulshres $ Contents: example for cubic lighthouse example of Griewank's Book using Cardan's formula with two tapes Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ /****************************************************************************/ /* INCLUDES */ #include #include #define PI 3.1415926536 /****************************************************************************/ /* ADOUBLE ROUTINE */ adouble activeCubicLighthouse1( adouble t ) { adouble p, q, d, r, u, u1,u2, v, c; /*---------------------*/ p = tan(t); q = p - 0.2; p /= 3.0; d = q*q; d -= p*p*p; /* 1. branch ----------*/ r = sqrt(d); u = q + r; u1 = pow(fabs(u),1.0/3.0); u2 = -u1; condassign(u,u,u1,u2); v = q - r; u1 = pow(fabs(v),1.0/3.0); u2 = -u1; condassign(v,v,u1,u2); c = u + v; /*---------------------*/ c += 2.0; return c; } /****************************************************************************/ /* ADOUBLE ROUTINE */ adouble activeCubicLighthouse2( adouble t ) { adouble p, q, d, r, u, v, c, a, z, b; /*---------------------*/ p = tan(t); q = p - 0.2; p /= 3.0; d = q*q; d -= p*p*p; /* 2. branch ----------*/ p = fabs(p); p = sqrt(p); q /= p*p*p; a = acos(q); a /= 3.0; z = cos(a); b = a + PI/3.0; b = -cos(b); z = fmin(z,b); b = a - PI/3.0; b = -cos(b); z = fmin(z,b); z = 2.0*z*p; /*---------------------*/ z += 2.0; return z; } /****************************************************************************/ /* MAIN PROGRAM */ int main() { int i, vc; int tag1 = 1, tag2 = 2; double z, z1, z2, t, tmin, tmax, tdist, dz; /*--------------------------------------------------------------------------*/ /* Preparation */ fprintf(stdout,"CUBIC LIGHTHOUSE Using CARDAN (ADOL-C Example)\n\n"); tmin = 0.15; tmax = 0.24; fprintf(stdout,"How many values = ? \n"); scanf("%d",&vc); /*--------------------------------------------------------------------------*/ t = 0.1; adouble az,at; trace_on(tag1); at <<= t; az = activeCubicLighthouse1(at); az >>= z; trace_off(); trace_on(tag2); at <<= t; az = activeCubicLighthouse2(at); az >>= z; trace_off(); /*--------------------------------------------------------------------------*/ size_t tape_stats[STAT_SIZE]; tapestats(tag1,tape_stats); fprintf(stdout,"\n independents %d\n",tape_stats[NUM_INDEPENDENTS]); fprintf(stdout," dependents %d\n",tape_stats[NUM_DEPENDENTS]); fprintf(stdout," operations %d\n",tape_stats[NUM_OPERATIONS]); fprintf(stdout," operations buffer size %d\n",tape_stats[OP_BUFFER_SIZE]); fprintf(stdout," locations buffer size %d\n",tape_stats[LOC_BUFFER_SIZE]); fprintf(stdout," constants buffer size %d\n",tape_stats[VAL_BUFFER_SIZE]); fprintf(stdout," maxlive %d\n",tape_stats[NUM_MAX_LIVES]); fprintf(stdout," valstack size %d\n\n",tape_stats[TAY_STACK_SIZE]); tapestats(tag2,tape_stats); fprintf(stdout,"\n independents %d\n",tape_stats[NUM_INDEPENDENTS]); fprintf(stdout," dependents %d\n",tape_stats[NUM_DEPENDENTS]); fprintf(stdout," operations %d\n",tape_stats[NUM_OPERATIONS]); fprintf(stdout," operations buffer size %d\n",tape_stats[OP_BUFFER_SIZE]); fprintf(stdout," locations buffer size %d\n",tape_stats[LOC_BUFFER_SIZE]); fprintf(stdout," constants buffer size %d\n",tape_stats[VAL_BUFFER_SIZE]); fprintf(stdout," maxlive %d\n",tape_stats[NUM_MAX_LIVES]); fprintf(stdout," valstack size %d\n\n",tape_stats[TAY_STACK_SIZE]); /*--------------------------------------------------------------------------*/ tdist = (tmax-tmin)/((double) (vc-1)); t = tmin; for (i=0; i #include /****************************************************************************/ /* ADOUBLE ROUTINE */ adouble g( adouble z, adouble t ) { adouble v1, v15, v2, v3, res; v1 = z - 2.0; v15 = v1*v1*v1; v15 += 0.4; v2 = tan(t); v15 -= z * v2; v3 = 3.0*v1*v1-v2; v3 = fabs(v3); res = z - v15/v3; return res; } /****************************************************************************/ /* MAIN PROGRAM */ int main() { int i, j, vc, ic; int tag = 1; double z, dz, z0, dz0, t, tmin, tmax, tdist; double x[2], gradg[2]; /*--------------------------------------------------------------------------*/ /* Preparation */ fprintf(stdout,"CUBIC LIGHTHOUSE Using ITERATION (ADOL-C Example)\n\n"); tmin = 0.1; tmax = 0.3; z0 = 2.1; dz0 = 0.0; fprintf(stdout,"How many values = ? \n"); scanf("%d",&vc); fprintf(stdout,"How many iterations = ? \n"); scanf("%d",&ic); /*--------------------------------------------------------------------------*/ /* 0. time (taping) */ t = 0.1; trace_on(tag); adouble az,at; az <<= z0; at <<= t; az = g(az,at); az >>= z; trace_off(); /*--------------------------------------------------------------------------*/ size_t tape_stats[STAT_SIZE]; tapestats(tag,tape_stats); fprintf(stdout,"\n independents %d\n",tape_stats[NUM_INDEPENDENTS]); fprintf(stdout," dependents %d\n",tape_stats[NUM_DEPENDENTS]); fprintf(stdout," operations %d\n",tape_stats[NUM_OPERATIONS]); fprintf(stdout," operations buffer size %d\n",tape_stats[OP_BUFFER_SIZE]); fprintf(stdout," locations buffer size %d\n",tape_stats[LOC_BUFFER_SIZE]); fprintf(stdout," constants buffer size %d\n",tape_stats[VAL_BUFFER_SIZE]); fprintf(stdout," maxlive %d\n",tape_stats[NUM_MAX_LIVES]); fprintf(stdout," valstack size %d\n\n",tape_stats[TAY_STACK_SIZE]); /*--------------------------------------------------------------------------*/ tdist = (tmax-tmin)/((double) (vc-1)); x[1] = tmin; for (i=0; i #include "../clock/myclock.h" /****************************************************************************/ /* DOUBLE ROUTINE */ int n,it; double** PA; double pdet( int k, int m ) { if (m == 0) return 1.0 ; else { double* pt = PA[k-1]; double t = 0; int p = 1; int s; if (k%2) s = 1; else s = -1; for (int i=0; i= p) { if (m == p) { if (s>0) t += *pt; else t -= *pt; } else { if (s>0) t += *pt*pdet(k-1, m-p); else t -= *pt*pdet(k-1, m-p); } s = -s; } ++pt; p = p1; } return t; } } /****************************************************************************/ /* ADOUBLE ROUTINE */ adouble** A; adouble zero = 0; adouble det( int k, int m ) { if (m == 0) return 1.0; else { adouble* pt = A[k-1]; adouble t = zero; int p = 1; int s; if (k%2) s = 1; else s = -1; for (int i=0; i= p) { if (m == p) { if (s>0) t += *pt; else t -= *pt; } else { if (s>0) t += *pt*det(k-1, m-p); else t -= *pt*det(k-1, m-p); } s = -s; } ++pt; p = p1; } return t; } } /****************************************************************************/ /* MAIN PROGRAM */ int main() { int i, j; int tag = 1; fprintf(stdout,"COMPUTATION OF DETERMINANTS Type 1 (ADOL-C Example)\n\n"); fprintf(stdout,"order of matrix = ? \n"); scanf("%d",&n); A = new adouble*[n]; PA = new double*[n]; int n2 = n*n; double* a = new double[n2]; /*--------------------------------------------------------------------------*/ /* Preparation */ double diag = 0; int m = 1; double* pa = a; for (i=0; i>= detout; trace_off(); double t01 = myclock(); fprintf(stdout,"\n %f =? %f should be the same \n",detout,diag); /*--------------------------------------------------------------------------*/ size_t tape_stats[STAT_SIZE]; tapestats(tag,tape_stats); fprintf(stdout,"\n independents %d\n",tape_stats[NUM_INDEPENDENTS]); fprintf(stdout," dependents %d\n",tape_stats[NUM_DEPENDENTS]); fprintf(stdout," operations %d\n",tape_stats[NUM_OPERATIONS]); fprintf(stdout," operations buffer size %d\n",tape_stats[OP_BUFFER_SIZE]); fprintf(stdout," locations buffer size %d\n",tape_stats[LOC_BUFFER_SIZE]); fprintf(stdout," constants buffer size %d\n",tape_stats[VAL_BUFFER_SIZE]); fprintf(stdout," maxlive %d\n",tape_stats[NUM_MAX_LIVES]); fprintf(stdout," valstack size %d\n\n",tape_stats[TAY_STACK_SIZE]); /*--------------------------------------------------------------------------*/ int itu = 8-n; itu = itu*itu*itu*itu; itu = itu > 0 ? itu : 1; double raus; /*--------------------------------------------------------------------------*/ double t10 = myclock(); /* 1. time (original) */ for (it = 0; it < itu; it++) raus = pdet(n,m-1); double t11 = myclock(); double rtu = itu/(t11-t10); double* B = new double[n2]; double* detaut = new double[1]; /*--------------------------------------------------------------------------*/ double t40 = myclock(); /* 4. time (forward no keep) */ for (it = 0; it < itu; it++) forward(tag,1,n2,0,a,detaut); double t41 = myclock(); /*--------------------------------------------------------------------------*/ double t20 = myclock(); /* 2. time (forward+keep) */ for(it = 0; it < itu; it++) forward(tag,1,n2,1,a,detaut); double t21 = myclock(); // fprintf(stdout,"\n %f =? %f should be the same \n",detout,*detaut); double u[1]; u[0] = 1.0; /*--------------------------------------------------------------------------*/ double t30 = myclock(); /* 3. time (reverse) */ for (it = 0; it < itu; it++) reverse(tag,1,n2,0,u,B); double t31 = myclock(); /*--------------------------------------------------------------------------*/ /* output of results */ // optional generation of tape_doc.tex // tape_doc(tag,1,n2,a,detaut); fprintf(stdout,"\n first base? : \n"); for (i=0; i #include "../clock/myclock.h" /****************************************************************************/ /* DOUBLE ROUTINE */ int n,it; double** PA; double pdet( int k, int m ) { if (m == 0) return 1.0; else { double* pt = PA[k-1]; double t = 0; int p = 1; int s; if (k%2) s = 1; else s = -1; for (int i=0; i= p) { t += *pt*s*pdet(k-1, m-p); s = -s; } ++pt; p = p1; } return t; } } /****************************************************************************/ /* ADOUBLE ROUTINE */ adouble** A; adouble det( int k, int m ) { if (m == 0) return 1.0; else { adouble* pt = A[k-1]; adouble t = 0; int p = 1; int s; if (k%2) s = 1; else s = -1; for (int i=0; i= p) { t += *pt*s*det(k-1, m-p); s = -s; } ++pt; p = p1; } return t; } } /****************************************************************************/ /* MAIN PROGRAM */ int main() { int i, j; int tag = 1; /*--------------------------------------------------------------------------*/ /* Input */ fprintf(stdout,"COMPUTATION OF DETERMINANTS (old type) (ADOL-C Example)\n\n"); fprintf(stdout,"order of matrix = ? \n"); scanf("%d",&n); A = new adouble*[n]; PA = new double*[n]; int n2 = n*n; double* a = new double[n2]; double diag = 0; int m = 1; /*--------------------------------------------------------------------------*/ /* Preparation */ double* pa = a; for (i=0; i>= detout; trace_off(); double t01 = myclock(); fprintf(stdout,"\n %f =? %f should be the same \n",detout,diag); /*--------------------------------------------------------------------------*/ size_t tape_stats[STAT_SIZE]; tapestats(tag,tape_stats); fprintf(stdout,"\n independents %d\n",tape_stats[NUM_INDEPENDENTS]); fprintf(stdout," dependents %d\n",tape_stats[NUM_DEPENDENTS]); fprintf(stdout," operations %d\n",tape_stats[NUM_OPERATIONS]); fprintf(stdout," operations buffer size %d\n",tape_stats[OP_BUFFER_SIZE]); fprintf(stdout," locations buffer size %d\n",tape_stats[LOC_BUFFER_SIZE]); fprintf(stdout," constants buffer size %d\n",tape_stats[VAL_BUFFER_SIZE]); fprintf(stdout," maxlive %d\n",tape_stats[NUM_MAX_LIVES]); fprintf(stdout," valstack size %d\n\n",tape_stats[TAY_STACK_SIZE]); /*--------------------------------------------------------------------------*/ int itu = 8-n; itu = itu*itu*itu*itu; itu = itu > 0 ? itu : 1; double raus; /*--------------------------------------------------------------------------*/ double t10 = myclock(); /* 1. time (original) */ for (it = 0; it < itu; it++) raus = pdet(n,m-1); double t11 = myclock(); double rtu = itu/(t11-t10); double* B = new double[n2]; double* detaut = new double[1]; /*--------------------------------------------------------------------------*/ double t40 = myclock(); /* 4. time (forward no keep) */ for (it = 0; it < itu; it++) forward(tag,1,n2,0,0,a,detaut); double t41 = myclock(); /*--------------------------------------------------------------------------*/ double t20 = myclock(); /* 2. time (forward+keep) */ for (it = 0; it < itu; it++) forward(tag,1,n2,0,1,a,detaut); double t21 = myclock(); double u[1]; u[0] = 1.0; /*--------------------------------------------------------------------------*/ double t30 = myclock(); /* 3. time (reverse) */ for (it = 0; it < itu; it++) reverse(tag,1,n2,0,u,B); double t31 = myclock(); /*--------------------------------------------------------------------------*/ /* output of results */ // optional generation of tape_doc.tex // tape_doc(tag,1,n2,a,detaut); fprintf(stdout,"\n first base? : \n"); for (i=0; i/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @ADDEXA_TRUE@noinst_PROGRAMS = detexam$(EXEEXT) detexam-old$(EXEEXT) subdir = ADOL-C/examples/additional_examples/detexam DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/autoconf/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_detexam_OBJECTS = detexam.$(OBJEXT) myclock.$(OBJEXT) detexam_OBJECTS = $(am_detexam_OBJECTS) detexam_LDADD = $(LDADD) detexam_DEPENDENCIES = AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am_detexam_old_OBJECTS = detexam-old.$(OBJEXT) myclock.$(OBJEXT) detexam_old_OBJECTS = $(am_detexam_old_OBJECTS) detexam_old_LDADD = $(LDADD) detexam_old_DEPENDENCIES = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/ADOL-C/src depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(detexam_SOURCES) $(detexam_old_SOURCES) DIST_SOURCES = $(detexam_SOURCES) $(detexam_old_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH_FALSE = @ADVBRANCH_FALSE@ ADVBRANCH_TRUE = @ADVBRANCH_TRUE@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF_FALSE = @ATRIG_ERF_FALSE@ ATRIG_ERF_TRUE = @ATRIG_ERF_TRUE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COLPACK_CFLAGS = @COLPACK_CFLAGS@ COLPACK_LIBS = @COLPACK_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_srcdir)/ADOL-C/include LDADD = -ladolc AM_LDFLAGS = -L$(top_builddir)/ADOL-C/src MAINTAINERCLEANFILES = Makefile.in *~ *.orig detexam_SOURCES = detexam.cpp $(srcdir)/../clock/myclock.cpp detexam_old_SOURCES = detexam-old.cpp $(srcdir)/../clock/myclock.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/detexam/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/detexam/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list detexam$(EXEEXT): $(detexam_OBJECTS) $(detexam_DEPENDENCIES) $(EXTRA_detexam_DEPENDENCIES) @rm -f detexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(detexam_OBJECTS) $(detexam_LDADD) $(LIBS) detexam-old$(EXEEXT): $(detexam_old_OBJECTS) $(detexam_old_DEPENDENCIES) $(EXTRA_detexam_old_DEPENDENCIES) @rm -f detexam-old$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(detexam_old_OBJECTS) $(detexam_old_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/detexam-old.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/detexam.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/myclock.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< myclock.o: $(srcdir)/../clock/myclock.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT myclock.o -MD -MP -MF $(DEPDIR)/myclock.Tpo -c -o myclock.o `test -f '$(srcdir)/../clock/myclock.cpp' || echo '$(srcdir)/'`$(srcdir)/../clock/myclock.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/myclock.Tpo $(DEPDIR)/myclock.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$(srcdir)/../clock/myclock.cpp' object='myclock.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o myclock.o `test -f '$(srcdir)/../clock/myclock.cpp' || echo '$(srcdir)/'`$(srcdir)/../clock/myclock.cpp myclock.obj: $(srcdir)/../clock/myclock.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT myclock.obj -MD -MP -MF $(DEPDIR)/myclock.Tpo -c -o myclock.obj `if test -f '$(srcdir)/../clock/myclock.cpp'; then $(CYGPATH_W) '$(srcdir)/../clock/myclock.cpp'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../clock/myclock.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/myclock.Tpo $(DEPDIR)/myclock.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$(srcdir)/../clock/myclock.cpp' object='myclock.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o myclock.obj `if test -f '$(srcdir)/../clock/myclock.cpp'; then $(CYGPATH_W) '$(srcdir)/../clock/myclock.cpp'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../clock/myclock.cpp'; fi` mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.4.1/ADOL-C/examples/additional_examples/detexam/README0000644000076600007660000000173611227416777022152 0ustar coincoin############################################################################## ## README -- additional information ## Revision: $Id: README 298 2009-02-25 13:40:13Z awalther $ ## ## Copyright (C) Andrea Walther, Andreas Griewank, Andreas Kowarz, ## Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## CONTENTS OF THE DIRECTORY detexam --> Computation of determinants (signs set by evaluation of passive "if"-statements) detexam.cpp detexam-old --> Old computation of determinants (signs set by multiplication with +/-1) detexam-old.cpp ADOL-C-2.4.1/ADOL-C/examples/additional_examples/ipopt/0000755000076600007660000000000012120272604020745 5ustar coincoinADOL-C-2.4.1/ADOL-C/examples/additional_examples/ipopt/LuksanVlcek1_sparse/0000755000076600007660000000000012120272604024625 5ustar coincoinADOL-C-2.4.1/ADOL-C/examples/additional_examples/ipopt/LuksanVlcek1_sparse/ADOL-C_sparseNLP.hpp0000644000076600007660000001326711332325033030174 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: ADOL-C_sparseNLP.hpp Revision: $$ Contents: class myADOL-C_sparseNPL for interfacing with Ipopt Copyright (c) Andrea Walther This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. This code is based on the file MyNLP.hpp contained in the Ipopt package with the authors: Carl Laird, Andreas Waechter ----------------------------------------------------------------------------*/ //************************************************************************* // // // Nothing has to be changed in this file !! // // //************************************************************************* #ifndef __MYADOLCNLP_HPP__ #define __MYADOLCNLP_HPP__ #include "IpTNLP.hpp" #include #include #define tag_f 1 #define tag_g 2 #define tag_L 3 #define HPOFF 30 using namespace Ipopt; class MyADOLC_sparseNLP : public TNLP { public: /** default constructor */ MyADOLC_sparseNLP(); /** default destructor */ virtual ~MyADOLC_sparseNLP(); /**@name Overloaded from TNLP */ //@{ /** Method to return some info about the nlp */ virtual bool get_nlp_info(Index& n, Index& m, Index& nnz_jac_g, Index& nnz_h_lag, IndexStyleEnum& index_style); /** Method to return the bounds for my problem */ virtual bool get_bounds_info(Index n, Number* x_l, Number* x_u, Index m, Number* g_l, Number* g_u); /** Method to return the starting point for the algorithm */ virtual bool get_starting_point(Index n, bool init_x, Number* x, bool init_z, Number* z_L, Number* z_U, Index m, bool init_lambda, Number* lambda); /** Template to return the objective value */ template bool eval_obj(Index n, const T *x, T& obj_value); /** Template to compute contraints */ template bool eval_constraints(Index n, const T *x, Index m, T *g); /** Original method from Ipopt to return the objective value */ /** remains unchanged */ virtual bool eval_f(Index n, const Number* x, bool new_x, Number& obj_value); /** Original method from Ipopt to return the gradient of the objective */ /** remains unchanged */ virtual bool eval_grad_f(Index n, const Number* x, bool new_x, Number* grad_f); /** Original method from Ipopt to return the constraint residuals */ /** remains unchanged */ virtual bool eval_g(Index n, const Number* x, bool new_x, Index m, Number* g); /** Original method from Ipopt to return: * 1) The structure of the jacobian (if "values" is NULL) * 2) The values of the jacobian (if "values" is not NULL) */ /** remains unchanged */ virtual bool eval_jac_g(Index n, const Number* x, bool new_x, Index m, Index nele_jac, Index* iRow, Index *jCol, Number* values); /** Original method from Ipopt to return: * 1) The structure of the hessian of the lagrangian (if "values" is NULL) * 2) The values of the hessian of the lagrangian (if "values" is not NULL) */ /** remains unchanged */ virtual bool eval_h(Index n, const Number* x, bool new_x, Number obj_factor, Index m, const Number* lambda, bool new_lambda, Index nele_hess, Index* iRow, Index* jCol, Number* values); //@} /** @name Solution Methods */ //@{ /** This method is called when the algorithm is complete so the TNLP can store/write the solution */ virtual void finalize_solution(SolverReturn status, Index n, const Number* x, const Number* z_L, const Number* z_U, Index m, const Number* g, const Number* lambda, Number obj_value, const IpoptData* ip_data, IpoptCalculatedQuantities* ip_cq); //@} //*************** start ADOL-C part *********************************** /** Method to generate the required tapes */ virtual void generate_tapes(Index n, Index m, Index& nnz_jac_g, Index& nnz_h_lag); //*************** end ADOL-C part *********************************** private: /**@name Methods to block default compiler methods. * The compiler automatically generates the following three methods. * Since the default compiler implementation is generally not what * you want (for all but the most simple classes), we usually * put the declarations of these methods in the private section * and never implement them. This prevents the compiler from * implementing an incorrect "default" behavior without us * knowing. (See Scott Meyers book, "Effective C++") * */ //@{ // MyADOLC_sparseNLP(); MyADOLC_sparseNLP(const MyADOLC_sparseNLP&); MyADOLC_sparseNLP& operator=(const MyADOLC_sparseNLP&); //@} //@{ double *x_lam; //** variables for sparsity exploitation unsigned int **HP_t; /* compressed block row storage */ unsigned int *rind_g; /* row indices */ unsigned int *cind_g; /* column indices */ double *jacval; /* values */ unsigned int *rind_L; /* row indices */ unsigned int *cind_L; /* column indices */ unsigned int *rind_L_total; /* row indices */ unsigned int *cind_L_total; /* column indices */ double *hessval; /* values */ int nnz_jac; int nnz_L, nnz_L_total; int options_g[4]; int options_L[4]; //@} }; #endif ADOL-C-2.4.1/ADOL-C/examples/additional_examples/ipopt/LuksanVlcek1_sparse/cpp_example.cpp0000644000076600007660000000371411332325033027632 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: cpp_example.cpp Revision: $$ Contents: example for class myADOLC_sparseNPL for interfacing with Ipopt Copyright (c) Andrea Walther This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. This code is based on the file corresponding file cpp_example.cpp contained in the Ipopt package with the authors: Carl Laird, Andreas Waechter ----------------------------------------------------------------------------*/ //************************************************************************* // // // Nothing has to be changed in this file !! // // //************************************************************************* #include "IpIpoptApplication.hpp" #include "IpSolveStatistics.hpp" #include "ADOL-C_sparseNLP.hpp" using namespace Ipopt; int main(int argv, char* argc[]) { // Create an instance of your nlp... SmartPtr myadolc_nlp = new MyADOLC_sparseNLP(); // Create an instance of the IpoptApplication SmartPtr app = new IpoptApplication(); // Initialize the IpoptApplication and process the options ApplicationReturnStatus status; status = app->Initialize(); if (status != Solve_Succeeded) { printf("\n\n*** Error during initialization!\n"); return (int) status; } status = app->OptimizeTNLP(myadolc_nlp); if (status == Solve_Succeeded) { // Retrieve some statistics about the solve Index iter_count = app->Statistics()->IterationCount(); printf("\n\n*** The problem solved in %d iterations!\n", iter_count); Number final_obj = app->Statistics()->FinalObjective(); printf("\n\n*** The final value of the objective function is %e.\n", final_obj); } return (int) status; } ADOL-C-2.4.1/ADOL-C/examples/additional_examples/ipopt/LuksanVlcek1_sparse/Makefile0000644000076600007660000000406111332325033026265 0ustar coincoin# ---------------------------------------------------------------------------- # ADOL-C -- Automatic Differentiation by Overloading in C++ # File: Makefile # Revision: $$ # Contents: Makefile for class myADOLC_NPL_sparse to interface ADOL-C with Ipopt # # Copyright (c) Andrea Walther # # This file is part of ADOL-C. This software is provided as open source. # Any use, reproduction, or distribution of the software constitutes # recipient's acceptance of the terms of the accompanying license file. # # This code is based on the corresponding makefile contained in the # Ipopt package with the author Andreas Waechter #--------------------------------------------------------------------------- ########################################################################## # You can modify this example makefile to fit for your own program. # # Usually, you only need to change the five CHANGE entries below. # ########################################################################## # CHANGEME: This should be the name of your executable EXE = cpp_example # CHANGEME: Here is the name of all object files corresponding to the source # code that you wrote in order to define the problem statement OBJS = cpp_example.o \ ADOL-C_sparseNLP.o # Definitions for ADOL-C # CHANGE THIS TO YOUR ADOL-C BASE DIRECTORY ADPATH = $(HOME)/AD/ADOL-C/adolc_base_coin/include/adolc ADLIBDIR = $(HOME)/AD/ADOL-C/adolc_base_coin/lib # CHANGEME: Additional libraries ADDLIBS = -Wl,--rpath -Wl,$(ADLIBDIR) -L$(ADLIBDIR) -ladolc $(HOME)/AD/ADOL-C/adolc_base_coin/lib/libColPack.a # CHANGEME: Additional flags for compilation (e.g., include flags) ADDINCFLAGS = -I$(ADPATH) ########################################################################## # Usually, you don't have to change anything below. Note that if you # # change certain compiler options, you might have to recompile Ipopt. # ########################################################################## HERE YOU SHOULD USE THE SETTING OF YOUR IPOPT INSTALLATION THIS SHOULD WORK WITH COPY AND PASTEADOL-C-2.4.1/ADOL-C/examples/additional_examples/ipopt/LuksanVlcek1_sparse/ADOL-C_sparseNLP.cpp0000644000076600007660000003251712017111340030161 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: ADOL-C_sparseNLP.cpp Revision: $$ Contents: class myADOLC_sparseNPL for interfacing with Ipopt Copyright (c) Andrea Walther This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. This code is based on the file MyNLP.cpp contained in the Ipopt package with the authors: Carl Laird, Andreas Waechter ----------------------------------------------------------------------------*/ /** C++ Example NLP for interfacing a problem with IPOPT and ADOL-C. * MyADOLC_sparseNLP implements a C++ example showing how to interface * with IPOPT and ADOL-C through the TNLP interface. This class * implements the Example 5.1 from "Sparse and Parially Separable * Test Problems for Unconstrained and Equality Constrained * Optimization" by L. Luksan and J. Vlcek taking sparsity * into account. * * exploitation of sparsity !! * */ #include #include "ADOL-C_sparseNLP.hpp" using namespace Ipopt; /* Constructor. */ MyADOLC_sparseNLP::MyADOLC_sparseNLP() {} MyADOLC_sparseNLP::~MyADOLC_sparseNLP() {} bool MyADOLC_sparseNLP::get_nlp_info(Index& n, Index& m, Index& nnz_jac_g, Index& nnz_h_lag, IndexStyleEnum& index_style) { n = 4000; m = n-2; generate_tapes(n, m, nnz_jac_g, nnz_h_lag); // use the C style indexing (0-based) index_style = C_STYLE; return true; } bool MyADOLC_sparseNLP::get_bounds_info(Index n, Number* x_l, Number* x_u, Index m, Number* g_l, Number* g_u) { // none of the variables have bounds for (Index i=0; i bool MyADOLC_sparseNLP::eval_obj(Index n, const T *x, T& obj_value) { T a1, a2; obj_value = 0.; for (Index i=0; i bool MyADOLC_sparseNLP::eval_constraints(Index n, const T *x, Index m, T* g) { for (Index i=0; i>= dummy; trace_off(); trace_on(tag_g); for(Index idx=0;idx>= dummy; trace_off(); trace_on(tag_L); for(Index idx=0;idx>= dummy; trace_off(); rind_g = NULL; cind_g = NULL; options_g[0] = 0; /* sparsity pattern by index domains (default) */ options_g[1] = 0; /* safe mode (default) */ options_g[2] = -1; /* &jacval is not computed */ options_g[3] = 0; /* column compression (default) */ this->jacval=NULL; this->hessval=NULL; sparse_jac(tag_g, m, n, 0, xp, &nnz_jac, &rind_g, &cind_g, &jacval, options_g); options_g[2] = 0; nnz_jac_g = nnz_jac; unsigned int **JP_f=NULL; /* compressed block row storage */ unsigned int **JP_g=NULL; /* compressed block row storage */ unsigned int **HP_f=NULL; /* compressed block row storage */ unsigned int **HP_g=NULL; /* compressed block row storage */ unsigned int *HP_length=NULL; /* length of arrays */ unsigned int *temp=NULL; /* help array */ int ctrl_H; JP_f = (unsigned int **) malloc(sizeof(unsigned int*)); JP_g = (unsigned int **) malloc(m*sizeof(unsigned int*)); HP_f = (unsigned int **) malloc(n*sizeof(unsigned int*)); HP_g = (unsigned int **) malloc(n*sizeof(unsigned int*)); HP_t = (unsigned int **) malloc((n+m+1)*sizeof(unsigned int*)); HP_length = (unsigned int *) malloc((n)*sizeof(unsigned int)); ctrl_H = 0; hess_pat(tag_f, n, xp, HP_f, ctrl_H); indopro_forward_safe(tag_f, 1, n, xp, JP_f); indopro_forward_safe(tag_g, m, n, xp, JP_g); nonl_ind_forward_safe(tag_g, m, n, xp, HP_g); for (i=0;i=i) &&((int) HP_t[i][j]=i) { rind_L_total[ind] = i; cind_L_total[ind++] = HP_t[i][j]; } } for (i=0;i myadolc_nlp = new MyADOLC_NLP(); // Create an instance of the IpoptApplication SmartPtr app = new IpoptApplication(); // Initialize the IpoptApplication and process the options ApplicationReturnStatus status; status = app->Initialize(); if (status != Solve_Succeeded) { printf("\n\n*** Error during initialization!\n"); return (int) status; } status = app->OptimizeTNLP(myadolc_nlp); if (status == Solve_Succeeded) { // Retrieve some statistics about the solve Index iter_count = app->Statistics()->IterationCount(); printf("\n\n*** The problem solved in %d iterations!\n", iter_count); Number final_obj = app->Statistics()->FinalObjective(); printf("\n\n*** The final value of the objective function is %e.\n", final_obj); } return (int) status; } ADOL-C-2.4.1/ADOL-C/examples/additional_examples/ipopt/LuksanVlcek1/Makefile0000644000076600007660000000404611332325033024713 0ustar coincoin# ---------------------------------------------------------------------------- # ADOL-C -- Automatic Differentiation by Overloading in C++ # File: Makefile # Revision: $$ # Contents: Makefile for class myADOLC_NPL to interface ADOL-C with Ipopt # # Copyright (c) Andrea Walther # # This file is part of ADOL-C. This software is provided as open source. # Any use, reproduction, or distribution of the software constitutes # recipient's acceptance of the terms of the accompanying license file. # # This code is based on the corresponding makefile contained in the # Ipopt package with the author Andreas Waechter #--------------------------------------------------------------------------- ########################################################################## # You can modify this example makefile to fit for your own program. # # Usually, you only need to change the five CHANGE entries below. # ########################################################################## # CHANGEME: This should be the name of your executable EXE = cpp_example # CHANGEME: Here is the name of all object files corresponding to the source # code that you wrote in order to define the problem statement OBJS = cpp_example.o \ ADOL-C_NLP.o # Definitions for ADOL-C # CHANGE THIS TO YOUR ADOL-C BASE DIRECTORY ADPATH = $(HOME)/AD/ADOL-C/adolc_base_coin/include/adolc ADLIBDIR = $(HOME)/AD/ADOL-C/adolc_base_coin/lib # CHANGEME: Additional libraries ADDLIBS = -Wl,--rpath -Wl,$(ADLIBDIR) -L$(ADLIBDIR) -ladolc $(HOME)/AD/ADOL-C/adolc_base_coin/lib/libColPack.a # CHANGEME: Additional flags for compilation (e.g., include flags) ADDINCFLAGS = -I$(ADPATH) ########################################################################## # Usually, you don't have to change anything below. Note that if you # # change certain compiler options, you might have to recompile Ipopt. # ########################################################################## HERE YOU SHOULD USE THE SETTING OF YOUR IPOPT INSTALLATION THIS SHOULD WORK WITH COPY AND PASTEADOL-C-2.4.1/ADOL-C/examples/additional_examples/ipopt/LuksanVlcek1/ADOL-C_NLP.cpp0000644000076600007660000001722111774315307025403 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: ADOL-C_NLP.cpp Revision: $$ Contents: class myADOLC_NPL for interfacing with Ipopt Copyright (c) Andrea Walther This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. This code is based on the file MyNLP.cpp contained in the Ipopt package with the authors: Carl Laird, Andreas Waechter ----------------------------------------------------------------------------*/ /** C++ Example NLP for interfacing a problem with IPOPT and ADOL-C. * MyADOL-C_NLP implements a C++ example showing how to interface * with IPOPT and ADOL-C through the TNLP interface. This class * implements the Example 5.1 from "Sparse and Parially Separable * Test Problems for Unconstrained and Equality Constrained * Optimization" by L. Luksan and J. Vlcek ignoring sparsity. * * no exploitation of sparsity !! * */ #include #include "ADOL-C_NLP.hpp" using namespace Ipopt; /* Constructor. */ MyADOLC_NLP::MyADOLC_NLP() {} MyADOLC_NLP::~MyADOLC_NLP(){} bool MyADOLC_NLP::get_nlp_info(Index& n, Index& m, Index& nnz_jac_g, Index& nnz_h_lag, IndexStyleEnum& index_style) { n = 20; m = n-2; // in this example the jacobian is dense. Hence, it contains n*m nonzeros nnz_jac_g = n*m; // the hessian is also dense and has n*n total nonzeros, but we // only need the lower left corner (since it is symmetric) nnz_h_lag = n*(n-1)/2+n; generate_tapes(n, m); // use the C style indexing (0-based) index_style = C_STYLE; return true; } bool MyADOLC_NLP::get_bounds_info(Index n, Number* x_l, Number* x_u, Index m, Number* g_l, Number* g_u) { // none of the variables have bounds for (Index i=0; i bool MyADOLC_NLP::eval_obj(Index n, const T *x, T& obj_value) { T a1, a2; obj_value = 0.; for (Index i=0; i bool MyADOLC_NLP::eval_constraints(Index n, const T *x, Index m, T* g) { for (Index i=0; i>= dummy; trace_off(); trace_on(tag_g); for(Index i=0;i>= dummy; trace_off(); trace_on(tag_L); for(Index i=0;i>= dummy; trace_off(); delete[] xa; delete[] xp; delete[] g; delete[] lam; delete[] lamp; delete[] zu; delete[] zl; } ADOL-C-2.4.1/ADOL-C/examples/additional_examples/ipopt/LuksanVlcek1/ADOL-C_NLP.hpp0000644000076600007660000001176311324031265025402 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: ADOL-C_NLP.hpp Revision: $$ Contents: class myADOL-C_NPL for interfacing with Ipopt Copyright (c) Andrea Walther This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. This code is based on the file MyNLP.hpp contained in the Ipopt package with the authors: Carl Laird, Andreas Waechter ----------------------------------------------------------------------------*/ //************************************************************************* // // // Nothing has to be changed in this file !! // // //************************************************************************* #ifndef __MYADOLCNLP_HPP__ #define __MYADOLCNLP_HPP__ #include "IpTNLP.hpp" #include #define tag_f 1 #define tag_g 2 #define tag_L 3 using namespace Ipopt; class MyADOLC_NLP : public TNLP { public: /** default constructor */ MyADOLC_NLP(); /** default destructor */ virtual ~MyADOLC_NLP(); /**@name Overloaded from TNLP */ //@{ /** Method to return some info about the nlp */ virtual bool get_nlp_info(Index& n, Index& m, Index& nnz_jac_g, Index& nnz_h_lag, IndexStyleEnum& index_style); /** Method to return the bounds for my problem */ virtual bool get_bounds_info(Index n, Number* x_l, Number* x_u, Index m, Number* g_l, Number* g_u); /** Method to return the starting point for the algorithm */ virtual bool get_starting_point(Index n, bool init_x, Number* x, bool init_z, Number* z_L, Number* z_U, Index m, bool init_lambda, Number* lambda); /** Template to return the objective value */ template bool eval_obj(Index n, const T *x, T& obj_value); /** Template to compute contraints */ template bool eval_constraints(Index n, const T *x, Index m, T *g); /** Original method from Ipopt to return the objective value */ /** remains unchanged */ virtual bool eval_f(Index n, const Number* x, bool new_x, Number& obj_value); /** Original method from Ipopt to return the gradient of the objective */ /** remains unchanged */ virtual bool eval_grad_f(Index n, const Number* x, bool new_x, Number* grad_f); /** Original method from Ipopt to return the constraint residuals */ /** remains unchanged */ virtual bool eval_g(Index n, const Number* x, bool new_x, Index m, Number* g); /** Original method from Ipopt to return: * 1) The structure of the jacobian (if "values" is NULL) * 2) The values of the jacobian (if "values" is not NULL) */ /** remains unchanged */ virtual bool eval_jac_g(Index n, const Number* x, bool new_x, Index m, Index nele_jac, Index* iRow, Index *jCol, Number* values); /** Original method from Ipopt to return: * 1) The structure of the hessian of the lagrangian (if "values" is NULL) * 2) The values of the hessian of the lagrangian (if "values" is not NULL) */ /** remains unchanged */ virtual bool eval_h(Index n, const Number* x, bool new_x, Number obj_factor, Index m, const Number* lambda, bool new_lambda, Index nele_hess, Index* iRow, Index* jCol, Number* values); //@} /** @name Solution Methods */ //@{ /** This method is called when the algorithm is complete so the TNLP can store/write the solution */ virtual void finalize_solution(SolverReturn status, Index n, const Number* x, const Number* z_L, const Number* z_U, Index m, const Number* g, const Number* lambda, Number obj_value, const IpoptData* ip_data, IpoptCalculatedQuantities* ip_cq); //@} //*************** start ADOL-C part *********************************** /** Method to generate the required tapes */ virtual void generate_tapes(Index n, Index m); //*************** end ADOL-C part *********************************** private: /**@name Methods to block default compiler methods. * The compiler automatically generates the following three methods. * Since the default compiler implementation is generally not what * you want (for all but the most simple classes), we usually * put the declarations of these methods in the private section * and never implement them. This prevents the compiler from * implementing an incorrect "default" behavior without us * knowing. (See Scott Meyers book, "Effective C++") * */ //@{ // MyADOLC_NLP(); MyADOLC_NLP(const MyADOLC_NLP&); MyADOLC_NLP& operator=(const MyADOLC_NLP&); //@} //@{ double **Jac; double *x_lam; double **Hess; //@} }; #endif ADOL-C-2.4.1/ADOL-C/examples/additional_examples/ipopt/MittelmannDistCntrlNeumA_sparse/0000755000076600007660000000000012120272604027207 5ustar coincoin././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootADOL-C-2.4.1/ADOL-C/examples/additional_examples/ipopt/MittelmannDistCntrlNeumA_sparse/ADOL-C_sparseNLP.hppADOL-C-2.4.1/ADOL-C/examples/additional_examples/ipopt/MittelmannDistCntrlNeumA_sparse/ADOL-C_sparse0000644000076600007660000001326611332325033031415 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: ADOL-C_sparseNLP.hpp Revision: $$ Contents: class myADOL-C_sparseNPL for interfacing with Ipopt Copyright (c) Andrea Walther This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. This code is based on the file MyNLP.hpp contained in the Ipopt package with the authors: Carl Laird, Andreas Waechter ----------------------------------------------------------------------------*/ //************************************************************************* // // // Nothing has to be changed in this file !! // // //************************************************************************* #ifndef __MYADOLCNLP_HPP__ #define __MYADOLCNLP_HPP__ #include "IpTNLP.hpp" #include #include #define tag_f 1 #define tag_g 2 #define tag_L 3 #define HPOFF 30 using namespace Ipopt; class MyADOLC_sparseNLP : public TNLP { public: /** default constructor */ MyADOLC_sparseNLP(); /** default destructor */ virtual ~MyADOLC_sparseNLP(); /**@name Overloaded from TNLP */ //@{ /** Method to return some info about the nlp */ virtual bool get_nlp_info(Index& n, Index& m, Index& nnz_jac_g, Index& nnz_h_lag, IndexStyleEnum& index_style); /** Method to return the bounds for my problem */ virtual bool get_bounds_info(Index n, Number* x_l, Number* x_u, Index m, Number* g_l, Number* g_u); /** Method to return the starting point for the algorithm */ virtual bool get_starting_point(Index n, bool init_x, Number* x, bool init_z, Number* z_L, Number* z_U, Index m, bool init_lambda, Number* lambda); /** Template to return the objective value */ template bool eval_obj(Index n, const T *x, T& obj_value); /** Template to compute contraints */ template bool eval_constraints(Index n, const T *x, Index m, T *g); /** Original method from Ipopt to return the objective value */ /** remains unchanged */ virtual bool eval_f(Index n, const Number* x, bool new_x, Number& obj_value); /** Original method from Ipopt to return the gradient of the objective */ /** remains unchanged */ virtual bool eval_grad_f(Index n, const Number* x, bool new_x, Number* grad_f); /** Original method from Ipopt to return the constraint residuals */ /** remains unchanged */ virtual bool eval_g(Index n, const Number* x, bool new_x, Index m, Number* g); /** Original method from Ipopt to return: * 1) The structure of the jacobian (if "values" is NULL) * 2) The values of the jacobian (if "values" is not NULL) */ /** remains unchanged */ virtual bool eval_jac_g(Index n, const Number* x, bool new_x, Index m, Index nele_jac, Index* iRow, Index *jCol, Number* values); /** Original method from Ipopt to return: * 1) The structure of the hessian of the lagrangian (if "values" is NULL) * 2) The values of the hessian of the lagrangian (if "values" is not NULL) */ /** remains unchanged */ virtual bool eval_h(Index n, const Number* x, bool new_x, Number obj_factor, Index m, const Number* lambda, bool new_lambda, Index nele_hess, Index* iRow, Index* jCol, Number* values); //@} /** @name Solution Methods */ //@{ /** This method is called when the algorithm is complete so the TNLP can store/write the solution */ virtual void finalize_solution(SolverReturn status, Index n, const Number* x, const Number* z_L, const Number* z_U, Index m, const Number* g, const Number* lambda, Number obj_value, const IpoptData* ip_data, IpoptCalculatedQuantities* ip_cq); //@} //*************** start ADOL-C part *********************************** /** Method to generate the required tapes */ virtual void generate_tapes(Index n, Index m, Index& nnz_jac_g, Index& nnz_h_lag); //*************** end ADOL-C part *********************************** private: /**@name Methods to block default compiler methods. * The compiler automatically generates the following three methods. * Since the default compiler implementation is generally not what * you want (for all but the most simple classes), we usually * put the declarations of these methods in the private section * and never implement them. This prevents the compiler from * implementing an incorrect "default" behavior without us * knowing. (See Scott Meyers book, "Effective C++") * */ //@{ // MyADOLC_sparseNLP(); MyADOLC_sparseNLP(const MyADOLC_sparseNLP&); MyADOLC_sparseNLP& operator=(const MyADOLC_sparseNLP&); //@} //@{ double *x_lam; //** variables for sparsity exploitation unsigned int **HP_t; /* compressed block row storage */ unsigned int *rind_g; /* row indices */ unsigned int *cind_g; /* column indices */ double *jacval; /* values */ unsigned int *rind_L; /* row indices */ unsigned int *cind_L; /* column indices */ unsigned int *rind_L_total; /* row indices */ unsigned int *cind_L_total; /* column indices */ double *hessval; /* values */ int nnz_jac; int nnz_L, nnz_L_total; int options_g[4]; int options_L[4]; //@} }; #endif ././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootADOL-C-2.4.1/ADOL-C/examples/additional_examples/ipopt/MittelmannDistCntrlNeumA_sparse/cpp_example.cppADOL-C-2.4.1/ADOL-C/examples/additional_examples/ipopt/MittelmannDistCntrlNeumA_sparse/cpp_example.c0000644000076600007660000000371411332325033031654 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: cpp_example.cpp Revision: $$ Contents: example for class myADOLC_sparseNPL for interfacing with Ipopt Copyright (c) Andrea Walther This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. This code is based on the file corresponding file cpp_example.cpp contained in the Ipopt package with the authors: Carl Laird, Andreas Waechter ----------------------------------------------------------------------------*/ //************************************************************************* // // // Nothing has to be changed in this file !! // // //************************************************************************* #include "IpIpoptApplication.hpp" #include "IpSolveStatistics.hpp" #include "ADOL-C_sparseNLP.hpp" using namespace Ipopt; int main(int argv, char* argc[]) { // Create an instance of your nlp... SmartPtr myadolc_nlp = new MyADOLC_sparseNLP(); // Create an instance of the IpoptApplication SmartPtr app = new IpoptApplication(); // Initialize the IpoptApplication and process the options ApplicationReturnStatus status; status = app->Initialize(); if (status != Solve_Succeeded) { printf("\n\n*** Error during initialization!\n"); return (int) status; } status = app->OptimizeTNLP(myadolc_nlp); if (status == Solve_Succeeded) { // Retrieve some statistics about the solve Index iter_count = app->Statistics()->IterationCount(); printf("\n\n*** The problem solved in %d iterations!\n", iter_count); Number final_obj = app->Statistics()->FinalObjective(); printf("\n\n*** The final value of the objective function is %e.\n", final_obj); } return (int) status; } ADOL-C-2.4.1/ADOL-C/examples/additional_examples/ipopt/MittelmannDistCntrlNeumA_sparse/Makefile0000644000076600007660000000406211332325033030650 0ustar coincoin# ---------------------------------------------------------------------------- # ADOL-C -- Automatic Differentiation by Overloading in C++ # File: Makefile # Revision: $$ # Contents: Makefile for class myADOLC_NPL_sparse to interface ADOL-C with Ipopt # # Copyright (c) Andrea Walther # # This file is part of ADOL-C. This software is provided as open source. # Any use, reproduction, or distribution of the software constitutes # recipient's acceptance of the terms of the accompanying license file. # # This code is based on the corresponding makefile contained in the # Ipopt package with the author Andreas Waechter #--------------------------------------------------------------------------- ########################################################################## # You can modify this example makefile to fit for your own program. # # Usually, you only need to change the five CHANGE entries below. # ########################################################################## # CHANGEME: This should be the name of your executable EXE = cpp_example # CHANGEME: Here is the name of all object files corresponding to the source # code that you wrote in order to define the problem statement OBJS = cpp_example.o \ ADOL-C_sparseNLP.o # Definitions for ADOL-C # CHANGE THIS TO YOUR ADOL-C BASE DIRECTORY ADPATH = $(HOME)/AD/ADOL-C/adolc_base_coin/include/adolc ADLIBDIR = $(HOME)/AD/ADOL-C/adolc_base_coin/lib # CHANGEME: Additional libraries ADDLIBS = -Wl,--rpath -Wl,$(ADLIBDIR) -L$(ADLIBDIR) -ladolc $(HOME)/AD/ADOL-C/adolc_base_coin/lib/libColPack.a # CHANGEME: Additional flags for compilation (e.g., include flags) ADDINCFLAGS = -I$(ADPATH) ########################################################################## # Usually, you don't have to change anything below. Note that if you # # change certain compiler options, you might have to recompile Ipopt. # ########################################################################## HERE YOU SHOULD USE THE SETTING OF YOUR IPOPT INSTALLATION THIS SHOULD WORK WITH COPY AND PASTE././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootADOL-C-2.4.1/ADOL-C/examples/additional_examples/ipopt/MittelmannDistCntrlNeumA_sparse/ADOL-C_sparseNLP.cppADOL-C-2.4.1/ADOL-C/examples/additional_examples/ipopt/MittelmannDistCntrlNeumA_sparse/ADOL-C_sparse0000644000076600007660000003740612017111445031420 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: ADOL-C_sparseNLP.cpp Revision: $$ Contents: class myADOLC_sparseNPL for interfacing with Ipopt Copyright (c) Andrea Walther This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. This code is based on the file MyNLP.cpp contained in the Ipopt package with the authors: Carl Laird, Andreas Waechter ----------------------------------------------------------------------------*/ /** C++ Example NLP for interfacing a problem with IPOPT and ADOL-C. * MyADOL-C_sparseNLP implements a C++ example showing how to interface * with IPOPT and ADOL-C through the TNLP interface. This class * implements a distributed control problem with homogeneous * Neumann boundary conditions, as formulated by Hans Mittelmann as * Examples 4-6 in "Optimization Techniques for Solving Elliptic * Control Problems with Control and State Constraints. Part 2: * Distributed Control" taking sparsity into account. * * exploitation of sparsity !! * */ #include #include "ADOL-C_sparseNLP.hpp" #define alpha_ 0.01 #define b_0j_ 1. #define b_1j_ 1. #define b_i0_ 1. #define b_i1_ 1. double *y_d_; int N_; double h_; double hh_; int y_index(int i, int j) { return j + (N_+2)*i; } int u_index(int i, int j) { return (N_+2)*(N_+2) + (j-1) + (N_)*(i-1); } int pde_index(int i, int j) { return (j-1) + N_*(i-1); } double y_d_cont(double x1, double x2) { return 3. + 5.*(x1*(x1-1.)*x2*(x2-1.)); } adouble fint_cont(double x1, double x2, adouble y, adouble u) { adouble diff_y = y-y_d_cont(x1,x2); return 0.5*(diff_y*diff_y + alpha_*u*u); } adouble d_cont(double x1, double x2, adouble y, adouble u) { return -exp(y) - u; } double fint_cont(double x1, double x2, double y, double u) { double diff_y = y-y_d_cont(x1,x2); return 0.5*(diff_y*diff_y + alpha_*u*u); } double d_cont(double x1, double x2, double y, double u) { return -exp(y) - u; } using namespace Ipopt; /* Constructor. */ MyADOLC_sparseNLP::MyADOLC_sparseNLP() {} MyADOLC_sparseNLP::~MyADOLC_sparseNLP() {} bool MyADOLC_sparseNLP::get_nlp_info(Index& n, Index& m, Index& nnz_jac_g, Index& nnz_h_lag, IndexStyleEnum& index_style) { N_ = 15; h_ = (1.0/(N_+1)); hh_= (h_*h_); y_d_ = new double[(N_+2)*(N_+2)]; for (int j=0; j<= N_+1; j++) { for (int i=0; i<= N_+1; i++) { y_d_[y_index(i,j)] = y_d_cont(h_*1.*i,h_*1.*j); } } n = (N_+2)*(N_+2) + N_*N_; m = N_*N_ + 4*N_; generate_tapes(n, m, nnz_jac_g, nnz_h_lag); // use the C style indexing (0-based) index_style = C_STYLE; return true; } bool MyADOLC_sparseNLP::get_bounds_info(Index n, Number* x_l, Number* x_u, Index m, Number* g_l, Number* g_u) { // none of the variables have bounds for (Index i=0; i bool MyADOLC_sparseNLP::eval_obj(Index n, const T *x, T& obj_value) { // return the value of the objective function obj_value = 0.; for (int i=1; i<=N_; i++) { for (int j=1; j<= N_; j++) { int iy = y_index(i,j); int iu = u_index(i,j); obj_value += fint_cont(h_*1.*i, h_*1.*j, x[iy], x[iu]); } } obj_value *= hh_; return true; } template bool MyADOLC_sparseNLP::eval_constraints(Index n, const T *x, Index m, T* g) { T val; // compute the discretized PDE for each interior grid point for (int i=1; i<=N_; i++) { for (int j=1; j<=N_; j++) { // Start with the discretized Laplacian operator val = 4.* x[y_index(i,j)] - x[y_index(i-1,j)] - x[y_index(i+1,j)] - x[y_index(i,j-1)] - x[y_index(i,j+1)]; // Add the forcing term (including the step size here) val += hh_*d_cont(h_*1.*i, h_*1.*j,x[y_index(i,j)], x[u_index(i,j)]); g[pde_index(i,j)] = val; } } int ig = N_*N_; // set up the Neumann boundary conditions for (int i=1; i<= N_; i++) { g[ig] = (1.+h_*b_i0_)*x[y_index(i,0)] - x[y_index(i,1)]; ig++; } for (int i=1; i<= N_; i++) { g[ig] = (1.+h_*b_i1_)*x[y_index(i,N_+1)] - x[y_index(i,N_)]; ig++; } for (int j=1; j<= N_; j++) { g[ig] = (1.+h_*b_0j_)*x[y_index(0,j)] - x[y_index(1,j)]; ig++; } for (int j=1; j<= N_; j++) { g[ig] = (1.+h_*b_1j_)*x[y_index(N_+1,j)] - x[y_index(N_,j)]; ig++; } return true; } //************************************************************************* // // // Nothing has to be changed below this point !! // // //************************************************************************* bool MyADOLC_sparseNLP::eval_f(Index n, const Number* x, bool new_x, Number& obj_value) { eval_obj(n,x,obj_value); return true; } bool MyADOLC_sparseNLP::eval_grad_f(Index n, const Number* x, bool new_x, Number* grad_f) { gradient(tag_f,n,x,grad_f); return true; } bool MyADOLC_sparseNLP::eval_g(Index n, const Number* x, bool new_x, Index m, Number* g) { eval_constraints(n,x,m,g); return true; } bool MyADOLC_sparseNLP::eval_jac_g(Index n, const Number* x, bool new_x, Index m, Index nele_jac, Index* iRow, Index *jCol, Number* values) { if (values == NULL) { // return the structure of the jacobian for(Index idx=0; idx>= dummy; trace_off(); trace_on(tag_g); for(Index idx=0;idx>= dummy; trace_off(); trace_on(tag_L); for(Index idx=0;idx>= dummy; trace_off(); rind_g = NULL; cind_g = NULL; options_g[0] = 0; /* sparsity pattern by index domains (default) */ options_g[1] = 0; /* safe mode (default) */ options_g[2] = -1; /* &jacval is not computed */ options_g[3] = 0; /* column compression (default) */ this->jacval=NULL; this->hessval=NULL; sparse_jac(tag_g, m, n, 0, xp, &nnz_jac, &rind_g, &cind_g, &jacval, options_g); options_g[2] = 0; nnz_jac_g = nnz_jac; unsigned int **JP_f=NULL; /* compressed block row storage */ unsigned int **JP_g=NULL; /* compressed block row storage */ unsigned int **HP_f=NULL; /* compressed block row storage */ unsigned int **HP_g=NULL; /* compressed block row storage */ unsigned int *HP_length=NULL; /* length of arrays */ unsigned int *temp=NULL; /* help array */ int ctrl_H; JP_f = (unsigned int **) malloc(sizeof(unsigned int*)); JP_g = (unsigned int **) malloc(m*sizeof(unsigned int*)); HP_f = (unsigned int **) malloc(n*sizeof(unsigned int*)); HP_g = (unsigned int **) malloc(n*sizeof(unsigned int*)); HP_t = (unsigned int **) malloc((n+m+1)*sizeof(unsigned int*)); HP_length = (unsigned int *) malloc((n)*sizeof(unsigned int)); ctrl_H = 0; hess_pat(tag_f, n, xp, HP_f, ctrl_H); indopro_forward_safe(tag_f, 1, n, xp, JP_f); indopro_forward_safe(tag_g, m, n, xp, JP_g); nonl_ind_forward_safe(tag_g, m, n, xp, HP_g); for (i=0;i=i) &&((int) HP_t[i][j]=i) { rind_L_total[ind] = i; cind_L_total[ind++] = HP_t[i][j]; } } for (i=0;i example code for the coupling of ADOL-C and Ipopt directories: LuksanVlcek1 MittelmannDistCntrlNeumA both examples from Ipopt/Ipopt/examples/ScalableProblems The directories contain examples for the coupling of Ipopt and ADOL-C. The user just has to adapted the evaluation of the target function and the constraints everything else is done automatically. LuksanVlcek1_sparse MittelmannDistCntrlNeumA_sparse same examples as above but with automatic exploitation of sparsity, hence the installation of the ColPack package is required. The makefiles from the specific Ipopt installation should be used and extended according to the Makefile examples contained in the directories. ADOL-C-2.4.1/ADOL-C/examples/additional_examples/ipopt/MittelmannDistCntrlNeumA/0000755000076600007660000000000012120272604025632 5ustar coincoinADOL-C-2.4.1/ADOL-C/examples/additional_examples/ipopt/MittelmannDistCntrlNeumA/cpp_example.cpp0000644000076600007660000000367211324031265030644 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: cpp_example.cpp Revision: $$ Contents: example for class myADOLC_NPL for interfacing with Ipopt Copyright (c) Andrea Walther This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. This code is based on the file corresponding file cpp_example.cpp contained in the Ipopt package with the authors: Carl Laird, Andreas Waechter ----------------------------------------------------------------------------*/ //************************************************************************* // // // Nothing has to be changed in this file !! // // //************************************************************************* #include "IpIpoptApplication.hpp" #include "IpSolveStatistics.hpp" #include "ADOL-C_NLP.hpp" using namespace Ipopt; int main(int argv, char* argc[]) { // Create an instance of your nlp... SmartPtr myadolc_nlp = new MyADOLC_NLP(); // Create an instance of the IpoptApplication SmartPtr app = new IpoptApplication(); // Initialize the IpoptApplication and process the options ApplicationReturnStatus status; status = app->Initialize(); if (status != Solve_Succeeded) { printf("\n\n*** Error during initialization!\n"); return (int) status; } status = app->OptimizeTNLP(myadolc_nlp); if (status == Solve_Succeeded) { // Retrieve some statistics about the solve Index iter_count = app->Statistics()->IterationCount(); printf("\n\n*** The problem solved in %d iterations!\n", iter_count); Number final_obj = app->Statistics()->FinalObjective(); printf("\n\n*** The final value of the objective function is %e.\n", final_obj); } return (int) status; } ADOL-C-2.4.1/ADOL-C/examples/additional_examples/ipopt/MittelmannDistCntrlNeumA/Makefile0000644000076600007660000000404411332325033027273 0ustar coincoin# ---------------------------------------------------------------------------- # ADOL-C -- Automatic Differentiation by Overloading in C++ # File: Makefile # Revision: $$ # Contents: Makefile for class myADOLC_NPL to interface ADOL-C with Ipopt # # Copyright (c) Andrea Walther # # This file is part of ADOL-C. This software is provided as open source. # Any use, reproduction, or distribution of the software constitutes # recipient's acceptance of the terms of the accompanying license file. # # This code is based on the corresponding makefile contained in the # Ipopt package with the author Andreas Waechter #--------------------------------------------------------------------------- ########################################################################## # You can modify this example makefile to fit for your own program. # # Usually, you only need to change the five CHANGE entries below. # ########################################################################## # CHANGEME: This should be the name of your executable EXE = cpp_example # CHANGEME: Here is the name of all object files corresponding to the source # code that you wrote in order to define the problem statement OBJS = cpp_example.o \ ADOL-C_NLP.o # Definitions for ADOL-C # CHANGE THIS TO YOUR ADOL-C BASE DIRECTORY ADPATH = $(HOME)/AD/ADOL-C/adolc_base_210/include/adolc ADLIBDIR = $(HOME)/AD/ADOL-C/adolc_base_210/lib # CHANGEME: Additional libraries ADDLIBS = -Wl,--rpath -Wl,$(ADLIBDIR) -L$(ADLIBDIR) -ladolc $(HOME)/AD/ADOL-C/adolc_base_210/lib/libColPack.a # CHANGEME: Additional flags for compilation (e.g., include flags) ADDINCFLAGS = -I$(ADPATH) ########################################################################## # Usually, you don't have to change anything below. Note that if you # # change certain compiler options, you might have to recompile Ipopt. # ########################################################################## HERE YOU SHOULD USE THE SETTING OF YOUR IPOPT INSTALLATION THIS SHOULD WORK WITH COPY AND PASTE ADOL-C-2.4.1/ADOL-C/examples/additional_examples/ipopt/MittelmannDistCntrlNeumA/ADOL-C_NLP.cpp0000644000076600007660000002412111774315307027762 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: ADOL-C_NLP.cpp Revision: $$ Contents: class myADOLC_NPL for interfacing with Ipopt Copyright (c) Andrea Walther This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. This code is based on the file MyNLP.cpp contained in the Ipopt package with the authors: Carl Laird, Andreas Waechter ----------------------------------------------------------------------------*/ /** C++ Example NLP for interfacing a problem with IPOPT and ADOL-C. * MyADOL-C_NLP implements a C++ example showing how to interface * with IPOPT and ADOL-C through the TNLP interface. This class * implements a distributed control problem with homogeneous * Neumann boundary conditions, as formulated by Hans Mittelmann as * Examples 4-6 in "Optimization Techniques for Solving Elliptic * Control Problems with Control and State Constraints. Part 2: * Distributed Control" ignoring sparsity. * * no exploitation of sparsity !! * */ #include #include "ADOL-C_NLP.hpp" #define alpha_ 0.01 #define b_0j_ 1. #define b_1j_ 1. #define b_i0_ 1. #define b_i1_ 1. double *y_d_; int N_; double h_; double hh_; int y_index(int i, int j) { return j + (N_+2)*i; } int u_index(int i, int j) { return (N_+2)*(N_+2) + (j-1) + (N_)*(i-1); } int pde_index(int i, int j) { return (j-1) + N_*(i-1); } double y_d_cont(double x1, double x2) { return 3. + 5.*(x1*(x1-1.)*x2*(x2-1.)); } adouble fint_cont(double x1, double x2, adouble y, adouble u) { adouble diff_y = y-y_d_cont(x1,x2); return 0.5*(diff_y*diff_y + alpha_*u*u); } adouble d_cont(double x1, double x2, adouble y, adouble u) { return -exp(y) - u; } double fint_cont(double x1, double x2, double y, double u) { double diff_y = y-y_d_cont(x1,x2); return 0.5*(diff_y*diff_y + alpha_*u*u); } double d_cont(double x1, double x2, double y, double u) { return -exp(y) - u; } using namespace Ipopt; /* Constructor. */ MyADOLC_NLP::MyADOLC_NLP() {} MyADOLC_NLP::~MyADOLC_NLP(){} bool MyADOLC_NLP::get_nlp_info(Index& n, Index& m, Index& nnz_jac_g, Index& nnz_h_lag, IndexStyleEnum& index_style) { N_ = 10; h_ = (1.0/(N_+1)); hh_= (h_*h_); y_d_ = new double[(N_+2)*(N_+2)]; for (int j=0; j<= N_+1; j++) { for (int i=0; i<= N_+1; i++) { y_d_[y_index(i,j)] = y_d_cont(h_*1.*i,h_*1.*j); } } n = (N_+2)*(N_+2) + N_*N_; m = N_*N_ + 4*N_; // in this example the jacobian is dense. Hence, it contains n*m nonzeros nnz_jac_g = n*m; // the hessian is also dense and has n*n total nonzeros, but we // only need the lower left corner (since it is symmetric) nnz_h_lag = n*(n-1)/2+n; generate_tapes(n, m); // use the C style indexing (0-based) index_style = C_STYLE; return true; } bool MyADOLC_NLP::get_bounds_info(Index n, Number* x_l, Number* x_u, Index m, Number* g_l, Number* g_u) { // none of the variables have bounds for (Index i=0; i bool MyADOLC_NLP::eval_obj(Index n, const T *x, T& obj_value) { // return the value of the objective function obj_value = 0.; for (int i=1; i<=N_; i++) { for (int j=1; j<= N_; j++) { int iy = y_index(i,j); int iu = u_index(i,j); obj_value += fint_cont(h_*1.*i, h_*1.*j, x[iy], x[iu]); } } obj_value *= hh_; return true; } template bool MyADOLC_NLP::eval_constraints(Index n, const T *x, Index m, T* g) { T val; // compute the discretized PDE for each interior grid point for (int i=1; i<=N_; i++) { for (int j=1; j<=N_; j++) { // Start with the discretized Laplacian operator val = 4.* x[y_index(i,j)] - x[y_index(i-1,j)] - x[y_index(i+1,j)] - x[y_index(i,j-1)] - x[y_index(i,j+1)]; // Add the forcing term (including the step size here) val += hh_*d_cont(h_*1.*i, h_*1.*j,x[y_index(i,j)], x[u_index(i,j)]); g[pde_index(i,j)] = val; } } int ig = N_*N_; // set up the Neumann boundary conditions for (int i=1; i<= N_; i++) { g[ig] = (1.+h_*b_i0_)*x[y_index(i,0)] - x[y_index(i,1)]; ig++; } for (int i=1; i<= N_; i++) { g[ig] = (1.+h_*b_i1_)*x[y_index(i,N_+1)] - x[y_index(i,N_)]; ig++; } for (int j=1; j<= N_; j++) { g[ig] = (1.+h_*b_0j_)*x[y_index(0,j)] - x[y_index(1,j)]; ig++; } for (int j=1; j<= N_; j++) { g[ig] = (1.+h_*b_1j_)*x[y_index(N_+1,j)] - x[y_index(N_,j)]; ig++; } return true; } //************************************************************************* // // // Nothing has to be changed below this point !! // // //************************************************************************* bool MyADOLC_NLP::eval_f(Index n, const Number* x, bool new_x, Number& obj_value) { eval_obj(n,x,obj_value); return true; } bool MyADOLC_NLP::eval_grad_f(Index n, const Number* x, bool new_x, Number* grad_f) { gradient(tag_f,n,x,grad_f); return true; } bool MyADOLC_NLP::eval_g(Index n, const Number* x, bool new_x, Index m, Number* g) { eval_constraints(n,x,m,g); return true; } bool MyADOLC_NLP::eval_jac_g(Index n, const Number* x, bool new_x, Index m, Index nele_jac, Index* iRow, Index *jCol, Number* values) { if (values == NULL) { // return the structure of the jacobian, // assuming that the Jacobian is dense Index idx = 0; for(Index i=0; i>= dummy; trace_off(); trace_on(tag_g); for(Index i=0;i>= dummy; trace_off(); trace_on(tag_L); for(Index i=0;i>= dummy; trace_off(); delete[] xa; delete[] xp; delete[] g; delete[] lam; delete[] lamp; delete[] zu; delete[] zl; } ADOL-C-2.4.1/ADOL-C/examples/additional_examples/ipopt/MittelmannDistCntrlNeumA/ADOL-C_NLP.hpp0000644000076600007660000001176311324031265027764 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: ADOL-C_NLP.hpp Revision: $$ Contents: class myADOL-C_NPL for interfacing with Ipopt Copyright (c) Andrea Walther This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. This code is based on the file MyNLP.hpp contained in the Ipopt package with the authors: Carl Laird, Andreas Waechter ----------------------------------------------------------------------------*/ //************************************************************************* // // // Nothing has to be changed in this file !! // // //************************************************************************* #ifndef __MYADOLCNLP_HPP__ #define __MYADOLCNLP_HPP__ #include "IpTNLP.hpp" #include #define tag_f 1 #define tag_g 2 #define tag_L 3 using namespace Ipopt; class MyADOLC_NLP : public TNLP { public: /** default constructor */ MyADOLC_NLP(); /** default destructor */ virtual ~MyADOLC_NLP(); /**@name Overloaded from TNLP */ //@{ /** Method to return some info about the nlp */ virtual bool get_nlp_info(Index& n, Index& m, Index& nnz_jac_g, Index& nnz_h_lag, IndexStyleEnum& index_style); /** Method to return the bounds for my problem */ virtual bool get_bounds_info(Index n, Number* x_l, Number* x_u, Index m, Number* g_l, Number* g_u); /** Method to return the starting point for the algorithm */ virtual bool get_starting_point(Index n, bool init_x, Number* x, bool init_z, Number* z_L, Number* z_U, Index m, bool init_lambda, Number* lambda); /** Template to return the objective value */ template bool eval_obj(Index n, const T *x, T& obj_value); /** Template to compute contraints */ template bool eval_constraints(Index n, const T *x, Index m, T *g); /** Original method from Ipopt to return the objective value */ /** remains unchanged */ virtual bool eval_f(Index n, const Number* x, bool new_x, Number& obj_value); /** Original method from Ipopt to return the gradient of the objective */ /** remains unchanged */ virtual bool eval_grad_f(Index n, const Number* x, bool new_x, Number* grad_f); /** Original method from Ipopt to return the constraint residuals */ /** remains unchanged */ virtual bool eval_g(Index n, const Number* x, bool new_x, Index m, Number* g); /** Original method from Ipopt to return: * 1) The structure of the jacobian (if "values" is NULL) * 2) The values of the jacobian (if "values" is not NULL) */ /** remains unchanged */ virtual bool eval_jac_g(Index n, const Number* x, bool new_x, Index m, Index nele_jac, Index* iRow, Index *jCol, Number* values); /** Original method from Ipopt to return: * 1) The structure of the hessian of the lagrangian (if "values" is NULL) * 2) The values of the hessian of the lagrangian (if "values" is not NULL) */ /** remains unchanged */ virtual bool eval_h(Index n, const Number* x, bool new_x, Number obj_factor, Index m, const Number* lambda, bool new_lambda, Index nele_hess, Index* iRow, Index* jCol, Number* values); //@} /** @name Solution Methods */ //@{ /** This method is called when the algorithm is complete so the TNLP can store/write the solution */ virtual void finalize_solution(SolverReturn status, Index n, const Number* x, const Number* z_L, const Number* z_U, Index m, const Number* g, const Number* lambda, Number obj_value, const IpoptData* ip_data, IpoptCalculatedQuantities* ip_cq); //@} //*************** start ADOL-C part *********************************** /** Method to generate the required tapes */ virtual void generate_tapes(Index n, Index m); //*************** end ADOL-C part *********************************** private: /**@name Methods to block default compiler methods. * The compiler automatically generates the following three methods. * Since the default compiler implementation is generally not what * you want (for all but the most simple classes), we usually * put the declarations of these methods in the private section * and never implement them. This prevents the compiler from * implementing an incorrect "default" behavior without us * knowing. (See Scott Meyers book, "Effective C++") * */ //@{ // MyADOLC_NLP(); MyADOLC_NLP(const MyADOLC_NLP&); MyADOLC_NLP& operator=(const MyADOLC_NLP&); //@} //@{ double **Jac; double *x_lam; double **Hess; //@} }; #endif ADOL-C-2.4.1/ADOL-C/examples/additional_examples/Makefile.in0000644000076600007660000004625112062606346021700 0ustar coincoin# Makefile.in generated by automake 1.12.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = ADOL-C/examples/additional_examples DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = clock hessmat lufact ode sparse tapesave timing detexam \ helm lighthouse scal speelpenning taylor pow checkpointing \ ext_diff_func fixpoint_exam openmp_exam DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH_FALSE = @ADVBRANCH_FALSE@ ADVBRANCH_TRUE = @ADVBRANCH_TRUE@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF_FALSE = @ATRIG_ERF_FALSE@ ATRIG_ERF_TRUE = @ATRIG_ERF_TRUE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COLPACK_CFLAGS = @COLPACK_CFLAGS@ COLPACK_LIBS = @COLPACK_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ MAINTAINERCLEANFILES = Makefile.in *~ @ADDEXA_TRUE@SUBDIRS = clock hessmat lufact ode sparse tapesave timing \ @ADDEXA_TRUE@ detexam helm lighthouse scal speelpenning taylor pow \ @ADDEXA_TRUE@ checkpointing ext_diff_func fixpoint_exam openmp_exam @PAREXA_TRUE@SUBDIRS = clock hessmat lufact ode sparse tapesave timing \ @PAREXA_TRUE@ detexam helm lighthouse scal speelpenning taylor pow \ @PAREXA_TRUE@ checkpointing ext_diff_func fixpoint_exam openmp_exam all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done cscopelist-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) \ cscopelist-recursive ctags-recursive install-am install-strip \ tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ cscopelist cscopelist-recursive ctags ctags-recursive \ distclean distclean-generic distclean-libtool distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-recursive uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.4.1/ADOL-C/examples/additional_examples/scal/0000755000076600007660000000000012120272604020534 5ustar coincoinADOL-C-2.4.1/ADOL-C/examples/additional_examples/scal/scalexam.cpp0000644000076600007660000001640211732376410023050 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: scalexam.cpp Revision: $Id: scalexam.cpp 299 2012-03-21 16:08:40Z kulshres $ Contents: This program can be used to verify the consistency and correctness of derivatives computed by ADOL-C in its forward and reverse mode. Ther use is required to select one integer input id. For positive n = id the monomial x^n is evaluated recursively at x=0.5 and all its nonzero Taylor coeffcients at this point are evaluated in the forward and reverse mode. A negative choice of id >= -9 leads to one of nine identities, whose derivatives should be trivial. These identities may be used to check the correctness of particular code segments in the ADOL-C sources uni5_.c and *o_rev.c. No timings are performed in this example program. Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ /****************************************************************************/ /* INCLUDES */ #include #include #include using namespace std; /****************************************************************************/ /* POWER */ /* The monomial evaluation routine which has been obtained from the original version by retyping all `doubles' as `adoubles' */ adouble power( adouble x, int n ) { adouble z = 1; if (n > 0) { int nh =n/2; z = power(x,nh); z *= z; if (2*nh != n) z *= x; return z; } else if (n == 0) return z; else return 1.0/power(x,-n); } /****************************************************************************/ /* MAIN */ int main() { int n, i, id; int tag = 0; /*--------------------------------------------------------------------------*/ fprintf(stdout,"SCALEXAM (ADOL-C Example)\n\n"); fprintf(stdout,"problem number(-1 .. -10) / degree of monomial =? \n"); scanf("%d",&id); n = id >0 ? id : 3; double *xp,*yp; xp = new double[n+4]; yp = new double[n+4]; yp[0] = 0; xp[0] = 0.5; xp[1] = 1.0; /*--------------------------------------------------------------------------*/ int dum = 1; trace_on(tag,dum); // Begin taping all calculations with 'adoubles' adouble y,x; x <<= xp[0]; if (id >= 0) { fprintf(stdout,"Evaluate and differentiate recursive power routine \n"); y = power(x,n); } else { fprintf(stdout, "Check Operations and Functions by Algebraic Identities \n"); switch (id) { case -1 : fprintf(stdout, "Addition/Subtraction: y = x + x - (2.0/3)*x - x/3 \n"); y = x + x - (2.0/3)*x - x/3 ; break; case -2 : fprintf(stdout,"Multiplication/divison: y = x*x/x \n"); y = x*x/x; break; case -3 : fprintf(stdout,"Square root and power: y = sqrt(pow(x,2)) \n"); y = sqrt(pow(x,2)); break; case -4 : fprintf(stdout,"Exponential and log: y = exp(log(log(exp(x)))) \n"); y = exp(log(log(exp(x)))); break; case -5 : fprintf(stdout,"Trig identity: y = x + sin(2*x)-2*cos(x)*sin(x) \n"); y = x + sin(2.0*x)-2.0*cos(x)*sin(x); break; case -6 : fprintf(stdout,"Check out quadrature macro \n"); y = exp(myquad(myquad(exp(x)))); break; case -7 : fprintf(stdout,"Arcsin: y = sin(asin(acos(cos(x)))) \n"); y = sin(asin(acos(cos(x)))); break; case -8 : fprintf(stdout, "Hyperbolic tangent: y = x + tanh(x)-sinh(x)/cosh(x) \n"); y = x + tanh(x)-sinh(x)/cosh(x) ; break; case -9 : fprintf(stdout,"Absolute value: y = x + fabs(x) - fabs(-x) \n"); y = x + fabs(-x) - fabs(x); break; case -10 : fprintf(stdout,"atan2: y = atan2(sin(x-0.5+pi),cos(x-0.5+pi)) \n"); y = atan2(sin(x),cos(x)); break; default : fprintf(stdout," Please select problem number >= -10 \n"); exit(-1); } } y >>= yp[0]; trace_off(); // The (partial) execution trace is completed. /*--------------------------------------------------------------------------*/ if( id < 0 ) fprintf(stdout,"Round-off error: %14.6E\n",(y-x).value()); /*--------------------------------------------------------------------------*/ size_t tape_stats[STAT_SIZE]; tapestats(tag,tape_stats); fprintf(stdout,"\n independents %d\n",tape_stats[NUM_INDEPENDENTS]); fprintf(stdout," dependents %d\n",tape_stats[NUM_DEPENDENTS]); fprintf(stdout," operations %d\n",tape_stats[NUM_OPERATIONS]); fprintf(stdout," operations buffer size %d\n",tape_stats[OP_BUFFER_SIZE]); fprintf(stdout," locations buffer size %d\n",tape_stats[LOC_BUFFER_SIZE]); fprintf(stdout," constants buffer size %d\n",tape_stats[VAL_BUFFER_SIZE]); fprintf(stdout," maxlive %d\n",tape_stats[NUM_MAX_LIVES]); fprintf(stdout," valstack size %d\n\n",tape_stats[TAY_STACK_SIZE]); /*--------------------------------------------------------------------------*/ double *res; res = new double[n+2]; double u[1]; u[0] = 1; fprintf(stdout, "\nThe two Taylor coefficients in each row should agree\n\n"); double ***V = (double***)new double**[1]; V[0] = new double*[1]; V[0][0] = new double[n+2]; double **U = new double*[1]; U[0] = new double[1]; U[0][0] = 1; double** xpoint = &xp; double** ypoint = &yp; double** respoint = &res; // tape_doc(tag,depen,indep,*xpoint,*respoint); fprintf(stdout," \n \t forward \t reverse \n"); for (i=0; i < n+2; i++) { xp[i+2]=0; forward(tag,1,1,i,i+1,xpoint,respoint); fprintf(stdout,"%d\t%14.6E\t\t%14.6E\n",i,res[i],yp[i]); reverse(tag,1,1,i,u,ypoint); // call higher order scalar reverse reverse(tag,1,1,i,1,U,V); yp[i+1] = yp[i]/(i+1); if (V[0][0][i] != yp[i]) fprintf(stdout,"%d-th component in error %14.6E\n",i,V[0][0][i]-yp[i]); } cout << "\nWhen n<0 all rows except the first two should vanish \n"; return 1; } ADOL-C-2.4.1/ADOL-C/examples/additional_examples/scal/Makefile.am0000644000076600007660000000164112032277512022577 0ustar coincoin############################################################################## ## Makefile.am -- Process this file with automake to produce Makefile.in ## Revision: $Id: Makefile.am 354 2012-10-01 11:32:26Z kulshres $ ## ## Copyright (C) Andrea Walther, Andreas Kowarz ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_srcdir)/ADOL-C/include LDADD = -ladolc AM_LDFLAGS = -L$(top_builddir)/ADOL-C/src MAINTAINERCLEANFILES = Makefile.in *~ *.orig if ADDEXA noinst_PROGRAMS = scalexam endif scalexam_SOURCES = scalexam.cpp ADOL-C-2.4.1/ADOL-C/examples/additional_examples/scal/Makefile.in0000644000076600007660000004123012062606346022612 0ustar coincoin# Makefile.in generated by automake 1.12.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @ADDEXA_TRUE@noinst_PROGRAMS = scalexam$(EXEEXT) subdir = ADOL-C/examples/additional_examples/scal DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/autoconf/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_scalexam_OBJECTS = scalexam.$(OBJEXT) scalexam_OBJECTS = $(am_scalexam_OBJECTS) scalexam_LDADD = $(LDADD) scalexam_DEPENDENCIES = AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/ADOL-C/src depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(scalexam_SOURCES) DIST_SOURCES = $(scalexam_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH_FALSE = @ADVBRANCH_FALSE@ ADVBRANCH_TRUE = @ADVBRANCH_TRUE@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF_FALSE = @ATRIG_ERF_FALSE@ ATRIG_ERF_TRUE = @ATRIG_ERF_TRUE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COLPACK_CFLAGS = @COLPACK_CFLAGS@ COLPACK_LIBS = @COLPACK_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_srcdir)/ADOL-C/include LDADD = -ladolc AM_LDFLAGS = -L$(top_builddir)/ADOL-C/src MAINTAINERCLEANFILES = Makefile.in *~ *.orig scalexam_SOURCES = scalexam.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/scal/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/scal/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list scalexam$(EXEEXT): $(scalexam_OBJECTS) $(scalexam_DEPENDENCIES) $(EXTRA_scalexam_DEPENDENCIES) @rm -f scalexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(scalexam_OBJECTS) $(scalexam_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scalexam.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.4.1/ADOL-C/examples/additional_examples/scal/README0000644000076600007660000000144111227416777021436 0ustar coincoin############################################################################## ## README -- additional information ## Revision: $Id: README 299 2009-02-26 09:20:11Z awalther $ ## ## Copyright (C) Andrea Walther, Andreas Griewank, Andreas Kowarz, ## Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## CONTENTS OF THE DIRECTORY scalexam --> Validation of some operations by application to algebraic identities scalexam.cpp ADOL-C-2.4.1/ADOL-C/examples/additional_examples/taylor/0000755000076600007660000000000012120272604021124 5ustar coincoinADOL-C-2.4.1/ADOL-C/examples/additional_examples/taylor/accessexam.cpp0000644000076600007660000001230211452356477023764 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: accessexam.cpp Revision: $Id: accessexam.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: Test driver 'tensor_value(..)' and access of higher order tensors by void pointer strategy Copyright (c) Andrea Walther, Andreas Griewank This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ /****************************************************************************/ /* INCLUDES */ #include #include #include using namespace std; /****************************************************************************/ /* MAIN */ int main() { int i,j,n,m,d,p,dim; /*--------------------------------------------------------------------------*/ cout << "ACCESSEXAM (ADOL-C Example)\n\n"; /* inputs */ cout << " demonstrates accees to higher order " << "partial derivatives (tensors)\n\n"; cout << " Number of independents ?\n "; cin >> n; cout << " Number of dependents (2 <= m <=n) ?\n "; cin >> m; d = 5; cout << " Degree = " << d <<"\n"; cout << " Number of directions ?\n "; cin >> p; /*--------------------------------------------------------------------------*/ int* multi = new int[d]; /* allocations and inits */ double* xp = new double[n]; double* yp = new double[m]; double** S = new double*[n]; double* test = new double[m]; double** tensorhelp; double****** tensor; for (i=0; i>= yp[i] ; trace_off(); /*--------------------------------------------------------------------------*/ dim = binomi(p+d,d); /* tensor_eval */ tensorhelp = myalloc2(n,dim); cout <<" d = "< #include #include using namespace std; /****************************************************************************/ /* MAIN */ int main() { int i,j,m,n,d,p,dim; /*--------------------------------------------------------------------------*/ cout << "TAYLOREXAM (ADOL-C Example)\n\n"; /* inputs */ cout << " Number of indenpendents = ?\n "; cin >> n; cout << " Number of dependents = (<=n) ?\n "; cin >> m; cout << " Degree = ?\n "; cin >> d; cout << " Number of directions = ?\n "; cin >> p; /*--------------------------------------------------------------------------*/ int* multi = new int[d]; /* allocations and inits */ double* xp = new double[n]; double* yp = new double[m]; double** S = new double*[n]; double* test = new double[m]; double** tensoren; adouble* x = new adouble[n]; adouble* y = new adouble[m]; for (i=0; i>= yp[i] ; trace_off(); /*--------------------------------------------------------------------------*/ d = d-1; /* 1. tensor_eval */ dim = binomi(p+d,d); cout <<"TASK 1:\n"; cout <<" d = "< #include /****************************************************************************/ /* MAIN */ int main() { int i,j,n,d,p,dim; /*--------------------------------------------------------------------------*/ printf(" TRIGGER CIRCUIT EXAMPLE (ADOL-C Example)\n\n"); /* inputs */ printf(" # of indeps = 7, # of deps = 7 (fixed)\n"); n = 7; p = 3; d = 4; /*--------------------------------------------------------------------------*/ double* xp = new double[n]; /* allocations and inits */ double* Fhp = new double[n]; double** S = new double*[n]; double** tensoren; int* multi = new int[d]; int* add = new int[5]; for(i=0;i>= Fhp[i]; trace_off(); /*--------------------------------------------------------------------------*/ printf("\n Fh(x,0) = \n ("); /* inverse_tensor_eval */ for(i=0;i #include #include using namespace std; /****************************************************************************/ /* MAIN */ int main() { int i,j,n,d,p,dim; double zp[4]; double gp[2]; double zd[2]; /*--------------------------------------------------------------------------*/ cout << "COORDINATES (ADOL-C Example)\n\n"; /* inputs */ cout << " Cartesian coordinates:\n"; cout << " z_1: (e.g. 4) \n"; cin >> zp[0]; cout << " z_2: (e.g. 3) \n"; cin >> zp[1]; cout << "\n Polar coordinates:\n"; cout << " z_3: (e.g. 5) \n"; cin >> zp[2]; cout << " z_4: (e.g. 0.64350110879) \n"; cin >> zp[3]; cout << "\n Highest derivative degree = 3\n"; /*--------------------------------------------------------------------------*/ /* allocations and inits */ n = 4; p = 2; d = 3; double** S = new double*[n]; double** tensor = new double*[n]; double**** tensorentry; for (i=0; i>= gp[0]; g[1] >>= gp[1]; z[0] >>= zd[0]; z[2] >>= zd[1]; trace_off(); /*--------------------------------------------------------------------------*/ dim = binomi(p+d,d); /* inverse_tensor_eval */ for(i=0;i/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @ADDEXA_TRUE@noinst_PROGRAMS = taylorexam$(EXEEXT) inversexam$(EXEEXT) \ @ADDEXA_TRUE@ accessexam$(EXEEXT) trigger$(EXEEXT) \ @ADDEXA_TRUE@ coordinates$(EXEEXT) subdir = ADOL-C/examples/additional_examples/taylor DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/autoconf/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_accessexam_OBJECTS = accessexam.$(OBJEXT) accessexam_OBJECTS = $(am_accessexam_OBJECTS) accessexam_LDADD = $(LDADD) accessexam_DEPENDENCIES = AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am_coordinates_OBJECTS = coordinates.$(OBJEXT) coordinates_OBJECTS = $(am_coordinates_OBJECTS) coordinates_LDADD = $(LDADD) coordinates_DEPENDENCIES = am_inversexam_OBJECTS = inversexam.$(OBJEXT) inversexam_OBJECTS = $(am_inversexam_OBJECTS) inversexam_LDADD = $(LDADD) inversexam_DEPENDENCIES = am_taylorexam_OBJECTS = taylorexam.$(OBJEXT) taylorexam_OBJECTS = $(am_taylorexam_OBJECTS) taylorexam_LDADD = $(LDADD) taylorexam_DEPENDENCIES = am_trigger_OBJECTS = trigger.$(OBJEXT) trigger_OBJECTS = $(am_trigger_OBJECTS) trigger_LDADD = $(LDADD) trigger_DEPENDENCIES = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/ADOL-C/src depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(accessexam_SOURCES) $(coordinates_SOURCES) \ $(inversexam_SOURCES) $(taylorexam_SOURCES) $(trigger_SOURCES) DIST_SOURCES = $(accessexam_SOURCES) $(coordinates_SOURCES) \ $(inversexam_SOURCES) $(taylorexam_SOURCES) $(trigger_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH_FALSE = @ADVBRANCH_FALSE@ ADVBRANCH_TRUE = @ADVBRANCH_TRUE@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF_FALSE = @ATRIG_ERF_FALSE@ ATRIG_ERF_TRUE = @ATRIG_ERF_TRUE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COLPACK_CFLAGS = @COLPACK_CFLAGS@ COLPACK_LIBS = @COLPACK_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_srcdir)/ADOL-C/include LDADD = -ladolc AM_LDFLAGS = -L$(top_builddir)/ADOL-C/src MAINTAINERCLEANFILES = Makefile.in *~ *.orig taylorexam_SOURCES = taylorexam.cpp inversexam_SOURCES = inversexam.cpp accessexam_SOURCES = accessexam.cpp trigger_SOURCES = trigger.cpp coordinates_SOURCES = coordinates.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/taylor/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/taylor/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list accessexam$(EXEEXT): $(accessexam_OBJECTS) $(accessexam_DEPENDENCIES) $(EXTRA_accessexam_DEPENDENCIES) @rm -f accessexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(accessexam_OBJECTS) $(accessexam_LDADD) $(LIBS) coordinates$(EXEEXT): $(coordinates_OBJECTS) $(coordinates_DEPENDENCIES) $(EXTRA_coordinates_DEPENDENCIES) @rm -f coordinates$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(coordinates_OBJECTS) $(coordinates_LDADD) $(LIBS) inversexam$(EXEEXT): $(inversexam_OBJECTS) $(inversexam_DEPENDENCIES) $(EXTRA_inversexam_DEPENDENCIES) @rm -f inversexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(inversexam_OBJECTS) $(inversexam_LDADD) $(LIBS) taylorexam$(EXEEXT): $(taylorexam_OBJECTS) $(taylorexam_DEPENDENCIES) $(EXTRA_taylorexam_DEPENDENCIES) @rm -f taylorexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(taylorexam_OBJECTS) $(taylorexam_LDADD) $(LIBS) trigger$(EXEEXT): $(trigger_OBJECTS) $(trigger_DEPENDENCIES) $(EXTRA_trigger_DEPENDENCIES) @rm -f trigger$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(trigger_OBJECTS) $(trigger_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/accessexam.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coordinates.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inversexam.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/taylorexam.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trigger.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.4.1/ADOL-C/examples/additional_examples/taylor/README0000644000076600007660000000314511227416777022031 0ustar coincoin############################################################################## ## README -- additional information ## Revision: $Id: README 299 2009-02-26 09:20:11Z awalther $ ## ## Copyright (C) Andrea Walther, Andreas Griewank ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## -------------------------------------------------------------- This directory contains example programs that demonstrate the application of the special ADOL-C drivers tensor_eval(..) and inverse_tensor_eval(..) to compute higher order derivative tensors and how to access the derivative values of the compressed tensors. -------------------------------------------------------------- CONTENTS OF THE DIRECTORY taylorexam --> Evaluation of higher order tensors taylorexam.cpp accessexam --> Access to higher order tensors accessexam.cpp inversexam --> Evaluation of derivatives of inverse functions inversexam.cpp trigger --> Evaluation of derivatives of inverse functions using a trigger circuit model as function trigger.cpp coordinates --> Evaluation of derivatives of inverse functions using transformation between Cartesian and polar coordinates coordinates.cpp ADOL-C-2.4.1/ADOL-C/examples/additional_examples/taylor/inversexam.cpp0000644000076600007660000001277311452356477024045 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: inversexam.cpp Revision: $Id: inversexam.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: Test driver 'inverse_tensor_eval(..)' allows to compute higher order derivatives of inverse functions Copyright (c) Andrea Walther, Andreas Griewank This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ /****************************************************************************/ /* INCLUDES */ #include #include #include using namespace std; /****************************************************************************/ /* MAIN */ int main() { int i,j,n,d,p,dim; /*--------------------------------------------------------------------------*/ cout << "INVERSEXAM (ADOL-C Example)\n\n"; /* inputs */ cout << " Number of independents = ?\n "; cin >> n; // number of dependents = number of independents !! cout << " Degree = ?\n "; cin >> d; cout << " Number of directions = ?\n "; cin >> p; /*--------------------------------------------------------------------------*/ int* multi = new int[d]; /* allocations and inits */ double* xp = new double[n]; double* yp = new double[n]; double** S = new double*[n]; double* test = new double[n]; double** tensoren; adouble* x = new adouble[n]; adouble* y = new adouble[n]; for (i=0; i>= yp[i] ; trace_off(); /*--------------------------------------------------------------------------*/ d = d-1; /* 1. inverse_tensor_eval */ dim = binomi(p+d,d); tensoren = myalloc2(n,dim); cout <<"TASK 1:\n"; cout <<" d = "< #include #include #include #include "adolc.h" /* calculate path values */ template void path_calc(const int N, const int Nmat, const double delta, ADdouble L[], const double lambda[], ADdouble z[]) { int i, n; double lam, con1; ADdouble v, vrat; ADdouble sqez; for(n=0; n void portfolio(const int N, const int Nmat, const double delta, const int Nopt, const int maturities[], const double swaprates[], const ADdouble L[], ADdouble& v ) { int i, m, n; ADdouble b, s, swapval, *B, *S; B = new ADdouble[N]; S = new ADdouble[N]; b = 1.0; s = 0.0; for (n=Nmat; n>= v[i]; trace_off(1); for(i=0;i #include #include #include #include "adolc.h" #ifdef _OPENMP #include #include #endif /* calculate path values */ template void path_calc(const int N, const int Nmat, const double delta, ADdouble L[], const double lambda[], ADdouble z[]) { int i, n; double lam, con1; ADdouble v, vrat; ADdouble sqez; for(n=0; n void portfolio(const int N, const int Nmat, const double delta, const int Nopt, const int maturities[], const double swaprates[], const ADdouble L[], ADdouble& v ) { int i, m, n; ADdouble b, s, swapval, *B, *S; B = new ADdouble[N]; S = new ADdouble[N]; b = 1.0; s = 0.0; for (n=Nmat; n>= v[init]; trace_off(1); for(l=init;l/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @PAREXA_TRUE@noinst_PROGRAMS = liborser$(EXEEXT) liborpar$(EXEEXT) subdir = ADOL-C/examples/additional_examples/openmp_exam DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/autoconf/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_liborpar_OBJECTS = liborpar.$(OBJEXT) liborpar_OBJECTS = $(am_liborpar_OBJECTS) liborpar_LDADD = $(LDADD) liborpar_DEPENDENCIES = AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am_liborser_OBJECTS = liborser.$(OBJEXT) liborser_OBJECTS = $(am_liborser_OBJECTS) liborser_LDADD = $(LDADD) liborser_DEPENDENCIES = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/ADOL-C/src depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(liborpar_SOURCES) $(liborser_SOURCES) DIST_SOURCES = $(liborpar_SOURCES) $(liborser_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH_FALSE = @ADVBRANCH_FALSE@ ADVBRANCH_TRUE = @ADVBRANCH_TRUE@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF_FALSE = @ATRIG_ERF_FALSE@ ATRIG_ERF_TRUE = @ATRIG_ERF_TRUE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COLPACK_CFLAGS = @COLPACK_CFLAGS@ COLPACK_LIBS = @COLPACK_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_srcdir)/ADOL-C/include LDADD = -ladolc AM_LDFLAGS = -L$(top_builddir)/ADOL-C/src MAINTAINERCLEANFILES = Makefile.in *~ *.orig liborser_SOURCES = liborser.cpp liborpar_SOURCES = liborpar.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/openmp_exam/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/openmp_exam/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list liborpar$(EXEEXT): $(liborpar_OBJECTS) $(liborpar_DEPENDENCIES) $(EXTRA_liborpar_DEPENDENCIES) @rm -f liborpar$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(liborpar_OBJECTS) $(liborpar_LDADD) $(LIBS) liborser$(EXEEXT): $(liborser_OBJECTS) $(liborser_DEPENDENCIES) $(EXTRA_liborser_DEPENDENCIES) @rm -f liborser$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(liborser_OBJECTS) $(liborser_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liborpar.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liborser.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.4.1/ADOL-C/examples/additional_examples/openmp_exam/README0000644000076600007660000000237311227416777023031 0ustar coincoin############################################################################## ## README -- additional information ## Revision: $Id: README 268 2008-12-15 10:32:03Z awalther $ ## ## Copyright (C) Andrea Walther ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## -------------------------------------------------------------- This directory contains example programs that perform derivative computation in serial and parallel based on OpenMP parallelization -------------------------------------------------------------- CONTENTS OF THE DIRECTORY liborser --> a simple financial example problem for the computation of greeks function evaluation and derivative calculation is performed serial liborser.cpp liborpar --> a simple financial example problem for the computation of greeks function evaluation and derivative calculation is performed parallel using OpenMP liborpar.cpp ADOL-C-2.4.1/ADOL-C/examples/additional_examples/helm/0000755000076600007660000000000012120272604020537 5ustar coincoinADOL-C-2.4.1/ADOL-C/examples/additional_examples/helm/helm-diff-exam.cpp0000644000076600007660000000707511337033220024035 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: helm-diff-exam.cpp Revision: $Id: helm-diff-exam.cpp 88 2010-02-17 18:33:52Z utke $ Contents: example for Helmholtz energy example Computes gradient using divide differences Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ /****************************************************************************/ /* INCLUDES */ #include #include #include #include /****************************************************************************/ /* CONSTANTS & VARIABLES */ #define delta 0.000001 #define TE 0.01 #define R sqrt(2.0) /****************************************************************************/ /* HELMHOLTZ ENERGY */ double energy( int n, double x[], double bv[] ) { double he, xax, bx, tem; int i,j; xax = 0; bx = 0; he = 0; for (i=0; i #include /****************************************************************************/ /* CONSTANTS & VARIABLES */ const double TE = 0.01; /* originally 0.0 */ const double R = sqrt(2.0); /****************************************************************************/ /* HELMHOLTZ ENERGY */ adouble energy( int n, adouble x[], double bv[] ) { adouble he, xax, bx, tem; int i,j; xax = 0; bx = 0; he = 0; for (i=0; i>= result; trace_off(); fprintf(stdout, "%14.6E -- energy\n",result); /*--------------------------------------------------------------------------*/ reverse(1,1,n,0,1.0,grad); /* reverse computation of gradient */ /*--------------------------------------------------------------------------*/ for (l=0; l/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @ADDEXA_TRUE@noinst_PROGRAMS = helm-auto$(EXEEXT) helm-diff$(EXEEXT) subdir = ADOL-C/examples/additional_examples/helm DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/autoconf/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_helm_auto_OBJECTS = helm-auto-exam.$(OBJEXT) helm_auto_OBJECTS = $(am_helm_auto_OBJECTS) helm_auto_LDADD = $(LDADD) helm_auto_DEPENDENCIES = AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am_helm_diff_OBJECTS = helm-diff-exam.$(OBJEXT) helm_diff_OBJECTS = $(am_helm_diff_OBJECTS) helm_diff_LDADD = $(LDADD) helm_diff_DEPENDENCIES = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/ADOL-C/src depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(helm_auto_SOURCES) $(helm_diff_SOURCES) DIST_SOURCES = $(helm_auto_SOURCES) $(helm_diff_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH_FALSE = @ADVBRANCH_FALSE@ ADVBRANCH_TRUE = @ADVBRANCH_TRUE@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF_FALSE = @ATRIG_ERF_FALSE@ ATRIG_ERF_TRUE = @ATRIG_ERF_TRUE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COLPACK_CFLAGS = @COLPACK_CFLAGS@ COLPACK_LIBS = @COLPACK_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_srcdir)/ADOL-C/include LDADD = -ladolc AM_LDFLAGS = -L$(top_builddir)/ADOL-C/src MAINTAINERCLEANFILES = Makefile.in *~ *.orig helm_auto_SOURCES = helm-auto-exam.cpp helm_diff_SOURCES = helm-diff-exam.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/helm/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/helm/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list helm-auto$(EXEEXT): $(helm_auto_OBJECTS) $(helm_auto_DEPENDENCIES) $(EXTRA_helm_auto_DEPENDENCIES) @rm -f helm-auto$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(helm_auto_OBJECTS) $(helm_auto_LDADD) $(LIBS) helm-diff$(EXEEXT): $(helm_diff_OBJECTS) $(helm_diff_DEPENDENCIES) $(EXTRA_helm_diff_DEPENDENCIES) @rm -f helm-diff$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(helm_diff_OBJECTS) $(helm_diff_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/helm-auto-exam.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/helm-diff-exam.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.4.1/ADOL-C/examples/additional_examples/helm/README0000644000076600007660000000214711227416777021445 0ustar coincoin############################################################################## ## README -- additional information ## Revision: $Id: README 299 2009-02-26 09:20:11Z awalther $ ## ## Copyright (C) Andrea Walther, Andreas Griewank, Andreas Kowarz, ## Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## CONTENTS OF THE DIRECTORY Comparison of different Helmholtz codes --------------------------------------- helm-diff-exam --> Computation of the gradient of the Helmholtz energy function by divided differences helm-diff-exam.cpp helm-auto-exam --> Computation of the gradient of the Helmholtz energy function by automatic differentiation helm-auto-exam.cpp ADOL-C-2.4.1/ADOL-C/examples/additional_examples/sparse/0000755000076600007660000000000012120272604021107 5ustar coincoinADOL-C-2.4.1/ADOL-C/examples/additional_examples/sparse/sparse_hessian.cpp0000644000076600007660000001665711732376410024651 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: sparse_hessian.cpp Revision: $Id: sparse_hessian.cpp 299 2012-03-21 16:08:40Z kulshres $ Contents: example for computation of sparse hessians Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #include #include #include #include #include #define tag 1 double feval(double *x); adouble feval_ad(adouble *x); void printmat(const char* kette, int n, int m, double** M); int main() { int n=6; double f, x[6]; adouble fad, xad[6]; int i, j; /****************************************************************************/ /******* function evaluation ***************/ /****************************************************************************/ for(i=0;i>= f; trace_off(); printf("\n f = %e\n\n\n",f); /****************************************************************************/ /******** For comparisons: Full Hessian ********/ /****************************************************************************/ double **H; H = myalloc2(n,n); hessian(tag,n,x,H); printmat(" H",n,n,H); printf("\n"); /****************************************************************************/ /******* sparse Hessians, complete driver ***************/ /****************************************************************************/ /* coordinate format for Hessian */ unsigned int *rind = NULL; unsigned int *cind = NULL; double *values = NULL; int nnz; int options[2]; options[0] = 0; /* safe mode (default) */ options[1] = 0; /* indirect recovery (default) */ sparse_hess(tag, n, 0, x, &nnz, &rind, &cind, &values, options); printf("In sparse format:\n"); for (i=0;i repeat = 1 */ sparse_hess(tag, n, 0, x, &nnz, &rind, &cind, &values, options); printf("In sparse format:\n"); for (i=0;i/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @ADDEXA_TRUE@@SPARSE_TRUE@noinst_PROGRAMS = sparse_jacobian$(EXEEXT) \ @ADDEXA_TRUE@@SPARSE_TRUE@ sparse_hessian$(EXEEXT) \ @ADDEXA_TRUE@@SPARSE_TRUE@ jacpatexam$(EXEEXT) subdir = ADOL-C/examples/additional_examples/sparse DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/autoconf/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am__jacpatexam_SOURCES_DIST = jacpatexam.cpp \ $(srcdir)/../clock/myclock.cpp @SPARSE_TRUE@am_jacpatexam_OBJECTS = jacpatexam.$(OBJEXT) \ @SPARSE_TRUE@ myclock.$(OBJEXT) jacpatexam_OBJECTS = $(am_jacpatexam_OBJECTS) jacpatexam_LDADD = $(LDADD) jacpatexam_DEPENDENCIES = AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__sparse_hessian_SOURCES_DIST = sparse_hessian.cpp @SPARSE_TRUE@am_sparse_hessian_OBJECTS = sparse_hessian.$(OBJEXT) sparse_hessian_OBJECTS = $(am_sparse_hessian_OBJECTS) sparse_hessian_LDADD = $(LDADD) sparse_hessian_DEPENDENCIES = am__sparse_jacobian_SOURCES_DIST = sparse_jacobian.cpp @SPARSE_TRUE@am_sparse_jacobian_OBJECTS = sparse_jacobian.$(OBJEXT) sparse_jacobian_OBJECTS = $(am_sparse_jacobian_OBJECTS) sparse_jacobian_LDADD = $(LDADD) sparse_jacobian_DEPENDENCIES = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/ADOL-C/src depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(jacpatexam_SOURCES) $(sparse_hessian_SOURCES) \ $(sparse_jacobian_SOURCES) DIST_SOURCES = $(am__jacpatexam_SOURCES_DIST) \ $(am__sparse_hessian_SOURCES_DIST) \ $(am__sparse_jacobian_SOURCES_DIST) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH_FALSE = @ADVBRANCH_FALSE@ ADVBRANCH_TRUE = @ADVBRANCH_TRUE@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF_FALSE = @ATRIG_ERF_FALSE@ ATRIG_ERF_TRUE = @ATRIG_ERF_TRUE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COLPACK_CFLAGS = @COLPACK_CFLAGS@ COLPACK_LIBS = @COLPACK_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_srcdir)/ADOL-C/include LDADD = -ladolc AM_LDFLAGS = -L$(top_builddir)/ADOL-C/src MAINTAINERCLEANFILES = Makefile.in *~ *.orig @SPARSE_TRUE@sparse_jacobian_SOURCES = sparse_jacobian.cpp @SPARSE_TRUE@sparse_hessian_SOURCES = sparse_hessian.cpp @SPARSE_TRUE@jacpatexam_SOURCES = jacpatexam.cpp $(srcdir)/../clock/myclock.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/sparse/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/sparse/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list jacpatexam$(EXEEXT): $(jacpatexam_OBJECTS) $(jacpatexam_DEPENDENCIES) $(EXTRA_jacpatexam_DEPENDENCIES) @rm -f jacpatexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(jacpatexam_OBJECTS) $(jacpatexam_LDADD) $(LIBS) sparse_hessian$(EXEEXT): $(sparse_hessian_OBJECTS) $(sparse_hessian_DEPENDENCIES) $(EXTRA_sparse_hessian_DEPENDENCIES) @rm -f sparse_hessian$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(sparse_hessian_OBJECTS) $(sparse_hessian_LDADD) $(LIBS) sparse_jacobian$(EXEEXT): $(sparse_jacobian_OBJECTS) $(sparse_jacobian_DEPENDENCIES) $(EXTRA_sparse_jacobian_DEPENDENCIES) @rm -f sparse_jacobian$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(sparse_jacobian_OBJECTS) $(sparse_jacobian_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jacpatexam.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/myclock.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sparse_hessian.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sparse_jacobian.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< myclock.o: $(srcdir)/../clock/myclock.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT myclock.o -MD -MP -MF $(DEPDIR)/myclock.Tpo -c -o myclock.o `test -f '$(srcdir)/../clock/myclock.cpp' || echo '$(srcdir)/'`$(srcdir)/../clock/myclock.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/myclock.Tpo $(DEPDIR)/myclock.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$(srcdir)/../clock/myclock.cpp' object='myclock.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o myclock.o `test -f '$(srcdir)/../clock/myclock.cpp' || echo '$(srcdir)/'`$(srcdir)/../clock/myclock.cpp myclock.obj: $(srcdir)/../clock/myclock.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT myclock.obj -MD -MP -MF $(DEPDIR)/myclock.Tpo -c -o myclock.obj `if test -f '$(srcdir)/../clock/myclock.cpp'; then $(CYGPATH_W) '$(srcdir)/../clock/myclock.cpp'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../clock/myclock.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/myclock.Tpo $(DEPDIR)/myclock.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$(srcdir)/../clock/myclock.cpp' object='myclock.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o myclock.obj `if test -f '$(srcdir)/../clock/myclock.cpp'; then $(CYGPATH_W) '$(srcdir)/../clock/myclock.cpp'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../clock/myclock.cpp'; fi` mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.4.1/ADOL-C/examples/additional_examples/sparse/sparse_jacobian.cpp0000644000076600007660000002125311732376410024751 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: sparse_jacobian.cpp Revision: $Id: sparse_jacobian.cpp 299 2012-03-21 16:08:40Z kulshres $ Contents: example for computation of sparse jacobians Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #include #include #include #include #include #define tag 1 void ceval_ad(adouble *x, adouble *c); void ceval(double *x, double *c); void printmat(const char* name, int n, int m, double** M); int main() { int n=6, m=3; double x[6], c[3]; adouble xad[6], cad[3]; int i, j; /****************************************************************************/ /******* function evaluation ***************/ /****************************************************************************/ for(i=0;i>= c[i]; trace_off(); printf("\n c = "); for(j=0;j reverse mode, */ /* sometimes better than forward mode */ /* due to sparsity structure */ sparse_jac(tag, m, n, 0, x, &nnz, &rind, &cind, &values, options); printf("In sparse format (using row compression): \n"); for (i=0;i repeat = 1 */ sparse_jac(tag, m, n, 1, x, &nnz, &rind, &cind, &values, options); printf("In sparse format:\n"); for (i=0;i reverse mode, */ /* sometimes better than forward mode */ /* due to sparsity structure */ sparse_jac(tag, m, n, 0, x, &nnz, &rind, &cind, &values, options); printf("In sparse format (using row compression): \n"); for (i=0;i Example to illustrate the use of sparse_jac(..), jac_pat(..), generate_seed_jac(..), sparse_jacobian.cpp sparse_hessian --> Example to illustrate the use of sparse_hess(..), hess_pat(..), generate_seed_hess(..) sparse_hessian.cpp jacpatexam --> Example to validate jac_pat(..) and the underlying forward/reverse calls jacpatexam.cpp NOTE: this example program makes use of the clock utility provided in subdirectory ../clock. ADOL-C-2.4.1/ADOL-C/examples/additional_examples/sparse/jacpatexam.cpp0000644000076600007660000004773311732376410023756 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: jacpatexam.cpp Revision: $Id: jacpatexam.cpp 299 2012-03-21 16:08:40Z kulshres $ Contents: example for computation of jacobian sparsity pattern Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ /****************************************************************************/ /* INCLUDES */ #include #include #include "../clock/myclock.h" #include #include #include using namespace std; /****************************************************************************/ /* DEFINES */ #define TAG 11 /****************************************************************************/ /* EVALUATION FUNCTIONS */ /*--------------------------------------------------------------------------*/ const unsigned int N = 5, M = 6; void eval_small(short tag, double *xp, double *yp) { unsigned int i,j; trace_on(tag); adouble *x,*y; x = new adouble[N]; y = new adouble[M]; for (i=0;i>= yp[j]; delete []x; delete []y; trace_off(1); // force a numbered tape file to be written cout << "\nproblem definition in "<<__FILE__<<", lines "<>= yp[j]; delete []x; delete []y; trace_off(1); // force a numbered tape file to be written cout << "\nproblem definition in "<<__FILE__<<", lines "<> choice ; cout << "\n\nOutput Jacobian pattern? (y/n) ?\b"; cin >> outp; cout << "\n\nCompare with the full Jacobian calculation? (y/n) ?\b"; cin >> full_jac; if (( full_jac == 'y' ) || ( full_jac == 'Y')) full_jac = 1; else full_jac = 0; cout << "----------------------------------------------------------------\n"; /*--------------------------------------------------------------------------*/ if ( choice < 0 ) // Take function in the "eval(...)" routines ------------- { if ( choice > -4 ) { base = new double[N]; for (i=0;i= 0 ) : Take a written tape ------------------------------ { tag = choice; cout << "\nproblem definition in tape "<> basepoint; base = new double[indep]; value = new double[depen]; for (i=0;i maxnz ) maxnz = jacpat[i][0]; } nz_rel = (int) ceil (100*nz / ((double)depen*indep)); cout << nz << " non-zero Jacobian elements of total " << depen*indep << " elements <= " << nz_rel << "%\n"; cout << "min " << minnz << " non-zeros per row; max " << maxnz << " non-zeros per row;\n"; nzref = nz; for (i=0;i maxnz ) maxnz = jacpat[i][0]; } nz_rel = (int) ceil (100*nz / ((double)depen*indep)); cout << nz << " non-zero Jacobian elements of total " << depen*indep << " elements <= " << nz_rel << "%\n"; cout << "min " << minnz << " non-zeros per row; max " << maxnz << " non-zeros per row;\n"; if ( nz != nzref ) cout << "\n\n!!! This method found a different number of non-zeros !!!\n\n"; cout << "\n\n\n"; for (i=0;i maxnz ) maxnz = jacpat[i][0]; } nz_rel = (int) ceil (100*nz / ((double)depen*indep)); cout << nz << " non-zero Jacobian elements of total " << depen*indep << " elements <= " << nz_rel << "%\n"; cout << "min " << minnz << " non-zeros per row; max " << maxnz << " non-zeros per row;\n"; if ( nz != nzref ) cout << "\n\n!!! This method found a different number of non-zeros !!!\n\n"; for (i=0;i maxnz ) maxnz = jacpat[i][0]; } nz_rel = (int) ceil (100*nz / ((double)depen*indep)); cout << nz << " non-zero Jacobian elements of total " << depen*indep << " elements <= " << nz_rel << "%\n"; cout << "min " << minnz << " non-zeros per row; max " << maxnz << " non-zeros per row;\n"; if ( nz != nzref ) cout << "\n\n!!! This method found a different number of non-zeros !!!\n\n"; cout << "\n\n\n"; for (i=0;i maxnz ) maxnz = jacpat[i][0]; } nz_rel = (int) ceil (100*nz / ((double)depen*indep)); cout << nz << " non-zero Jacobian elements of total " << depen*indep << " elements <= " << nz_rel << "%\n"; cout << "min " << minnz << " non-zeros per row; max " << maxnz << " non-zeros per row;\n"; if ( nz != nzref ) cout << "\n\n!!! This method found a different number of non-zeros !!!\n\n"; for (i=0;i maxnz ) maxnz = jacpat[i][0]; } nz_rel = (int) ceil (100*nz / ((double)depen*indep)); cout << nz << " non-zero Jacobian elements of total " << depen*indep << " elements <= " << nz_rel << "%\n"; cout << "min " << minnz << " non-zeros per row; max " << maxnz << " non-zeros per row;\n"; if ( nz != nzref ) cout << "\n\n!!! This method found a different number of non-zeros !!!\n\n"; cout << "\n\n\n"; for (i=0;i nosparse Win32 nosparse x64 sparse Win32 sparse x64 Win32Proj Application true Application true Application false Application false true true true true WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) $(ProjectDir)..;%(AdditionalIncludeDirectories) MultiThreadedDebugDLL Level3 ProgramDatabase Disabled MachineX86 true Console WIN64;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) $(ProjectDir)..;%(AdditionalIncludeDirectories) MultiThreadedDebugDLL Level3 ProgramDatabase Disabled true Console WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) $(ProjectDir)..;%(AdditionalIncludeDirectories) MultiThreadedDLL Level3 ProgramDatabase MachineX86 true Console true true WIN64;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) $(ProjectDir)..;%(AdditionalIncludeDirectories) MultiThreadedDLL Level3 ProgramDatabase true Console true true {8bfbd9f9-2efe-2966-8961-46a7ed1320fe} true true true true false {43459339-26da-b162-0783-4ed235513520} ADOL-C-2.4.1/ADOL-C/examples/tapeless_scalar.cpp0000644000076600007660000000374311452356477017506 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: tapeless_scalar.cpp Revision: $Id: tapeless_scalar.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: computation of coordinate transform, scalar tapeless forward mode described in the manual Copyright (c) Andrea Walther, Andreas Kowarz This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ /****************************************************************************/ /* INCLUDES */ #include using namespace std; #define ADOLC_TAPELESS #include typedef adtl::adouble adouble; int main(int argc, char *argv[]) { adouble x[3], y[3]; for (int i=0; i<3;++i) // Initialize x_i x[i] = i + 1.0; cout << endl << "Compute transform from Cartesian to spherical polar coordinates" << endl << endl; // derivative of y with respect to x0 x[0].setADValue(1); y[0] = sqrt(x[0]*x[0]+x[1]*x[1]+x[2]*x[2]); y[1] = atan(sqrt(x[0]*x[0]+x[1]*x[1])/x[2]); y[2] = atan(x[1]/x[0]); cout << "cartesian coordinates: " << endl; cout << "x[0] = " << x[0].getValue() << " x[1] = " << x[1].getValue() << " x[2] = " << x[2].getValue() << endl << endl; cout << "cpherical polar coordinates: " << endl; cout << "y[0] = " << y[0].getValue() << " y[1] = " << y[1].getValue() << " y[2] = " << y[2].getValue() << endl < nosparse Win32 nosparse x64 sparse Win32 sparse x64 Win32Proj Application true Application true Application false Application false true true true true WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) $(ProjectDir)..;%(AdditionalIncludeDirectories) MultiThreadedDebugDLL Level3 ProgramDatabase Disabled MachineX86 true Console WIN64;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) $(ProjectDir)..;%(AdditionalIncludeDirectories) MultiThreadedDebugDLL Level3 ProgramDatabase Disabled true Console WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) $(ProjectDir)..;%(AdditionalIncludeDirectories) MultiThreadedDLL Level3 ProgramDatabase MachineX86 true Console true true WIN64;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) $(ProjectDir)..;%(AdditionalIncludeDirectories) MultiThreadedDLL Level3 ProgramDatabase true Console true true {8bfbd9f9-2efe-2966-8961-46a7ed1320fe} true true true true false {43459339-26da-b162-0783-4ed235513520} ADOL-C-2.4.1/ADOL-C/examples/Makefile.am0000644000076600007660000000322412032277512015646 0ustar coincoin############################################################################## ## Makefile.am -- Process this file with automake to produce Makefile.in ## Revision: $Id: Makefile.am 354 2012-10-01 11:32:26Z kulshres $ ## ## Copyright (C) Andrea Walther, Andreas Kowarz ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_srcdir)/ADOL-C/include LDADD = -ladolc AM_LDFLAGS = -L$(top_builddir)/ADOL-C/src MAINTAINERCLEANFILES = Makefile.in *~ *.orig ADOLC-*.tap EXTRA_DIST = adolc_examples.sln \ detexam.vcxproj speelpenning.vcxproj odexam.vcxproj \ tapeless_scalar.vcxproj tapeless_vector.vcxproj \ Readme_VC++.txt if ADDEXA SUBDIRS = additional_examples endif if PAREXA SUBDIRS = additional_examples endif if DOCEXA noinst_PROGRAMS = detexam speelpenning powexam odexam luexam \ tapeless_scalar tapeless_vector endif detexam_SOURCES = detexam.cpp speelpenning_SOURCES = speelpenning.cpp powexam_SOURCES = powexam.cpp odexam_SOURCES = odexam.cpp luexam_SOURCES = luexam.cpp tapeless_scalar_SOURCES = tapeless_scalar.cpp tapeless_vector_SOURCES = tapeless_vector.cpp ADOL-C-2.4.1/ADOL-C/examples/Readme_VC++.txt0000644000076600007660000000045611412425466016276 0ustar coincoinIn order to compile the examples with Visual studio use the solution file adolc_examples.sln. This solution builds all 6 documented examples. Individual examples may be build using their own project file. The project file from windows/adolc.vcxproj must be added as a Reference for linking correctly. ADOL-C-2.4.1/ADOL-C/examples/tapeless_vector.cpp0000644000076600007660000000407711452356477017544 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: tapeless_vector.cpp Revision: $Id: tapeless_vector.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: computation of coordinate transform, vector tapeless forward mode described in the manual Copyright (c) Andrea Walther, Andreas Kowarz This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ /****************************************************************************/ /* INCLUDES */ #include using namespace std; #define ADOLC_TAPELESS #define NUMBER_DIRECTIONS 3 #include typedef adtl::adouble adouble; ADOLC_TAPELESS_UNIQUE_INTERNALS int main(int argc, char *argv[]) { adouble x[3], y[3]; for (int i=0; i<3;++i) // Initialize x_i { x[i] = i + 1.0; for (int j=0; j<3;++j) if (i==j) x[i].setADValue(j,1); } cout << endl << "Transform from Cartesian to spherical polar coordinates" << endl << endl; y[0] = sqrt(x[0]*x[0]+x[1]*x[1]+x[2]*x[2]); y[1] = atan(sqrt(x[0]*x[0]+x[1]*x[1])/x[2]); y[2] = atan(x[1]/x[0]); cout << "cartesian coordinates: " << endl; cout << "x[0] = " << x[0].getValue() << " x[1] = " << x[1].getValue() << " x[2] = " << x[2].getValue() << endl << endl; cout << "cpherical polar coordinates: " << endl; cout << "y[0] = " << y[0].getValue() << " y[1] = " << y[1].getValue() << " y[2] = " << y[2].getValue() << endl < nosparse Win32 nosparse x64 sparse Win32 sparse x64 Win32Proj Application true Application true Application false Application false true true true true WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) $(ProjectDir)..;%(AdditionalIncludeDirectories) MultiThreadedDebugDLL Level3 ProgramDatabase Disabled MachineX86 true Console WIN64;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) $(ProjectDir)..;%(AdditionalIncludeDirectories) MultiThreadedDebugDLL Level3 ProgramDatabase Disabled true Console WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) $(ProjectDir)..;%(AdditionalIncludeDirectories) MultiThreadedDLL Level3 ProgramDatabase MachineX86 true Console true true WIN64;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) $(ProjectDir)..;%(AdditionalIncludeDirectories) MultiThreadedDLL Level3 ProgramDatabase true Console true true {8bfbd9f9-2efe-2966-8961-46a7ed1320fe} true true true true false {43459339-26da-b162-0783-4ed235513520} true true true true false ADOL-C-2.4.1/ADOL-C/examples/speelpenning.vcxproj0000644000076600007660000001733711732412364017732 0ustar coincoin nosparse Win32 nosparse x64 sparse Win32 sparse x64 Win32Proj Application true Application true Application false Application false true true true true WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) $(ProjectDir)..;%(AdditionalIncludeDirectories) MultiThreadedDebugDLL Level3 ProgramDatabase Disabled MachineX86 true Console WIN64;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) $(ProjectDir)..;%(AdditionalIncludeDirectories) MultiThreadedDebugDLL Level3 ProgramDatabase Disabled true Console WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) $(ProjectDir)..;%(AdditionalIncludeDirectories) MultiThreadedDLL Level3 ProgramDatabase MachineX86 true Console true true WIN64;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) $(ProjectDir)..;%(AdditionalIncludeDirectories) MultiThreadedDLL Level3 ProgramDatabase true Console true true {8bfbd9f9-2efe-2966-8961-46a7ed1320fe} true true true true false {43459339-26da-b162-0783-4ed235513520} ADOL-C-2.4.1/ADOL-C/examples/Makefile.in0000644000076600007660000006302112062606346015664 0ustar coincoin# Makefile.in generated by automake 1.12.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @DOCEXA_TRUE@noinst_PROGRAMS = detexam$(EXEEXT) speelpenning$(EXEEXT) \ @DOCEXA_TRUE@ powexam$(EXEEXT) odexam$(EXEEXT) luexam$(EXEEXT) \ @DOCEXA_TRUE@ tapeless_scalar$(EXEEXT) tapeless_vector$(EXEEXT) subdir = ADOL-C/examples DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/autoconf/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_detexam_OBJECTS = detexam.$(OBJEXT) detexam_OBJECTS = $(am_detexam_OBJECTS) detexam_LDADD = $(LDADD) detexam_DEPENDENCIES = AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am_luexam_OBJECTS = luexam.$(OBJEXT) luexam_OBJECTS = $(am_luexam_OBJECTS) luexam_LDADD = $(LDADD) luexam_DEPENDENCIES = am_odexam_OBJECTS = odexam.$(OBJEXT) odexam_OBJECTS = $(am_odexam_OBJECTS) odexam_LDADD = $(LDADD) odexam_DEPENDENCIES = am_powexam_OBJECTS = powexam.$(OBJEXT) powexam_OBJECTS = $(am_powexam_OBJECTS) powexam_LDADD = $(LDADD) powexam_DEPENDENCIES = am_speelpenning_OBJECTS = speelpenning.$(OBJEXT) speelpenning_OBJECTS = $(am_speelpenning_OBJECTS) speelpenning_LDADD = $(LDADD) speelpenning_DEPENDENCIES = am_tapeless_scalar_OBJECTS = tapeless_scalar.$(OBJEXT) tapeless_scalar_OBJECTS = $(am_tapeless_scalar_OBJECTS) tapeless_scalar_LDADD = $(LDADD) tapeless_scalar_DEPENDENCIES = am_tapeless_vector_OBJECTS = tapeless_vector.$(OBJEXT) tapeless_vector_OBJECTS = $(am_tapeless_vector_OBJECTS) tapeless_vector_LDADD = $(LDADD) tapeless_vector_DEPENDENCIES = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/ADOL-C/src depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(detexam_SOURCES) $(luexam_SOURCES) $(odexam_SOURCES) \ $(powexam_SOURCES) $(speelpenning_SOURCES) \ $(tapeless_scalar_SOURCES) $(tapeless_vector_SOURCES) DIST_SOURCES = $(detexam_SOURCES) $(luexam_SOURCES) $(odexam_SOURCES) \ $(powexam_SOURCES) $(speelpenning_SOURCES) \ $(tapeless_scalar_SOURCES) $(tapeless_vector_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = additional_examples DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH_FALSE = @ADVBRANCH_FALSE@ ADVBRANCH_TRUE = @ADVBRANCH_TRUE@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF_FALSE = @ATRIG_ERF_FALSE@ ATRIG_ERF_TRUE = @ATRIG_ERF_TRUE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COLPACK_CFLAGS = @COLPACK_CFLAGS@ COLPACK_LIBS = @COLPACK_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_srcdir)/ADOL-C/include LDADD = -ladolc AM_LDFLAGS = -L$(top_builddir)/ADOL-C/src MAINTAINERCLEANFILES = Makefile.in *~ *.orig ADOLC-*.tap EXTRA_DIST = adolc_examples.sln \ detexam.vcxproj speelpenning.vcxproj odexam.vcxproj \ tapeless_scalar.vcxproj tapeless_vector.vcxproj \ Readme_VC++.txt @ADDEXA_TRUE@SUBDIRS = additional_examples @PAREXA_TRUE@SUBDIRS = additional_examples detexam_SOURCES = detexam.cpp speelpenning_SOURCES = speelpenning.cpp powexam_SOURCES = powexam.cpp odexam_SOURCES = odexam.cpp luexam_SOURCES = luexam.cpp tapeless_scalar_SOURCES = tapeless_scalar.cpp tapeless_vector_SOURCES = tapeless_vector.cpp all: all-recursive .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/examples/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/examples/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list detexam$(EXEEXT): $(detexam_OBJECTS) $(detexam_DEPENDENCIES) $(EXTRA_detexam_DEPENDENCIES) @rm -f detexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(detexam_OBJECTS) $(detexam_LDADD) $(LIBS) luexam$(EXEEXT): $(luexam_OBJECTS) $(luexam_DEPENDENCIES) $(EXTRA_luexam_DEPENDENCIES) @rm -f luexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(luexam_OBJECTS) $(luexam_LDADD) $(LIBS) odexam$(EXEEXT): $(odexam_OBJECTS) $(odexam_DEPENDENCIES) $(EXTRA_odexam_DEPENDENCIES) @rm -f odexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(odexam_OBJECTS) $(odexam_LDADD) $(LIBS) powexam$(EXEEXT): $(powexam_OBJECTS) $(powexam_DEPENDENCIES) $(EXTRA_powexam_DEPENDENCIES) @rm -f powexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(powexam_OBJECTS) $(powexam_LDADD) $(LIBS) speelpenning$(EXEEXT): $(speelpenning_OBJECTS) $(speelpenning_DEPENDENCIES) $(EXTRA_speelpenning_DEPENDENCIES) @rm -f speelpenning$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(speelpenning_OBJECTS) $(speelpenning_LDADD) $(LIBS) tapeless_scalar$(EXEEXT): $(tapeless_scalar_OBJECTS) $(tapeless_scalar_DEPENDENCIES) $(EXTRA_tapeless_scalar_DEPENDENCIES) @rm -f tapeless_scalar$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(tapeless_scalar_OBJECTS) $(tapeless_scalar_LDADD) $(LIBS) tapeless_vector$(EXEEXT): $(tapeless_vector_OBJECTS) $(tapeless_vector_DEPENDENCIES) $(EXTRA_tapeless_vector_DEPENDENCIES) @rm -f tapeless_vector$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(tapeless_vector_OBJECTS) $(tapeless_vector_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/detexam.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/luexam.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/odexam.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/powexam.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/speelpenning.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tapeless_scalar.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tapeless_vector.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done cscopelist-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(PROGRAMS) installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) \ cscopelist-recursive ctags-recursive install-am install-strip \ tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ clean-noinstPROGRAMS cscopelist cscopelist-recursive ctags \ ctags-recursive distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-recursive uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.4.1/ADOL-C/examples/odexam.vcxproj0000644000076600007660000002034711732412364016513 0ustar coincoin nosparse Win32 nosparse x64 sparse Win32 sparse x64 Win32Proj Application true Application true Application false Application false true true true true WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) $(ProjectDir)..;%(AdditionalIncludeDirectories) MultiThreadedDebugDLL Level3 ProgramDatabase Disabled MachineX86 true Console WIN64;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) $(ProjectDir)..;%(AdditionalIncludeDirectories) MultiThreadedDebugDLL Level3 ProgramDatabase Disabled true Console WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) $(ProjectDir)..;%(AdditionalIncludeDirectories) MultiThreadedDLL Level3 ProgramDatabase MachineX86 true Console true true WIN64;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) $(ProjectDir)..;%(AdditionalIncludeDirectories) MultiThreadedDLL Level3 ProgramDatabase true Console true true $(ProjectDir)..\src;%(AdditionalIncludeDirectories) $(ProjectDir)..\src;%(AdditionalIncludeDirectories) {8bfbd9f9-2efe-2966-8961-46a7ed1320fe} true true true true false {43459339-26da-b162-0783-4ed235513520} ADOL-C-2.4.1/ADOL-C/examples/tapeless_vector.vcxproj0000644000076600007660000001734211732412364020441 0ustar coincoin nosparse Win32 nosparse x64 sparse Win32 sparse x64 Win32Proj Application true Application true Application false Application false true true true true WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) $(ProjectDir)..;%(AdditionalIncludeDirectories) MultiThreadedDebugDLL Level3 ProgramDatabase Disabled MachineX86 true Console WIN64;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) $(ProjectDir)..;%(AdditionalIncludeDirectories) MultiThreadedDebugDLL Level3 ProgramDatabase Disabled true Console WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) $(ProjectDir)..;%(AdditionalIncludeDirectories) MultiThreadedDLL Level3 ProgramDatabase MachineX86 true Console true true WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) $(ProjectDir)..;%(AdditionalIncludeDirectories) MultiThreadedDLL Level3 ProgramDatabase true Console true true {8bfbd9f9-2efe-2966-8961-46a7ed1320fe} true true true true false {43459339-26da-b162-0783-4ed235513520} ADOL-C-2.4.1/ADOL-C/examples/README0000644000076600007660000000272311227416777014512 0ustar coincoin############################################################################## ## README -- additional information ## Revision: $Id: README 295 2009-02-25 13:32:25Z awalther $ ## ## Copyright (C) Andrea Walther, Andreas Griewank, Andreas Kowarz, ## Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## -------------------------------------------------------------- The directory contains the examples described in the manual The subdirectory additional_examples contains further example code for numerous drivers and applications of ADOL-C -------------------------------------------------------------- CONTENTS OF THE DIRECTORY detexam.cpp ---> Computation of determinants speelpenning.cpp ---> Speelpenning's product powexam.cpp ---> Computation of n-th power odexam.cpp ---> Nonlinear ordinary differential equation based on the Robertson test problem tapeless_scalar.cpp ---> coordinate transform with tapeless scalar forward mode tapeless_vector.cpp ---> coordinate with tapeless vector forward mode ADOL-C-2.4.1/ADOL-C/examples/luexam.cpp0000644000076600007660000001746112007757165015632 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: luexam.cpp Revision: $Id$ Contents: computation of LU factorization with pivoting Copyright (c) Kshitij Kulshreshtha This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #include #include #include #include #include #include #include #include #include #include adouble findmaxindex(const size_t n, const advector& col, const size_t k) { adouble idx = k; for (size_t j = k + 1; j < n; j++ ) condassign(idx,(fabs(col[j]) - fabs(col[idx])), adouble((double)j)); return idx; } // Assuming A is stored row-wise in the vector void lufactorize(const size_t n, advector& A, advector& p) { adouble idx, tmp; for (size_t j = 0; j < n; j++) p[j] = j; for (size_t k = 0; k < n; k++) { advector column(n); for(size_t j = 0; j < n; j++) condassign(column[j], adouble(double(j - k + 1)), A[j*n + k]); idx = findmaxindex(n, column, k); tmp = p[k]; p[k] = p[idx]; p[idx] = tmp; for(size_t j = 0; j < n; j++) { tmp = A[k*n + j]; A[k*n + j] = A[idx*n + j]; A[idx*n + j] = tmp; } tmp = 1.0/A[k*n + k]; for (size_t i = k + 1; i < n; i++) { A[i*n + k] *= tmp; for (size_t j = k + 1; j < n; j++) { A[i*n + j] -= A[i*n + k] * A[k*n+j]; } } } } void Lsolve(const size_t n, const advector& A, const advector& p, advector& b, advector& x) { for (size_t j = 0; j < n; j++) { x[j] = b[p[j]]; for (size_t k = j+1; k = i) outf << setw(8) << A[i*n + j].value() << " "; else outf << setw(8) << 0.0 << " "; outf << "\n"; } } double norm2(const double *const v, const size_t n) { size_t j; double abs,scale,sum; scale=0.0; sum=0.0; for (j=0; j> n; cout << "---------------------------------\nNow tracing:\n"; rhs = new double[n*n + n]; mat = rhs + n; ans = new double[n]; cout << "file name for matrix = ?\n"; cin >> matrixname; cout << "file name for rhs = ?\n"; cin >> rhsname; matf.open(matrixname.c_str()); for (size_t i = 0; i < n*n; i++) matf >> mat[i]; matf.close(); rhsf.open(rhsname.c_str()); for (size_t i = 0; i < n; i++) rhsf >> rhs[i]; rhsf.close(); { trace_on(tag,keep); // tag=1=keep advector A(n*n), b(n), x(n), p(n); for(size_t i = 0; i < n; i++) b[i] <<= rhs[i]; for(size_t i = 0; i < n*n; i++) A[i] <<= mat[i]; lufactorize(n, A, p); Lsolve(n, A, p, b, x); Rsolve(n, A, x); for(size_t i = 0; i < n; i++) x[i] >>= ans[i]; trace_off(); } err = normresidue(mat, n, rhs, n, ans); normb = norm2(rhs, n); normx = norm2(ans, n); cout << "Norm rhs = " << normb <<"\n"; cout << "Norm solution = " << normx <<"\n"; cout << "Norm of residue = " << err <<"\t relative error = " << err/normx << "\n"; cout << "---------------------------------\nNow computing from trace:\n"; cout << "file name for matrix = ?\n"; cin >> matrixname; cout << "file name for rhs = ?\n"; cin >> rhsname; matf.open(matrixname.c_str()); for (size_t i = 0; i < n*n; i++) matf >> mat[i]; matf.close(); rhsf.open(rhsname.c_str()); for (size_t i = 0; i < n; i++) rhsf >> rhs[i]; rhsf.close(); zos_forward(tag, n, n*n + n, keep, rhs, ans); err = normresidue(mat, n, rhs, n, ans); normb = norm2(rhs, n); normx = norm2(ans, n); cout << "Norm rhs = " << normb <<"\n"; cout << "Norm solution = " << normx <<"\n"; cout << "Norm of residue = " << err <<"\t relative error = " << err/normx <<"\n"; double *ansbar = new double[n]; double *matcol = new double[n]; double *rhsbar = new double[n*n+n]; double *matbar = rhsbar + n; double scprod = 0.0; memset(rhsbar, 0, (n*n+n)*sizeof(double)); memset(ansbar, 0, n*sizeof(double)); for (size_t k = 0; k < n; k++) { cout << "computing gradient of element " << k + 1 << " of solution w.r.t. matrix elements and rhs\n"; ansbar[k] = 1.0; fos_reverse(tag, n, n*n+n, ansbar, rhsbar); for (size_t i = 0; i < n*n + n; i++) cout << "bar[" << i << "] = " << rhsbar[i] << "\n"; for (size_t j = 0; j < n; j++) { for (size_t i = 0; i < n; i++) matcol[i] = mat[i*n + j]; scprod = scalar(rhsbar, matcol, n); cout << "gradient w.r.t. rhs times column " << j + 1 << " of matrix = " << scprod << "\n"; } ansbar[k] = 0.0; } delete[] ansbar; delete[] matcol; delete[] rhsbar; delete[] rhs; delete[] ans; } ADOL-C-2.4.1/ADOL-C/examples/odexam.cpp0000644000076600007660000000720011452356477015606 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: odexam.cpp Revision: $Id: odexam.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: Nonlinear ordinary differential equation based on the Robertson test problem, described in the manual Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ /****************************************************************************/ /* INCLUDES */ #include // use of active double #include // use of "Easy To Use" ODE drivers #include // use of ADOL-C allocation utilities #include // use of taping // NOTICE: If one wants to include all ADOL-C interfaces without // getting in trouble to find out the right header files // // #include "adolc/adolc.h" // // will do the right work. #include using namespace std; /****************************************************************************/ /* ADOUBLE ROUTINE */ void tracerhs(short int tag, double* py, double* pyprime) { adouble y[3]; // we left the parameters passive adouble yprime[3]; trace_on(tag); y[0] <<= py[0]; y[1] <<= py[1]; y[2] <<= py[2]; // initialize and mark independents yprime[0] = -sin(y[2]) + 1.0e8*y[2]*(1.0-1.0/y[0]); yprime[1] = -10.0*y[0] + 3.0e7*y[2]*(1-y[1]); yprime[2] = -yprime[0] - yprime[1]; yprime[0] >>= pyprime[0]; yprime[1] >>= pyprime[1]; yprime[2] >>= pyprime[2]; // mark and pass dependents trace_off(1); // write tape array onto a file } // end tracerhs /****************************************************************************/ /* MAIN PROGRAM */ int main() { int i,j,deg; int n = 3; double py[3]; double pyp[3]; cout << "MODIFIED ROBERTSON TEST PROBLEM (ADOL-C Documented Example)\n\n"; cout << "degree of Taylor series =?\n"; cin >> deg; short** nz = new short*[n]; double **X; double ***Z; double ***B; X = myalloc2(n,deg+1); Z = myalloc3(n,n,deg); B = myalloc3(n,n,deg); for(i=0; i 1 ]]; then case $2 in win32|Win32) conf=$1 arch=. cf=$1_win32 ;; x64) conf=x64/$1 arch=x64 cf=$1_x64 ;; esac else conf=$1 arch=. cf=$1_win32 fi mkdir -p tmp mkdir -p tmp/bin for i in ${NAMES[*]} ; do cp $conf/$i.exe tmp/bin done cd tmp zip -r ../adolc_examples_$cf.zip ./ cd .. rm -rf tmp ADOL-C-2.4.1/ADOL-C/Makefile.am0000644000076600007660000000165212032277512014033 0ustar coincoin############################################################################## ## Makefile.am -- Process this file with automake to produce Makefile.in ## Revision: $Id: Makefile.am 38 2009-06-17 15:48:09Z awalther $ ## ## Copyright (C) Andrea Walther, Andreas Kowarz, Kshitij Kulshreshtha ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## AUTOMAKE_OPTIONS = foreign if DOCEXA SUBDIRS = src examples test else if ADDEXA SUBDIRS = src examples test else if PAREXA SUBDIRS = src examples test else SUBDIRS = src test endif endif endif SUBDIRS += include MAINTAINERCLEANFILES = Makefile.in test: all cd test; $(MAKE) test ADOL-C-2.4.1/ADOL-C/src/0000755000076600007660000000000012120272604012555 5ustar coincoinADOL-C-2.4.1/ADOL-C/src/hov_wk_forward.c0000644000076600007660000000132311227420735015750 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: hov_wk_forward.c Revision: $Id: hov_wk_forward.c 42 2009-07-15 18:37:17Z awalther $ Contents: hov_wk_forward (higher-order-vector forward mode with keep) Copyright (c) Andrea Walther This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #define _HOV_WK_ 1 #define _KEEP_ 1 #include #undef _KEEP_ #undef _HOV_WK_ ADOL-C-2.4.1/ADOL-C/src/malloc.h0000644000076600007660000000471211412425466014212 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: malloc.h Revision: $Id: malloc.h 106 2010-06-29 17:19:50Z kulshres $ Contents: malloc replacements for not gnu compatible malloc system functions Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_MALLOC_H) # define ADOLC_MALLOC_H 1 # if defined(ADOLC_INTERNAL) # if defined(HAVE_CONFIG_H) # include "config.h" # undef ADOLC_NO_MALLOC # undef ADOLC_NO_REALLOC # if !defined(HAVE_MALLOC) # define ADOLC_NO_MALLOC 1 # else # if (HAVE_MALLOC == 0) # define ADOLC_NO_MALLOC 1 # endif /* HAVE_MALLOC == 0 */ # endif /* HAVE_MALLOC */ # if !defined(HAVE_REALLOC) # define ADOLC_NO_REALLOC 1 # else # if (HAVE_REALLOC == 0) # define ADOLC_NO_REALLOC 1 # endif /* HAVE_REALLOC == 0 */ # endif /* HAVE_REALLOC */ # if defined(ADOLC_NO_MALLOC) # include # if defined(__cplusplus) extern "C" { # endif /* __cplusplus */ # undef rpl_malloc # undef rpl_calloc extern void *rpl_malloc(size_t); extern void *rpl_calloc(size_t, size_t); # if defined(__cplusplus) } # endif /* __cplusplus */ # endif /* ADOLC_NO_MALLOC */ # if defined(ADOLC_NO_REALLOC) # include # if defined(__cplusplus) extern "C" { # endif /* __cplusplus */ # undef rpl_realloc extern void *rpl_realloc(void *, size_t); # if defined(__cplusplus) } # endif /* __cplusplus */ # endif /* ADOLC_NO_REALLOC */ # endif /* HAVE_CONFIG_H */ # endif /* ADOLC_INTERNAL */ #endif /* ADOLC_MALLOC_H */ ADOL-C-2.4.1/ADOL-C/src/hos_ov_reverse.c0000644000076600007660000000126311227420735015762 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: drivers/drivers.h Revision: $Id: hos_ov_reverse.c 42 2009-07-15 18:37:17Z awalther $ Contents: hos_ov_reverse (higher-order-scalar reverse mode on vectors) Copyright (c) Andrea Walther This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #define _HOS_OV_ 1 #include #undef _HOS_OV_ ADOL-C-2.4.1/ADOL-C/src/adalloc.c0000644000076600007660000001657312051153463014340 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: adalloc.c Revision: $Id: adalloc.c 364 2012-11-15 11:51:15Z kulshres $ Contents: C allocation of arrays of doubles in several dimensions Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #include #if defined(ADOLC_USE_CALLOC) # if defined(HAVE_MALLOC) # define ADOLC_MALLOC(n,m) calloc(n,m) # else # define ADOLC_MALLOC(n,m) rpl_calloc(n,m) # endif #else # if defined(HAVE_MALLOC) # define ADOLC_MALLOC(n,m) malloc(n*m) # else # define ADOLC_MALLOC(n,m) rpl_malloc(n,m) # endif #endif BEGIN_C_DECLS /****************************************************************************/ /* MEMORY MANAGEMENT UTILITIES */ /*--------------------------------------------------------------------------*/ double* myalloc1(size_t m) { double* A = (double*)ADOLC_MALLOC(m,sizeof(double)); if (A == NULL) { fprintf(DIAG_OUT,"ADOL-C error: myalloc1 cannot allocate %zd bytes\n", (size_t)(m*sizeof(double))); exit (-1); } return A; } /*--------------------------------------------------------------------------*/ double** myalloc2(size_t m, size_t n) { double *Adum = (double*)ADOLC_MALLOC(m*n,sizeof(double)); double **A = (double**)malloc(m*sizeof(double*)); int i; if (Adum == NULL) { fprintf(DIAG_OUT,"ADOL-C error: myalloc2 cannot allocate %zd bytes\n", (size_t)(m*n*sizeof(double))); exit (-1); } if (A == NULL) { fprintf(DIAG_OUT,"ADOL-C error: myalloc2 cannot allocate %zd bytes\n", (size_t)(m*sizeof(double*))); exit (-1); } for (i=0; i #include #include #include "taping_p.h" #include "oplate.h" #include #include "externfcts_p.h" #include #if defined(ADOLC_DEBUG) #include #endif /* ADOLC_DEBUG */ /****************************************************************************/ /* MACROS */ #undef _ADOLC_VECTOR_ #undef _HIGHER_ORDER_ /*--------------------------------------------------------------------------*/ #if defined(_ZOS_) # define GENERATED_FILENAME "zos_forward" /*--------------------------------------------------------------------------*/ #else #if defined(_FOS_) #define GENERATED_FILENAME "fos_forward" #define ARGUMENT(indexi,l,i) argument[indexi] #define TAYLORS(indexd,l,i) taylors[indexd] /*--------------------------------------------------------------------------*/ #else #if defined(_FOV_) #define GENERATED_FILENAME "fov_forward" #define _ADOLC_VECTOR_ #if defined(_CHUNKED_) #define ARGUMENT(indexi,l,i) argument[indexi][l+offset] #define TAYLORS(indexd,l,i) taylors[indexd][l+offset] #else #define ARGUMENT(indexi,l,i) argument[indexi][l] #define TAYLORS(indexd,l,i) taylors[indexd][l] #endif /*--------------------------------------------------------------------------*/ #else #if defined(_HOS_) #define GENERATED_FILENAME "hos_forward" #define _HIGHER_ORDER_ #define ARGUMENT(indexi,l,i) argument[indexi][i] #define TAYLORS(indexd,l,i) taylors[indexd][i] /*--------------------------------------------------------------------------*/ #else #if defined(_HOV_) #define GENERATED_FILENAME "hov_forward" #define _ADOLC_VECTOR_ #define _HIGHER_ORDER_ #define ARGUMENT(indexi,l,i) argument[indexi][l][i] #define TAYLORS(indexd,l,i) taylors[indexd][l][i] /*--------------------------------------------------------------------------*/ #else #if defined(_HOV_WK_) #define GENERATED_FILENAME "hov_wk_forward" #define _ADOLC_VECTOR_ #define _HIGHER_ORDER_ #define ARGUMENT(indexi,l,i) argument[indexi][l][i] #define TAYLORS(indexd,l,i) taylors[indexd][l][i] /*--------------------------------------------------------------------------*/ #else #if defined(_INT_FOR_) #if defined(_TIGHT_) #define GENERATED_FILENAME "int_forward_t" #endif #if defined(_NTIGHT_) #define GENERATED_FILENAME "int_forward_s" #endif #define ARGUMENT(indexi,l,i) argument[indexi][l] #define TAYLORS(indexd,l,i) taylors[indexd][l] /*--------------------------------------------------------------------------*/ #else #if defined(_INDO_) void copy_index_domain(int res, int arg, locint **ind_dom); void merge_2_index_domains(int res, int arg, locint **ind_dom); void combine_2_index_domains(int res, int arg1, int arg2, locint **ind_dom); void merge_3_index_domains(int res, int arg1, int arg2, locint **ind_dom); #define NUMNNZ 20 #define FMIN_ADOLC(x,y) ((y 1) \ write_taylors(res,(keep-1),k,p); \ } \ } #else #if defined(_ADOLC_VECTOR_) /* otherwise no keep */ #define IF_KEEP_TAYLOR_CLOSE #define IF_KEEP_WRITE_TAYLOR(res,keep,k,p) #else /* _ZOS_, _FOS_, _HOS_ */ #define IF_KEEP_TAYLOR_CLOSE \ if (keep){\ fprintf(DIAG_OUT,"Otherwise succeeding reverse sweep will fail!\n");\ taylor_close(0);\ } #if defined(_ZOS_) #define IF_KEEP_WRITE_TAYLOR(res,keep,k,p) \ { \ UPDATE_TAYLORWRITTEN(keep) \ if (keep) \ ADOLC_WRITE_SCAYLOR(dp_T0[res]); \ } #else #if defined(_FOS_) #define IF_KEEP_WRITE_TAYLOR(res,keep,k,p) \ { \ UPDATE_TAYLORWRITTEN(keep) \ if (keep) \ { \ ADOLC_WRITE_SCAYLOR(dp_T0[res]); \ if (keep > 1) \ ADOLC_WRITE_SCAYLOR(dp_T[res]); \ } \ } #else #if defined(_HOS_) #define IF_KEEP_WRITE_TAYLOR(res,keep,k,p) \ { \ UPDATE_TAYLORWRITTEN(keep) \ if (keep) \ { \ ADOLC_WRITE_SCAYLOR(dp_T0[res]); \ if (keep > 1) \ write_taylor(res,keep-1); \ } \ } #endif #endif #endif #endif #endif #else /* no _KEEP_ */ #define IF_KEEP_TAYLOR_CLOSE #define IF_KEEP_WRITE_TAYLOR(res,keep,k,p) #endif /*--------------------------------------------------------------------------*/ /* access to variables */ #if !defined(_ZOS_) #if defined(_FOS_) #define TRES *Tres #define TARG *Targ #define TARG1 *Targ1 #define TARG2 *Targ2 #define TQO *Tqo #define TRES_INC *Tres #define TARG_INC *Targ #define TARG1_INC *Targ1 #define TARG2_INC *Targ2 #define TQO_INC *Tqo #define TRES_DEC *Tres #define TARG_DEC *Targ #define TARG1_DEC *Targ1 #define TARG2_DEC *Targ2 #define TQO_DEC *Tqo #define TRES_FOINC *Tres #define TARG_FOINC *Targ #define TARG1_FOINC *Targ1 #define TARG2_FOINC *Targ2 #define TQO_FOINC *Tqo #define TRES_FODEC *Tres #define DEC_TRES_FO #define TARG_FODEC *Targ #define TARG1_FODEC *Targ1 #define TARG2_FODEC *Targ2 #define TQO_FODEC *Tqo #define ASSIGN_T(a,b) a = &b; #else #if defined(_INT_FOR_) #define TRES *Tres #define TARG *Targ #define TARG1 *Targ1 #define TARG2 *Targ2 #define TQO *Tqo #define TRES_INC *Tres++ #define TARG_INC *Targ++ #define TARG1_INC *Targ1++ #define TARG2_INC *Targ2++ #define TQO_INC *Tqo++ #define TRES_DEC *Tres-- #define TARG_DEC *Targ-- #define TARG1_DEC *Targ1-- #define TARG2_DEC *Targ2-- #define TQO_DEC *Tqo-- #define TRES_FOINC *Tres++ #define TARG_FOINC *Targ++ #define TARG1_FOINC *Targ1++ #define TARG2_FOINC *Targ2++ #define TQO_FOINC *Tqo++ #define TRES_FODEC *Tres-- #define TARG_FODEC *Targ-- #define TARG1_FODEC *Targ1-- #define TARG2_FODEC *Targ2-- #define TQO_FODEC *Tqo-- #define ASSIGN_T(a,b) a = b; #else /* _HOS_, _FOV_, _HOV_, _HOV_WK */ #define TRES *Tres #define TARG *Targ #define TARG1 *Targ1 #define TARG2 *Targ2 #define TQO *Tqo #define TRES_INC *Tres++ #define TARG_INC *Targ++ #define TARG1_INC *Targ1++ #define TARG2_INC *Targ2++ #define TQO_INC *Tqo++ #define TRES_DEC *Tres-- #define TARG_DEC *Targ-- #define TARG1_DEC *Targ1-- #define TARG2_DEC *Targ2-- #define TQO_DEC *Tqo-- #if defined(_FOV_) #define TRES_FOINC *Tres++ #define TARG_FOINC *Targ++ #define TARG1_FOINC *Targ1++ #define TARG2_FOINC *Targ2++ #define TQO_FOINC *Tqo++ #define TRES_FODEC *Tres #define DEC_TRES_FO Tres--; #define TARG_FODEC *Targ-- #define TARG1_FODEC *Targ1-- #define TARG2_FODEC *Targ2-- #define TQO_FODEC *Tqo-- #else /* _HOS_, _HOV_, _HOV_WK */ #define TRES_FOINC *Tres #define TARG_FOINC *Targ #define TARG1_FOINC *Targ1 #define TARG2_FOINC *Targ2 #define TQO_FOINC *Tqo #define TRES_FODEC *Tres #define DEC_TRES_FO #define TARG_FODEC *Targ #define TARG1_FODEC *Targ1 #define TARG2_FODEC *Targ2 #define TQO_FODEC *Tqo #endif #endif #define ASSIGN_T(a,b) a = b; #endif #endif /*--------------------------------------------------------------------------*/ /* loop stuff */ #if defined(_ADOLC_VECTOR_) #define FOR_0_LE_l_LT_p for (l=0; l=0; l--) #else #if defined(_INT_FOR_) #define FOR_0_LE_l_LT_p for (l=0; l=0; l--) #else #define FOR_0_LE_l_LT_p #define FOR_p_GT_l_GE_0 #endif #endif #if defined(_HIGHER_ORDER_) #define FOR_0_LE_i_LT_k for (i=0; i=0; i--) #else #define FOR_0_LE_i_LT_k #define FOR_k_GT_i_GE_0 #endif #if defined(_HOV_) #define FOR_0_LE_l_LT_pk for (l=0; ldp_x, m, edfct->dp_y) # define ADOLC_EXT_LOOP # define ADOLC_EXT_SUBSCRIPT #endif /* FOS_FORWARD */ #if defined(_FOS_) # define _EXTERN_ 1 # define ADOLC_EXT_FCT_POINTER fos_forward # define ADOLC_EXT_FCT_COMPLETE \ fos_forward(n, edfct->dp_x, edfct->dp_X, m, edfct->dp_y, edfct->dp_Y) # define ADOLC_EXT_POINTER_X edfct->dp_X # define ADOLC_EXT_POINTER_Y edfct->dp_Y # define ADOLC_EXT_LOOP # define ADOLC_EXT_SUBSCRIPT #endif /* FOV_FORWARD */ #if defined(_FOV_) # define _EXTERN_ 1 # define ADOLC_EXT_FCT_POINTER fov_forward # define ADOLC_EXT_FCT_COMPLETE \ fov_forward(n, edfct->dp_x,p, edfct->dpp_X, m, edfct->dp_y, edfct->dpp_Y) # define ADOLC_EXT_POINTER_X edfct->dpp_X # define ADOLC_EXT_POINTER_Y edfct->dpp_Y # define ADOLC_EXT_LOOP for (loop2 = 0; loop2 < p; ++loop2) # define ADOLC_EXT_SUBSCRIPT [loop2] #endif #if defined(_EXTERN_) locint n, m; ext_diff_fct *edfct; int loop; # if defined(_FOV_) int loop2; # endif int ext_retc; #endif ADOLC_OPENMP_THREAD_NUMBER; #if defined(ADOLC_DEBUG) /****************************************************************************/ /* DEBUG MESSAGES */ fprintf(DIAG_OUT,"Call of %s(..) with tag: %d, n: %d, m %d,\n", GENERATED_FILENAME, tnum, indcheck, depcheck); #if defined(_KEEP_) fprintf(DIAG_OUT," keep: %d\n", keep); #endif #if defined(_HIGHER_ORDER_) fprintf(DIAG_OUT," degree: %d\n",gdegree); #endif #if defined(_ADOLC_VECTOR_) fprintf(DIAG_OUT," p: %d\n\n",p); #endif #endif /****************************************************************************/ /* INITs */ /* Set up stuff for the tape */ ADOLC_OPENMP_GET_THREAD_NUMBER; /* Initialize the Forward Sweep */ init_for_sweep(tnum); if ( (depcheck != ADOLC_CURRENT_TAPE_INFOS.stats[NUM_DEPENDENTS]) || (indcheck != ADOLC_CURRENT_TAPE_INFOS.stats[NUM_INDEPENDENTS]) ) { fprintf(DIAG_OUT,"ADOL-C error: forward sweep on tape %d aborted!\n" "Number of dependent(%u) and/or independent(%u) variables passed" " to forward is\ninconsistent with number " "recorded on tape (%d, %d) \n", tnum, depcheck, indcheck, ADOLC_CURRENT_TAPE_INFOS.stats[NUM_DEPENDENTS], ADOLC_CURRENT_TAPE_INFOS.stats[NUM_INDEPENDENTS]); exit (-1); } /****************************************************************************/ /* MEMORY ALLOCATION */ /* olvo 980626 has to be revised for common blocks */ /*--------------------------------------------------------------------------*/ #if !defined(_NTIGHT_) dp_T0 = myalloc1(ADOLC_CURRENT_TAPE_INFOS.stats[NUM_MAX_LIVES]); ADOLC_CURRENT_TAPE_INFOS.dp_T0 = dp_T0; #endif /* !_NTIGHT_ */ #if defined(_ZOS_) /* ZOS */ #if defined(_KEEP_) if (keep>1) { fprintf(DIAG_OUT,"\n ADOL-C error: zero order scalar forward cannot save" " more\nthan zero order taylor coefficients!\n"); exit (-1); } #endif #if defined(_KEEP_) if (keep) { taylbuf = ADOLC_CURRENT_TAPE_INFOS.stats[TAY_BUFFER_SIZE]; taylor_begin(taylbuf,&dp_T0,keep-1); } #endif /*--------------------------------------------------------------------------*/ #else /* FOS */ #if defined(_FOS_) #if defined(_KEEP_) if (keep>2) { fprintf(DIAG_OUT,"\n ADOL-C error: first order scalar forward cannot save" " more \nthan first order taylor coefficients!\n"); exit (-1); } #endif dp_T = myalloc1(ADOLC_CURRENT_TAPE_INFOS.stats[NUM_MAX_LIVES]); # define TAYLOR_BUFFER dp_T #if defined(_KEEP_) if (keep) { taylbuf = ADOLC_CURRENT_TAPE_INFOS.stats[TAY_BUFFER_SIZE]; taylor_begin(taylbuf,&dp_T,keep-1); } #endif /*--------------------------------------------------------------------------*/ #else /* INF_FOR */ #if defined(_INT_FOR_) up_T = myalloc2_ulong(ADOLC_CURRENT_TAPE_INFOS.stats[NUM_MAX_LIVES],p); #define TAYLOR_BUFFER up_T /*--------------------------------------------------------------------------*/ #else /* INDOPRO */ #if defined(_INDO_) #if defined(_INDOPRO_) /* index domains */ ind_dom = (locint **) malloc(sizeof(locint*) * ADOLC_CURRENT_TAPE_INFOS.stats[NUM_MAX_LIVES]); max_ind_dom = ADOLC_CURRENT_TAPE_INFOS.stats[NUM_MAX_LIVES]; for(i=0;i */ int v = 0; unsigned int countPerOperation[256], taylorPerOperation[256]; memset(countPerOperation, 0, 1024); memset(taylorPerOperation, 0, 1024); # define UPDATE_TAYLORWRITTEN(X) taylorPerOperation[operation] += X; #else # define UPDATE_TAYLORWRITTEN(X) #endif /* ADOLC_DEBUG */ operation=get_op_f(); #if defined(ADOLC_DEBUG) ++countPerOperation[operation]; #endif /* ADOLC_DEBUG */ while (operation !=end_of_tape) { switch (operation) { /****************************************************************************/ /* MARKERS */ /*--------------------------------------------------------------------------*/ case end_of_op: /* end_of_op */ get_op_block_f(); operation=get_op_f(); /* Skip next operation, it's another end_of_op */ break; /*--------------------------------------------------------------------------*/ case end_of_int: /* end_of_int */ get_loc_block_f(); break; /*--------------------------------------------------------------------------*/ case end_of_val: /* end_of_val */ get_val_block_f(); break; /*--------------------------------------------------------------------------*/ case start_of_tape: /* start_of_tape */ case end_of_tape: /* end_of_tape */ break; /****************************************************************************/ /* COMPARISON */ /*--------------------------------------------------------------------------*/ case eq_zero: /* eq_zero */ arg = get_locint_f(); #if !defined(_NTIGHT_) if (dp_T0[arg] != 0) { if (ADOLC_GLOBAL_TAPE_VARS.branchSwitchWarning) fprintf(DIAG_OUT, "ADOL-C Warning: Branch switch detected in comparison " "(operator eq_zero).\n" "Forward sweep aborted! Retaping recommended!\n"); ret_c = -1; operation = end_of_tape; continue; } ret_c = 0; #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case neq_zero: /* neq_zero */ arg = get_locint_f(); #if !defined(_NTIGHT_) if (dp_T0[arg] == 0) { if (ADOLC_GLOBAL_TAPE_VARS.branchSwitchWarning) fprintf(DIAG_OUT, "ADOL-C Warning: Branch switch detected in comparison " "(operator neq_zero).\n" "Forward sweep aborted! Retaping recommended!\n"); ret_c = -1; operation = end_of_tape; continue; } #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case le_zero: /* le_zero */ arg = get_locint_f(); #if !defined(_NTIGHT_) if (dp_T0[arg] > 0) { if (ADOLC_GLOBAL_TAPE_VARS.branchSwitchWarning) fprintf(DIAG_OUT, "ADOL-C Warning: Branch switch detected in comparison " "(operator le_zero).\n" "Forward sweep aborted! Retaping recommended!\n"); ret_c = -1; operation = end_of_tape; continue; } if (dp_T0[arg] == 0) ret_c = 0; #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case gt_zero: /* gt_zero */ arg = get_locint_f(); #if !defined(_NTIGHT_) if (dp_T0[arg] <= 0) { if (ADOLC_GLOBAL_TAPE_VARS.branchSwitchWarning) fprintf(DIAG_OUT, "ADOL-C Warning: Branch switch detected in comparison " "(operator gt_zero).\n" "Forward sweep aborted! Retaping recommended!\n"); ret_c = -1; operation = end_of_tape; continue; } #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case ge_zero: /* ge_zero */ arg = get_locint_f(); #if !defined(_NTIGHT_) if (dp_T0[arg] < 0) { if (ADOLC_GLOBAL_TAPE_VARS.branchSwitchWarning) fprintf(DIAG_OUT, "ADOL-C Warning: Branch switch detected in comparison " "(operator ge_zero).\n" "Forward sweep aborted! Retaping recommended!\n"); ret_c = -1; operation = end_of_tape; continue; } if (dp_T0[arg] == 0) ret_c = 0; #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case lt_zero: /* lt_zero */ arg = get_locint_f(); #if !defined(_NTIGHT_) if (dp_T0[arg] >= 0) { if (ADOLC_GLOBAL_TAPE_VARS.branchSwitchWarning) fprintf(DIAG_OUT, "ADOL-C Warning: Branch switch detected in comparison " "(operator lt_zero).\n" "Forward sweep aborted! Retaping recommended!\n"); ret_c = -1; operation = end_of_tape; continue; } #endif /* !_NTIGHT_ */ break; /****************************************************************************/ /* ASSIGNMENTS */ /*--------------------------------------------------------------------------*/ case assign_a: /* assign an adouble variable an assign_a */ /* adouble value. (=) */ arg = get_locint_f(); res = get_locint_f(); IF_KEEP_WRITE_TAYLOR(res,keep,k,p) #if !defined(_NTIGHT_) dp_T0[res] = dp_T0[arg]; #endif /* !_NTIGHT_ */ #if defined(_INDO_) #if defined(_INDOPRO_) copy_index_domain(res, arg, ind_dom); #endif #if defined(_NONLIND_) arg_index[res] = arg_index[arg]; #endif #else #if !defined(_ZOS_) /* BREAK_ZOS */ ASSIGN_T(Targ,TAYLOR_BUFFER[arg]) ASSIGN_T(Tres,TAYLOR_BUFFER[res]) FOR_0_LE_l_LT_pk TRES_INC = TARG_INC; #endif #endif /* ALL_TOGETHER_AGAIN */ break; /*--------------------------------------------------------------------------*/ case assign_d: /* assign an adouble variable a assign_d */ /* double value. (=) */ res = get_locint_f(); coval = get_val_f(); IF_KEEP_WRITE_TAYLOR(res,keep,k,p) #if !defined(_NTIGHT_) dp_T0[res] = coval; #endif /* !_NTIGHT_ */ #if defined(_INDO_) #if defined(_INDOPRO_) ind_dom[res][0]=0; #endif #if defined(_NONLIND_) fod[opind].entry = maxopind+2; fod[opind].left = NULL; fod[opind].right = NULL; arg_index[res] = opind++; #endif #else #if !defined(_ZOS_) /* BREAK_ZOS */ ASSIGN_T(Tres, TAYLOR_BUFFER[res]) FOR_0_LE_l_LT_pk TRES_INC = 0; #endif #endif /* ALL_TOGETHER_AGAIN */ break; /*--------------------------------------------------------------------------*/ case assign_d_zero: /* assign an adouble variable a assign_d_zero */ /* double value. (0) (=) */ res = get_locint_f(); IF_KEEP_WRITE_TAYLOR(res,keep,k,p) #if !defined(_NTIGHT_) dp_T0[res] = 0.0; #endif /* !_NTIGHT_ */ #if defined(_INDO_) #if defined(_INDOPRO_) ind_dom[res][0]=0; #endif #if defined(_NONLIND_) fod[opind].entry = maxopind+2; fod[opind].left = NULL; fod[opind].right = NULL; arg_index[res] = opind++; #endif #else #if !defined(_ZOS_) /* BREAK_ZOS */ ASSIGN_T(Tres, TAYLOR_BUFFER[res]) FOR_0_LE_l_LT_pk TRES_INC = 0; #endif #endif /* ALL_TOGETHER_AGAIN */ break; /*--------------------------------------------------------------------------*/ case assign_d_one: /* assign an adouble variable a assign_d_one */ /* double value. (1) (=) */ res = get_locint_f(); IF_KEEP_WRITE_TAYLOR(res,keep,k,p) #if !defined(_NTIGHT_) dp_T0[res] = 1.0; #endif /* !_NTIGHT_ */ #if defined(_INDO_) #if defined(_INDOPRO_) ind_dom[res][0]=0; #endif #if defined(_NONLIND_) fod[opind].entry = maxopind+2; fod[opind].left = NULL; fod[opind].right = NULL; arg_index[res] = opind++; #endif #else #if !defined(_ZOS_) /* BREAK_ZOS */ ASSIGN_T(Tres, TAYLOR_BUFFER[res]) FOR_0_LE_l_LT_pk TRES_INC = 0; #endif #endif /* ALL_TOGETHER_AGAIN */ break; /*--------------------------------------------------------------------------*/ case assign_ind: /* assign an adouble variable an assign_ind */ /* independent double value (<<=) */ res = get_locint_f(); IF_KEEP_WRITE_TAYLOR(res,keep,k,p) #if !defined(_NTIGHT_) dp_T0[res] = basepoint[indexi]; #endif /* !_NTIGHT_ */ #if defined(_INDO_) #if defined(_INDOPRO_) ind_dom[res][0] = 1; ind_dom[res][2] = indexi; #endif #if defined(_NONLIND_) fod[opind].entry = indexi; fod[opind].left = NULL; fod[opind].right = NULL; arg_index[res] = opind++; #endif #else #if !defined(_ZOS_) /* BREAK_ZOS */ ASSIGN_T(Tres, TAYLOR_BUFFER[res]) #ifdef _INT_FOR_ FOR_0_LE_l_LT_p TRES_INC = ARGUMENT(indexi,l,i); #else FOR_0_LE_l_LT_p FOR_0_LE_i_LT_k TRES_INC = ARGUMENT(indexi,l,i); #endif #endif #endif /* ALL_TOGETHER_AGAIN */ ++indexi; break; /*--------------------------------------------------------------------------*/ case assign_dep: /* assign a float variable a assign_dep */ /* dependent adouble value. (>>=) */ res = get_locint_f(); #if !defined(_INDO_) #if !defined(_NTIGHT_) if ( valuepoint != NULL ) valuepoint[indexd] = dp_T0[res]; #endif /* !_NTIGHT_ */ #endif #if defined(_INDO_) #if defined(_INDOPRO_) && !defined(_NONLIND_OLD_) if (ind_dom[res][0] != 0) { crs[indexd] = (unsigned int*) malloc(sizeof(unsigned int) * (ind_dom[res][0]+1)); crs[indexd][0] = ind_dom[res][0]; for(l=1;l<=crs[indexd][0];l++) { crs[indexd][l] = ind_dom[res][l+1]; } } else { crs[indexd] = (unsigned int*) malloc(sizeof(unsigned int)); crs[indexd][0] =0; } #endif #else #if !defined(_ZOS_) /* BREAK_ZOS */ ASSIGN_T(Tres, TAYLOR_BUFFER[res]) #ifdef _INT_FOR_ if (taylors != 0 ) /* ??? question: why here? */ FOR_0_LE_l_LT_p TAYLORS(indexd,l,i) = TRES_INC; #else if (taylors != 0 ) /* ??? question: why here? */ FOR_0_LE_l_LT_p FOR_0_LE_i_LT_k TAYLORS(indexd,l,i) = TRES_INC; #endif #endif #endif /* ALL_TOGETHER_AGAIN */ indexd++; break; /****************************************************************************/ /* OPERATION + ASSIGNMENT */ /*--------------------------------------------------------------------------*/ case eq_plus_d: /* Add a floating point to an eq_plus_d */ /* adouble. (+=) */ res = get_locint_f(); coval = get_val_f(); IF_KEEP_WRITE_TAYLOR(res,keep,k,p) #if !defined(_NTIGHT_) dp_T0[res] += coval; #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case eq_plus_a: /* Add an adouble to another eq_plus_a */ /* adouble. (+=) */ arg = get_locint_f(); res = get_locint_f(); IF_KEEP_WRITE_TAYLOR(res,keep,k,p) #if !defined(_NTIGHT_) dp_T0[res] += dp_T0[arg]; #endif /* !_NTIGHT_ */ #if defined(_INDO_) #if defined(_INDOPRO_) merge_2_index_domains(res, arg, ind_dom); #endif #if defined(_NONLIND_) fod[opind].entry = maxopind+2; fod[opind].left = &fod[arg_index[res]]; fod[opind].right = &fod[arg_index[arg]]; arg_index[res] = opind++; #endif #else #if !defined(_ZOS_) /* BREAK_ZOS */ ASSIGN_T(Tres, TAYLOR_BUFFER[res]) ASSIGN_T(Targ, TAYLOR_BUFFER[arg]) #ifdef _INT_FOR_ FOR_0_LE_l_LT_pk TRES_INC |= TARG_INC; #else FOR_0_LE_l_LT_pk TRES_INC += TARG_INC; #endif #endif #endif /* ALL_TOGETHER_AGAIN */ break; /*--------------------------------------------------------------------------*/ case eq_min_d: /* Subtract a floating point from an eq_min_d */ /* adouble. (-=) */ res = get_locint_f(); coval = get_val_f(); IF_KEEP_WRITE_TAYLOR(res,keep,k,p) #if !defined(_NTIGHT_) dp_T0[res] -= coval; #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case eq_min_a: /* Subtract an adouble from another eq_min_a */ /* adouble. (-=) */ arg = get_locint_f(); res = get_locint_f(); IF_KEEP_WRITE_TAYLOR(res,keep,k,p) #if !defined(_NTIGHT_) dp_T0[res] -= dp_T0[arg]; #endif /* !_NTIGHT_ */ #if defined(_INDO_) #if defined(_INDOPRO_) merge_2_index_domains(res, arg, ind_dom); #endif #if defined(_NONLIND_) fod[opind].entry = maxopind+2; fod[opind].left = &fod[arg_index[res]]; fod[opind].right = &fod[arg_index[arg]]; arg_index[res] = opind++; #endif #else #if !defined(_ZOS_) /* BREAK_ZOS */ ASSIGN_T(Tres, TAYLOR_BUFFER[res]) ASSIGN_T(Targ, TAYLOR_BUFFER[arg]) #ifdef _INT_FOR_ FOR_0_LE_l_LT_pk TRES_INC |= TARG_INC; #else FOR_0_LE_l_LT_pk TRES_INC -= TARG_INC; #endif #endif #endif /* ALL_TOGETHER_AGAIN */ break; /*--------------------------------------------------------------------------*/ case eq_mult_d: /* Multiply an adouble by a eq_mult_d */ /* flaoting point. (*=) */ res = get_locint_f(); coval = get_val_f(); IF_KEEP_WRITE_TAYLOR(res,keep,k,p) #if !defined(_NTIGHT_) dp_T0[res] *= coval; #endif /* !_NTIGHT_ */ #if !defined(_INDO_) #if !defined(_ZOS_) /* BREAK_ZOS */ #if !defined( _INT_FOR_) FOR_0_LE_l_LT_pk ASSIGN_T(Tres, TAYLOR_BUFFER[res]) FOR_0_LE_l_LT_pk TRES_INC *= coval; #endif #endif #endif /* ALL_TOGETHER_AGAIN */ break; /*--------------------------------------------------------------------------*/ case eq_mult_a: /* Multiply one adouble by another eq_mult_a */ /* (*=) */ arg = get_locint_f(); res = get_locint_f(); IF_KEEP_WRITE_TAYLOR(res,keep,k,p) #if defined(_INDO_) #if defined(_INDOPRO_) merge_2_index_domains(res, arg, ind_dom); #endif #if defined(_NONLIND_) fod[opind].entry = maxopind+2; fod[opind].left = &fod[arg_index[res]]; fod[opind].right = &fod[arg_index[arg]]; traverse_unary(&fod[arg_index[res]], nonl_dom, &fod[arg_index[arg]], indcheck+1,maxopind+2); traverse_unary(&fod[arg_index[arg]], nonl_dom, &fod[arg_index[res]], indcheck+1,maxopind+2); arg_index[res] = opind++; #endif #if defined(_NONLIND_OLD_) extend_nonlinearity_domain_binary(res, arg, ind_dom, nonl_dom); #endif #else #if !defined(_ZOS_) /* BREAK_ZOS */ ASSIGN_T(Tres, TAYLOR_BUFFER[res]) ASSIGN_T(Targ, TAYLOR_BUFFER[arg]) INC_pk_1(Tres) INC_pk_1(Targ) #ifdef _INT_FOR_ FOR_p_GT_l_GE_0 TRES_FODEC |= TARG_DEC; #else FOR_p_GT_l_GE_0 FOR_k_GT_i_GE_0 { TRES_FODEC = dp_T0[res]*TARG_DEC + TRES*dp_T0[arg]; DEC_TRES_FO #ifdef _HIGHER_ORDER_ TresOP = Tres-i; TargOP = Targ; for (j=0;j0 */ #endif /* _HIGHER_ORDER_ */ } #endif #endif #endif /* ALL_TOGETHER_AGAIN */ break; /*--------------------------------------------------------------------------*/ case sin_op: /* sine operation sin_op */ arg1 = get_locint_f(); arg2 = get_locint_f(); res = get_locint_f(); IF_KEEP_WRITE_TAYLOR(arg2,keep,k,p) /* olvo 980710 covalue */ IF_KEEP_WRITE_TAYLOR(res,keep,k,p) #if !defined(_NTIGHT_) /* Note: always arg2 != arg1 */ dp_T0[arg2] = cos(dp_T0[arg1]); dp_T0[res] = sin(dp_T0[arg1]); #endif /* !_NTIGHT_ */ ADOLC_OPENMP_RESTORE_THREAD_NUMBER; #if defined(_INDO_) #if defined(_INDOPRO_) copy_index_domain(res, arg1, ind_dom); #endif #if defined(_NONLIND_) fod[opind].entry = maxopind+2; fod[opind].left = &fod[arg_index[arg1]]; fod[opind].right = NULL; traverse_unary(&fod[opind], nonl_dom, &fod[opind], indcheck+1,maxopind+2); arg_index[res] = opind++; #endif #if defined(_NONLIND_OLD_) extend_nonlinearity_domain_unary(arg1, ind_dom, nonl_dom); #endif #else #if !defined(_ZOS_) /* BREAK_ZOS */ ASSIGN_T(Tres, TAYLOR_BUFFER[res]) ASSIGN_T(Targ1, TAYLOR_BUFFER[arg1]) ASSIGN_T(Targ2, TAYLOR_BUFFER[arg2]) #ifdef _INT_FOR_ FOR_0_LE_l_LT_p { /* olvo 980923 changed order to allow x = sin(x) */ TARG2_FOINC = TARG1; TRES_FOINC = TARG1_FOINC; } #else FOR_0_LE_l_LT_p FOR_0_LE_i_LT_k { /* olvo 980921 changed order to allow x = sin(x) */ #if defined(_HIGHER_ORDER_) zOP = dp_z+i; (*zOP--) = (i+1) * (*Targ1); #endif /* _HIGHER_ORDER_ */ /* Note: always arg2 != arg1 */ TARG2_FOINC = -dp_T0[res] * TARG1; TRES_FOINC = dp_T0[arg2] * TARG1_INC; #if defined(_HIGHER_ORDER_) TresOP = Tres-i; Targ2OP = Targ2-i; *Tres *= (i+1); *Targ2 *= (i+1); for (j=0;j 0.0) { r0 = make_nan(); VEC_INC(Targ1, k-i) BREAK_FOR_I } else if (TARG1 < 0.0) { r0 = make_inf(); VEC_INC(Targ1, k-i) BREAK_FOR_I } else { r0 = 0.0; Targ1++; } TRES = r0; VEC_INC(Tres, k) } else if (dp_T0[arg1] == -1.0) FOR_0_LE_l_LT_p { FOR_0_LE_i_LT_k if (TARG1 > 0.0) { r0 = make_inf(); VEC_INC(Targ1, k-i) BREAK_FOR_I } else if (TARG1 < 0.0) { r0 = make_nan(); VEC_INC(Targ1, k-i) BREAK_FOR_I } else { r0 = 0.0; Targ1++; } TRES = r0; VEC_INC(Tres, k) } else FOR_0_LE_l_LT_p { FOR_0_LE_i_LT_k { /* olvo 980921 changed order to allow x = asin(x) */ #if defined(_HIGHER_ORDER_) zOP = dp_z+i; (*zOP--) = (i+1) * (*Targ1); #endif /* _HIGHER_ORDER_ */ TRES_FOINC = dp_T0[arg2] * TARG1_INC; #if defined(_HIGHER_ORDER_) Targ2OP = Targ2; *Tres *= (i+1); for (j=0;j 0.0) { r0 = make_nan(); VEC_INC(Targ1, k-i) BREAK_FOR_I } else if (TARG1 < 0.0) { r0 = -make_inf(); VEC_INC(Targ1, k-i) BREAK_FOR_I } else { r0 = 0.0; Targ1++; } TRES = r0; VEC_INC(Tres, k) } else if (dp_T0[arg1] == -1.0) FOR_0_LE_l_LT_p { FOR_0_LE_i_LT_k if (TARG1 > 0.0) { r0 = -make_inf(); VEC_INC(Targ1, k-i) BREAK_FOR_I } else if (TARG1 < 0.0) { r0 = make_nan(); VEC_INC(Targ1, k-i) BREAK_FOR_I } else { r0 = 0.0; Targ1++; } TRES = r0; VEC_INC(Tres, k) } else FOR_0_LE_l_LT_p { FOR_0_LE_i_LT_k { /* olvo 980921 changed order to allow x = acos(x) */ #if defined(_HIGHER_ORDER_) zOP = dp_z+i; (*zOP--) = (i+1) * (*Targ1); #endif /* _HIGHER_ORDER_ */ TRES_FOINC = dp_T0[arg2] * TARG1_INC; #if defined(_HIGHER_ORDER_) Targ2OP = Targ2; *Tres *= (i+1); for (j=0;j 0.0) { r0 = make_inf(); VEC_INC(Targ1, k-i) BREAK_FOR_I } else if (TARG1 < 0.0) { r0 = make_nan(); VEC_INC(Targ1, k-i) BREAK_FOR_I } else { r0 = 0.0; Targ1++; } TRES_INC = r0; #if defined(_HIGHER_ORDER_) for (i=1;i 0.0) { r0 = make_nan(); VEC_INC(Targ1, k-i) BREAK_FOR_I } else if (TARG1 < 0.0) { r0 = make_inf(); VEC_INC(Targ1, k-i) BREAK_FOR_I } else { r0 = 0.0; Targ1++; } TRES_INC = r0; #if defined(_HIGHER_ORDER_) for (i=1;i 0.0) { r0 = make_inf(); VEC_INC(Targ1, k-i) BREAK_FOR_I } else if (TARG1 < 0.0) { r0 = make_nan(); VEC_INC(Targ1, k-i) BREAK_FOR_I } else { r0 = 0.0; Targ1++; } TRES_INC = r0; #if defined(_HIGHER_ORDER_) for (i=1;i 1) TRES_INC = 0; if ((coval - i < 1) && (coval - i > 0)) TRES_INC = make_inf(); if (coval - i < 0) TRES_INC = make_nan(); } } } else { if (coval == 1) { FOR_0_LE_l_LT_pk TRES_INC = TARG_INC; } else /* coval is an int > 1 */ /* the following is not efficient but at least it works */ /* it reformulates x^n into x* ... *x n times */ { INC_pk_1(Targ) INC_pk_1(Tres) FOR_p_GT_l_GE_0 { FOR_k_GT_i_GE_0 { *Tres = 0; DEC_TRES_FO #if defined(_HIGHER_ORDER_) if (i == k-1) { zOP = dp_z+k-1; for(j=k-1;j>=0;j--) { (*zOP--) = (*Targ--); } } for (j=0;j dp_T0[res] == 0.0 */ { r0 = 0.0; FOR_0_LE_i_LT_k { if (TARG>0.0) { r0 = make_inf(); VEC_INC(Targ, k-i) BREAK_FOR_I } else if (TARG<0.0) { r0 = make_nan(); VEC_INC(Targ, k-i) BREAK_FOR_I } else Targ++; } } else { r0 = 0.5/dp_T0[res]; } Targ = TargOP; even = 1; FOR_0_LE_i_LT_k { TRES_FOINC = r0 * TARG_INC; #if defined(_HIGHER_ORDER_) TresOP = Tres-i; TresOP2 = Tres-1; x = 0; for (j=1;2*j-1 dp_T0[arg2]) { if (coval) MINDEC(ret_c,2); } else if (dp_T0[arg1] < dp_T0[arg2]) { if (!coval) MINDEC(ret_c,2); } else if (arg1 != arg2) MINDEC(ret_c,1); #endif /* !_NTIGHT_ */ #if defined (_INDO_) #if defined (_INDOPRO_) #if defined (_TIGHT_) if (dp_T0[arg1] < dp_T0[arg2]) copy_index_domain(res, arg1, ind_dom); else { if (dp_T0[arg1] > dp_T0[arg2]) copy_index_domain(res, arg2, ind_dom); else combine_2_index_domains(res, arg1, arg2, ind_dom); } #else combine_2_index_domains(res, arg1, arg2, ind_dom); #endif #endif #if defined(_NONLIND_) #ifdef _TIGHT_ if (dp_T0[arg1] < dp_T0[arg2]) { fod[opind].entry = maxopind+2; fod[opind].left = &fod[arg_index[arg1]]; fod[opind].right = NULL; arg_index[res] = opind++; } else { if (dp_T0[arg1] > dp_T0[arg2]) { fod[opind].entry = maxopind+2; fod[opind].left = &fod[arg_index[arg2]]; fod[opind].right = NULL; arg_index[res] = opind++; } else { fod[opind].entry = maxopind+2; fod[opind].left = &fod[arg_index[arg1]]; fod[opind].right = &fod[arg_index[arg2]]; arg_index[res] = opind++; } } #else fod[opind].entry = maxopind+2; fod[opind].left = &fod[arg_index[arg1]]; fod[opind].right = &fod[arg_index[arg2]]; arg_index[res] = opind++; arg_index[res] = opind++; #endif #endif #else #if !defined(_ZOS_) /* BREAK_ZOS */ ASSIGN_T(Targ1, TAYLOR_BUFFER[arg1]) ASSIGN_T(Targ2, TAYLOR_BUFFER[arg2]) ASSIGN_T(Tres, TAYLOR_BUFFER[res]) #ifdef _INT_FOR_ #ifdef _TIGHT_ Tqo = NULL; if (dp_T0[arg1] > dp_T0[arg2]) Tqo = Targ2; else if (dp_T0[arg1] < dp_T0[arg2]) Tqo = Targ1; FOR_0_LE_l_LT_p { Targ = Tqo; if (Targ == NULL) /* e.g. T0[arg1] == T0[arg2] */ { Targ1OP = Targ1; Targ2OP = Targ2; if (TARG1 > TARG2) Targ = Targ2OP; else if (TARG1 < TARG2) Targ = Targ1OP; Targ1++; Targ2++; if (Targ == NULL) /* e.g. both are equal */ Targ = Targ1OP; } TRES_INC = TARG_INC; if (Tqo) Tqo++; } dp_T0[res] = MIN_ADOLC(dp_T0[arg1], dp_T0[arg2]); #endif /* _TIGHT_ */ #ifdef _NTIGHT_ TRES_INC = TARG1_INC | TARG2_INC; #endif /* _NTIGHT_ */ #else Tqo = NULL; if (dp_T0[arg1] > dp_T0[arg2]) Tqo = Targ2; else if (dp_T0[arg1] < dp_T0[arg2]) Tqo = Targ1; FOR_0_LE_l_LT_p { Targ = Tqo; if (Targ == NULL) /* e.g. dp_T0[arg1] == dp_T0[arg2] */ { Targ1OP = Targ1; Targ2OP = Targ2; FOR_0_LE_i_LT_k { if (TARG1 > TARG2) { Targ = Targ2OP; VEC_INC(Targ1, k-i) VEC_INC(Targ2, k-i) BREAK_FOR_I } else if (TARG1 < TARG2) { Targ = Targ1OP; VEC_INC(Targ1, k-i) VEC_INC(Targ2, k-i) BREAK_FOR_I } Targ1++; Targ2++; } if (Targ == NULL) /* e.g. both are equal */ Targ = Targ1OP; } FOR_0_LE_i_LT_k TRES_INC = TARG_INC; if (Tqo) { VEC_INC(Tqo, k) } } #endif #endif #endif /* ALL_TOGETHER_AGAIN */ #if !defined(_NTIGHT_) dp_T0[res] = MIN_ADOLC( dp_T0[arg1], dp_T0[arg2] ); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case abs_val: /* abs_val */ arg = get_locint_f(); res = get_locint_f(); coval = get_val_f(); IF_KEEP_WRITE_TAYLOR(res,keep,k,p) #if !defined(_NTIGHT_) /* olvo 980923 changed order to allow x = min(x,y) etc. */ /* olvo/mitev 980721 ec n3l (taken from below) */ if (dp_T0[arg] < 0.0) { if (coval) MINDEC(ret_c,2); } else if (dp_T0[arg] > 0.0) { if (!coval) MINDEC(ret_c,2); } #endif /* !_NTIGHT_ */ #if defined(_INDO_) #if defined(_INDOPRO_) copy_index_domain(res, arg, ind_dom); #endif #if defined(_NONLIND_) arg_index[res] = arg_index[arg]; #endif #else #if !defined(_ZOS_) /* BREAK_ZOS */ ASSIGN_T(Tres, TAYLOR_BUFFER[res]) ASSIGN_T(Targ, TAYLOR_BUFFER[arg]) #ifdef _INT_FOR_ #ifdef _TIGHT_ y = 0.0; if (dp_T0[arg] != 0.0) { if (dp_T0[arg] < 0.0) y = -1.0; else y = 1.0; } FOR_0_LE_l_LT_p { if ((y == 0.0) && (TARG != 0.0)) MINDEC(ret_c,1); TRES_INC = TARG_INC; } dp_T0[res] = fabs(dp_T0[arg]); #endif /* _TIGHT_ */ #ifdef _NTIGHT_ FOR_0_LE_l_LT_p TRES_INC = TARG_INC; #endif /* _NTIGHT_ */ #else y = 0.0; if (dp_T0[arg] != 0.0) { if (dp_T0[arg] < 0.0) y = -1.0; else y = 1.0; } FOR_0_LE_l_LT_p { x = y; FOR_0_LE_i_LT_k { if ((x == 0.0) && (TARG != 0.0)) { MINDEC(ret_c,1); if (TARG < 0.0) x = -1.0; else x = 1.0; } TRES_INC = x * TARG_INC; } } #endif #endif #endif /* ALL_TOGETHER_AGAIN */ #if !defined(_NTIGHT_) dp_T0[res] = fabs(dp_T0[arg]); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case ceil_op: /* ceil_op */ arg = get_locint_f(); res = get_locint_f(); coval = get_val_f(); IF_KEEP_WRITE_TAYLOR(res,keep,k,p) #if !defined(_NTIGHT_) dp_T0[res]=ceil(dp_T0[arg]); /* olvo/mitev 980721 ec n2l (taken from below) */ if (coval != dp_T0[res]) MINDEC(ret_c,2); #endif /* !_NTIGHT_ */ #if defined(_INDO_) #if defined(_INDOPRO_) #ifdef _TIGHT_ ind_dom[res][0] = 0; #else copy_index_domain(res, arg, ind_dom); #endif /* _TIGHT_ */ #endif #if defined(_NONLIND_) arg_index[res] = arg_index[arg]; #endif #else #if !defined(_ZOS_) /* BREAK_ZOS */ ASSIGN_T(Tres, TAYLOR_BUFFER[res]) FOR_0_LE_l_LT_pk TRES_INC = 0.0; #endif #endif /* ALL_TOGETHER_AGAIN */ break; /*--------------------------------------------------------------------------*/ case floor_op: /* Compute ceil of adouble floor_op */ arg = get_locint_f(); res = get_locint_f(); coval = get_val_f(); IF_KEEP_WRITE_TAYLOR(res,keep,k,p) #if !defined(_NTIGHT_) dp_T0[res] = floor(dp_T0[arg]); /* olvo/mitev 980721 ec n2l (taken from below) */ if (coval != dp_T0[res]) MINDEC(ret_c,2); #endif /* !_NTIGHT_ */ #if defined(_INDO_) #if defined(_INDOPRO_) #ifdef _TIGHT_ ind_dom[res][0] = 0; #else copy_index_domain(res, arg, ind_dom); #endif /* _TIGHT_ */ #endif #if defined(_NONLIND_) arg_index[res] = arg_index[arg]; #endif #else #if !defined(_ZOS_) /* BREAK_ZOS */ ASSIGN_T(Tres, TAYLOR_BUFFER[res]) FOR_0_LE_l_LT_pk TRES_INC = 0.0; #endif #endif /* ALL_TOGETHER_AGAIN */ break; /****************************************************************************/ /* CONDITIONALS */ /*--------------------------------------------------------------------------*/ case cond_assign: /* cond_assign */ arg = get_locint_f(); arg1 = get_locint_f(); arg2 = get_locint_f(); res = get_locint_f(); coval = get_val_f(); IF_KEEP_WRITE_TAYLOR(res,keep,k,p) /* olvo 980924 changed order to allow reflexive ops */ #if defined (_INDO_) #if defined (_INDOPRO_) #if defined (_TIGHT_) if (dp_T0[arg] > 0) { if (coval <= 0.0) MINDEC(ret_c,2); dp_T0[res] = dp_T0[arg1]; copy_index_domain(res, arg1, ind_dom); } else { if (coval > 0.0) MINDEC(ret_c,2); if (dp_T0[arg] == 0) MINDEC(ret_c,0); dp_T0[res] = dp_T0[arg2]; copy_index_domain(res, arg2, ind_dom); } #else combine_2_index_domains(res, arg1, arg2, ind_dom); #endif #endif #if defined (_NONLIND_) #ifdef _TIGHT_ if (dp_T0[arg] > 0) { if (coval <= 0.0) MINDEC(ret_c,2); dp_T0[res] = dp_T0[arg1]; arg_index[res] = arg_index[arg1]; } else { if (coval > 0.0) MINDEC(ret_c,2); if (dp_T0[arg] == 0) MINDEC(ret_c,0); dp_T0[res] = dp_T0[arg2]; arg_index[res] = arg_index[arg2]; } #else arg_index[res] = opind++; #endif #endif #else #if !defined(_ZOS_) /* BREAK_ZOS */ ASSIGN_T(Tres, TAYLOR_BUFFER[res]) ASSIGN_T(Targ1, TAYLOR_BUFFER[arg1]) ASSIGN_T(Targ2, TAYLOR_BUFFER[arg2]) #endif /* ALL_TOGETHER_AGAIN */ #ifdef _INT_FOR_ #ifdef _TIGHT_ coval = get_val_f(); if (dp_T0[arg] > 0) FOR_0_LE_l_LT_pk TRES_INC = TARG1_INC; else FOR_0_LE_l_LT_pk TRES_INC = TARG2_INC; if (dp_T0[arg] > 0) { if (coval <= 0.0) MINDEC(ret_c,2); dp_T0[res] = dp_T0[arg1]; } else { if (coval > 0.0) MINDEC(ret_c,2); if (dp_T0[arg] == 0) MINDEC(ret_c,0); dp_T0[res] = dp_T0[arg2]; } #endif /* _TIGHT_ */ #ifdef _NTIGHT_ FOR_0_LE_l_LT_pk TRES_INC = TARG1_INC | TARG2_INC; #endif /* _NTIGHT_ */ #else #if !defined(_ZOS_) /* BREAK_ZOS */ if (dp_T0[arg] > 0) FOR_0_LE_l_LT_pk TRES_INC = TARG1_INC; else FOR_0_LE_l_LT_pk TRES_INC = TARG2_INC; #endif if (dp_T0[arg] > 0) { if (coval <= 0.0) MINDEC(ret_c,2); dp_T0[res] = dp_T0[arg1]; } else { if (coval > 0.0) MINDEC(ret_c,2); if (dp_T0[arg] == 0) MINDEC(ret_c,0); dp_T0[res] = dp_T0[arg2]; } #endif #endif /* ALL_TOGETHER_AGAIN */ break; /*--------------------------------------------------------------------------*/ case cond_assign_s: /* cond_assign_s */ arg = get_locint_f(); arg1 = get_locint_f(); res = get_locint_f(); coval = get_val_f(); IF_KEEP_WRITE_TAYLOR(res,keep,k,p) /* olvo 980924 changed order to allow reflexive ops */ #if defined(_INDO_) #if defined(_INDOPRO_) #ifdef _TIGHT_ if (dp_T0[arg] > 0) copy_index_domain(res, arg1, ind_dom); #else merge_2_index_domains(res, arg1, ind_dom); #endif #endif #if defined(_NONLIND_) arg_index[res] = arg_index[arg1]; #endif #else #if !defined(_ZOS_) /* BREAK_ZOS */ ASSIGN_T(Tres, TAYLOR_BUFFER[res]) ASSIGN_T(Targ1, TAYLOR_BUFFER[arg1]) #endif /* ALL_TOGETHER_AGAIN */ #ifdef _INT_FOR_ #ifdef _TIGHT_ coval = get_val_f(); if (dp_T0[arg] > 0) #endif /* _TIGHT_ */ FOR_0_LE_l_LT_pk TRES_INC = TARG1_INC; #ifdef _TIGHT_ if (dp_T0[arg] > 0) { if (coval <= 0.0) MINDEC(ret_c,2); dp_T0[res] = dp_T0[arg1]; } else if (dp_T0[arg] == 0) MINDEC(ret_c,0); #endif /* _TIGHT_ */ #else #if !defined(_ZOS_) /* BREAK_ZOS */ if (dp_T0[arg] > 0) FOR_0_LE_l_LT_pk TRES_INC = TARG1_INC; #endif if (dp_T0[arg] > 0) { if (coval <= 0.0) MINDEC(ret_c,2); dp_T0[res] = dp_T0[arg1]; } else if (dp_T0[arg] == 0) MINDEC(ret_c,0); #endif #endif /* ALL_TOGETHER_AGAIN */ break; /*--------------------------------------------------------------------------*/ /* NEW CONDITIONALS */ /*--------------------------------------------------------------------------*/ #if defined(ADOLC_ADVANCED_BRANCHING) case neq_a_a: case eq_a_a: case le_a_a: case ge_a_a: case lt_a_a: case gt_a_a: coval = get_val_f(); arg = get_locint_f(); arg1 = get_locint_f(); res = get_locint_f(); #if !defined(_NTIGHT_) { revreal retval = -1; const char* opname = ""; switch (operation) { case neq_a_a: retval = (revreal)(dp_T0[arg] != dp_T0[arg1]); opname = "neq_a_a"; break; case eq_a_a: retval = (revreal)(dp_T0[arg] == dp_T0[arg1]); opname = "eq_a_a"; break; case ge_a_a: retval = (revreal)(dp_T0[arg] >= dp_T0[arg1]); opname = "ge_a_a"; break; case le_a_a: retval = (revreal)(dp_T0[arg] <= dp_T0[arg1]); opname = "le_a_a"; break; case gt_a_a: retval = (revreal)(dp_T0[arg] > dp_T0[arg1]); opname = "gt_a_a"; break; case lt_a_a: retval = (revreal)(dp_T0[arg] < dp_T0[arg1]); opname = "lt_a_a"; break; } if (retval != coval && ADOLC_GLOBAL_TAPE_VARS.branchSwitchWarning) fprintf(DIAG_OUT, "ADOL-C Warning: Branch switch detected in comparison " "(operator %s).\n" "Results may be unpredictable! Retaping recommended!\n",opname); dp_T0[res] = retval; } #endif #if defined(_INDO_) #if defined(_INDOPRO_) ind_dom[res][0]=0; #endif #if defined(_NONLIND_) fod[opind].entry = maxopind+2; fod[opind].left = NULL; fod[opind].right = NULL; arg_index[res] = opind++; #endif #else #if !defined(_ZOS_) /* BREAK_ZOS */ ASSIGN_T(Tres, TAYLOR_BUFFER[res]) FOR_0_LE_l_LT_pk TRES_INC = 0; #endif #endif /* ALL_TOGETHER_AGAIN */ break; #endif /* ADVANCED_BRANCHING */ /*--------------------------------------------------------------------------*/ case subscript: coval = get_val_f(); arg = get_locint_f(); res = get_locint_f(); { size_t cnt, idx, numvar = (size_t)trunc(fabs(coval)); locint vectorloc; vectorloc = get_locint_f(); #if !defined(_NTIGHT_) idx = (size_t)trunc(fabs(dp_T0[arg])); if (idx >= numvar) fprintf(DIAG_OUT, "ADOL-C warning: index out of bounds while subscripting n=%z, idx=%z\n", numvar, idx); arg1 = vectorloc+idx; IF_KEEP_WRITE_TAYLOR(res,keep,k,p); dp_T0[res] = dp_T0[arg1]; #if defined(_INDO_) #if defined(_INDOPRO_) copy_index_domain(res, arg1, ind_dom); #endif #if defined(_NONLIND_) arg_index[res] = arg_index[arg1]; #endif #else #if !defined(_ZOS_) /* BREAK_ZOS */ ASSIGN_T(Targ1,TAYLOR_BUFFER[arg1]) ASSIGN_T(Tres,TAYLOR_BUFFER[res]) FOR_0_LE_l_LT_pk TRES_INC = TARG1_INC; #endif #endif #else fprintf(DIAG_OUT, "ADOL-C error: active subscripting does not work in safe mode, please use tight mode\n"); exit(-2); #endif /* ALL_TOGETHER_AGAIN */ } break; case subscript_ref: coval = get_val_f(); arg = get_locint_f(); res = get_locint_f(); { size_t cnt, idx, numvar = (size_t)trunc(fabs(coval)); locint vectorloc; vectorloc = get_locint_f(); #if !defined(_NTIGHT_) idx = (size_t)trunc(fabs(dp_T0[arg])); if (idx >= numvar) fprintf(DIAG_OUT, "ADOL-C warning: index out of bounds while subscripting (ref) n=%z, idx=%z\n", numvar, idx); arg1 = vectorloc+idx; IF_KEEP_WRITE_TAYLOR(res,keep,k,p); dp_T0[res] = arg1; #else fprintf(DIAG_OUT, "ADOL-C error: active subscripting does not work in safe mode, please use tight mode\n"); exit(-2); #endif } break; case ref_copyout: arg = get_locint_f(); res = get_locint_f(); #if !defined(_NTIGHT_) arg1 = (size_t)trunc(fabs(dp_T0[arg])); IF_KEEP_WRITE_TAYLOR(res,keep,k,p); dp_T0[res] = dp_T0[arg1]; #if defined(_INDO_) #if defined(_INDOPRO_) copy_index_domain(res, arg1, ind_dom); #endif #if defined(_NONLIND_) arg_index[res] = arg_index[arg1]; #endif #else #if !defined(_ZOS_) /* BREAK_ZOS */ ASSIGN_T(Targ1,TAYLOR_BUFFER[arg1]) ASSIGN_T(Tres,TAYLOR_BUFFER[res]) FOR_0_LE_l_LT_pk TRES_INC = TARG1_INC; #endif #endif #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); exit(-2); #endif /* ALL_TOGETHER_AGAIN */ break; case ref_incr_a: arg = get_locint_f(); #if !defined(_NTIGHT_) arg1 = (size_t)trunc(fabs(dp_T0[arg])); IF_KEEP_WRITE_TAYLOR(arg1,keep,k,p); dp_T0[arg1]++; #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); exit(-2); #endif break; case ref_decr_a: arg = get_locint_f(); #if !defined(_NTIGHT_) arg1 = (size_t)trunc(fabs(dp_T0[arg])); IF_KEEP_WRITE_TAYLOR(arg1,keep,k,p); dp_T0[arg1]--; #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); exit(-2); #endif break; case ref_assign_d: arg = get_locint_f(); coval = get_val_f(); #if !defined(_NTIGHT_) arg1 = (size_t)trunc(fabs(dp_T0[arg])); IF_KEEP_WRITE_TAYLOR(arg1,keep,k,p) dp_T0[arg1] = coval; #if defined(_INDO_) #if defined(_INDOPRO_) ind_dom[arg1][0] = 0; #endif #if defined(_NONLIND_) fod[opind].entry = maxopind+2; fod[opind].left = NULL; fod[opind].right = NULL; arg_index[arg1] = opind++; #endif #else #if !defined(_ZOS_) ASSIGN_T(Targ1, TAYLOR_BUFFER[arg1]) FOR_0_LE_l_LT_pk TARG1_INC = 0; #endif #endif #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); exit(-2); #endif break; case ref_assign_d_zero: arg = get_locint_f(); #if !defined(_NTIGHT_) arg1 = (size_t)trunc(fabs(dp_T0[arg])); IF_KEEP_WRITE_TAYLOR(arg1,keep,k,p) dp_T0[arg1] = 0.0; #if defined(_INDO_) #if defined(_INDOPRO_) ind_dom[arg1][0] = 0; #endif #if defined(_NONLIND_) fod[opind].entry = maxopind+2; fod[opind].left = NULL; fod[opind].right = NULL; arg_index[arg1] = opind++; #endif #else #if !defined(_ZOS_) ASSIGN_T(Targ1, TAYLOR_BUFFER[arg1]) FOR_0_LE_l_LT_pk TARG1_INC = 0; #endif #endif #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); exit(-2); #endif break; case ref_assign_d_one: arg = get_locint_f(); #if !defined(_NTIGHT_) arg1 = (size_t)trunc(fabs(dp_T0[arg])); IF_KEEP_WRITE_TAYLOR(arg1,keep,k,p) dp_T0[arg1] = 1.0; #if defined(_INDO_) #if defined(_INDOPRO_) ind_dom[arg1][0] = 0; #endif #if defined(_NONLIND_) fod[opind].entry = maxopind+2; fod[opind].left = NULL; fod[opind].right = NULL; arg_index[arg1] = opind++; #endif #else #if !defined(_ZOS_) ASSIGN_T(Targ1, TAYLOR_BUFFER[arg1]) FOR_0_LE_l_LT_pk TARG1_INC = 0; #endif #endif #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); exit(-2); #endif break; case ref_assign_a: /* assign an adouble variable an assign_a */ /* adouble value. (=) */ arg = get_locint_f(); res = get_locint_f(); #if !defined(_NTIGHT_) arg1 = (size_t)trunc(fabs(dp_T0[res])); IF_KEEP_WRITE_TAYLOR(arg1,keep,k,p) dp_T0[arg1] = dp_T0[arg]; #if defined(_INDO_) #if defined(_INDOPRO_) copy_index_domain(arg1, arg, ind_dom); #endif #if defined(_NONLIND_) arg_index[arg1] = arg_index[arg]; #endif #else #if !defined(_ZOS_) /* BREAK_ZOS */ ASSIGN_T(Targ,TAYLOR_BUFFER[arg]) ASSIGN_T(Targ1,TAYLOR_BUFFER[arg1]) FOR_0_LE_l_LT_pk TARG1_INC = TARG_INC; #endif #endif #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); exit(-2); #endif /* ALL_TOGETHER_AGAIN */ break; case ref_assign_ind: /* assign an adouble variable an assign_ind */ /* independent double value (<<=) */ arg = get_locint_f(); #if !defined(_NTIGHT_) res = (size_t)trunc(fabs(dp_T0[arg])); IF_KEEP_WRITE_TAYLOR(res,keep,k,p) dp_T0[res] = basepoint[indexi]; #if defined(_INDO_) #if defined(_INDOPRO_) ind_dom[res][0] = 1; ind_dom[res][2] = indexi; #endif #if defined(_NONLIND_) fod[opind].entry = indexi; fod[opind].left = NULL; fod[opind].right = NULL; arg_index[res] = opind++; #endif #else #if !defined(_ZOS_) /* BREAK_ZOS */ ASSIGN_T(Tres, TAYLOR_BUFFER[res]) #ifdef _INT_FOR_ FOR_0_LE_l_LT_p TRES_INC = ARGUMENT(indexi,l,i); #else FOR_0_LE_l_LT_p FOR_0_LE_i_LT_k TRES_INC = ARGUMENT(indexi,l,i); #endif #endif #endif #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); exit(-2); #endif /* ALL_TOGETHER_AGAIN */ ++indexi; break; case ref_eq_plus_d: /* Add a floating point to an eq_plus_d */ /* adouble. (+=) */ arg = get_locint_f(); coval = get_val_f(); #if !defined(_NTIGHT_) res = (size_t)trunc(fabs(dp_T0[arg])); IF_KEEP_WRITE_TAYLOR(res,keep,k,p) dp_T0[res] += coval; #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); exit(-2); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case ref_eq_plus_a: /* Add an adouble to another eq_plus_a */ /* adouble. (+=) */ arg = get_locint_f(); arg1 = get_locint_f(); #if !defined(_NTIGHT_) res = (size_t)trunc(fabs(dp_T0[arg1])); IF_KEEP_WRITE_TAYLOR(res,keep,k,p) dp_T0[res] += dp_T0[arg]; #if defined(_INDO_) #if defined(_INDOPRO_) merge_2_index_domains(res, arg, ind_dom); #endif #if defined(_NONLIND_) fod[opind].entry = maxopind+2; fod[opind].left = &fod[arg_index[res]]; fod[opind].right = &fod[arg_index[arg]]; arg_index[res] = opind++; #endif #else #if !defined(_ZOS_) /* BREAK_ZOS */ ASSIGN_T(Tres, TAYLOR_BUFFER[res]) ASSIGN_T(Targ, TAYLOR_BUFFER[arg]) #ifdef _INT_FOR_ FOR_0_LE_l_LT_pk TRES_INC |= TARG_INC; #else FOR_0_LE_l_LT_pk TRES_INC += TARG_INC; #endif #endif #endif #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); exit(-2); #endif /* ALL_TOGETHER_AGAIN */ break; case ref_eq_min_d: /* Subtract a floating point from an eq_min_d */ /* adouble. (-=) */ arg = get_locint_f(); coval = get_val_f(); #if !defined(_NTIGHT_) res = (size_t)trunc(fabs(dp_T0[arg])); IF_KEEP_WRITE_TAYLOR(res,keep,k,p) dp_T0[res] -= coval; #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); exit(-2); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case ref_eq_min_a: /* Subtract an adouble from another eq_min_a */ /* adouble. (-=) */ arg = get_locint_f(); arg1 = get_locint_f(); #if !defined(_NTIGHT_) res = (size_t)trunc(fabs(dp_T0[arg1])); IF_KEEP_WRITE_TAYLOR(res,keep,k,p) dp_T0[res] -= dp_T0[arg]; #if defined(_INDO_) #if defined(_INDOPRO_) merge_2_index_domains(res, arg, ind_dom); #endif #if defined(_NONLIND_) fod[opind].entry = maxopind+2; fod[opind].left = &fod[arg_index[res]]; fod[opind].right = &fod[arg_index[arg]]; arg_index[res] = opind++; #endif #else #if !defined(_ZOS_) /* BREAK_ZOS */ ASSIGN_T(Tres, TAYLOR_BUFFER[res]) ASSIGN_T(Targ, TAYLOR_BUFFER[arg]) #ifdef _INT_FOR_ FOR_0_LE_l_LT_pk TRES_INC |= TARG_INC; #else FOR_0_LE_l_LT_pk TRES_INC -= TARG_INC; #endif #endif #endif #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); exit(-2); #endif /* ALL_TOGETHER_AGAIN */ break; case ref_eq_mult_d: /* Multiply an adouble by a eq_mult_d */ /* flaoting point. (*=) */ arg = get_locint_f(); coval = get_val_f(); #if !defined(_NTIGHT_) res = (size_t)trunc(fabs(dp_T0[arg])); IF_KEEP_WRITE_TAYLOR(res,keep,k,p) dp_T0[res] *= coval; #if !defined(_INDO_) #if !defined(_ZOS_) /* BREAK_ZOS */ #if !defined( _INT_FOR_) FOR_0_LE_l_LT_pk ASSIGN_T(Tres, TAYLOR_BUFFER[res]) FOR_0_LE_l_LT_pk TRES_INC *= coval; #endif #endif #endif #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); exit(-2); #endif /* ALL_TOGETHER_AGAIN */ break; case ref_eq_mult_a: /* Multiply one adouble by another eq_mult_a */ /* (*=) */ arg = get_locint_f(); arg1 = get_locint_f(); #if !defined(_NTIGHT_) res = (size_t)trunc(fabs(dp_T0[arg1])); IF_KEEP_WRITE_TAYLOR(res,keep,k,p) #if defined(_INDO_) #if defined(_INDOPRO_) merge_2_index_domains(res, arg, ind_dom); #endif #if defined(_NONLIND_) fod[opind].entry = maxopind+2; fod[opind].left = &fod[arg_index[res]]; fod[opind].right = &fod[arg_index[arg]]; traverse_unary(&fod[arg_index[res]], nonl_dom, &fod[arg_index[arg]], indcheck+1,maxopind+2); traverse_unary(&fod[arg_index[arg]], nonl_dom, &fod[arg_index[res]], indcheck+1,maxopind+2); arg_index[res] = opind++; #endif #if defined(_NONLIND_OLD_) extend_nonlinearity_domain_binary(res, arg, ind_dom, nonl_dom); #endif #else #if !defined(_ZOS_) /* BREAK_ZOS */ ASSIGN_T(Tres, TAYLOR_BUFFER[res]) ASSIGN_T(Targ, TAYLOR_BUFFER[arg]) INC_pk_1(Tres) INC_pk_1(Targ) #ifdef _INT_FOR_ FOR_p_GT_l_GE_0 TRES_FODEC |= TARG_DEC; #else FOR_p_GT_l_GE_0 FOR_k_GT_i_GE_0 { TRES_FODEC = dp_T0[res]*TARG_DEC + TRES*dp_T0[arg]; DEC_TRES_FO #ifdef _HIGHER_ORDER_ TresOP = Tres-i; TargOP = Targ; for (j=0;j 0) { if (coval <= 0.0) MINDEC(ret_c,2); dp_T0[res] = dp_T0[arg1]; #if defined(_INDOPRO_) copy_index_domain(res, arg1, ind_dom); #endif #if defined(_NONLIND_) arg_index[res] = arg_index[arg1]; #endif } else { if (coval > 0.0) MINDEC(ret_c,2); if (dp_T0[arg] == 0) MINDEC(ret_c,0); dp_T0[res] = dp_T0[arg2]; #if defined(_INDOPRO_) copy_index_domain(res, arg2, ind_dom); #endif #if defined(_NONLIND_) arg_index[res] = arg_index[arg2]; #endif } #else #if !defined(_ZOS_) /* BREAK_ZOS */ ASSIGN_T(Tres, TAYLOR_BUFFER[res]) ASSIGN_T(Targ1, TAYLOR_BUFFER[arg1]) ASSIGN_T(Targ2, TAYLOR_BUFFER[arg2]) #endif /* ALL_TOGETHER_AGAIN */ #ifdef _INT_FOR_ coval = get_val_f(); if (dp_T0[arg] > 0) FOR_0_LE_l_LT_pk TRES_INC = TARG1_INC; else FOR_0_LE_l_LT_pk TRES_INC = TARG2_INC; if (dp_T0[arg] > 0) { if (coval <= 0.0) MINDEC(ret_c,2); dp_T0[res] = dp_T0[arg1]; } else { if (coval > 0.0) MINDEC(ret_c,2); if (dp_T0[arg] == 0) MINDEC(ret_c,0); dp_T0[res] = dp_T0[arg2]; } FOR_0_LE_l_LT_pk TRES_INC = TARG1_INC | TARG2_INC; #else #if !defined(_ZOS_) /* BREAK_ZOS */ if (dp_T0[arg] > 0) FOR_0_LE_l_LT_pk TRES_INC = TARG1_INC; else FOR_0_LE_l_LT_pk TRES_INC = TARG2_INC; #endif if (dp_T0[arg] > 0) { if (coval <= 0.0) MINDEC(ret_c,2); dp_T0[res] = dp_T0[arg1]; } else { if (coval > 0.0) MINDEC(ret_c,2); if (dp_T0[arg] == 0) MINDEC(ret_c,0); dp_T0[res] = dp_T0[arg2]; } #endif #endif #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); exit(-2); #endif /* ALL_TOGETHER_AGAIN */ } break; case ref_cond_assign_s: /* cond_assign_s */ arg = get_locint_f(); arg1 = get_locint_f(); arg2 = get_locint_f(); coval = get_val_f(); #if !defined(_NTIGHT_) res = (size_t)trunc(fabs(dp_T0[arg2])); IF_KEEP_WRITE_TAYLOR(res,keep,k,p) /* olvo 980924 changed order to allow reflexive ops */ #if defined(_INDO_) if (dp_T0[arg] > 0) { #if defined(_INDOPRO_) copy_index_domain(res, arg1, ind_dom); #endif #if defined(_NONLIND_) arg_index[res] = arg_index[arg1]; #endif } #else #if !defined(_ZOS_) /* BREAK_ZOS */ ASSIGN_T(Tres, TAYLOR_BUFFER[res]) ASSIGN_T(Targ1, TAYLOR_BUFFER[arg1]) #endif /* ALL_TOGETHER_AGAIN */ #ifdef _INT_FOR_ coval = get_val_f(); if (dp_T0[arg] > 0) FOR_0_LE_l_LT_pk TRES_INC = TARG1_INC; if (dp_T0[arg] > 0) { if (coval <= 0.0) MINDEC(ret_c,2); dp_T0[res] = dp_T0[arg1]; } else if (dp_T0[arg] == 0) MINDEC(ret_c,0); #else #if !defined(_ZOS_) /* BREAK_ZOS */ if (dp_T0[arg] > 0) FOR_0_LE_l_LT_pk TRES_INC = TARG1_INC; #endif if (dp_T0[arg] > 0) { if (coval <= 0.0) MINDEC(ret_c,2); dp_T0[res] = dp_T0[arg1]; } else if (dp_T0[arg] == 0) MINDEC(ret_c,0); #endif #endif #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); exit(-2); #endif /* ALL_TOGETHER_AGAIN */ break; /****************************************************************************/ /* REMAINING STUFF */ /*--------------------------------------------------------------------------*/ case take_stock_op: /* take_stock_op */ size = get_locint_f(); res = get_locint_f(); d = get_val_v_f(size); for (ls=0;lsADOLC_EXT_FCT_POINTER==NULL) fail(ADOLC_EXT_DIFF_NULLPOINTER_DIFFFUNC); if (n>0) { if (edfct->dp_x==NULL) fail(ADOLC_EXT_DIFF_NULLPOINTER_ARGUMENT); #if !defined(_ZOS_) if (ADOLC_EXT_POINTER_X==NULL) fail(ADOLC_EXT_DIFF_NULLPOINTER_ARGUMENT); #endif } if (m>0) { if (edfct->dp_y==NULL) fail(ADOLC_EXT_DIFF_NULLPOINTER_ARGUMENT); #if !defined(_ZOS_) if (ADOLC_EXT_POINTER_Y==NULL) fail(ADOLC_EXT_DIFF_NULLPOINTER_ARGUMENT); #endif } arg = ADOLC_CURRENT_TAPE_INFOS.lowestXLoc_for; for (loop=0; loopdp_x_changes) { IF_KEEP_WRITE_TAYLOR(arg, keep, k, p); } edfct->dp_x[loop]=dp_T0[arg]; #if !defined(_ZOS_) ADOLC_EXT_LOOP ADOLC_EXT_POINTER_X[loop]ADOLC_EXT_SUBSCRIPT = TAYLOR_BUFFER[arg]ADOLC_EXT_SUBSCRIPT; #endif ++arg; } arg = ADOLC_CURRENT_TAPE_INFOS.lowestYLoc_for; for (loop=0; loopdp_y_priorRequired) { IF_KEEP_WRITE_TAYLOR(arg, keep, k, p); } edfct->dp_y[loop]=dp_T0[arg]; #if !defined(_ZOS_) ADOLC_EXT_LOOP ADOLC_EXT_POINTER_Y[loop]ADOLC_EXT_SUBSCRIPT = TAYLOR_BUFFER[arg]ADOLC_EXT_SUBSCRIPT; #endif ++arg; } ext_retc = edfct->ADOLC_EXT_FCT_COMPLETE; MINDEC(ret_c, ext_retc); res = ADOLC_CURRENT_TAPE_INFOS.lowestXLoc_for; for (loop=0; loopdp_x[loop]; #if !defined(_ZOS_) ADOLC_EXT_LOOP TAYLOR_BUFFER[res]ADOLC_EXT_SUBSCRIPT = ADOLC_EXT_POINTER_X[loop]ADOLC_EXT_SUBSCRIPT; #endif ++res; } res = ADOLC_CURRENT_TAPE_INFOS.lowestYLoc_for; for (loop=0; loopdp_y[loop]; #if !defined(_ZOS_) ADOLC_EXT_LOOP TAYLOR_BUFFER[res]ADOLC_EXT_SUBSCRIPT = ADOLC_EXT_POINTER_Y[loop]ADOLC_EXT_SUBSCRIPT; #endif ++res; } break; #endif /*--------------------------------------------------------------------------*/ default: /* default */ /* Die here, we screwed up */ fprintf(DIAG_OUT,"ADOL-C fatal error in " GENERATED_FILENAME " (" __FILE__ ") : no such operation %d\n", operation); exit(-1); break; } /* endswitch */ /* Read the next operation */ operation=get_op_f(); #if defined(ADOLC_DEBUG) ++countPerOperation[operation]; #endif /* ADOLC_DEBUG */ } /* endwhile */ #if defined(ADOLC_DEBUG) printf("\nTape contains:\n"); for (v = 0; v < 256; ++v) if (countPerOperation[v] > 0) printf("operation %3d: %6d time(s) - %6d taylors written (%10.2f per operation)\n", v, countPerOperation[v], taylorPerOperation[v], (double)taylorPerOperation[v] / (double)countPerOperation[v]); printf("\n"); #endif /* ADOLC_DEBUG */ #if defined(_KEEP_) if (keep) taylor_close(taylbuf); #endif /* clean up */ #if !defined (_NTIGHT_) free(dp_T0); #endif /* !_NTIGHT_ */ #if !defined(_INDO_) #if !defined(_ZOS_) # if defined(_FOS_) free(dp_T); # else #if !defined (_INT_FOR_) myfree2(dpp_T); free(dp_Ttemp); #endif /* !_NTIGHT_ */ #endif #endif #endif #if defined(_HIGHER_ORDER_) free(dp_z); #endif end_sweep(); #if defined(_INDO_) #if defined(_INDOPRO_) for(i=0;ientry; temp1 = temp->left; free(temp); temp = temp1; } } free(sod); free(nonl_dom); free(fod); free(arg_index); #endif #if defined(_NONLIND_OLD_) for( i=0; i < indcheck; i++) { crs[i] = (unsigned int*) malloc(sizeof(unsigned int) * (nonl_dom[i][0]+1)); crs[i][0] = nonl_dom[i][0]; for(l=1; l < crs[i][0]+1; l++) crs[i][l] = nonl_dom[i][l+1]; free(nonl_dom[i]); } free(nonl_dom); #endif #endif return ret_c; } /****************************************************************************/ #if defined(_INDOPRO_) && !defined(_NONLIND_OLD_) /****************************************************************************/ /* set operations for propagation of index domains */ /*--------------------------------------------------------------------------*/ /* operations on index domains */ #if defined(_TIGHT_) void copy_index_domain(int res, int arg, locint **ind_dom) { int i; if (ind_dom[arg][0] > ind_dom[res][1]) { free(ind_dom[res]); ind_dom[res] = (locint *) malloc(sizeof(locint) * 2*(ind_dom[arg][0]+1)); ind_dom[res][1] = 2*ind_dom[arg][0]; } for(i=2;ileft != NULL) { free_tree(tree->left,num); } if (tree->right != NULL) { free_tree(tree->right,num); } { if (tree->entry == num) free(tree); } } void traverse_crs(IndexElement* tree, IndexElement_sod* sod, int num) { IndexElement_sod *temp, *temp1; int ii; if (tree->left != NULL) { traverse_crs(tree->left, sod, num); } if (tree->right != NULL) { traverse_crs(tree->right, sod, num); } if (tree->entry < num) { temp = sod->left; if (temp == NULL) { temp = (struct IndexElement_sod*) malloc(sizeof(struct IndexElement_sod)); temp->left = NULL; temp->entry = tree->entry; sod->entry++; sod->left=temp; } else { while ((temp->entry < tree->entry) && (temp->left != NULL)) { temp1 = temp; temp = temp->left; } if (temp->left == NULL) { if(temp->entry < tree->entry) { temp->left = (struct IndexElement_sod*) malloc(sizeof(struct IndexElement_sod)); temp = temp->left; temp->left = NULL; temp->entry = tree->entry; sod->entry++; } if(temp->entry > tree->entry) { temp->left = (struct IndexElement_sod*) malloc(sizeof(struct IndexElement_sod)); temp->left->entry = temp->entry; temp->left->left = NULL; temp->entry = tree->entry; sod->entry++; } } else { if (temp->entry > tree->entry) { temp1 = (struct IndexElement_sod*) malloc(sizeof(struct IndexElement_sod)); temp1->left = temp->left; temp1->entry = temp->entry; temp->entry = tree->entry; temp->left=temp1; sod->entry++; } } } } } void traverse_unary(IndexElement* tree, IndexElement* nonl_dom, IndexElement* fodi, int num, int maxopind) { IndexElement *temp; if (tree->left != NULL) { traverse_unary(tree->left, nonl_dom, fodi, num, maxopind); if (tree->right != NULL) { traverse_unary(tree->right, nonl_dom, fodi, num, maxopind); } } else { if(tree->entryright = fodi; temp->left = nonl_dom[tree->entry].left; temp->entry= num; nonl_dom[tree->entry].left = temp; } } } #endif #endif #if defined(_NONLIND_OLD_) #if defined(_TIGHT_) void extend_nonlinearity_domain_binary_step (int arg1, int arg2, locint **ind_dom, locint **nonl_dom) { int index,num,num1, num2, i,j,k,l,m; locint *temp_nonl, *index_nonl_dom, *arg1_ind_dom, *arg2_ind_dom; num = ind_dom[arg2][0]; for(m=2;m num2) num2 = num1+num; temp_nonl = (locint*) malloc(sizeof(locint)*(num2+2)); temp_nonl[1] = num2; i = 2; k = 2; j = 2; num1 +=2; num2 = num+2; while ((i BEGIN_C_DECLS /****************************************************************************/ /* CONVOLUTION */ /*--------------------------------------------------------------------------*/ /* Evaluates convolution of a and b to c */ void conv( int dim, revreal *a, revreal *b, revreal *c ) { double tmpVal; int i,j; for (i=dim-1; i>=0; i--) { tmpVal = a[i]*b[0]; for (j=1; j<=i; j++) tmpVal += a[i-j]*b[j]; c[i] = tmpVal; } } void conv0( int dim, revreal *a, revreal *b, revreal *c ) { double tmpVal; int i,j; for (i=dim-1; i>=0; i--) { tmpVal = a[i]*b[0]; for (j=1; j<=i; j++) tmpVal += a[i-j]*b[j]; c[i] = tmpVal; } } /****************************************************************************/ /* INCREMENTAL CONVOLUTION */ /*--------------------------------------------------------------------------*/ /* Increments truncated convolution of a and b to c */ void inconv( int dim, revreal *a, revreal *b, revreal *c ) { double tmpVal; int i,j; for (i=dim-1; i>=0; i--) { tmpVal = a[i]*b[0]; for (j=1; j<=i; j++) tmpVal += a[i-j]*b[j]; c[i] += tmpVal; } } /*--------------------------------------------------------------------------*/ /* olvo 980616 nf */ /* Increments truncated convolution of a and b to c and sets a to zero */ void inconv0( int dim, revreal *a, revreal *b, revreal *c ) { double tmpVal; int i,j; for (i=dim-1; i>=0; i--) { tmpVal = a[i]*b[0]; a[i] = 0; for (j=1; j<=i; j++) tmpVal += a[i-j]*b[j]; c[i] += tmpVal; } } /*--------------------------------------------------------------------------*/ /* olvo 980616 nf */ /* Increments truncated convolution of a and b to c */ void inconv1( int dim, revreal *a, revreal *b, revreal *c ) { revreal tmpVal; int i,j; for (i=dim-1; i>=0; i--) { tmpVal = a[i]*b[0]; for (j=1; j<=i; j++) tmpVal += a[i-j]*b[j]; c[i] += tmpVal; } } /****************************************************************************/ /* DECREMENTAL CONVOLUTION */ /*--------------------------------------------------------------------------*/ /* Decrements truncated convolution of a and b to c */ void deconv( int dim, revreal *a, revreal *b, revreal *c ) { double tmpVal; int i,j; for (i=dim-1; i>=0; i--) { tmpVal = a[i]*b[0]; for (j=1; j<=i; j++) tmpVal += a[i-j]*b[j]; c[i] -= tmpVal; } } /*--------------------------------------------------------------------------*/ /* olvo 980616 nf */ /* Decrements truncated convolution of a and b to c and sets a to zero */ void deconv0( int dim, revreal *a, revreal *b, revreal *c ) { double tmpVal; int i,j; for (i=dim-1; i>=0; i--) { tmpVal = a[i]*b[0]; a[i] = 0; for (j=1; j<=i; j++) tmpVal += a[i-j]*b[j]; c[i] -= tmpVal; } } /*--------------------------------------------------------------------------*/ /* Decrements truncated convolution of a and b to c */ void deconv1( int dim, revreal *a, revreal *b, revreal *c ) { revreal tmpVal; int i,j; for (i=dim-1; i>=0; i--) { tmpVal = a[i]*b[0]; for (j=1; j<=i; j++) tmpVal += a[i-j]*b[j]; c[i] -= tmpVal; } } /*--------------------------------------------------------------------------*/ /* Decrements truncated convolution of a and b to c and sets a to zero */ void deconvZeroR( int dim, revreal *a, revreal *b, revreal *c ) { double tmpVal; int i,j; for (i=dim-1; i>=0; i--) { tmpVal = a[i]*b[0]; a[i] = 0; for (j=1; j<=i; j++) tmpVal += a[i-j]*b[j]; c[i] -= tmpVal; } } /****************************************************************************/ /* OTHER USEFUL ROUTINES */ /*--------------------------------------------------------------------------*/ void divide( int dim, revreal *a, revreal *b, revreal *c ) { int i,j; double rec = 1/b[0]; for (i=0; i #undef _INT_REV_ #undef _TIGHT_ ADOL-C-2.4.1/ADOL-C/src/hov_forward.c0000644000076600007660000000142611227420735015253 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: hov_forward.c Revision: $Id: hov_forward.c 42 2009-07-15 18:37:17Z awalther $ Contents: hov_forward (higher-order-vector forward mode) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #define _HOV_ 1 #undef _KEEP_ #include #undef _HOV_ ADOL-C-2.4.1/ADOL-C/src/hos_reverse.c0000644000076600007660000000140711227420735015256 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: hos_reverse.c Revision: $Id: hos_reverse.c 42 2009-07-15 18:37:17Z awalther $ Contents: hos_reverse (higher-order-scalar reverse mode) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #define _HOS_ 1 #include #undef _HOS_ ADOL-C-2.4.1/ADOL-C/src/int_forward_s.c0000644000076600007660000000135611227420735015575 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: int_forward_s.c Revision: $Id: int_forward_s.c 42 2009-07-15 18:37:17Z awalther $ Contents: int_forward (integer forward mode safe for bit pattern propagation) Copyright (c) Andrea Walther, Christo Mitev This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #define _INT_FOR_ 1 #define _NTIGHT_ 1 #include #undef _INT_FOR_ #undef _NTIGHT_ ADOL-C-2.4.1/ADOL-C/src/fo_rev.c0000644000076600007660000022656012062606020014212 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: fo_rev.c Revision: $Id: fo_rev.c 376 2012-12-14 11:22:56Z kulshres $ Contents: Contains the routines : fos_reverse (first-order-scalar reverse mode) : define _FOS_ fov_reverse (first-order-vector reverse mode) : define _FOV_ int_reverse_tight, ( first-order-vector reverse mode for bit patterns, checks all dependences on taylors and real values, more precize) int_reverse_safe, ( first-order-vector reverse mode for bit patterns, return always 3, no dependences on taylors and real values, faster than tight) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel, Kshitij Kulshreshtha This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ /***************************************************************************** There are four basic versions of the procedure `reverse', which are optimized for the cases of scalar or vector reverse sweeps with first or higher derivatives, respectively. In the calling sequence this distinction is apparent from the type of the parameters `lagrange' and `results'. The former may be left out and the integer parameters `depen', `indep', `degre', and `nrows' must be set or default according to the following matrix of calling cases. no lagrange double* lagrange double** lagrange double* gradient of scalar weight vector times infeasible results valued function Jacobian product combination ( depen = 1 , ( depen > 0 , degre = 0 , degre = 0 , ------ nrows = 1 ) nrows = 1 ) double** Jacobian of vector weight vector times weight matrix results valued function Taylor-Jacobians times Jacobian ( 0 < depen ( depen > 0 , ( depen > 0 , = nrows , degre > 0 , degre = 0 , degre = 0 ) nrows = 1 ) nrows > 0 ) double*** full family of ------------ weigth matrix x results Taylor-Jacobians ------------ Taylor Jacobians *****************************************************************************/ /****************************************************************************/ /* MACROS */ #undef _ADOLC_VECTOR_ /*--------------------------------------------------------------------------*/ #ifdef _FOS_ #define GENERATED_FILENAME "fos_reverse" #define RESULTS(l,indexi) results[indexi] #define LAGRANGE(l,indexd) lagrange[indexd] /*--------------------------------------------------------------------------*/ #elif _FOV_ #define GENERATED_FILENAME "fov_reverse" #define _ADOLC_VECTOR_ #define RESULTS(l,indexi) results[l][indexi] #define LAGRANGE(l,indexd) lagrange[l][indexd] #else #if defined(_INT_REV_) #if defined(_TIGHT_) #define GENERATED_FILENAME "int_reverse_t" #endif #if defined(_NTIGHT_) #define GENERATED_FILENAME "int_reverse_s" #endif #define RESULTS(l,indexi) results[l][indexi] #define LAGRANGE(l,indexd) lagrange[l][indexd] #else #error Error ! Define [_FOS_ | _FOV_ | _INT_REV_SAFE_ | _INT_REV_TIGHT_ ] #endif #endif /*--------------------------------------------------------------------------*/ /* access to variables */ #ifdef _FOS_ #define ARES *Ares #define AARG *Aarg #define AARG1 *Aarg1 #define AARG2 *Aarg2 #define ARES_INC *Ares #define AARG_INC *Aarg #define AARG1_INC *Aarg1 #define AARG2_INC *Aarg2 #define ARES_INC_O Ares #define AARG_INC_O /adAarg #define AARG1_INC_O Aarg1 #define AARG2_INC_O Aarg2 #define ASSIGN_A(a,b) a = &b; #else /* _FOV_ */ #ifdef _FOV_ #define ARES *Ares #define AARG *Aarg #define AARG1 *Aarg1 #define AARG2 *Aarg2 #define ARES_INC *Ares++ #define AARG_INC *Aarg++ #define AARG1_INC *Aarg1++ #define AARG2_INC *Aarg2++ #define ARES_INC_O Ares++ #define AARG_INC_O Aarg++ #define AARG1_INC_O Aarg1++ #define AARG2_INC_O Aarg2++ #define ASSIGN_A(a,b) a = b; #else #ifdef _INT_REV_ #define ARES *Ares #define AARG *Aarg #define AARG1 *Aarg1 #define AARG2 *Aarg2 #define ARES_INC *Ares++ #define AARG_INC *Aarg++ #define AARG1_INC *Aarg1++ #define AARG2_INC *Aarg2++ #define ARES_INC_O Ares++ #define AARG_INC_O Aarg++ #define AARG1_INC_O Aarg1++ #define AARG2_INC_O Aarg2++ #define ASSIGN_A(a,b) a = b; #endif #endif #endif #define TRES rp_T[res] #define TARG rp_T[arg] #define TARG1 rp_T[arg1] #define TARG2 rp_T[arg2] /*--------------------------------------------------------------------------*/ /* loop stuff */ #ifdef _ADOLC_VECTOR_ #define FOR_0_LE_l_LT_p for (l=0; l=0; l--) #else #ifdef _INT_REV_ #define FOR_0_LE_l_LT_p for (l=0; l=0; l--) #else #define FOR_0_LE_l_LT_p #define FOR_p_GT_l_GE_0 #endif #endif #ifdef _FOV_ #define FOR_0_LE_l_LT_pk1 for (l=0; l #include #include "oplate.h" #include "taping_p.h" #include #include "externfcts_p.h" #include BEGIN_C_DECLS /****************************************************************************/ /* NOW THE CODE */ #ifdef _FOS_ /****************************************************************************/ /* First-Order Scalar Reverse Pass. */ /****************************************************************************/ int fos_reverse(short tnum, /* tape id */ int depen, /* consistency chk on # of deps */ int indep, /* consistency chk on # of indeps */ double *lagrange, double *results) /* coefficient vectors */ #else #if _FOV_ /****************************************************************************/ /* First-Order Vector Reverse Pass. */ /****************************************************************************/ int fov_reverse(short tnum, /* tape id */ int depen, /* consistency chk on # of deps */ int indep, /* consistency chk on # of indeps */ int nrows, /* # of Jacobian rows being calculated */ double **lagrange, /* domain weight vector */ double **results) /* matrix of coefficient vectors */ #else #if defined(_INT_REV_) #if defined(_TIGHT_) /****************************************************************************/ /* First Order Vector version of the reverse mode for bit patterns, tight */ /****************************************************************************/ int int_reverse_tight( short tnum, /* tape id */ int depen, /* consistency chk on # of deps */ int indep, /* consistency chk on # of indeps */ int nrows, /* # of Jacobian rows being calculated */ unsigned long int **lagrange,/* domain weight vector[var][row](in)*/ unsigned long int **results) /* matrix of coeff. vectors[var][row]*/ #endif #if defined(_NTIGHT_) /****************************************************************************/ /* First Order Vector version of the reverse mode, bit pattern, safe */ /****************************************************************************/ int int_reverse_safe( short tnum, /* tape id */ int depen, /* consistency chk on # of deps */ int indep, /* consistency chk on # of indeps */ int nrows, /* # of Jacobian rows being calculated */ unsigned long int **lagrange,/* domain weight vector[var][row](in)*/ unsigned long int **results) /* matrix of coeff. vectors[var][row]*/ #endif #endif #endif #endif { /****************************************************************************/ /* ALL VARIABLES */ unsigned char operation; /* operation code */ int ret_c = 3; /* return value */ locint size = 0; locint res = 0; locint arg = 0; locint arg1 = 0; locint arg2 = 0; #if !defined (_NTIGHT_) double coval = 0, *d = 0; #endif int indexi = 0, indexd = 0; /* loop indices */ #if defined(_FOV_) int l; #endif #if defined(_INT_REV_) int l; #endif int j, ls; /* other necessary variables */ #if !defined (_NTIGHT_) double r0, r_0; int taycheck; int numdep,numind; #endif /*--------------------------------------------------------------------------*/ /* Adjoint stuff */ #ifdef _FOS_ revreal *rp_A; revreal aTmp; #endif #ifdef _FOV_ revreal **rpp_A, *Aqo; revreal aTmp; #endif #if !defined(_NTIGHT_) revreal *rp_T; #endif /* !_NTIGHT_ */ #if !defined _INT_REV_ revreal *Ares, *Aarg, *Aarg1, *Aarg2; #else unsigned long int **upp_A; unsigned long int *Ares, *Aarg, *Aarg1, *Aarg2; unsigned long int aTmp; #endif /*--------------------------------------------------------------------------*/ #ifdef _ADOLC_VECTOR_ int p = nrows; #endif #ifdef _INT_REV_ int p = nrows; #endif #if !defined(ADOLC_USE_CALLOC) char * c_Ptr; #endif /****************************************************************************/ /* extern diff. function variables */ #if defined(_FOS_) # define ADOLC_EXT_FCT_U edfct->dp_U # define ADOLC_EXT_FCT_Z edfct->dp_Z # define ADOLC_EXT_FCT_POINTER fos_reverse # define ADOLC_EXT_FCT_COMPLETE \ fos_reverse(m, edfct->dp_U, n, edfct->dp_Z, edfct->dp_x, edfct->dp_y) # define ADOLC_EXT_FCT_SAVE_NUMDIRS #else # define ADOLC_EXT_FCT_U edfct->dpp_U # define ADOLC_EXT_FCT_Z edfct->dpp_Z # define ADOLC_EXT_FCT_POINTER fov_reverse # define ADOLC_EXT_FCT_COMPLETE \ fov_reverse(m, p, edfct->dpp_U, n, edfct->dpp_Z, edfct->dp_x, edfct->dp_y) # define ADOLC_EXT_FCT_SAVE_NUMDIRS ADOLC_CURRENT_TAPE_INFOS.numDirs_rev = nrows #endif #if !defined(_INT_REV_) locint n, m; ext_diff_fct *edfct; int loop; int ext_retc; int oldTraceFlag; #endif ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; #if defined(ADOLC_DEBUG) /****************************************************************************/ /* DEBUG MESSAGES */ fprintf(DIAG_OUT,"Call of %s(..) with tag: %d, n: %d, m %d,\n", GENERATED_FILENAME, tnum, indep, depen); #ifdef _ADOLC_VECTOR_ fprintf(DIAG_OUT," p: %d\n\n",nrows); #endif #endif /****************************************************************************/ /* INITs */ /*------------------------------------------------------------------------*/ /* Set up stuff for the tape */ /* Initialize the Reverse Sweep */ init_rev_sweep(tnum); failAdditionalInfo3 = depen; failAdditionalInfo4 = indep; if ( (depen != ADOLC_CURRENT_TAPE_INFOS.stats[NUM_DEPENDENTS]) || (indep != ADOLC_CURRENT_TAPE_INFOS.stats[NUM_INDEPENDENTS]) ) fail(ADOLC_REVERSE_COUNTS_MISMATCH); indexi = ADOLC_CURRENT_TAPE_INFOS.stats[NUM_INDEPENDENTS] - 1; indexd = ADOLC_CURRENT_TAPE_INFOS.stats[NUM_DEPENDENTS] - 1; /****************************************************************************/ /* MEMORY ALLOCATION STUFF */ /*--------------------------------------------------------------------------*/ #ifdef _FOS_ /* FOS */ rp_A = (revreal*) malloc(ADOLC_CURRENT_TAPE_INFOS.stats[NUM_MAX_LIVES] * sizeof(revreal)); if (rp_A == NULL) fail(ADOLC_MALLOC_FAILED); ADOLC_CURRENT_TAPE_INFOS.rp_A = rp_A; rp_T = (revreal *)malloc(ADOLC_CURRENT_TAPE_INFOS.stats[NUM_MAX_LIVES] * sizeof(revreal)); if (rp_T == NULL) fail(ADOLC_MALLOC_FAILED); #if !defined(ADOLC_USE_CALLOC) c_Ptr = (char *) ADOLC_GLOBAL_TAPE_VARS.rp_A; *c_Ptr = 0; memcpy(c_Ptr + 1, c_Ptr, sizeof(double) * ADOLC_CURRENT_TAPE_INFOS.stats[NUM_MAX_LIVES] - 1); #endif # define ADJOINT_BUFFER rp_A # define ADJOINT_BUFFER_ARG_L rp_A[arg] # define ADJOINT_BUFFER_RES_L rp_A[res] # define ADOLC_EXT_FCT_U_L_LOOP edfct->dp_U[loop] # define ADOLC_EXT_FCT_Z_L_LOOP edfct->dp_Z[loop] /*--------------------------------------------------------------------------*/ #else #if defined _FOV_ /* FOV */ rpp_A = (revreal**)malloc(ADOLC_CURRENT_TAPE_INFOS.stats[NUM_MAX_LIVES] * sizeof(revreal*)); if (rpp_A == NULL) fail(ADOLC_MALLOC_FAILED); Aqo = (revreal*)malloc(ADOLC_CURRENT_TAPE_INFOS.stats[NUM_MAX_LIVES] * p * sizeof(revreal)); if (Aqo == NULL) fail(ADOLC_MALLOC_FAILED); for (j=0; jdpp_U[l][loop] # define ADOLC_EXT_FCT_Z_L_LOOP edfct->dpp_Z[l][loop] #else #if defined _INT_REV_ upp_A = myalloc2_ulong(ADOLC_CURRENT_TAPE_INFOS.stats[NUM_MAX_LIVES], p); #if defined _TIGHT_ ADOLC_CURRENT_TAPE_INFOS.upp_A = upp_A; rp_T = (revreal *)malloc(ADOLC_CURRENT_TAPE_INFOS.stats[NUM_MAX_LIVES] * sizeof(revreal)); if (rp_T == NULL) fail(ADOLC_MALLOC_FAILED); #endif # define ADJOINT_BUFFER upp_A # define ADJOINT_BUFFER_ARG_L upp_A[arg][l] # define ADJOINT_BUFFER_RES_L upp_A[res][l] #endif #endif #endif /****************************************************************************/ /* TAYLOR INITIALIZATION */ #if !defined(_NTIGHT_) ADOLC_CURRENT_TAPE_INFOS.rp_T = rp_T; taylor_back(tnum, &numdep, &numind, &taycheck); if (taycheck < 0) { fprintf(DIAG_OUT,"\n ADOL-C error: reverse fails because it was not" " preceded\nby a forward sweep with degree>0, keep=1!\n"); exit(-2); }; if((numdep != depen)||(numind != indep)) fail(ADOLC_REVERSE_TAYLOR_COUNTS_MISMATCH); #endif /* !_NTIGHT_ */ /****************************************************************************/ /* REVERSE SWEEP */ operation=get_op_r(); while (operation != start_of_tape) { /* Switch statement to execute the operations in Reverse */ switch (operation) { /****************************************************************************/ /* MARKERS */ /*--------------------------------------------------------------------------*/ case end_of_op: /* end_of_op */ get_op_block_r(); operation = get_op_r(); /* Skip next operation, it's another end_of_op */ break; /*--------------------------------------------------------------------------*/ case end_of_int: /* end_of_int */ get_loc_block_r(); /* Get the next int block */ break; /*--------------------------------------------------------------------------*/ case end_of_val: /* end_of_val */ get_val_block_r(); /* Get the next val block */ break; /*--------------------------------------------------------------------------*/ case start_of_tape: /* start_of_tape */ case end_of_tape: /* end_of_tape */ break; /****************************************************************************/ /* COMPARISON */ /*--------------------------------------------------------------------------*/ case eq_zero : /* eq_zero */ arg = get_locint_r(); #if !defined(_NTIGHT_) ret_c = 0; #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case neq_zero : /* neq_zero */ case gt_zero : /* gt_zero */ case lt_zero : /* lt_zero */ arg = get_locint_r(); break; /*--------------------------------------------------------------------------*/ case ge_zero : /* ge_zero */ case le_zero : /* le_zero */ arg = get_locint_r(); #if !defined(_NTIGHT_) if (TARG == 0) ret_c = 0; #endif /* !_NTIGHT_ */ break; /****************************************************************************/ /* ASSIGNMENTS */ /*--------------------------------------------------------------------------*/ case assign_a: /* assign an adouble variable an assign_a */ /* adouble value. (=) */ res = get_locint_r(); arg = get_locint_r(); ASSIGN_A( Aarg, ADJOINT_BUFFER[arg]) ASSIGN_A( Ares, ADJOINT_BUFFER[res]) FOR_0_LE_l_LT_p { #if defined(_INT_REV_) AARG_INC |= ARES; ARES_INC = 0; #else AARG_INC += ARES; ARES_INC = 0.0; #endif } #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case assign_d: /* assign an adouble variable a assign_d */ /* double value. (=) */ res = get_locint_r(); #if !defined(_NTIGHT_) coval = get_val_r(); #endif /* !_NTIGHT_ */ ASSIGN_A( Ares, ADJOINT_BUFFER[res]) FOR_0_LE_l_LT_p #if defined(_INT_REV_) ARES_INC = 0; #else ARES_INC = 0.0; #endif #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case assign_d_zero: /* assign an adouble variable a assign_d_zero */ case assign_d_one: /* double value (0 or 1). (=) assign_d_one */ res = get_locint_r(); ASSIGN_A( Ares, ADJOINT_BUFFER[res]) FOR_0_LE_l_LT_p #if defined(_INT_REV_) ARES_INC = 0; #else ARES_INC = 0.0; #endif #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case assign_ind: /* assign an adouble variable an assign_ind */ /* independent double value (<<=) */ res = get_locint_r(); ASSIGN_A( Ares, ADJOINT_BUFFER[res]) FOR_0_LE_l_LT_p RESULTS(l,indexi) = ARES_INC; #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ indexi--; break; /*--------------------------------------------------------------------------*/ case assign_dep: /* assign a float variable a assign_dep */ /* dependent adouble value. (>>=) */ res = get_locint_r(); ASSIGN_A( Ares, ADJOINT_BUFFER[res]) FOR_0_LE_l_LT_p ARES_INC = LAGRANGE(l,indexd); indexd--; break; /****************************************************************************/ /* OPERATION + ASSIGNMENT */ /*--------------------------------------------------------------------------*/ case eq_plus_d: /* Add a floating point to an eq_plus_d */ /* adouble. (+=) */ res = get_locint_r(); #if !defined(_NTIGHT_) coval = get_val_r(); ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case eq_plus_a: /* Add an adouble to another eq_plus_a */ /* adouble. (+=) */ res = get_locint_r(); arg = get_locint_r(); ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg, ADJOINT_BUFFER[arg]); FOR_0_LE_l_LT_p #if defined(_INT_REV_) AARG_INC |= ARES_INC; #else AARG_INC += ARES_INC; #endif #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case eq_min_d: /* Subtract a floating point from an eq_min_d */ /* adouble. (-=) */ res = get_locint_r(); #if !defined(_NTIGHT_) coval = get_val_r(); ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case eq_min_a: /* Subtract an adouble from another eq_min_a */ /* adouble. (-=) */ res = get_locint_r(); arg = get_locint_r(); ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg, ADJOINT_BUFFER[arg]) FOR_0_LE_l_LT_p #if defined(_INT_REV_) AARG_INC |= ARES_INC; #else AARG_INC -= ARES_INC; #endif #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case eq_mult_d: /* Multiply an adouble by a eq_mult_d */ /* flaoting point. (*=) */ res = get_locint_r(); #if !defined(_NTIGHT_) coval = get_val_r(); #endif /* !_NTIGHT_ */ #if!defined(_INT_REV_) ASSIGN_A( Ares, ADJOINT_BUFFER[res]) FOR_0_LE_l_LT_p ARES_INC *= coval; #endif #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case eq_mult_a: /* Multiply one adouble by another eq_mult_a */ /* (*=) */ res = get_locint_r(); arg = get_locint_r(); #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg, ADJOINT_BUFFER[arg]) FOR_0_LE_l_LT_p #if defined(_INT_REV_) AARG_INC |= ARES_INC; #else { aTmp = ARES; /* olvo 980713 nn: ARES = 0.0; */ ARES_INC = (aTmp==0)?0:(aTmp * TARG); AARG_INC += (aTmp==0)?0:(aTmp * TRES); } #endif break; /*--------------------------------------------------------------------------*/ case incr_a: /* Increment an adouble incr_a */ case decr_a: /* Increment an adouble decr_a */ res = get_locint_r(); #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; /****************************************************************************/ /* BINARY OPERATIONS */ /*--------------------------------------------------------------------------*/ case plus_a_a: /* : Add two adoubles. (+) plus a_a */ res = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg1, ADJOINT_BUFFER[arg1]) ASSIGN_A( Aarg2, ADJOINT_BUFFER[arg2]) FOR_0_LE_l_LT_p { aTmp = ARES; #if defined(_INT_REV_) ARES_INC = 0; AARG1_INC |= aTmp; AARG2_INC |= aTmp; #else ARES_INC = 0.0; AARG1_INC += aTmp; AARG2_INC += aTmp; #endif } #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case plus_d_a: /* Add an adouble and a double plus_d_a */ /* (+) */ res = get_locint_r(); arg = get_locint_r(); #if !defined(_NTIGHT_) coval = get_val_r(); #endif /* !_NTIGHT_ */ ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg, ADJOINT_BUFFER[arg]) FOR_0_LE_l_LT_p { aTmp = ARES; #if defined(_INT_REV_) ARES_INC = 0; AARG_INC |= aTmp; #else ARES_INC = 0.0; AARG_INC += aTmp; #endif } #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case min_a_a: /* Subtraction of two adoubles min_a_a */ /* (-) */ res = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg1, ADJOINT_BUFFER[arg1]) ASSIGN_A( Aarg2, ADJOINT_BUFFER[arg2]) FOR_0_LE_l_LT_p { aTmp = ARES; #if defined(_INT_REV_) ARES_INC = 0; AARG1_INC |= aTmp; AARG2_INC |= aTmp; #else ARES_INC = 0.0; AARG1_INC += aTmp; AARG2_INC -= aTmp; #endif } #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case min_d_a: /* Subtract an adouble from a min_d_a */ /* double (-) */ res = get_locint_r(); arg = get_locint_r(); #if !defined(_NTIGHT_) coval = get_val_r(); #endif /* !_NTIGHT_ */ ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg, ADJOINT_BUFFER[arg]) FOR_0_LE_l_LT_p { aTmp = ARES; #if defined(_INT_REV_) ARES_INC = 0; AARG_INC |= aTmp; #else ARES_INC = 0.0; AARG_INC -= aTmp; #endif } #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case mult_a_a: /* Multiply two adoubles (*) mult_a_a */ res = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg2, ADJOINT_BUFFER[arg2]) ASSIGN_A( Aarg1, ADJOINT_BUFFER[arg1]) FOR_0_LE_l_LT_p { aTmp = ARES; #if defined(_INT_REV_) ARES_INC = 0; AARG2_INC |= aTmp; AARG1_INC |= aTmp; #else ARES_INC = 0.0; AARG2_INC += (aTmp==0)?0:(aTmp * TARG1); AARG1_INC += (aTmp==0)?0:(aTmp * TARG2); #endif } break; /*--------------------------------------------------------------------------*/ /* olvo 991122: new op_code with recomputation */ case eq_plus_prod: /* increment a product of eq_plus_prod */ /* two adoubles (*) */ res = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg2, ADJOINT_BUFFER[arg2]) ASSIGN_A( Aarg1, ADJOINT_BUFFER[arg1]) #if !defined(_NTIGHT_) /* RECOMPUTATION */ TRES -= TARG1*TARG2; #endif /* !_NTIGHT_ */ FOR_0_LE_l_LT_p { #if defined(_INT_REV_) AARG2_INC |= ARES; AARG1_INC |= ARES_INC; #else AARG2_INC += ARES * TARG1; AARG1_INC += ARES_INC * TARG2; #endif } break; /*--------------------------------------------------------------------------*/ /* olvo 991122: new op_code with recomputation */ case eq_min_prod: /* decrement a product of eq_min_prod */ /* two adoubles (*) */ res = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg2, ADJOINT_BUFFER[arg2]) ASSIGN_A( Aarg1, ADJOINT_BUFFER[arg1]) #if !defined(_NTIGHT_) /* RECOMPUTATION */ TRES += TARG1*TARG2; #endif /* !_NTIGHT_ */ FOR_0_LE_l_LT_p { #if defined(_INT_REV_) AARG2_INC |= ARES; AARG1_INC |= ARES_INC; #else AARG2_INC -= ARES * TARG1; AARG1_INC -= ARES_INC * TARG2; #endif } break; /*--------------------------------------------------------------------------*/ case mult_d_a: /* Multiply an adouble by a double mult_d_a */ /* (*) */ res = get_locint_r(); arg = get_locint_r(); #if !defined(_NTIGHT_) coval = get_val_r(); #endif /* !_NTIGHT_ */ ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg, ADJOINT_BUFFER[arg]) FOR_0_LE_l_LT_p { aTmp = ARES; #if defined(_INT_REV_) ARES_INC = 0; AARG_INC |= aTmp; #else ARES_INC = 0.0; AARG_INC += (aTmp==0)?0:(coval * aTmp); #endif } #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case div_a_a: /* Divide an adouble by an adouble div_a_a */ /* (/) */ res = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg2, ADJOINT_BUFFER[arg2]) ASSIGN_A( Aarg1, ADJOINT_BUFFER[arg1]) /* olvo 980922 changed order to allow x=y/x */ #if !defined(_NTIGHT_) r_0 = -TRES; ADOLC_GET_TAYLOR(res); r0 = 1.0 / TARG2; r_0 *= r0; #endif /* !_NTIGHT_ */ FOR_0_LE_l_LT_p { aTmp = ARES; #if defined(_INT_REV_) ARES_INC = 0; AARG1_INC |= aTmp; AARG2_INC |= aTmp; #else ARES_INC = 0.0; AARG1_INC += (aTmp==0)?0:(aTmp * r0); AARG2_INC += (aTmp==0)?0:(aTmp * r_0); #endif } break; /*--------------------------------------------------------------------------*/ case div_d_a: /* Division double - adouble (/) div_d_a */ res = get_locint_r(); arg = get_locint_r(); #if !defined(_NTIGHT_) coval = get_val_r(); #endif /* !_NTIGHT_ */ ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg, ADJOINT_BUFFER[arg]) #if !defined(_NTIGHT_) /* olvo 980922 changed order to allow x=d/x */ r0 = -TRES; if (arg == res) ADOLC_GET_TAYLOR(arg); r0 /= TARG; #endif /* !_NTIGHT_ */ FOR_0_LE_l_LT_p { aTmp = ARES; #if defined(_INT_REV_) ARES_INC = 0; AARG_INC |= aTmp; #else ARES_INC = 0.0; AARG_INC += (aTmp==0)?0:(aTmp * r0); #endif } #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; /****************************************************************************/ /* SIGN OPERATIONS */ /*--------------------------------------------------------------------------*/ case pos_sign_a: /* pos_sign_a */ res = get_locint_r(); arg = get_locint_r(); ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg, ADJOINT_BUFFER[arg]) FOR_0_LE_l_LT_p { aTmp = ARES; #if defined(_INT_REV_) ARES_INC = 0; AARG_INC |= aTmp; #else ARES_INC = 0.0; AARG_INC += aTmp; #endif } #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case neg_sign_a: /* neg_sign_a */ res = get_locint_r(); arg = get_locint_r(); ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg, ADJOINT_BUFFER[arg]) FOR_0_LE_l_LT_p { aTmp = ARES; #if defined(_INT_REV_) ARES_INC = 0; AARG_INC |= aTmp; #else ARES_INC = 0.0; AARG_INC -= aTmp; #endif } #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; /****************************************************************************/ /* UNARY OPERATIONS */ /*--------------------------------------------------------------------------*/ case exp_op: /* exponent operation exp_op */ res = get_locint_r(); arg = get_locint_r(); ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg, ADJOINT_BUFFER[arg]) FOR_0_LE_l_LT_p { aTmp = ARES; #if defined(_INT_REV_) ARES_INC = 0; AARG_INC |= aTmp; #else ARES_INC = 0.0; AARG_INC += (aTmp==0)?0:(aTmp*TRES); #endif } #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case sin_op: /* sine operation sin_op */ res = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg1, ADJOINT_BUFFER[arg1]) FOR_0_LE_l_LT_p { aTmp = ARES; #if defined(_INT_REV_) ARES_INC = 0; AARG1_INC |= aTmp; #else ARES_INC = 0.0; AARG1_INC += (aTmp==0)?0:(aTmp * TARG2); #endif } #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); ADOLC_GET_TAYLOR(arg2); /* olvo 980710 covalue */ /* NOTE: ADJOINT_BUFFER[arg2] should be 0 already */ #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case cos_op: /* cosine operation cos_op */ res = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg1, ADJOINT_BUFFER[arg1]) FOR_0_LE_l_LT_p { aTmp = ARES; #if defined(_INT_REV_) ARES_INC = 0; AARG1_INC |= aTmp; #else ARES_INC = 0.0; AARG1_INC -= (aTmp==0)?0:(aTmp * TARG2); #endif } #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); ADOLC_GET_TAYLOR(arg2); /* olvo 980710 covalue */ /* NOTE ADJOINT_BUFFER[arg2] should be 0 already */ #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case atan_op: /* atan_op */ case asin_op: /* asin_op */ case acos_op: /* acos_op */ case asinh_op: /* asinh_op */ case acosh_op: /* acosh_op */ case atanh_op: /* atanh_op */ case erf_op: /* erf_op */ res = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg1, ADJOINT_BUFFER[arg1]) FOR_0_LE_l_LT_p { aTmp = ARES; #if defined(_INT_REV_) ARES_INC = 0; AARG1_INC |= aTmp; #else ARES_INC = 0.0; AARG1_INC += (aTmp==0)?0:(aTmp * TARG2); #endif } break; /*--------------------------------------------------------------------------*/ case log_op: /* log_op */ res = get_locint_r(); arg = get_locint_r(); #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg, ADJOINT_BUFFER[arg]) #if !defined(_INT_REV_) r0 = 1.0/TARG; #endif FOR_0_LE_l_LT_p { aTmp = ARES; #if defined(_INT_REV_) ARES_INC = 0; AARG_INC |= aTmp; #else ARES_INC = 0.0; AARG_INC += (aTmp==0)?0:(aTmp * r0); #endif } break; /*--------------------------------------------------------------------------*/ case pow_op: /* pow_op */ res = get_locint_r(); arg = get_locint_r(); #if !defined(_NTIGHT_) coval = get_val_r(); #endif /* !_NTIGHT_ */ ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg, ADJOINT_BUFFER[arg]) #if !defined(_NTIGHT_) /* olvo 980921 changed order to allow x=pow(x,n) */ r0 = TRES; if (arg == res) ADOLC_GET_TAYLOR(arg); if (TARG == 0.0) r0 = 0.0; else r0 *= coval/TARG; #endif /* !_NTIGHT_ */ FOR_0_LE_l_LT_p { aTmp = ARES; #if defined(_INT_REV_) ARES_INC = 0; AARG_INC |= aTmp; #else ARES_INC = 0.0; AARG_INC += (aTmp==0)?0:(aTmp * r0); #endif } #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case sqrt_op: /* sqrt_op */ res = get_locint_r(); arg = get_locint_r(); ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg, ADJOINT_BUFFER[arg]) #if !defined(_NTIGHT_) if (TRES == 0.0) r0 = 0.0; else r0 = 0.5 / TRES; #endif /* !_NTIGHT_ */ FOR_0_LE_l_LT_p { aTmp = ARES; #if defined(_INT_REV_) ARES_INC = 0; AARG_INC |= aTmp; #else ARES_INC = 0.0; AARG_INC += (aTmp==0)?0:(aTmp * r0); #endif } #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case gen_quad: /* gen_quad */ res = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); #if !defined(_NTIGHT_) coval = get_val_r(); coval = get_val_r(); #endif /* !_NTIGHT_ */ ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg1, ADJOINT_BUFFER[arg1]) FOR_0_LE_l_LT_p { aTmp = ARES; #if defined(_INT_REV_) ARES_INC = 0; AARG1_INC |= aTmp; #else ARES_INC = 0.0; AARG1_INC += (aTmp==0)?0:(aTmp * TARG2); #endif } #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case min_op: /* min_op */ res = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); #if !defined(_NTIGHT_) coval = get_val_r(); ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ ASSIGN_A( Aarg1, ADJOINT_BUFFER[arg1]) ASSIGN_A( Aarg2, ADJOINT_BUFFER[arg2]) ASSIGN_A( Ares, ADJOINT_BUFFER[res]) #if !defined(_NTIGHT_) if (TARG1 > TARG2) FOR_0_LE_l_LT_p { aTmp = ARES; #if defined(_INT_REV_) ARES_INC = 0; #else ARES_INC = 0.0; #endif if ((coval) && (aTmp)) MINDEC(ret_c,2); #if defined(_INT_REV_) AARG2_INC |= aTmp; #else AARG2_INC += aTmp; #endif } else if (TARG1 < TARG2) FOR_0_LE_l_LT_p { aTmp = ARES; #if defined(_INT_REV_) ARES_INC = 0; #else ARES_INC = 0.0; #endif if ((!coval) && (aTmp)) MINDEC(ret_c,2); #if defined(_INT_REV_) AARG1_INC |= aTmp; #else AARG1_INC += aTmp; #endif } else { /* both are equal */ FOR_0_LE_l_LT_p { #if defined(_INT_REV_) aTmp = ARES; ARES_INC = 0; AARG2_INC |= aTmp; AARG1_INC |= aTmp; #else aTmp = ARES / 2.0; ARES_INC = 0.0; AARG2_INC += aTmp; AARG1_INC += aTmp; #endif } if (arg1 != arg2) MINDEC(ret_c,1); } #else FOR_0_LE_l_LT_p { aTmp = ARES; ARES_INC = 0; AARG1_INC |= aTmp; AARG2_INC |= aTmp; } #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case abs_val: /* abs_val */ res = get_locint_r(); arg = get_locint_r(); #if !defined(_NTIGHT_) coval = get_val_r(); ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg, ADJOINT_BUFFER[arg]) #if !defined(_NTIGHT_) if (TARG < 0.0) FOR_0_LE_l_LT_p { aTmp = ARES; #if defined(_INT_REV_) ARES_INC = 0; #else ARES_INC = 0.0; #endif if ((coval) && (aTmp)) MINDEC(ret_c,2); #if defined(_INT_REV_) AARG_INC |= aTmp; #else AARG_INC -= aTmp; #endif } else if (TARG > 0.0) FOR_0_LE_l_LT_p { aTmp = ARES; #if defined(_INT_REV_) ARES_INC = 0; #else ARES_INC = 0.0; #endif if ((!coval) && (aTmp)) MINDEC(ret_c,2); #if defined(_INT_REV_) AARG_INC |= aTmp; #else AARG_INC += aTmp; #endif } else FOR_0_LE_l_LT_p { aTmp = ARES; #if defined(_INT_REV_) ARES_INC = 0; #else ARES_INC = 0.0; #endif if (aTmp) MINDEC(ret_c,1); } #else FOR_0_LE_l_LT_p { aTmp = ARES; ARES_INC = 0; AARG_INC |= aTmp; } #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case ceil_op: /* ceil_op */ res = get_locint_r(); arg = get_locint_r(); #if !defined(_NTIGHT_) coval = get_val_r(); ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ ASSIGN_A( Ares, ADJOINT_BUFFER[res]) #if !defined(_NTIGHT_) coval = (coval != ceil(TARG) ); #endif /* !_NTIGHT_ */ FOR_0_LE_l_LT_p { #if !defined(_NTIGHT_) if ((coval) && (ARES)) MINDEC(ret_c,2); #endif /* !_NTIGHT_ */ #if defined(_INT_REV_) ARES_INC = 0; #else ARES_INC = 0.0; #endif } break; /*--------------------------------------------------------------------------*/ case floor_op: /* floor_op */ res = get_locint_r(); arg = get_locint_r(); #if !defined(_NTIGHT_) coval = get_val_r(); ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg, ADJOINT_BUFFER[arg]) #if !defined(_NTIGHT_) coval = ( coval != floor(TARG1) ); #endif /* !_NTIGHT_ */ FOR_0_LE_l_LT_p { #if !defined(_NTIGHT_) if ( (coval) && (ARES) ) MINDEC(ret_c,2); #endif /* !_NTIGHT_ */ #if defined(_INT_REV_) ARES_INC = 0; #else ARES_INC = 0.0; #endif } break; /****************************************************************************/ /* CONDITIONALS */ /*--------------------------------------------------------------------------*/ case cond_assign: /* cond_assign */ res = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); arg = get_locint_r(); #if !defined(_NTIGHT_) coval = get_val_r(); ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ ASSIGN_A( Aarg1, ADJOINT_BUFFER[arg1]) ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg2, ADJOINT_BUFFER[arg2]) #if !defined(_NTIGHT_) /* olvo 980924 changed code a little bit */ if (TARG > 0.0) { if (res != arg1) FOR_0_LE_l_LT_p { if ((coval <= 0.0) && (ARES)) MINDEC(ret_c,2); #if defined(_INT_REV_) AARG1_INC |= ARES; ARES_INC = 0; #else AARG1_INC += ARES; ARES_INC = 0.0; #endif } else FOR_0_LE_l_LT_p if ((coval <= 0.0) && (ARES_INC)) MINDEC(ret_c,2); } else { if (res != arg2) FOR_0_LE_l_LT_p { if ((coval <= 0.0) && (ARES)) MINDEC(ret_c,2); #if defined(_INT_REV_) AARG2_INC |= ARES; ARES_INC = 0; #else AARG2_INC += ARES; ARES_INC = 0.0; #endif } else FOR_0_LE_l_LT_p if ((coval <= 0.0) && (ARES_INC)) MINDEC(ret_c,2); } #else if (res != arg1) { FOR_0_LE_l_LT_p AARG1_INC |= ARES_INC; ASSIGN_A( Ares, ADJOINT_BUFFER[res]) } if (res != arg2) { FOR_0_LE_l_LT_p AARG2_INC |= ARES_INC; ASSIGN_A( Ares, ADJOINT_BUFFER[res]) } if ((res != arg1) && (res != arg2)) FOR_0_LE_l_LT_p ARES_INC = 0; #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case cond_assign_s: /* cond_assign_s */ res = get_locint_r(); arg1 = get_locint_r(); arg = get_locint_r(); #if !defined(_NTIGHT_) coval = get_val_r(); ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ ASSIGN_A( Aarg1, ADJOINT_BUFFER[arg1]) ASSIGN_A( Ares, ADJOINT_BUFFER[res]) #if !defined(_NTIGHT_) /* olvo 980924 changed code a little bit */ if (TARG > 0.0) { if (res != arg1) FOR_0_LE_l_LT_p { if ((coval <= 0.0) && (ARES)) MINDEC(ret_c,2); #if defined(_INT_REV_) AARG1_INC |= ARES; ARES_INC = 0.0; #else AARG1_INC += ARES; ARES_INC = 0.0; #endif } else FOR_0_LE_l_LT_p if ((coval <= 0.0) && (ARES_INC)) MINDEC(ret_c,2); } else if (TARG == 0.0) /* we are at the tie */ FOR_0_LE_l_LT_p if (ARES_INC) MINDEC(ret_c,0); #else if (res != arg1) FOR_0_LE_l_LT_p { AARG1 |= ARES; ARES_INC = 0; } #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ /* NEW CONDITIONALS */ /*--------------------------------------------------------------------------*/ #if defined(ADOLC_ADVANCED_BRANCHING) case neq_a_a: case eq_a_a: case le_a_a: case ge_a_a: case lt_a_a: case gt_a_a: res = get_locint_r(); arg1 = get_locint_r(); arg = get_locint_r(); #if !defined(_NTIGHT_) coval = get_val_r(); #endif ASSIGN_A( Ares, ADJOINT_BUFFER[res]) FOR_0_LE_l_LT_p #if defined(_INT_REV_) ARES_INC = 0; #else ARES_INC = 0.0; #endif #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; #endif /*--------------------------------------------------------------------------*/ case subscript: { double val = get_val_r(); size_t cnt, idx, numval = (size_t)trunc(fabs(val)); locint vectorloc; vectorloc = get_locint_r(); res = get_locint_r(); arg = get_locint_r(); #if !defined(_NTIGHT_) idx = (size_t)trunc(fabs(TARG)); if (idx >= numval) fprintf(DIAG_OUT, "ADOL-C warning: index out of bounds while subscripting n=%z, idx=%z\n", numval, idx); arg1 = vectorloc+idx; ASSIGN_A( Aarg1, ADJOINT_BUFFER[arg1]) ASSIGN_A( Ares, ADJOINT_BUFFER[res]) FOR_0_LE_l_LT_p { #if defined(_INT_REV_) AARG1_INC |= ARES; ARES_INC = 0; #else AARG1_INC += ARES; ARES = 0.0; #endif } ADOLC_GET_TAYLOR(res); #else fprintf(DIAG_OUT, "ADOL-C error: active subscripting does not work in safe mode, please use tight mode\n"); exit(-2); #endif /* !_NTIGHT_ */ } break; case subscript_ref: { double val = get_val_r(); size_t cnt, idx, numval = (size_t)trunc(fabs(val)); locint vectorloc; vectorloc = get_locint_r(); res = get_locint_r(); arg = get_locint_r(); #if !defined(_NTIGHT_) idx = (size_t)trunc(fabs(TARG)); if (idx >= numval) fprintf(DIAG_OUT, "ADOL-C warning: index out of bounds while subscripting (ref) n=%z, idx=%z\n", numval, idx); arg1 = (size_t)trunc(fabs(TRES)); // This is actually NOP // basically all we need is that arg1 == vectorloc+idx // so doing a check here is probably good if (arg1 != vectorloc+idx) { fprintf(DIAG_OUT, "ADOL-C error: indexed active position does not match referenced position\nindexed = %d, referenced = %d\n", vectorloc+idx, arg1); exit(-2); } ADOLC_GET_TAYLOR(res); #else fprintf(DIAG_OUT, "ADOL-C error: active subscripting does not work in safe mode, please use tight mode\n"); exit(-2); #endif /* !_NTIGHT_ */ } break; case ref_copyout: res = get_locint_r(); arg1 = get_locint_r(); #if !defined(_NTIGHT_) arg = (size_t)trunc(fabs(TARG1)); ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg, ADJOINT_BUFFER[arg]) FOR_0_LE_l_LT_p { #if defined(_INT_REV_) AARG_INC |= ARES; ARES_INC = 0; #else AARG_INC += ARES; ARES_INC = 0.0; #endif } ADOLC_GET_TAYLOR(res); #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); exit(-2); #endif break; case ref_incr_a: /* Increment an adouble incr_a */ case ref_decr_a: /* Increment an adouble decr_a */ arg1 = get_locint_r(); #if !defined(_NTIGHT_) res = (size_t)trunc(fabs(TARG1)); ADOLC_GET_TAYLOR(res); #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); exit(-2); #endif /* !_NTIGHT_ */ break; case ref_assign_d: /* assign an adouble variable a assign_d */ /* double value. (=) */ arg1 = get_locint_r(); #if !defined(_NTIGHT_) res = (size_t)trunc(fabs(TARG1)); coval = get_val_r(); ASSIGN_A( Ares, ADJOINT_BUFFER[res]) FOR_0_LE_l_LT_p #if defined(_INT_REV_) ARES_INC = 0; #else ARES_INC = 0.0; #endif ADOLC_GET_TAYLOR(res); #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); exit(-2); #endif /* !_NTIGHT_ */ break; case ref_assign_d_zero: /* assign an adouble variable a assign_d_zero */ case ref_assign_d_one: /* double value (0 or 1). (=) assign_d_one */ arg1 = get_locint_r(); #if !defined(_NTIGHT_) res = (size_t)trunc(fabs(TARG1)); ASSIGN_A( Ares, ADJOINT_BUFFER[res]) FOR_0_LE_l_LT_p #if defined(_INT_REV_) ARES_INC = 0; #else ARES_INC = 0.0; #endif ADOLC_GET_TAYLOR(res); #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); exit(-2); #endif /* !_NTIGHT_ */ break; case ref_assign_a: /* assign an adouble variable an assign_a */ /* adouble value. (=) */ arg1 = get_locint_r(); arg = get_locint_r(); #if !defined(_NTIGHT_) res = (size_t)trunc(fabs(TARG1)); ASSIGN_A( Aarg, ADJOINT_BUFFER[arg]) ASSIGN_A( Ares, ADJOINT_BUFFER[res]) FOR_0_LE_l_LT_p { #if defined(_INT_REV_) AARG_INC |= ARES; ARES_INC = 0; #else AARG_INC += ARES; ARES_INC = 0.0; #endif } ADOLC_GET_TAYLOR(res); #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); exit(-2); #endif /* !_NTIGHT_ */ break; case ref_assign_ind: /* assign an adouble variable an assign_ind */ /* independent double value (<<=) */ arg1 = get_locint_r(); #if !defined(_NTIGHT_) res = (size_t)trunc(fabs(TARG1)); ASSIGN_A( Ares, ADJOINT_BUFFER[res]) FOR_0_LE_l_LT_p RESULTS(l,indexi) = ARES_INC; ADOLC_GET_TAYLOR(res); #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); exit(-2); #endif /* !_NTIGHT_ */ indexi--; break; case ref_eq_plus_d: /* Add a floating point to an eq_plus_d */ /* adouble. (+=) */ arg1 = get_locint_r(); #if !defined(_NTIGHT_) res = (size_t)trunc(fabs(TARG1)); coval = get_val_r(); ADOLC_GET_TAYLOR(res); #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); exit(-2); #endif /* !_NTIGHT_ */ break; case ref_eq_plus_a: /* Add an adouble to another eq_plus_a */ /* adouble. (+=) */ arg1 = get_locint_r(); arg = get_locint_r(); #if !defined(_NTIGHT_) res = (size_t)trunc(fabs(TARG1)); ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg, ADJOINT_BUFFER[arg]); FOR_0_LE_l_LT_p #if defined(_INT_REV_) AARG_INC |= ARES_INC; #else AARG_INC += ARES_INC; #endif ADOLC_GET_TAYLOR(res); #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); exit(-2); #endif /* !_NTIGHT_ */ break; case ref_eq_min_d: /* Subtract a floating point from an eq_min_d */ /* adouble. (-=) */ arg1 = get_locint_r(); #if !defined(_NTIGHT_) res = (size_t)trunc(fabs(TARG1)); coval = get_val_r(); ADOLC_GET_TAYLOR(res); #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); exit(-2); #endif /* !_NTIGHT_ */ break; case ref_eq_min_a: /* Subtract an adouble from another eq_min_a */ /* adouble. (-=) */ arg1 = get_locint_r(); arg = get_locint_r(); #if !defined(_NTIGHT_) res = (size_t)trunc(fabs(TARG1)); ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg, ADJOINT_BUFFER[arg]) FOR_0_LE_l_LT_p #if defined(_INT_REV_) AARG_INC |= ARES_INC; #else AARG_INC -= ARES_INC; #endif ADOLC_GET_TAYLOR(res); #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); exit(-2); #endif /* !_NTIGHT_ */ break; case ref_eq_mult_d: /* Multiply an adouble by a eq_mult_d */ /* flaoting point. (*=) */ arg1 = get_locint_r(); #if !defined(_NTIGHT_) res = (size_t)trunc(fabs(TARG1)); coval = get_val_r(); #if !defined(_INT_REV_) ASSIGN_A( Ares, ADJOINT_BUFFER[res]) FOR_0_LE_l_LT_p ARES_INC *= coval; #endif ADOLC_GET_TAYLOR(res); #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); exit(-2); #endif /* !_NTIGHT_ */ break; case ref_eq_mult_a: /* Multiply one adouble by another eq_mult_a */ /* (*=) */ arg1 = get_locint_r(); arg = get_locint_r(); #if !defined(_NTIGHT_) res = (size_t)trunc(fabs(TARG1)); ADOLC_GET_TAYLOR(res); ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg, ADJOINT_BUFFER[arg]) FOR_0_LE_l_LT_p #if defined(_INT_REV_) AARG_INC |= ARES_INC; #else { aTmp = ARES; /* olvo 980713 nn: ARES = 0.0; */ ARES_INC = (aTmp==0)?0:(aTmp * TARG); AARG_INC += (aTmp==0)?0:(aTmp * TRES); } #endif #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); exit(-2); #endif /* !_NTIGHT_ */ break; case ref_cond_assign: /* cond_assign */ { locint ref = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); arg = get_locint_r(); #if !defined(_NTIGHT_) coval = get_val_r(); res = (size_t)trunc(fabs(rp_T[ref])); ADOLC_GET_TAYLOR(res); ASSIGN_A( Aarg1, ADJOINT_BUFFER[arg1]) ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg2, ADJOINT_BUFFER[arg2]) /* olvo 980924 changed code a little bit */ if (TARG > 0.0) { if (res != arg1) FOR_0_LE_l_LT_p { if ((coval <= 0.0) && (ARES)) MINDEC(ret_c,2); #if defined(_INT_REV_) AARG1_INC |= ARES; ARES_INC = 0; #else AARG1_INC += ARES; ARES_INC = 0.0; #endif } else FOR_0_LE_l_LT_p if ((coval <= 0.0) && (ARES_INC)) MINDEC(ret_c,2); } else { if (res != arg2) FOR_0_LE_l_LT_p { if ((coval <= 0.0) && (ARES)) MINDEC(ret_c,2); #if defined(_INT_REV_) AARG2_INC |= ARES; ARES_INC = 0; #else AARG2_INC += ARES; ARES_INC = 0.0; #endif } else FOR_0_LE_l_LT_p if ((coval <= 0.0) && (ARES_INC)) MINDEC(ret_c,2); } #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); exit(-2); #endif /* !_NTIGHT_ */ } break; case ref_cond_assign_s: /* cond_assign_s */ arg2 = get_locint_r(); arg1 = get_locint_r(); arg = get_locint_r(); #if !defined(_NTIGHT_) coval = get_val_r(); res = (size_t)trunc(fabs(TARG2)); ADOLC_GET_TAYLOR(res); ASSIGN_A( Aarg1, ADJOINT_BUFFER[arg1]) ASSIGN_A( Ares, ADJOINT_BUFFER[res]) /* olvo 980924 changed code a little bit */ if (TARG > 0.0) { if (res != arg1) FOR_0_LE_l_LT_p { if ((coval <= 0.0) && (ARES)) MINDEC(ret_c,2); #if defined(_INT_REV_) AARG1_INC |= ARES; ARES_INC = 0.0; #else AARG1_INC += ARES; ARES_INC = 0.0; #endif } else FOR_0_LE_l_LT_p if ((coval <= 0.0) && (ARES_INC)) MINDEC(ret_c,2); } else if (TARG == 0.0) /* we are at the tie */ FOR_0_LE_l_LT_p if (ARES_INC) MINDEC(ret_c,0); #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); exit(-2); #endif /* !_NTIGHT_ */ break; /****************************************************************************/ /* REMAINING STUFF */ /*--------------------------------------------------------------------------*/ case take_stock_op: /* take_stock_op */ res = get_locint_r(); size = get_locint_r(); #if !defined(_NTIGHT_) d = get_val_v_r(size); #endif /* !_NTIGHT_ */ res += size; for (ls=size; ls>0; ls--) { res--; ASSIGN_A( Ares, ADJOINT_BUFFER[res]) FOR_0_LE_l_LT_p ARES_INC = 0.0; } break; /*--------------------------------------------------------------------------*/ case death_not: /* death_not */ arg2 = get_locint_r(); arg1 = get_locint_r(); for (j=arg1;j<=arg2;j++) { ASSIGN_A(Aarg1, ADJOINT_BUFFER[j]) FOR_0_LE_l_LT_p AARG1_INC = 0.0; } #if !defined(_NTIGHT_) for (j=arg1;j<=arg2;j++) ADOLC_GET_TAYLOR(j); #endif /* !_NTIGHT_ */ break; #if !defined(_INT_REV_) /*--------------------------------------------------------------------------*/ case ext_diff: /* extern differntiated function */ ADOLC_CURRENT_TAPE_INFOS.cpIndex = get_locint_r(); ADOLC_CURRENT_TAPE_INFOS.lowestYLoc_rev = get_locint_r(); ADOLC_CURRENT_TAPE_INFOS.lowestXLoc_rev = get_locint_r(); m = get_locint_r(); n = get_locint_r(); ADOLC_CURRENT_TAPE_INFOS.ext_diff_fct_index = get_locint_r(); ADOLC_EXT_FCT_SAVE_NUMDIRS; edfct = get_ext_diff_fct(ADOLC_CURRENT_TAPE_INFOS.ext_diff_fct_index); oldTraceFlag = ADOLC_CURRENT_TAPE_INFOS.traceFlag; ADOLC_CURRENT_TAPE_INFOS.traceFlag = 0; if (edfct->ADOLC_EXT_FCT_POINTER == NULL) fail(ADOLC_EXT_DIFF_NULLPOINTER_FUNCTION); if (m>0) { if (ADOLC_EXT_FCT_U == NULL) fail(ADOLC_EXT_DIFF_NULLPOINTER_ARGUMENT); if (edfct->dp_y==NULL) fail(ADOLC_EXT_DIFF_NULLPOINTER_ARGUMENT); } if (n>0) { if (ADOLC_EXT_FCT_Z == NULL) fail(ADOLC_EXT_DIFF_NULLPOINTER_ARGUMENT); if (edfct->dp_x==NULL) fail(ADOLC_EXT_DIFF_NULLPOINTER_ARGUMENT); } arg = ADOLC_CURRENT_TAPE_INFOS.lowestYLoc_rev; for (loop = 0; loop < m; ++loop) { FOR_0_LE_l_LT_p { ADOLC_EXT_FCT_U_L_LOOP = ADJOINT_BUFFER_ARG_L; } ++arg; } arg = ADOLC_CURRENT_TAPE_INFOS.lowestXLoc_rev; for (loop = 0; loop < n; ++loop) { FOR_0_LE_l_LT_p { ADOLC_EXT_FCT_Z_L_LOOP = ADJOINT_BUFFER_ARG_L; } ++arg; } arg = ADOLC_CURRENT_TAPE_INFOS.lowestXLoc_rev; for (loop = 0; loop < n; ++loop,++arg) { edfct->dp_x[loop]=TARG; } arg = ADOLC_CURRENT_TAPE_INFOS.lowestYLoc_rev; for (loop = 0; loop < m; ++loop,++arg) { edfct->dp_y[loop]=TARG; } ext_retc = edfct->ADOLC_EXT_FCT_COMPLETE; MINDEC(ret_c, ext_retc); res = ADOLC_CURRENT_TAPE_INFOS.lowestYLoc_rev; for (loop = 0; loop < m; ++loop) { FOR_0_LE_l_LT_p { ADJOINT_BUFFER_RES_L = 0.; /* \bar{v}_i = 0 !!! */ } ++res; } res = ADOLC_CURRENT_TAPE_INFOS.lowestXLoc_rev; for (loop = 0; loop < n; ++loop) { FOR_0_LE_l_LT_p { ADJOINT_BUFFER_RES_L = ADOLC_EXT_FCT_Z_L_LOOP; } ++res; } if (edfct->dp_y_priorRequired) { arg = ADOLC_CURRENT_TAPE_INFOS.lowestYLoc_rev+m-1; for (loop = 0; loop < m; ++loop,--arg) { ADOLC_GET_TAYLOR(arg); } } if (edfct->dp_x_changes) { arg = ADOLC_CURRENT_TAPE_INFOS.lowestXLoc_rev+n-1; for (loop = 0; loop < n; ++loop,--arg) { ADOLC_GET_TAYLOR(arg); } } ADOLC_CURRENT_TAPE_INFOS.traceFlag = oldTraceFlag; break; #endif /* !_INT_REV_ */ /*--------------------------------------------------------------------------*/ default: /* default */ /* Die here, we screwed up */ fprintf(DIAG_OUT,"ADOL-C fatal error in " GENERATED_FILENAME " (" __FILE__ ") : no such operation %d\n", operation); exit(-1); break; } /* endswitch */ /* Get the next operation */ operation=get_op_r(); } /* endwhile */ /* clean up */ #if !defined(_INT_REV_) free(rp_T); #endif #ifdef _FOS_ free(rp_A); #endif #ifdef _FOV_ myfree2(rpp_A); #endif #ifdef _INT_REV_ free(upp_A); #endif end_sweep(); return ret_c; } /****************************************************************************/ /* THAT'S ALL */ END_C_DECLS ADOL-C-2.4.1/ADOL-C/src/nonl_ind_forward_t.c0000644000076600007660000000137711227420735016607 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: nonl_ind_forward_t.c Revision: $Id: nonl_ind_forward_t.c 42 2009-07-15 18:37:17Z awalther $ Contents: nonl_ind_forward_t (propagation of nonlinear index domains) Copyright (c) Andrea Walther This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #define _INDO_ 1 #define _NONLIND_ 1 #define _TIGHT_ 1 #include #undef _INDO_ #undef _NONLIND_ #undef _TIGHT_ ADOL-C-2.4.1/ADOL-C/src/fixpoint.cpp0000644000076600007660000002045112053423074015127 0ustar coincoin /*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: fixpoint.c Revision: $Id: fixpoint.cpp 370 2012-11-22 13:18:52Z kulshres $ Contents: all C functions directly accessing at least one of the four tapes (operations, locations, constants, value stack) Copyright (c) Andreas Kowarz, Sebastian Schlenkrich This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #include #include #include "taping_p.h" #include using namespace std; /*--------------------------------------------------------------------------*/ /* F(x,u,y,dim_x,dim_u) */ /* norm(x,dim_x) */ typedef struct { locint edf_index; int sub_tape_num; int (*double_F)(double*, double* ,double*, int, int); int (*adouble_F)(adouble*, adouble*, adouble*, int, int); double (*norm)(double*, int); double (*norm_deriv)(double*, int); double epsilon; double epsilon_deriv; int N_max; int N_max_deriv; } fpi_data; static vector fpi_stack; static int iteration ( int dim_xu, double *xu, int dim_x, double *x_fix ) { int i, k; double err; fpi_data *current = fpi_stack.back(); for (i=0; iN_max; k++) { for (i=0; idouble_F)( xu, xu+dim_x, x_fix, dim_x, dim_xu-dim_x ); for (i=0; inorm)(xu,dim_x); if (errepsilon) return k; } return -1; } static int fp_zos_forward ( int dim_xu, double *xu, int dim_x, double *x_fix ) { int i, k; double err; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint edf_index = ADOLC_CURRENT_TAPE_INFOS.ext_diff_fct_index; fpi_data *current=0; vector::iterator fpi_stack_iterator; for (fpi_stack_iterator=fpi_stack.begin(); fpi_stack_iterator!=fpi_stack.end(); ++fpi_stack_iterator) { current = *fpi_stack_iterator; if (edf_index==current->edf_index) break; } if (fpi_stack_iterator==fpi_stack.end()) { fprintf(stderr,"ADOL-C Error! No edf found for fixpoint iteration.\n"); exit(-1); } for (i=0; iN_max; k++) { for (i=0; idouble_F)( xu, xu+dim_x, x_fix, dim_x, dim_xu-dim_x ); for (i=0; inorm)(xu,dim_x); if (errepsilon) return k; } return -1; } static int fp_fos_forward ( int dim_xu, double *xu, double *xu_dot, int dim_x, double *x_fix, double *x_fix_dot) { // Piggy back int i, k; double err, err_deriv; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint edf_index = ADOLC_CURRENT_TAPE_INFOS.ext_diff_fct_index; fpi_data *current=0; vector::iterator fpi_stack_iterator; for (fpi_stack_iterator=fpi_stack.begin(); fpi_stack_iterator!=fpi_stack.end(); ++fpi_stack_iterator) { current = *fpi_stack_iterator; if (edf_index==current->edf_index) break; } if (fpi_stack_iterator==fpi_stack.end()) { fprintf(stderr,"ADOL-C Error! No edf found for fixpoint iteration.\n"); exit(-1); } for (k=1; (kN_max_deriv)|(kN_max); k++) { for (i=0; isub_tape_num, dim_x, dim_xu, 0, xu, xu_dot, x_fix, x_fix_dot); for (i=0; inorm)(xu,dim_x); for (i=0; inorm_deriv)(xu_dot,dim_x); if ((errepsilon)&(err_derivepsilon_deriv)) { return k; } } return -1; } static int fp_fos_reverse ( int dim_x, double *x_fix_bar, int dim_xu, double *xu_bar, double* /*unused*/, double* /*unused*/) { // (d x_fix) / (d x_0) = 0 (!) int i, k; double err; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint edf_index = ADOLC_CURRENT_TAPE_INFOS.ext_diff_fct_index; fpi_data *current=0; vector::iterator fpi_stack_iterator; for (fpi_stack_iterator=fpi_stack.begin(); fpi_stack_iterator!=fpi_stack.end(); ++fpi_stack_iterator) { current = *fpi_stack_iterator; if (edf_index==current->edf_index) break; } if (fpi_stack_iterator==fpi_stack.end()) { fprintf(stderr,"ADOL-C Error! No edf found for fixpoint iteration.\n"); exit(-1); } double *U = new double[dim_xu]; double *xi = new double[dim_x]; for (k=1; kN_max_deriv; k++) { for (i=0; isub_tape_num, dim_x, dim_xu, xi, U ); for (i=0; inorm_deriv)(xi,dim_x); printf(" fp_fos_reverse: k = %d err = %e\n",k,err); if (errepsilon_deriv) { for (i=0; isub_tape_num = sub_tape_num; data->double_F = double_F; data->adouble_F = adouble_F; data->norm = norm; data->norm_deriv = norm_deriv; data->epsilon = epsilon; data->epsilon_deriv = epsilon_deriv; data->N_max = N_max; data->N_max_deriv = N_max_deriv; fpi_stack.push_back(data); // declare extern differentiated function and data ext_diff_fct *edf_iteration = reg_ext_fct(&iteration); data->edf_index = edf_iteration->index; edf_iteration->dp_x = new double[dim_x+dim_u]; edf_iteration->dp_y = new double[dim_x]; edf_iteration->dp_X = new double[dim_x+dim_u]; edf_iteration->dp_Y = new double[dim_x]; edf_iteration->dp_U = new double[dim_x]; edf_iteration->dp_Z = new double[dim_x+dim_u]; edf_iteration->zos_forward = &fp_zos_forward; edf_iteration->fos_forward = &fp_fos_forward; edf_iteration->fos_reverse = &fp_fos_reverse; // put x and u together double *xu_p = new double[dim_x+dim_u]; double *x_fix_p = new double[dim_x]; adouble *xu = new adouble[dim_x+dim_u]; for (i=0; i>= dummy; trace_off(); delete[] xu; delete[] x_fix_p; delete[] xu_p; return k; } ADOL-C-2.4.1/ADOL-C/src/oplate.h0000644000076600007660000000415712040215743014223 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: oplate.h Revision: $Id: oplate.h 360 2012-10-19 09:22:43Z kulshres $ Contents: Numeric values for the various opcodes used by ADOL-C. Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel, Kshitij Kulshreshtha This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_OPLATE_P_H) #define ADOLC_OPLATE_P_H 1 /****************************************************************************/ /* opcodes */ enum OPCODES { death_not, assign_ind, assign_dep, assign_a, assign_d, eq_plus_d, eq_plus_a, eq_min_d, eq_min_a, eq_mult_d, eq_mult_a, plus_a_a, plus_d_a, min_a_a, min_d_a, mult_a_a, mult_d_a, div_a_a, div_d_a, exp_op, cos_op, sin_op, atan_op, log_op, pow_op, asin_op, acos_op, sqrt_op, asinh_op, acosh_op, atanh_op, gen_quad, end_of_tape, start_of_tape, end_of_op, end_of_int, end_of_val, cond_assign, cond_assign_s, take_stock_op, assign_d_one, assign_d_zero, incr_a, decr_a, neg_sign_a, pos_sign_a, min_op, abs_val, eq_zero, neq_zero, le_zero, gt_zero, ge_zero, lt_zero, eq_plus_prod, eq_min_prod, erf_op, ceil_op, floor_op, ext_diff, ignore_me, subscript = 80, subscript_ref, ref_assign_d_zero, ref_assign_d_one, ref_assign_d, ref_assign_a, ref_assign_ind, ref_incr_a, ref_decr_a, ref_eq_plus_d, ref_eq_min_d, ref_eq_plus_a, ref_eq_min_a, ref_eq_mult_d, ref_eq_mult_a, ref_copyout, ref_cond_assign, ref_cond_assign_s, eq_a_a = 125, neq_a_a, le_a_a, gt_a_a, ge_a_a, lt_a_a }; /****************************************************************************/ #endif ADOL-C-2.4.1/ADOL-C/src/interfacesf.c0000644000076600007660000001641211412425466015227 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: interfacesf.c Revision: $Id: interfacesf.c 106 2010-06-29 17:19:50Z kulshres $ Contents: Genuine Fortran callable C Interfaces to ADOL-C forward & reverse calls. Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #include #include #include BEGIN_C_DECLS /*--------------------------------------------------------------------------*/ fint hos_forward_(fint* ftag, fint* fm, fint* fn, fint* fd, fint* fk, fdouble* fbase, fdouble* fx, fdouble* fvalue, fdouble* fy) { int rc= -1; int tag=*ftag, m=*fm, n=*fn, d=*fd, k=*fk; double* base = myalloc1(n); double* value = myalloc1(m); double** X = myalloc2(n,d); double** Y = myalloc2(m,d); spread1(n,fbase,base); spread2(n,d,fx,X); rc= hos_forward(tag,m,n,d,k,base,X,value,Y); pack2(m,d,Y,fy); pack1(m,value,fvalue); free((char*)*X); free((char*)X); free((char*)*Y); free((char*)Y); free((char*)base); free((char*)value); return rc; } /*--------------------------------------------------------------------------*/ fint zos_forward_(fint* ftag, fint* fm, fint* fn, fint* fk, fdouble* fbase, fdouble* fvalue) { int rc=-1; int tag=*ftag, m=*fm, n=*fn, k=*fk; double* base=myalloc1(n); double* value = myalloc1(m); spread1(n,fbase,base); rc=zos_forward(tag,m,n,k,base,value); pack1(m,value,fvalue); free((char*)base); free((char*)value); return rc; } /*--------------------------------------------------------------------------*/ fint hov_forward_(fint* ftag, fint* fm, fint* fn, fint* fd, fint* fp, fdouble* fbase, fdouble* fx, fdouble* fvalue, fdouble* fy) { int rc= -1; int tag=*ftag, m=*fm, n=*fn, d=*fd, p=*fp; double* base = myalloc1(n); double* value = myalloc1(m); double*** X = myalloc3(n,p,d); double*** Y = myalloc3(m,p,d); spread1(n,fbase,base); spread3(n,p,d,fx,X); rc= hov_forward(tag,m,n,d,p,base,X,value,Y); pack3(m,p,d,Y,fy); pack1(m,value,fvalue); free((char*)**X); free((char*)*X); free((char*)X); free((char*)**Y); free((char*)*Y); free((char*)Y); free((char*)base); free((char*)value); return rc; } /*--------------------------------------------------------------------------*/ fint fov_forward_(fint* ftag, fint* fm, fint* fn, fint* fp, fdouble* fbase, fdouble* fx, fdouble* fvalue, fdouble* fy) { int rc= -1; int tag=*ftag, m=*fm, n=*fn, p=*fp; double* base = myalloc1(n); double* value = myalloc1(m); double** X = myalloc2(n,p); double** Y = myalloc2(m,p); spread1(n,fbase,base); spread2(n,p,fx,X); rc= fov_forward(tag,m,n,p,base,X,value,Y); pack2(m,p,Y,fy); pack1(m,value,fvalue); free((char*)*X); free((char*)X); free((char*)*Y); free((char*)Y); free((char*)base); free((char*)value); return rc; } /*--------------------------------------------------------------------------*/ fint hos_reverse_(fint* ftag, fint* fm, fint* fn, fint* fd, fdouble* fu, fdouble* fz) { int rc=-1; int tag=*ftag, m=*fm, n=*fn, d=*fd; double** Z = myalloc2(n,d+1); double* u = myalloc1(m); spread1(m,fu,u); rc=hos_reverse(tag,m,n,d,u,Z); pack2(n,d+1,Z,fz); free((char*)*Z); free((char*)Z); free((char*)u); return rc; } /*--------------------------------------------------------------------------*/ fint hos_ti_reverse_( fint* ftag, fint* fm, fint* fn, fint* fd, fdouble* fu, fdouble* fz) { int rc=-1; int tag=*ftag, m=*fm, n=*fn, d=*fd; double** Z = myalloc2(n,d+1); double** U = myalloc2(m,d+1); spread2(m,d+1,fu,U); rc=hos_ti_reverse(tag,m,n,d,U,Z); pack2(n,d+1,Z,fz); free((char*)*Z); free((char*)Z); free((char*)*U); free((char*)U); return rc; } /*--------------------------------------------------------------------------*/ fint fos_reverse_(fint* ftag, fint* fm, fint* fn, fdouble* fu, fdouble* fz) { int rc=-1; int tag=*ftag, m=*fm, n=*fn; double* u = myalloc1(m); double* Z = myalloc1(n); spread1(m,fu,u); rc=fos_reverse(tag,m,n,u,Z); pack1(n,Z,fz); free((char*)Z); free((char*)u); return rc; } /*--------------------------------------------------------------------------*/ fint hov_reverse_(fint* ftag, fint* fm, fint* fn, fint* fd, fint* fq, fdouble* fu, fdouble* fz) { int rc=-1; int tag=*ftag, m=*fm, n=*fn, d=*fd, q=*fq; double** U = myalloc2(q,m); double*** Z = myalloc3(q,n,d+1); short ** nop = 0; spread2(q,m,fu,U); rc=hov_reverse(tag,m,n,d,q,U,Z,nop); pack3(q,n,d+1,Z,fz); free((char*)**Z); free((char*)*Z); free((char*)Z); free((char*)*U); free((char*)U); return rc; } /*--------------------------------------------------------------------------*/ fint hov_ti_reverse_( fint* ftag, fint* fm, fint* fn, fint* fd, fint* fq, fdouble* fu, fdouble* fz) { int rc=-1; int tag=*ftag, m=*fm, n=*fn, d=*fd, q=*fq; double*** U = myalloc3(q,m,d+1); double*** Z = myalloc3(q,n,d+1); short ** nop = 0; spread3(q,m,d+1,fu,U); rc=hov_ti_reverse(tag,m,n,d,q,U,Z,nop); pack3(q,n,d+1,Z,fz); free((char*)**Z); free((char*)*Z); free((char*)Z); free((char*)**U); free((char*)*U); free((char*)U); return rc; } /*--------------------------------------------------------------------------*/ fint fov_reverse_(fint* ftag, fint* fm, fint* fn, fint* fq, fdouble* fu, fdouble* fz) { int rc=-1; int tag=*ftag, m=*fm, n=*fn, q=*fq; double** U = myalloc2(q,m); double** Z = myalloc2(q,n); spread2(q,m,fu,U); rc=fov_reverse(tag,m,n,q,U,Z); pack2(q,n,Z,fz); free((char*)*Z); free((char*)Z); free((char*)*U); free((char*)U); return rc; } /****************************************************************************/ /* THAT'S ALL */ END_C_DECLS ADOL-C-2.4.1/ADOL-C/src/externfcts.cpp0000644000076600007660000001103012053423074015445 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: externfcts.cpp Revision: $Id: externfcts.cpp 370 2012-11-22 13:18:52Z kulshres $ Contents: functions and data types for extern (differentiated) functions. Copyright (c) Andreas Kowarz This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #include #include "externfcts_p.h" #include "taping_p.h" #include #include "oplate.h" #include "buffer_temp.h" #include /****************************************************************************/ /* extern differentiated functions stuff */ #define ADOLC_BUFFER_TYPE \ Buffer< ext_diff_fct, ADOLC_ext_fct, EDFCTS_BLOCK_SIZE > static ADOLC_BUFFER_TYPE buffer(init_ext_diff_fct); static int oldTraceFlag; ext_diff_fct *reg_ext_fct(ADOLC_ext_fct ext_fct) { // this call sets edf->function and edf->index: ext_diff_fct * edf=buffer.append(ext_fct); // for sanity make sure everything else is properly nullified edf->zos_forward=0; edf->fos_forward=0; edf->hos_forward=0; edf->fov_forward=0; edf->hov_forward=0; edf->fos_reverse=0; edf->hos_reverse=0; edf->fov_reverse=0; edf->hov_reverse=0; edf->dp_x=0; edf->dp_X=0; edf->dpp_X=0; edf->dppp_X=0; edf->dp_y=0; edf->dp_Y=0; edf->dpp_Y=0; edf->dppp_Y=0; edf->dp_U=0; edf->dpp_U=0; edf->dp_Z=0; edf->dpp_Z=0; edf->dppp_Z=0; edf->spp_nz=0; edf->max_n=0; edf->max_m=0; edf->nestedAdolc=true; edf->dp_x_changes=true; edf->dp_y_priorRequired=true; return edf; } int call_ext_fct(ext_diff_fct *edfct, int n, double *xp, adouble *xa, int m, double *yp, adouble *ya) { int i = 0, ret; locint numVals; double *vals; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (xa[n-1].loc()-xa[0].loc()!=n-1 || ya[m-1].loc()-ya[0].loc()!=m-1) fail(ADOLC_EXT_DIFF_LOCATIONGAP); if (edfct==NULL) fail(ADOLC_EXT_DIFF_NULLPOINTER_STRUCT); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(ext_diff); ADOLC_PUT_LOCINT(edfct->index); ADOLC_PUT_LOCINT(n); ADOLC_PUT_LOCINT(m); ADOLC_PUT_LOCINT(xa[i].loc()); ADOLC_PUT_LOCINT(ya[i].loc()); ADOLC_PUT_LOCINT(0); /* keep space for checkpointing index */ oldTraceFlag=ADOLC_CURRENT_TAPE_INFOS.traceFlag; ADOLC_CURRENT_TAPE_INFOS.traceFlag=0; } else oldTraceFlag=0; if (edfct->nestedAdolc) { numVals = ADOLC_GLOBAL_TAPE_VARS.storeSize; vals = new double[numVals]; memcpy(vals, ADOLC_GLOBAL_TAPE_VARS.store, numVals * sizeof(double)); } edfct->max_n=(edfct->max_nmax_n; edfct->max_m=(edfct->max_mmax_m; /* update taylor buffer if keep != 0 ; possible double counting as in * adouble.cpp => correction in taping.c */ if (oldTraceFlag != 0) { if (edfct->dp_x_changes) ADOLC_CURRENT_TAPE_INFOS.numTays_Tape += n; if (edfct->dp_y_priorRequired) ADOLC_CURRENT_TAPE_INFOS.numTays_Tape += m; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) { if (edfct->dp_x_changes) for (i=0; idp_y_priorRequired) for (i=0; idp_y_priorRequired) for (i=0; ifunction(n, xp, m, yp); if (edfct->nestedAdolc) { memcpy(ADOLC_GLOBAL_TAPE_VARS.store, vals, numVals * sizeof(double)); delete[] vals; } /* write back */ if (edfct->dp_x_changes) for (i=0; i #include #include #ifdef __cplusplus #include "storemanager.h" #endif BEGIN_C_DECLS enum WORKMODES { ADOLC_NO_MODE, ADOLC_FORWARD, ADOLC_ZOS_FORWARD, ADOLC_FOS_FORWARD, ADOLC_FOV_FORWARD, ADOLC_HOS_FORWARD, ADOLC_HOV_FORWARD, ADOLC_REVERSE, ADOLC_FOS_REVERSE, ADOLC_FOV_REVERSE, ADOLC_HOS_REVERSE, ADOLC_HOV_REVERSE }; /****************************************************************************/ /* Tape identification (ADOLC & version check) */ /****************************************************************************/ typedef struct { short adolc_ver; short adolc_sub; short adolc_lvl; short locint_size; short revreal_size; short address_size; } ADOLC_ID; extern ADOLC_ID adolc_id; /****************************************************************************/ /* tape types => used for file name generation */ /****************************************************************************/ enum TAPENAMES { LOCATIONS_TAPE, VALUES_TAPE, OPERATIONS_TAPE, TAYLORS_TAPE }; /****************************************************************************/ /* Errors handled by fail(...) */ /****************************************************************************/ enum ADOLC_ERRORS { ADOLC_MALLOC_FAILED, ADOLC_INTEGER_TAPE_FOPEN_FAILED, ADOLC_INTEGER_TAPE_FREAD_FAILED, ADOLC_TAPE_TO_OLD, ADOLC_WRONG_LOCINT_SIZE, ADOLC_MORE_STAT_SPACE_REQUIRED, ADOLC_TAPING_BUFFER_ALLOCATION_FAILED, ADOLC_TAPING_TBUFFER_ALLOCATION_FAILED, ADOLC_TAPING_READ_ERROR_IN_TAYLOR_CLOSE, ADOLC_TAPING_TO_MANY_TAYLOR_BUFFERS, ADOLC_TAPING_TO_MANY_LOCINTS, ADOLC_TAPING_STORE_REALLOC_FAILED, ADOLC_TAPING_FATAL_IO_ERROR, ADOLC_TAPING_TAPE_STILL_IN_USE, ADOLC_TAPING_TAYLOR_OPEN_FAILED, ADOLC_EVAL_SEEK_VALUE_STACK, ADOLC_EVAL_OP_TAPE_READ_FAILED, ADOLC_EVAL_VAL_TAPE_READ_FAILED, ADOLC_EVAL_LOC_TAPE_READ_FAILED, ADOLC_EVAL_TAY_TAPE_READ_FAILED, ADOLC_REVERSE_NO_TAYLOR_STACK, ADOLC_REVERSE_COUNTS_MISMATCH, ADOLC_REVERSE_TAYLOR_COUNTS_MISMATCH, ADOLC_BUFFER_NULLPOINTER_FUNCTION, ADOLC_BUFFER_INDEX_TO_LARGE, ADOLC_EXT_DIFF_NULLPOINTER_STRUCT, ADOLC_EXT_DIFF_WRONG_TAPESTATS, ADOLC_EXT_DIFF_NULLPOINTER_FUNCTION, ADOLC_EXT_DIFF_NULLPOINTER_DIFFFUNC, ADOLC_EXT_DIFF_NULLPOINTER_ARGUMENT, ADOLC_EXT_DIFF_WRONG_FUNCTION_INDEX, ADOLC_EXT_DIFF_LOCATIONGAP, ADOLC_CHECKPOINTING_CPINFOS_NULLPOINTER, ADOLC_CHECKPOINTING_NULLPOINTER_ARGUMENT, ADOLC_CHECKPOINTING_NULLPOINTER_FUNCTION, ADOLC_CHECKPOINTING_NULLPOINTER_FUNCTION_DOUBLE, ADOLC_CHECKPOINTING_REVOLVE_IRREGULAR_TERMINATED, ADOLC_CHECKPOINTING_UNEXPECTED_REVOLVE_ACTION, ADOLC_WRONG_PLATFORM_32, ADOLC_WRONG_PLATFORM_64 }; /* additional infos fail can work with */ extern int failAdditionalInfo1; extern int failAdditionalInfo2; extern locint failAdditionalInfo3; extern locint failAdditionalInfo4; extern void *failAdditionalInfo5; extern void *failAdditionalInfo6; /****************************************************************************/ /* tape information */ /****************************************************************************/ #ifdef SPARSE typedef struct SparseJacInfos { void *g; void *jr1d; double *y; double **Seed; double **B; unsigned int **JP; int depen, nnz_in, seed_clms, seed_rows; } SparseJacInfos; typedef struct SparseHessInfos { void *g; void *hr; double **Hcomp; double*** Xppp; double*** Yppp; double*** Zppp; double** Upp; unsigned int **HP; int nnz_in, indep, p; } SparseHessInfos; #endif typedef struct PersistantTapeInfos { /* survive tape re-usage */ int forodec_nax, forodec_dax; double *forodec_y, *forodec_z, **forodec_Z; double **jacSolv_J; double **jacSolv_I; double *jacSolv_xold; int *jacSolv_ri; int *jacSolv_ci; int jacSolv_nax, jacSolv_modeold, jacSolv_cgd; #ifdef SPARSE /* sparse derivative matrices */ int inJacSparseUse; int inHessSparseUse; /* sparse Jacobian matrices */ SparseJacInfos sJinfos; /* sparse Hessian matrices */ SparseHessInfos sHinfos; #endif /* file names */ char *op_fileName; char *loc_fileName; char *val_fileName; char *tay_fileName; int keepTape; /* - remember if tapes shall be written out to disk - this information can only be given at taping time and must survive all other actions on the tape */ } PersistantTapeInfos; typedef struct TapeInfos { short tapeID; int inUse; uint numInds; uint numDeps; int keepTaylors; /* == 1 - write taylor stack in taping mode */ size_t stats[STAT_SIZE]; int traceFlag; char tapingComplete; /* operations tape */ FILE *op_file; /* file descriptor */ unsigned char *opBuffer; /* pointer to the current tape buffer */ unsigned char *currOp; /* pointer to the current opcode */ unsigned char *lastOpP1; /* pointer to element following the buffer */ size_t numOps_Tape; /* overall number of opcodes */ size_t num_eq_prod; /* overall number of eq_*_prod for nlf */ /* values (real) tape */ FILE *val_file; double *valBuffer; double *currVal; double *lastValP1; size_t numVals_Tape; /* locations tape */ FILE *loc_file; locint *locBuffer; locint *currLoc; locint *lastLocP1; size_t numLocs_Tape; /* taylor stack tape */ FILE *tay_file; revreal *tayBuffer; revreal *currTay; revreal *lastTayP1; size_t numTays_Tape; int nextBufferNumber; /* the next Buffer to read back */ char lastTayBlockInCore; /* == 1 if last taylor buffer is still in in core (first call of reverse) */ double **T_for; /* derivative buffer - forward */ uint deg_save; /* degree to save and saved respectively */ uint tay_numInds; /* # of independents for the taylor stack */ uint tay_numDeps; /* # of dependents for the taylor stack */ /* checkpointing */ locint lowestXLoc_for; /* location of the first ind. - forward mode */ locint lowestYLoc_for; /* location of the first dep. - forward mode */ locint lowestXLoc_rev; /* location of the first ind. - reverse mode */ locint lowestYLoc_rev; /* location of the first dep. - reverse mode */ locint cpIndex; /* index of the curr. cp function <- tape */ int numDirs_rev; /* # of directions for **v_reverse (checkpointing) */ /* evaluation forward */ double *dp_T0; double **dpp_T; /* evaluation reverse */ revreal *rp_T; revreal **rpp_T; revreal *rp_A; revreal **rpp_A; unsigned long int **upp_A; /* extern diff. fcts */ locint ext_diff_fct_index; /* set by forward and reverse (from tape) */ PersistantTapeInfos pTapeInfos; #if defined(__cplusplus) TapeInfos(); TapeInfos(short tapeID); #endif } TapeInfos; typedef struct GlobalTapeVarsCL { double* store; /* double store for calc. while taping */ size_t storeSize; size_t numLives; locint maxLoc; locint operationBufferSize; /* Defaults to the value specified in */ locint locationBufferSize; /* usrparms.h. May be overwritten by values */ locint valueBufferSize; /* in a local config file .adolcrc. */ locint taylorBufferSize; int maxNumberTaylorBuffers; char inParallelRegion; /* set to 1 if in an OpenMP parallel region */ char newTape; /* signals: at least one tape created (0/1) */ char branchSwitchWarning; TapeInfos *currentTapeInfosPtr; #ifdef __cplusplus StoreManager *storeManagerPtr; GlobalTapeVarsCL(); ~GlobalTapeVarsCL(); const GlobalTapeVarsCL& operator=(const GlobalTapeVarsCL&); #else void *storeManagerPtr; #endif } GlobalTapeVars; #if defined(_OPENMP) extern int isParallel(); #define ADOLC_TAPE_INFOS_BUFFER_DECL *tapeInfosBuffer #define ADOLC_TAPE_STACK_DECL *tapeStack #define ADOLC_CURRENT_TAPE_INFOS_DECL *currentTapeInfos #define ADOLC_CURRENT_TAPE_INFOS_FALLBACK_DECL *currentTapeInfos_fallBack #define ADOLC_GLOBAL_TAPE_VARS_DECL *globalTapeVars #define ADOLC_EXT_DIFF_FCTS_BUFFER_DECL *ADOLC_extDiffFctsBuffer #define ADOLC_CHECKPOINTS_STACK_DECL *ADOLC_checkpointsStack #define ADOLC_OPENMP_THREAD_NUMBER int ADOLC_threadNumber #if defined(ADOLC_THREADSAVE_ERRNO) #define ADOLC_OPENMP_GET_THREAD_NUMBER ADOLC_threadNumber = errno #define ADOLC_OPENMP_RESTORE_THREAD_NUMBER errno = ADOLC_threadNumber #else #define ADOLC_OPENMP_GET_THREAD_NUMBER ADOLC_threadNumber = omp_get_thread_num() #define ADOLC_OPENMP_RESTORE_THREAD_NUMBER #endif #define ADOLC_TAPE_INFOS_BUFFER tapeInfosBuffer[ADOLC_threadNumber] #define ADOLC_TAPE_STACK tapeStack[ADOLC_threadNumber] #define ADOLC_CURRENT_TAPE_INFOS currentTapeInfos[ADOLC_threadNumber] #define ADOLC_CURRENT_TAPE_INFOS_FALLBACK currentTapeInfos_fallBack[ADOLC_threadNumber] #define ADOLC_GLOBAL_TAPE_VARS globalTapeVars[ADOLC_threadNumber] #define ADOLC_EXT_DIFF_FCTS_BUFFER ADOLC_extDiffFctsBuffer[ADOLC_threadNumber] #define ADOLC_CHECKPOINTS_STACK ADOLC_checkpointsStack[ADOLC_threadNumber] #define REVOLVE_NUMBERS revolve_numbers[ADOLC_threadNumber] #else #define ADOLC_TAPE_INFOS_BUFFER_DECL tapeInfosBuffer #define ADOLC_TAPE_STACK_DECL tapeStack #define ADOLC_CURRENT_TAPE_INFOS_DECL currentTapeInfos #define ADOLC_CURRENT_TAPE_INFOS_FALLBACK_DECL currentTapeInfos_fallBack #define ADOLC_GLOBAL_TAPE_VARS_DECL globalTapeVars #define ADOLC_EXT_DIFF_FCTS_BUFFER_DECL ADOLC_extDiffFctsBuffer #define ADOLC_CHECKPOINTS_STACK_DECL ADOLC_checkpointsStack #define ADOLC_OPENMP_THREAD_NUMBER #define ADOLC_OPENMP_GET_THREAD_NUMBER #define ADOLC_OPENMP_RESTORE_THREAD_NUMBER #define ADOLC_TAPE_INFOS_BUFFER tapeInfosBuffer #define ADOLC_TAPE_STACK tapeStack #define ADOLC_CURRENT_TAPE_INFOS currentTapeInfos #define ADOLC_CURRENT_TAPE_INFOS_FALLBACK currentTapeInfos_fallBack #define ADOLC_GLOBAL_TAPE_VARS globalTapeVars #define ADOLC_EXT_DIFF_FCTS_BUFFER ADOLC_extDiffFctsBuffer #define ADOLC_CHECKPOINTS_STACK ADOLC_checkpointsStack #define REVOLVE_NUMBERS revolve_numbers #endif /* _OPENMP */ extern TapeInfos ADOLC_CURRENT_TAPE_INFOS_DECL; extern TapeInfos ADOLC_CURRENT_TAPE_INFOS_FALLBACK_DECL; extern GlobalTapeVars ADOLC_GLOBAL_TAPE_VARS_DECL; /****************************************************************************/ /* C Function interfaces */ /****************************************************************************/ int initNewTape(short tapeID); /* initializes a new tape * - returns 0 on success * - returns 1 in case tapeID is already/still in use */ void openTape(short tapeID, char mode); /* opens an existing tape or creates a new one */ void releaseTape(); /* release the current tape and give control to the previous one * if keepVS is not zero (keep value stack for reverse) => belonging TapeInfos * are kept marked as being in use */ TapeInfos *getTapeInfos(short tapeID); /* updates the tape infos for the given ID - a tapeInfos struct is created * and registered if non is found but its state will remain "not in use" */ #ifdef SPARSE void setTapeInfoJacSparse(short tapeID, SparseJacInfos sJinfos); /* updates the tape infos on sparse Jac for the given ID */ void setTapeInfoHessSparse(short tapeID, SparseHessInfos sHinfos); /* updates the tape infos n sparse Hess for the given ID */ #endif void take_stock(); /* record all existing adoubles on the tape * - intended to be used in start_trace only */ locint keep_stock(); /* record all remaining live variables on the value stack tape * - turns off trace_flag * - intended to be used in stop_trace only */ void updateLocs(); locint next_loc(); /* returns the next free location in "adouble" memory */ void free_loc(locint loc); /* frees the specified location in "adouble" memory */ void taylor_begin(uint bufferSize, double **Tg, int degreeSave); /* set up statics for writing taylor data */ void taylor_close(uint buffer); /* close taylor file if necessary and refill buffer if possible */ void taylor_back(short tag, int* dep, int* ind, int* degree); /* initializes a reverse sweep */ void write_taylor(locint loc, int keep); /* writes the block of size depth of taylor coefficients from point loc to * the taylor buffer, if the buffer is filled, then it is written to the * taylor tape */ void write_taylors(locint loc, int keep, int degree, int numDir); /* writes the block of size depth of taylor coefficients from point loc to * the taylor buffer, if the buffer is filled, then it is written to the * taylor tape */ #define ADOLC_WRITE_SCAYLOR(X) \ {\ if (ADOLC_CURRENT_TAPE_INFOS.currTay == ADOLC_CURRENT_TAPE_INFOS.lastTayP1)\ put_tay_block(ADOLC_CURRENT_TAPE_INFOS.lastTayP1);\ *ADOLC_CURRENT_TAPE_INFOS.currTay = (X);\ ++ADOLC_CURRENT_TAPE_INFOS.currTay;\ } /* writes a single element (x) to the taylor buffer and writes the buffer to * disk if necessary */ void write_scaylors(revreal *x, uint size); /* write_scaylors writes # size elements from x to the taylor buffer */ #define ADOLC_OVERWRITE_SCAYLOR(X,Y) \ {\ *Y = *(ADOLC_CURRENT_TAPE_INFOS.currTay - 1);\ *(ADOLC_CURRENT_TAPE_INFOS.currTay - 1) = X;\ } /* overwrites the last (single) element (x) of the taylor buffer */ #define ADOLC_DELETE_SCAYLOR(X) \ {\ --ADOLC_CURRENT_TAPE_INFOS.currTay;\ *X = *ADOLC_CURRENT_TAPE_INFOS.currTay;\ } /* deletes the last (single) element (x) of the taylor buffer */ void put_tay_block(revreal *lastValP1); /* writes the taylor stack buffer onto hard disk */ #define ADOLC_GET_TAYLOR(X) \ {\ if (ADOLC_CURRENT_TAPE_INFOS.currTay == ADOLC_CURRENT_TAPE_INFOS.tayBuffer)\ get_tay_block_r();\ --ADOLC_CURRENT_TAPE_INFOS.currTay;\ ADOLC_CURRENT_TAPE_INFOS.rp_T[X] = *ADOLC_CURRENT_TAPE_INFOS.currTay;\ } /* puts a taylor value from the value stack buffer to the taylor buffer */ void get_taylors(locint loc, int degree); /* puts a block of taylor coefficients from the value stack buffer to the * taylor buffer --- Higher Order Scalar */ void get_taylors_p(locint loc, int degree, int numDir); /* puts a block of taylor coefficients from the value stack buffer to the * taylor buffer --- Higher Order Vector */ void get_tay_block_r(); /* gets the next (previous block) of the value stack */ void initTapeBuffers(); /* free/allocate memory for buffers, initialize pointers */ void start_trace(); /* initialization for the taping process -> buffer allocation, sets * files names, and calls appropriate setup routines */ void stop_trace(int flag); /* stop Tracing, clean up, and turn off trace_flag */ void close_tape(int flag); /* close open tapes, update stats and clean up */ void freeTapeResources(TapeInfos *tapeInfos); /* free all resources used by a tape before overwriting the tape */ void read_tape_stats(TapeInfos *tapeInfos); /* does the actual reading from the hard disk into the stats buffer */ void init_for_sweep(short tag); /* initialize a forward sweep, get stats, open tapes, fill buffers, ... */ void init_rev_sweep(short tag); /* initialize a reverse sweep, get stats, open tapes, fill buffers, ... */ void end_sweep(); /* finish a forward or reverse sweep */ void fail(int error); /* outputs an appropriate error message using DIAG_OUT and exits the running * program */ /* print an error message describing the error number */ void printError(); char *createFileName(short tapeID, int tapeType); /* create file name depending on tape type and number */ void put_op(unsigned char op); /* puts an operation into the operation buffer, ensures that location buffer * and constants buffer are prepared to take the belonging stuff */ void put_op_block(unsigned char *lastOpP1); /* writes a block of operations onto hard disk and handles file creation, * removal, ... */ void get_op_block_f(); /* reads the next operations block into the internal buffer */ void get_op_block_r(); /* reads the previous block of operations into the internal buffer */ #define ADOLC_PUT_LOCINT(X) \ {\ *ADOLC_CURRENT_TAPE_INFOS.currLoc = X;\ ++ADOLC_CURRENT_TAPE_INFOS.currLoc;\ } /* puts a single locations into the location buffer, no disk access */ void put_loc_block(locint *lastLocP1); /* writes a block of locations onto hard disk and handles file creation, * removal, ... */ void get_loc_block_f(); /* reads the next block of locations into the internal buffer */ void get_loc_block_r(); /* reads the previous block of locations into the internal buffer */ #define ADOLC_PUT_VAL(X) \ {\ *ADOLC_CURRENT_TAPE_INFOS.currVal = X;\ ++ADOLC_CURRENT_TAPE_INFOS.currVal;\ } /* puts a single constant into the location buffer, no disk access */ void put_vals_writeBlock(double *reals, locint numReals); /* fill the constants buffer and write it to disk */ void put_vals_notWriteBlock(double *reals, locint numReals); /* write some constants to the buffer without disk access */ void put_val_block(double *lastValP1); /* writes a block of constants (real) onto hard disk and handles file * creation, removal, ... */ void get_val_block_f(); /* reads the next block of constants into the internal buffer */ void get_val_block_r(); /* reads the previous block of constants into the internal buffer */ locint get_val_space(void); /* returns the number of free constants in the real tape, ensures that it * is at least 5 */ double *get_val_v_f(locint size); /* return a pointer to the first element of a constants vector * -- Forward Mode -- */ double *get_val_v_r(locint size); /* return a pointer to the first element of a constants vector * -- Reverse Mode -- */ /* suspicious function, maybe for vector class - kept for compatibility */ void reset_val_r(); /* updates */ int upd_resloc(locint temp, locint lhs); int upd_resloc_inc_prod(locint temp, locint newlhs, unsigned char newop); /* special IEEE values */ double make_nan(); double make_inf(); #if !defined(ADOLC_HARDDEBUG) /*--------------------------------------------------------------------------*/ /* MACRO or FUNCTION */ #define get_op_f() *ADOLC_CURRENT_TAPE_INFOS.currOp++ #define get_op_r() *--ADOLC_CURRENT_TAPE_INFOS.currOp #define get_locint_f() *ADOLC_CURRENT_TAPE_INFOS.currLoc++ #define get_locint_r() *--ADOLC_CURRENT_TAPE_INFOS.currLoc #define get_val_f() *ADOLC_CURRENT_TAPE_INFOS.currVal++ #define get_val_r() *--ADOLC_CURRENT_TAPE_INFOS.currVal #else /* HARDDEBUG */ unsigned char get_op_f(); unsigned char get_op_r(); locint get_locint_f(); locint get_locint_r(); double get_val_f(); double get_val_r(); #endif /* tries to read a local config file containing, e.g., buffer sizes */ void readConfigFile(); /* clear the tapeBaseNames that were alocated above in readConfigFile() */ void clearTapeBaseNames(); /****************************************************************************/ /* This function sets the flag "newTape" if either a taylor buffer has been */ /* created or a taping process has been performed. Calling the function is */ /* also useful to "convince" the linker of including the cleaner part into */ /* the binary when linking statically! */ /****************************************************************************/ void markNewTape(); END_C_DECLS /****************************************************************************/ /* That's all */ /****************************************************************************/ #endif /* ADOLC_TAPING_P_H */ ADOL-C-2.4.1/ADOL-C/src/indopro_forward_s.c0000644000076600007660000000137511227420735016456 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: int_forward_s.c Revision: $Id: indopro_forward_s.c 42 2009-07-15 18:37:17Z awalther $ Contents: int_forward (integer forward mode for bit pattern propagation) Copyright (c) Andrea Walther This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #define _INDO_ 1 #define _INDOPRO_ 1 #define _NTIGHT_ 1 #include #undef _INDO_ #undef _INDOPRO_ #undef _NTIGHT_ ADOL-C-2.4.1/ADOL-C/src/revolve.c0000644000076600007660000005500611412425466014422 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: revolve.c Revision: $Id: revolve.c 106 2010-06-29 17:19:50Z kulshres $ Contents: optimal binomial checkpointing adapted for ADOL-C Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ /* ----- * The function REVOLVE coded below is meant to be used as a * * "controller" for running a time-dependent applications program * * in the reverse mode with checkpointing described in the paper * * "Achieving logarithmic Growth in temporal and spatial complexity * * in reverse automatic differentiation", Optimization Methods and * * Software, Vol.1 pp. 35-54. * * A postscript source of that paper can be found in the ftp sites * * info.mcs.anl.gov and nbtf02.math.tu-dresden.de. * * Apart from REVOLVE this file contains five auxiliary routines * * NUMFORW, EXPENSE, MAXRANGE, and ADJUST. * * * *--------------------------------------------------------------------* * * * To utilize REVOLVE the user must have procedures for * * - Advancing the state of the modeled system to a certain time. * * - Saving the current state onto a stack of snapshots. * * - Restoring the the most recently saved snapshot and * * restarting the forward simulation from there. * * - Initializing the adjoints at the end of forward sweep. * * - Performing one combined forward and adjoint step. * * Through an encoding of its return value REVOLVE asks the * * calling program to perform one of these 'actions', which we will * * refer to as * * * * 'advance', 'takeshot', 'restore', 'firsturn' and 'youturn' .* * There are two other return values, namely * * 'terminate' and 'error' * * which indicate a regular or faulty termination of the calls * * to REVOLVE. * * * * The action 'firsturn' includes a 'youturn', in that it requires * * -advancing through the last time-step with recording * * of intermediates * * -initializing the adjoint values (possibly after * * performing some IO) * * -reversing the last time step using the record just written * * The action 'firsturn' is obtained when the difference FINE-CAPO * * has been reduced to 1 for the first time. * * * *--------------------------------------------------------------------* * * * The calling sequence is * * * * REVOLVE(CHECK,CAPO,FINE,SNAPS,INFO) * * * * with the return value being one of the actions to be taken. The * * calling parameters are all integers with the following meaning * * * * CHECK number of checkpoint being written or retrieved * * CAPO beginning of subrange currently being processed * * FINE end of subrange currently being processed * * SNAPS upper bound on number of checkpoints taken * * INFO determines how much information will be printed * * and contains information about an error occured * * * * Since REVOLVE involves only a few integer operations its * * run-time is truly negligible within any nontrivial application. * * * * The parameter SNAPS is selected by the user (possibly with the * * help of the routines EXPENSE and ADJUST described below ) and * * remains unchanged throughout. * * * * The pair (CAPO,FINE) always represents the initial and final * * state of the subsequence of time steps currently being traversed * * backwards. * * * * The conditions * * CHECK >= -1 and CAPO <= FINE * * are necessary and sufficient for a regular response of REVOLVE. * * If either condition is violated the value 'error' is returned. * * * * The first call to REVOLVE must be with CHECK=-1 so that * * appropriate initializations can be performed internally. * * * * When CHECK =-1 and CAPO = FINE then 'terminate' is returned as * * action value. This combination necessarily arises after a * * sufficiently large number of calls to REVOLVE, which depends * * only on the initial difference FINE-CAPO. * * * * The last parameter INFO determines how much information about * * the actions performed will be printed. When INFO =0 no * * information is sent to standard output. When INFO > 0 REVOLVE * * produces an output that contains a prediction of the number of * * forward steps and of the factor by which the execution will slow * * down. When an error occurs, the return value of INFO contains * * information about the reason: * * * * INFO = 10: number of checkpoints stored exceeds CHECKUP, * * increase constant CHECKUP and recompile * * INFO = 11: number of checkpoints stored exceeds SNAPS, ensure * * SNAPS greater than 0 and increase initial FINE * * INFO = 12: error occurs in NUMFORW * * INFO = 13: enhancement of FINE, SNAPS checkpoints stored, * * SNAPS must be increased * * INFO = 14: number of SNAPS exceeds CHECKUP, increase constant * * CHECKUP and recompile * * INFO = 15: number of REPS exceeds REPSUP, increase constant * * REPSUP and recompile * * * *--------------------------------------------------------------------* * * * Some further explanations and motivations: * * * * There is an implicit bound on CHECK through the dimensioning of * * the integer array CH[CHEKUP] with CHECKUP = 64 being the default.* * If anybody wants to have that even larger he must change the * * source. Also for the variable REPS an upper bound REPSUP is * * defined. The default value equals 64. If during a call to * * TREEVERSE a (CHECKUP+1)-st checkpoint would normally be called * * for then control is returned after an appropriate error message. * * When the calculated REPS exceeds REPSUP also an error message * * occurs. * * During the forward sweep the user is free to change the last * * three parameters from call to call, except that FINE may never * * be less than the current value of CAPO. This may be useful when * * the total number of time STEPS to be taken is not a priori * * known. The choice FINE=CAPO+1 initiates the reverse sweep, which * * happens automatically if is left constant as CAPO is eventually * * moved up to it. Once the first reverse or restore action has * * been taken only the last two parameters should be changed. * * * *--------------------------------------------------------------------* * * * The necessary number of forward steps without recording is * * calculated by the function * * * * NUMFORW(STEPS,SNAPS) * * * * STEPS denotes the total number of time steps, i.e. FINE-CAPO * * during the first call of REVOLVE. When SNAPS is less than 1 an * * error message will be given and -1 is returned as value. * * * *--------------------------------------------------------------------* * * * To choose an appropriated value of SNAPS the function * * * * EXPENSE(STEPS,SNAPS) * * * * estimates the run-time factor incurred by REVOLVE for a * * particular value of SNAPS. The ratio NUMFORW(STEPS,SNAPS)/STEPS * * is returned. This ratio corresponds to the run-time factor of * * the execution relative to the run-time of one forward time step. * * * *--------------------------------------------------------------------* * * * The auxiliary function * * * * MAXRANGE(SNAPS,REPS) * * * * returns the integer (SNAPS+REPS)!/(SNAPS!REPS!) provided * * SNAPS >=0, REPS >= 0. Otherwise there will be appropriate error * * messages and the value -1 will be returned. If the binomial * * expression is not representable as a signed 4 byte integer, * * greater than 2^31-1, this maximal value is returned and a * * warning message printed. * * * *--------------------------------------------------------------------* * * * Furthermore, the function * * * * ADJUST(STEPS) * * * * is provided. It can be used to determine a value of SNAPS so * * that the increase in spatial complexity equals approximately the * * increase in temporal complexity. For that ADJUST computes a * * return value satisfying SNAPS ~= log_4 (STEPS) because of the * * theory developed in the paper mentioned above. * * * *--------------------------------------------------------------------*/ #include #include "taping_p.h" #define MAXINT 2147483647 #ifndef _OPENMP revolve_nums revolve_numbers; #else revolve_nums *revolve_numbers = NULL; #endif /* ************************************************************************* */ int numforw(int steps, int snaps) { int reps, range, num; if (snaps < 1) { printf(" error occurs in numforw: snaps < 1\n"); return -1; } if (snaps > ADOLC_CHECKUP) { printf(" number of snaps=%d exceeds ADOLC_CHECKUP \n",snaps); printf(" redefine 'ADOLC_CHECKUP' \n"); return -1; } reps = 0; range = 1; while(range < steps) { reps += 1; range = range*(reps + snaps)/reps; } printf("range = %d \n",range); if (reps > ADOLC_REPSUP) { printf(" number of reps=%d exceeds ADOLC_REPSUP \n",reps); printf(" redefine 'ADOLC_REPSUP' \n"); return -1; } num = reps * steps - range*reps/(snaps+1); return num; } /* ************************************************************************* */ double expense(int steps, int snaps) { double ratio; if (snaps < 1) { printf(" error occurs in expense: snaps < 0\n"); return -1; } if (steps < 1) { printf(" error occurs in expense: steps < 0\n"); return -1; } ratio = ((double) numforw(steps,snaps)); if (ratio == -1) return -1; ratio = ratio/steps; return ratio; } /* ************************************************************************* */ int maxrange(int ss, int tt) { int i, ires; double res = 1.0; if((tt<0) || (ss<0)) { printf("error in MAXRANGE: negative parameter"); return -1; } for(i=1; i<= tt; i++) { res *= (ss + i); res /= i; if (res > MAXINT) { ires=MAXINT; printf("warning from MAXRANGE: returned maximal integer %d\n", ires); return ires; } } ires = res; return ires; } /* ************************************************************************* */ int adjust(int steps) { int snaps, s, reps; snaps = 1; reps = 1; s = 0; while( maxrange(snaps+s, reps+s) > steps ) s--; while( maxrange(snaps+s, reps+s) < steps ) s++; snaps += s; reps += s ; s = -1; while( maxrange(snaps,reps) >= steps ) { if (snaps > reps) { snaps -= 1; s = 0; } else { reps -= 1; s = 1; } } if ( s == 0 ) snaps += 1 ; if ( s == 1 ) reps += 1; return snaps; } /* ************************************************************************* */ enum revolve_action revolve (int* check,int* capo,int* fine,int snaps,int* info) { int ds, oldcapo, num, bino1, bino2, bino3, bino4, bino5, bino6; /* (*capo,*fine) is the time range currently under consideration */ /* ch[j] is the number of the state that is stored in checkpoint j */ ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; REVOLVE_NUMBERS.commands += 1; if ((*check < -1) || (*capo > *fine)) { *info = 9; return revolve_error; } if ((*check == -1) && (*capo < *fine)) { if (*check == -1) REVOLVE_NUMBERS.turn = 0; /* initialization of turn counter */ *REVOLVE_NUMBERS.ch = *capo-1; } switch(*fine-*capo) { case 0: /* reduce capo to previous checkpoint, unless done */ if(*check == -1 || *capo==*REVOLVE_NUMBERS.ch ) { *check -= 1; if (*info > 0) { printf(" \n advances: %5d",REVOLVE_NUMBERS.advances); printf(" \n takeshots: %4d",REVOLVE_NUMBERS.takeshots); printf(" \n commands: %5d \n",REVOLVE_NUMBERS.commands); } return revolve_terminate; } else { *capo = REVOLVE_NUMBERS.ch[*check]; REVOLVE_NUMBERS.oldfine = *fine; return revolve_restore; } case 1: /* (possibly first) combined forward/reverse step */ *fine -= 1; if(*check >= 0 && REVOLVE_NUMBERS.ch[*check] == *capo) *check -= 1; if(REVOLVE_NUMBERS.turn == 0) { REVOLVE_NUMBERS.turn = 1; REVOLVE_NUMBERS.oldfine = *fine; return revolve_firsturn; } else { REVOLVE_NUMBERS.oldfine = *fine; return revolve_youturn; } default: if(*check == -1 || REVOLVE_NUMBERS.ch[*check] != *capo) { *check += 1 ; if(*check >= ADOLC_CHECKUP) { *info = 10; return revolve_error; } if(*check+1 > snaps) { *info = 11; return revolve_error; } REVOLVE_NUMBERS.ch[*check] = *capo; if (*check == 0) { REVOLVE_NUMBERS.advances = 0; REVOLVE_NUMBERS.takeshots = 0; REVOLVE_NUMBERS.commands = 1; REVOLVE_NUMBERS.oldsnaps = snaps; if (snaps > ADOLC_CHECKUP) { *info = 14; return revolve_error; } if (*info > 0) { num = numforw(*fine-*capo,snaps); if (num == -1) { *info = 12; return revolve_error; } printf(" prediction of needed forward steps: %8d => " "\n",num); printf(" slowdown factor: %8.4f \n\n", ((double) num)/(*fine-*capo)); } } REVOLVE_NUMBERS.takeshots += 1; REVOLVE_NUMBERS.oldfine = *fine; return revolve_takeshot; } else { if ((REVOLVE_NUMBERS.oldfine < *fine) && (snaps == *check+1)) { *info = 13; return revolve_error; } oldcapo = *capo; ds = snaps - *check; if (ds < 1) { *info = 11; return revolve_error; } REVOLVE_NUMBERS.reps = 0; REVOLVE_NUMBERS.range = 1; while(REVOLVE_NUMBERS.range < *fine - *capo) { REVOLVE_NUMBERS.reps += 1; REVOLVE_NUMBERS.range = REVOLVE_NUMBERS.range * (REVOLVE_NUMBERS.reps + ds) / REVOLVE_NUMBERS.reps; } if (REVOLVE_NUMBERS.reps > ADOLC_REPSUP) { *info = 15; return revolve_error; } if (snaps != REVOLVE_NUMBERS.oldsnaps) { if (snaps > ADOLC_CHECKUP) { *info = 14; return revolve_error; } } bino1 = REVOLVE_NUMBERS.range * REVOLVE_NUMBERS.reps / (ds+REVOLVE_NUMBERS.reps); bino2 = (ds > 1) ? bino1*ds/(ds+REVOLVE_NUMBERS.reps-1) : 1; if (ds == 1) bino3 = 0; else bino3 = (ds > 2) ? bino2 * (ds - 1) / (ds + REVOLVE_NUMBERS.reps - 2) : 1; bino4 = bino2*(REVOLVE_NUMBERS.reps-1)/ds; if (ds < 3) bino5 = 0; else bino5 = (ds > 3) ? bino3*(ds-2)/REVOLVE_NUMBERS.reps : 1; bino6 = 0; /* range = beta(c,r) >= l (r -> min) * bino1 = beta(c,r-1) * bino2 = beta(c-1,r-1) * bino3 = beta(c-2,r-1) * bino4 = beta(c,r-2) * bino5 = beta(c-3,r) */ /* new version by A. Kowarz * l^ as large as possible * bino6 = beta(c-1,r-2) if (ds < 1) bino6 = 0; else bino6 = (ds > 1) ? bino2*(reps-1)/(ds+reps-2) : 1; if (*fine-*capo>=range-bino5) *capo += bino1; else if (*fine-*capo>bino1+bino2) *capo = *fine-bino2-bino3; else if (*fine-*capo>=bino1+bino6) *capo += bino1-bino3; else *capo = *fine-bino1+bino4; */ /* new version by A. Kowarz * l^ as small as possible * bino6 = beta(c-1,r) */ bino6 = bino1*ds/REVOLVE_NUMBERS.reps; if (*fine-*capo<=bino1+bino3) *capo += bino4; else if (*fine-*capo= range - bino5) *capo = *capo + bino1; else *capo = *fine-bino2-bino3; } */ if (*capo == oldcapo) *capo = oldcapo+1; REVOLVE_NUMBERS.advances = REVOLVE_NUMBERS.advances + *capo - oldcapo; REVOLVE_NUMBERS.oldfine = *fine; return revolve_advance; } } } ADOL-C-2.4.1/ADOL-C/src/fos_forward.c0000644000076600007660000000144611227420735015250 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: fos_forward.c Revision: $Id: fos_forward.c 42 2009-07-15 18:37:17Z awalther $ Contents: fos_forward (first-order-scalar forward mode) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #define _FOS_ 1 #define _KEEP_ 1 #include #undef _KEEP_ #undef _FOS_ ADOL-C-2.4.1/ADOL-C/src/zos_forward.c0000644000076600007660000000144611227420735015274 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: zos_forward.c Revision: $Id: zos_forward.c 42 2009-07-15 18:37:17Z awalther $ Contents: zos_forward (zero-order-scalar forward mode) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #define _ZOS_ 1 #define _KEEP_ 1 #include #undef _KEEP_ #undef _ZOS_ ADOL-C-2.4.1/ADOL-C/src/fos_reverse.c0000644000076600007660000000140611227420735015253 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: fos_reverse.c Revision: $Id: fos_reverse.c 42 2009-07-15 18:37:17Z awalther $ Contents: fos_reverse (first-order-scalar reverse mode) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #define _FOS_ 1 #include #undef _FOS_ ADOL-C-2.4.1/ADOL-C/src/buffer_temp.h0000644000076600007660000000744411412425466015246 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: struct_buf.h Revision: $Id: buffer_temp.h 106 2010-06-29 17:19:50Z kulshres $ Contents: - template class for linked list of Type buffers with constant length per buffer - intended to be used with structs Copyright (c) Andreas Kowarz This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_STRUCT_BUF_H) #define ADOLC_STRUCT_BUF_H 1 #include #include "taping_p.h" #if defined(__cplusplus) /****************************************************************************/ /* This is all C++ */ #include #define BUFFER Buffer #define BUFFER_TEMPLATE template typedef locint IndexType; BUFFER_TEMPLATE class Buffer { typedef void (*InitFunctionPointer) (SubBufferElement *subBufferElement); typedef struct SubBuffer { SubBufferElement elements[_subBufferSize]; struct SubBuffer *nextSubBuffer; } SubBuffer; public: inline Buffer() { firstSubBuffer = NULL; numEntries = 0; subBufferSize = _subBufferSize; initFunction = NULL; } inline Buffer(InitFunctionPointer _initFunction) { firstSubBuffer = NULL; numEntries = 0; subBufferSize = _subBufferSize; initFunction = _initFunction; } inline ~Buffer(); inline void init(InitFunctionPointer _initFunction) { initFunction = _initFunction; } SubBufferElement *append(FunctionPointer functionPointer); SubBufferElement *getElement(IndexType index); private: SubBuffer *firstSubBuffer; InitFunctionPointer initFunction; IndexType subBufferSize; IndexType numEntries; }; BUFFER_TEMPLATE BUFFER::~Buffer() { SubBuffer *tmpSubBuffer = NULL; while (firstSubBuffer != NULL) { tmpSubBuffer = firstSubBuffer; firstSubBuffer = firstSubBuffer->nextSubBuffer; delete tmpSubBuffer; } } BUFFER_TEMPLATE SubBufferElement *BUFFER::append(FunctionPointer functionPointer) { SubBuffer *currentSubBuffer=firstSubBuffer, *previousSubBuffer=NULL; IndexType index, tmp=numEntries; if (functionPointer==NULL) fail(ADOLC_BUFFER_NULLPOINTER_FUNCTION); while (tmp>=subBufferSize) { previousSubBuffer=currentSubBuffer; currentSubBuffer=currentSubBuffer->nextSubBuffer; tmp-=subBufferSize; } if (currentSubBuffer==NULL) { currentSubBuffer=new SubBuffer; if (firstSubBuffer==NULL) firstSubBuffer=currentSubBuffer; else previousSubBuffer->nextSubBuffer=currentSubBuffer; currentSubBuffer->nextSubBuffer=NULL; } index=tmp; if (initFunction!=NULL) initFunction(&(currentSubBuffer->elements[index])); currentSubBuffer->elements[index].index=numEntries; currentSubBuffer->elements[index].function=functionPointer; ++numEntries; return ¤tSubBuffer->elements[index]; } BUFFER_TEMPLATE SubBufferElement *BUFFER::getElement(IndexType index) { SubBuffer *currentSubBuffer=firstSubBuffer; if (index>=numEntries) fail(ADOLC_BUFFER_INDEX_TO_LARGE); while (index>=subBufferSize) { currentSubBuffer=currentSubBuffer->nextSubBuffer; index-=subBufferSize; } return ¤tSubBuffer->elements[index]; } #endif /* __cplusplus */ #endif /* ADOLC_STRUCT_BUF_H */ ADOL-C-2.4.1/ADOL-C/src/storemanager.h0000644000076600007660000001713312030052264015420 0ustar coincoin// -*- c++ -*- hello emacs... /*---------------------------------------------------------------------------- ADOL-C-- Automatic Differentiation by Overloading in C++ - simplified File: storemanager.h Revision: $Id$ Contents: storemanager.h contains definitions of abstract interface class StoreManager and some derived classes implementing the desired functionality. Copyright (c) 2006 Johannes Willkomm 2011-2012 Kshitij Kulshreshtha 2012 Benjamin Letschert This file is part of ADOL-C. The classes StoreManagerXYZ basically takes the global double *store pointer into their obhut and implement next_loc and free_loc. They basic idea is taken from "The C++ Programming Language" by Bjarne Stroustrup, from the chapter 19 on iterators and allocators. To understand how and why they work do the following: 1) Have a look at StoreManagerInSitu and convince yourself that it is exactly the same as the solution presented in the Stroustrup book, except that we always have just one big array instead of a linked list of chunks. This means in particular that we have to copy the values from the old array into the lower half of the new one (we always double the size). 2) Have a look at StoreManagerLocint and convince yourself that these do the same as StoreManagerInSitu except that the linked list of free slots is maintained in a completely different portion of memory. This means the values in freed slots remain untouched until they are allocated again. 3) Have a look a class StoreManagerLocintBlock. This class uses a list of of free blocks of different sizes instead of free locations. class StoreManagerInSitu An unsafe implementation is provided as well, but commented out. It does not use the indexFeld array which saves between 25% and 50% memory relative to the above safe implementation. It is most closely modelled after the example found in the Stroustrup book. It appears that it works very well, if one does not use the trace_on(tag, 1); ... trace_off(); reverse(); way of using ADOL-C. If the first sweep is forward it works fine. Therefore I left it in here as a comment so an interested user with acute main memory scarcity may give it a try. History: 20120427 bl: add blocking store management 20110208 kk: incorporated in ADOL-C; moved some code arround 20060507 jw: begin ----------------------------------------------------------------------------*/ #ifndef ADOL_C__STOREMANAGER_H #define ADOL_C__STOREMANAGER_H #include #include class StoreManager { protected: static size_t const initialSize = 4; public: virtual ~StoreManager() {} virtual locint next_loc() = 0; virtual void free_loc(locint) = 0; virtual void ensure_block(size_t n) = 0; // // effectively the current size of the store array virtual size_t maxSize() const = 0; // // the number of slots currently in use virtual size_t size() const = 0; }; class StoreManagerLocint : public StoreManager { protected: double * &storePtr; locint * indexFree; locint head; size_t &maxsize; size_t ¤tfill; private: void grow(); public: StoreManagerLocint(double * &storePtr, size_t &size, size_t &numlives); StoreManagerLocint(const StoreManagerLocint *const stm, double * &storePtr, size_t &size, size_t &numLives); virtual ~StoreManagerLocint(); virtual inline size_t size() const { return currentfill; } virtual inline size_t maxSize() const { return maxsize; } virtual inline bool realloc_on_next_loc() const { return (head == 0); } virtual locint next_loc(); virtual void free_loc(locint loc); virtual void ensure_block(size_t n) {} }; class StoreManagerLocintBlock : public StoreManager { protected: double * &storePtr; struct FreeBlock { locint next; // next location size_t size; // number of following free locations FreeBlock(): next(0), size(0) {} FreeBlock(const struct FreeBlock &block) : next(block.next),size(block.size) {} }; list indexFree; size_t &maxsize; size_t ¤tfill; private: /** * when minGrow is specified we asssume that we have already * search the blocks and found no block with minGrow locations in it */ void grow(size_t minGrow=0 ); public: StoreManagerLocintBlock(double * &storePtr, size_t &size, size_t &numlives); StoreManagerLocintBlock(const StoreManagerLocintBlock *const stm, double * &storePtr, size_t &size, size_t &numLives); virtual ~StoreManagerLocintBlock(); virtual inline size_t size() const { return currentfill; } virtual inline size_t maxSize() const { return maxsize; } virtual locint next_loc(); virtual void free_loc(locint loc); virtual void ensure_block(size_t n); }; #if 0 /* This implementation is unsafe in that using tace_on with keep=1 and reverse mode directly afterwards will yield incorrect results. For all other purposes it seem to work just fine, so it's left here for reference as a comment. */ /* unsafe - use with care */ class StoreManagerInSitu : public StoreManager { // static size_t const initialeGroesse = 512; protected: double * &storePtr; struct Link { struct Link *next; }; Link *head; size_t groesse; size_t anzahl; public: size_t maxIndexUsed; StoreManager(double * &storePtr) : storePtr(storePtr), head(0), groesse(initialeGroesse), anzahl(0), maxIndexUsed(0) { // while a place in store is unused we want to place // a Link stucture (i.e. a pointer) there assert(sizeof(double) >= sizeof(void*)); assert(sizeof(double) >= sizeof(Link)); std::cerr << "StoreManager::StoreManager()\n"; } virtual ~StoreManager() { if (storePtr) { delete [] storePtr; storePtr = 0; } std::cerr << "StoreManager::~StoreManager()\n"; } virtual inline size_t size() const { return anzahl; } virtual inline size_t maxSize() const { return groesse; } virtual locint next_loc(size_t n = 1) { assert(n == 1); if (head == 0) { grow(); } assert(head); double * const dPtr = reinterpret_cast(head); head = head->next; ++anzahl; locint const result = dPtr - storePtr; maxIndexUsed = std::max((locint)maxIndexUsed, result); return result; } virtual void free_loc(locint loc) { assert(loc < groesse); Link *returned = reinterpret_cast(storePtr + loc); returned->next = head; head = returned; --anzahl; } private: void grow() { size_t const alteGroesse = groesse; groesse *= 2; assert(alteGroesse == initialeGroesse or size() == alteGroesse); std::cerr << "StoreManager::grow(): increase size to " << groesse << "\n"; double *const oldStore = storePtr; std::cerr << "StoreManager::grow(): allocate " << groesse * sizeof(double) << " B\n"; storePtr = new double[groesse]; size_t i = 0; if (alteGroesse != initialeGroesse) { // nicht beim ersten Mal std::cerr << "StoreManager::grow(): copy values\n"; for ( ; i < alteGroesse; ++i) { storePtr[i] = oldStore[i]; } std::cerr << "StoreManager::grow(): free " << alteGroesse * sizeof(double) << " B\n"; delete [] oldStore; } head = reinterpret_cast(storePtr + i); for ( ; i < groesse-1; ++i) { reinterpret_cast(storePtr + i)->next = reinterpret_cast(storePtr + i + 1); } reinterpret_cast(storePtr + i)->next = 0; } }; #endif /* 0 */ #endif /* ADOL_C__STOREMANAGER_H */ ADOL-C-2.4.1/ADOL-C/src/Makefile.am0000644000076600007660000000607412120122237014614 0ustar coincoin############################################################################## ## Makefile.am -- Process this file with automake to produce Makefile.in ## Revision: $Id: Makefile.am 412 2013-03-13 16:09:03Z kulshres $ ## ## Copyright (C) Andrea Walther, Andreas Kowarz ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## AM_CFLAGS = @ac_adolc_cflags@ -DADOLC_INTERNAL=1 -std=gnu99 AM_CXXFLAGS = @ac_adolc_cxxflags@ -DADOLC_INTERNAL=1 AM_CPPFLAGS = -I$(top_srcdir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/src if SPARSE SUBDIRS = drivers sparse tapedoc else SUBDIRS = drivers tapedoc endif MAINTAINERCLEANFILES = Makefile.in *~ *.orig adolc_config.h config.h.in EXTRA_DIST = uni5_for.c fo_rev.c ho_rev.c \ oplate.h taping_p.h malloc.h storemanager.h \ externfcts_p.h checkpointing_p.h buffer_temp.h lib_LTLIBRARIES = libadolc.la libadolc_la_LDFLAGS = -version-info 2:1:1 -no-undefined if SPARSE libadolc_la_SOURCES = adalloc.c malloc.c adouble.cpp \ convolut.c fortutils.c \ interfaces.cpp interfacesf.c \ taping_p.h taping.c tape_handling.cpp \ zos_forward.c fos_forward.c fov_forward.c \ hos_forward.c hov_forward.c hov_wk_forward.c \ fos_reverse.c fov_reverse.c \ hos_reverse.c hos_ov_reverse.c hov_reverse.c \ forward_partx.c \ externfcts.cpp checkpointing.cpp \ fixpoint.cpp fov_offset_forward.c revolve.c \ int_forward_s.c int_forward_t.c \ indopro_forward_s.c indopro_forward_t.c \ nonl_ind_forward_s.c nonl_ind_forward_t.c \ nonl_ind_old_forward_s.c nonl_ind_old_forward_t.c \ int_reverse_s.c int_reverse_t.c advector.cpp libadolc_la_LIBADD = drivers/libdrivers.la sparse/libsparse.la \ tapedoc/libtapedoc.la libadolc_la_LDFLAGS += @COLPACK_LIBS@ else libadolc_la_SOURCES = adalloc.c malloc.c adouble.cpp \ convolut.c fortutils.c\ interfaces.cpp interfacesf.c \ taping.c tape_handling.cpp \ zos_forward.c fos_forward.c fov_forward.c \ hos_forward.c hov_forward.c hov_wk_forward.c \ fos_reverse.c fov_reverse.c \ hos_reverse.c hos_ov_reverse.c hov_reverse.c \ forward_partx.c \ externfcts.cpp checkpointing.cpp \ fixpoint.cpp fov_offset_forward.c revolve.c advector.cpp libadolc_la_LIBADD = drivers/libdrivers.la tapedoc/libtapedoc.la endif ADOL-C-2.4.1/ADOL-C/src/drivers/0000755000076600007660000000000012120272604014233 5ustar coincoinADOL-C-2.4.1/ADOL-C/src/drivers/driversf.c0000644000076600007660000001652711412425466016247 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: drivers/driversf.c Revision: $Id: driversf.c 106 2010-06-29 17:19:50Z kulshres $ Contents: Easy to use drivers for optimization and nonlinear equations (Implementation of the Fortran callable interfaces). Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #include #include #include #include #include BEGIN_C_DECLS /****************************************************************************/ /* DRIVERS FOR OPTIMIZATION AND NONLINEAR EQUATIONS */ /*--------------------------------------------------------------------------*/ /* function */ /* function(tag, m, n, x[n], y[m]) */ fint function_(fint* ftag, fint* fm, fint* fn, fdouble* fargument, fdouble* fresult) { int rc= -1; short tag= (short) *ftag; int m=*fm, n=*fn; double* argument = myalloc1(n); double* result = myalloc1(m); spread1(n,fargument,argument); rc= function(tag,m,n,argument,result); pack1(m,result,fresult); free((char*)argument); free((char*)result); return rc; } /*--------------------------------------------------------------------------*/ /* gradient */ /* gradient(tag, n, x[n], g[n]) */ fint gradient_(fint* ftag, fint* fn, fdouble* fargument, fdouble* fresult) { int rc= -1; short tag= (short) *ftag; int n=*fn; double* argument=myalloc1(n); double* result=myalloc1(n); spread1(n,fargument,argument); rc= gradient(tag,n,argument,result); pack1(n,result,fresult); free((char*)result); free((char*)argument); return rc; } /*--------------------------------------------------------------------------*/ /* */ /* vec_jac(tag, m, n, repeat, x[n], u[m], v[n]) */ fint vec_jac_(fint* ftag, fint* fm, fint* fn, fint* frepeat, fdouble* fargument, fdouble* flagrange, fdouble* frow) { int rc= -1; short tag= (short) *ftag; int m=*fm, n=*fn, repeat=*frepeat; double* argument = myalloc1(n); double* lagrange = myalloc1(m); double* row = myalloc1(n); spread1(m,flagrange,lagrange); spread1(n,fargument,argument); rc= vec_jac(tag,m,n,repeat,argument,lagrange, row); pack1(n,row,frow); free((char*)argument); free((char*)lagrange); free((char*)row); return rc; } /*--------------------------------------------------------------------------*/ /* jacobian */ /* jacobian(tag, m, n, x[n], J[m][n]) */ fint jacobian_(fint* ftag, fint* fdepen, fint* findep, fdouble *fargument, fdouble *fjac) { int rc= -1; short tag= (short) *ftag; int depen=*fdepen, indep=*findep; double** Jac = myalloc2(depen,indep); double* argument = myalloc1(indep); spread1(indep,fargument,argument); rc= jacobian(tag,depen,indep,argument,Jac); pack2(depen,indep,Jac,fjac); free((char*)*Jac); free((char*)Jac); free((char*)argument); return rc; } /*--------------------------------------------------------------------------*/ /* */ /* jac_vec(tag, m, n, x[n], v[n], u[m]); */ fint jac_vec_(fint* ftag, fint* fm, fint* fn, fdouble* fargument, fdouble* ftangent, fdouble* fcolumn) { int rc= -1; short tag= (short) *ftag; int m=*fm, n=*fn; double* argument = myalloc1(n); double* tangent = myalloc1(n); double* column = myalloc1(m); spread1(n,ftangent,tangent); spread1(n,fargument,argument); rc= jac_vec(tag,m,n,argument,tangent,column); pack1(m,column,fcolumn); free((char*)argument); free((char*)tangent); free((char*)column); return rc; } /*--------------------------------------------------------------------------*/ /* */ /* hess_vec(tag, n, x[n], v[n], w[n]) */ fint hess_vec_(fint* ftag, fint* fn, fdouble *fargument, fdouble *ftangent, fdouble *fresult) { int rc= -1; short tag= (short) *ftag; int n=*fn; double *argument = myalloc1(n); double *tangent = myalloc1(n); double *result = myalloc1(n); spread1(n,fargument,argument); spread1(n,ftangent,tangent); rc= hess_vec(tag,n,argument,tangent,result); pack1(n,result,fresult); free((char*)argument); free((char*)tangent); free((char*)result); return rc; } /*--------------------------------------------------------------------------*/ /* hessian */ /* hessian(tag, n, x[n], lower triangle of H[n][n]) */ fint hessian_(fint* ftag, fint* fn, fdouble* fx, fdouble* fh) /* length of h should be n*n but the upper half of this matrix remains unchanged */ { int rc= -1; short tag= (short) *ftag; int n=*fn; double** H = myalloc2(n,n); double* x = myalloc1(n); spread1(n,fx,x); rc= hessian(tag,n,x,H); pack2(n,n,H,fh); free((char*)*H); free((char*)H); free((char*)x); return rc; } /*--------------------------------------------------------------------------*/ /* */ /* lagra_hess_vec(tag, m, n, x[n], v[n], u[m], w[n]) */ fint lagra_hess_vec_(fint* ftag, fint* fm, fint* fn, fdouble *fargument, fdouble *ftangent, fdouble *flagrange, fdouble *fresult) { int rc=-1; short tag= (short) *ftag; int m=*fm, n=*fn; double *argument = myalloc1(n); double *tangent = myalloc1(n); double *lagrange = myalloc1(m); double *result = myalloc1(n); spread1(n,fargument,argument); spread1(n,ftangent,tangent); spread1(m,flagrange,lagrange); rc= lagra_hess_vec(tag,m,n,argument,tangent,lagrange,result); pack1(n,result,fresult); free((char*)argument); free((char*)tangent); free((char*)lagrange); free((char*)result); return rc; } END_C_DECLS ADOL-C-2.4.1/ADOL-C/src/drivers/drivers.c0000644000076600007660000002345611412425466016100 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: drivers/drivers.c Revision: $Id: drivers.c 106 2010-06-29 17:19:50Z kulshres $ Contents: Easy to use drivers for optimization and nonlinear equations (Implementation of the C/C++ callable interfaces). Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #include #include #include #include BEGIN_C_DECLS /****************************************************************************/ /* DRIVERS FOR OPTIMIZATION AND NONLINEAR EQUATIONS */ /*--------------------------------------------------------------------------*/ /* function */ /* function(tag, m, n, x[n], y[m]) */ int function(short tag, int m, int n, double* argument, double* result) { int rc= -1; rc= zos_forward(tag,m,n,0,argument,result); return rc; } /*--------------------------------------------------------------------------*/ /* gradient */ /* gradient(tag, n, x[n], g[n]) */ int gradient(short tag, int n, const double* argument, double* result) { int rc= -1; double one = 1.0; rc = zos_forward(tag,1,n,1,argument,result); if(rc < 0) return rc; MINDEC(rc, fos_reverse(tag,1,n,&one,result)); return rc; } /*--------------------------------------------------------------------------*/ /* */ /* vec_jac(tag, m, n, repeat, x[n], u[m], v[n]) */ int vec_jac(short tag, int m, int n, int repeat, double* argument, double* lagrange, double* row) { int rc= -1; double *y = NULL; if(!repeat) { y = myalloc1(m); rc = zos_forward(tag,m,n,1, argument, y); if(rc < 0) return rc; } MINDEC(rc, fos_reverse(tag,m,n,lagrange,row)); if (!repeat) myfree1(y); return rc; } /*--------------------------------------------------------------------------*/ /* jacobian */ /* jacobian(tag, m, n, x[n], J[m][n]) */ int jacobian(short tag, int depen, int indep, const double *argument, double **jacobian) { int rc; double *result, **I; result = myalloc1(depen); if (indep/2 < depen) { I = myallocI2(indep); rc = fov_forward(tag,depen,indep,indep,argument,I,result,jacobian); myfreeI2(indep, I); } else { I = myallocI2(depen); rc = zos_forward(tag,depen,indep,1,argument,result); if (rc < 0) return rc; MINDEC(rc,fov_reverse(tag,depen,indep,depen,I,jacobian)); myfreeI2(depen, I); } myfree1(result); return rc; } /*--------------------------------------------------------------------------*/ /* large_jacobian */ /* large_jacobian(tag, m, n, k, x[n], y[m], J[m][n]) */ int large_jacobian(short tag, int depen, int indep, int runns, double *argument, double *result, double **jacobian) { int rc, dirs, i; double **I; I = myallocI2(indep); if (runns > indep) runns = indep; if (runns < 1) runns = 1; dirs = indep / runns; if (indep % runns) ++dirs; for (i=0; i #include #include #include "taping_p.h" #include BEGIN_C_DECLS /****************************************************************************/ /* STRUCT ITEM */ struct item { int a; /* address in array of derivatives */ int b; /* absolute value of the correspondig multiindex i */ double c; /* value of the coefficient c_{i,j} */ struct item *next; /* next item */ }; /****************************************************************************/ /* DEALLOCATE COEFFLIST */ void freecoefflist( int dim, struct item *coeff_list ) { int i; struct item *ptr1; struct item *ptr2; for (i=0; inext; while (ptr1 != NULL) { ptr2 = ptr1->next; free((char *) ptr1); ptr1 = ptr2; } } } /****************************************************************************/ /* ALLOCATE/DEALLOCATE COEFFLIST */ double* tensoriglob; /*--------------------------------------------------------------------------*/ /* Allcoate space for symmetric derivative tensors of up to order d in n variables, derivatives are */ void* tensorpoint( int n, int d ) { int i; void* t; if (d == 1) { t = (void*) tensoriglob; tensoriglob += n+1; } else { t = (void*) malloc((n+1)*sizeof(void*)); for (i=0; i<=n; i++) ((void**)t)[i] = (void*) tensorpoint(i,d-1); } return t; } /*--------------------------------------------------------------------------*/ void** tensorsetup( int m, int n, int d, double** tensorig ) { int i; void** t = (void**) malloc(m*sizeof(void*)); for (i=0; i 2) for(i=0;i<=n;i++) { t = tensor[i]; freetensorpoint(i,d-1,(double **) t); free((char *) t); } } /*--------------------------------------------------------------------------*/ void freetensor( int m, int n, int d, double** tensor ) { int i; double* t; for (i=0; i n) return 0; if (k > n/2) k = n-k; for (i = 1; i <= k; i++) accum = accum * (n-k+i) / i; return (long) accum + 0.5; } /*--------------------------------------------------------------------------*/ double dbinomi( double a, int b ) { int i; double result = 1.0; for (i=1; i<=b; i++) result = result*(a-i+1)/i; return result; } /*--------------------------------------------------------------------------*/ double summand(int p, int d, int* jm, int* km, int order_im, int order_km, long binomiZ) { /* calculates summation value for fixed j, i, k with terms used in the article.*/ int i; double result, order_k_by_d; order_k_by_d = order_km/(double)d; result = 1.0; for (i=0; i0)&&(im[i]==0)) break; if (i==p) while (1) { /* create all k where 0=0; i--) if (km[i] 0) { /* Store coefficient */ if (ptr==NULL) ptr = &coeff_list[index_coeff_list]; else { ptr->next = (struct item*) malloc(sizeof(struct item)); ptr = ptr->next; }; address = 0; /* calculate address for ptr->a */ j = d-order_im+1; for (u=0; ua = address; ptr->b = order_im; ptr->c = sum; }; if ((im[p-1]==order_im)||(p==1)) break; for (i=p-2; im[i]==0; i--); /* find first nonvanishing entry on the right. */ im[i]--; im[i+1] = im[p-1]+1; if (i!=p-2) im[p-1] = 0; }; }; ptr->next = NULL; /* mark end of queue. */ if ((jm[p-1]==d)||(p==1)) break; for (i=p-2; jm[i]==0; i--); /* find first nonvanishing entry on the right. */ jm[i]--; jm[i+1] = jm[p-1]+1; if (i!=p-2) jm[p-1] = 0; }; free((char*) jm); free((char*) im); free((char*) km); } /*--------------------------------------------------------------------------*/ void convert( int p, int d, int *im, int *multi ) { int i; for (i=0; iv) { v=fabs(J[RI[i]][CI[j]]); rIdx=i; cIdx=j; } if (ZERO > v) { fprintf(DIAG_OUT, "Error:LUFactorisation(..): no Pivot in step %d (%E)\n",k+1,v); return -(k+1); } /* row and column change resp. */ if (rIdx > k) { h=RI[k]; RI[k]=RI[rIdx]; RI[rIdx]=h; } if (cIdx > k) { h=CI[k]; CI[k]=CI[cIdx]; CI[cIdx]=h; } /* Factorisation step */ for (i=k+1; i=0; i--) { b[CI[i]]=tmpZ[i]; for (j=i+1; j 1) dd[i+1] = (int)ceil(dd[i]*0.5); bd = i+1; } if (cgd == 0) for (i=0; i 0) { di = dd[ii-1]-1; Di = dd[ii-1]-dd[ii]-1; MINDEC(rc,hos_forward(tag,n,n,di,Di+1,xold,Xhelp,w,W)); MINDEC(rc,hov_reverse(tag,n,n,Di,n,I,A,nonzero)); da = dd[ii]; for (l=da; l1) { Aij = A[i][j]; indexA = l-1; Xj = X[j]+l; indexX = 1; if (da == l-1) { bi += (*(++Aij))*(*(--Xj)); } else { for (q=da; q 0) { if ((d != dold) || (p != pold)) { if (pold) { /* olvo 980728 */ dim = binomi(pold+dold-1,dold); freecoefflist(dim,coeff_list); free((char*) coeff_list); } dim = binomi(p+d-1,d); coeff_list = (struct item *) malloc(sizeof(struct item)*dim); coeff(p,d, coeff_list); dold = d; pold = p; } jm = (int *)malloc(sizeof(int)*p); X = myalloc2(n,d+1); Y = myalloc2(n,d+1); for (i=0; ia] += X[j][ptr->b]*ptr->c; ptr = ptr->next; } while (ptr != NULL); } } else { for (i=0; i=0; j--) it[j] = it[j] + it[j+1]/(p+1); for (j=1; j p) it[j] = it[j-1]; convert(p,d,it,jm); multma2vec1(n,p,d,Y,S,jm); /* Store S*jm in Y */ MINDEC(rc,inverse_Taylor_prop(tag,n,d,Y,X)); if (rc == -3) return -3; ptr = &coeff_list[i]; do { for(j=0;ja] += X[j][ptr->b]*ptr->c; } ptr = ptr->next; } while (ptr != NULL); } } free((char*) jm); free((char*) *X); free((char*) X); free((char*) *Y); free((char*) Y); } for(i=0;ia] += Y[0][j][k]*ptr[k]->c; } ptr[k] = ptr[k]->next; } while (ptr[k] != NULL); if (dim-i <= bd) bd = dim-i-1; ctr = 0; } } } else { X = myalloc3(n,bd,d); Y = myalloc3(m,bd,d); ctr = 0; for (i=0; i=0; j--) it[j] = it[j] + it[j+1]/(p+1); for (j=1; j p) it[j] = it[j-1]; convert(p,d,it,jm[ctr]); ptr[ctr] = &coeff_list[i]; if (ctr < bd-1) ctr += 1; else { multma3vec2(n,p,d,bd,X,S,jm); MINDEC(rc,hov_forward(tag,m,n,d,bd,x,X,y,Y)); for (k=0; ka] += Y[j][k][ptr[k]->b-1]*ptr[k]->c; ptr[k] = ptr[k]->next; } while (ptr[k] != NULL); if (dim-i <= bd) bd = dim-i-1; ctr = 0; } } } for (i=0; i max) max = multi[i]; im[i] = 0; } for (i=0; i max) max = multi[j]; } } add = address(d,im); for (i=0; i #include #include #include #include BEGIN_C_DECLS /****************************************************************************/ /* DRIVERS FOR ODEs */ /*--------------------------------------------------------------------------*/ /* forodec */ /* forodec(tag, n, tau, dold, dnew, X[n][d+1]) */ fint forodec_(fint* ftag, /* tape identifier */ fint* fn, /* space dimension */ fdouble* ftau, /* scaling defaults to 1.0 */ fint* fdol, /* previous degree defaults to zero */ fint* fdeg, /* New degree of consistency */ fdouble* fy) /* Taylor series */ { int rc= -1; short tag= (short) *ftag; int n=*fn, dol=*fdol, deg=*fdeg; int i; double tau=*ftau; double** Y = myalloc2(n,deg+1); for(i=0;i/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = ADOL-C/src/drivers DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/autoconf/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libdrivers_la_LIBADD = am_libdrivers_la_OBJECTS = drivers.lo driversf.lo odedrivers.lo \ odedriversf.lo taylor.lo libdrivers_la_OBJECTS = $(am_libdrivers_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/ADOL-C/src depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libdrivers_la_SOURCES) DIST_SOURCES = $(libdrivers_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH_FALSE = @ADVBRANCH_FALSE@ ADVBRANCH_TRUE = @ADVBRANCH_TRUE@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF_FALSE = @ATRIG_ERF_FALSE@ ATRIG_ERF_TRUE = @ATRIG_ERF_TRUE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COLPACK_CFLAGS = @COLPACK_CFLAGS@ COLPACK_LIBS = @COLPACK_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = @ac_adolc_cflags@ -DADOLC_INTERNAL=1 AM_CXXFLAGS = @ac_adolc_cxxflags@ -DADOLC_INTERNAL=1 AM_LDFLAGS = -no-undefined AM_CPPFLAGS = -I$(top_srcdir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/src MAINTAINERCLEANFILES = Makefile.in *~ *.orig noinst_LTLIBRARIES = libdrivers.la libdrivers_la_SOURCES = drivers.c driversf.c odedrivers.c odedriversf.c \ taylor.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/src/drivers/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/src/drivers/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libdrivers.la: $(libdrivers_la_OBJECTS) $(libdrivers_la_DEPENDENCIES) $(EXTRA_libdrivers_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libdrivers_la_OBJECTS) $(libdrivers_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/drivers.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/driversf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/odedrivers.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/odedriversf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/taylor.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.4.1/ADOL-C/src/drivers/odedrivers.c0000644000076600007660000002561111412425466016563 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: drivers/odedrivers.c Revision: $Id: odedrivers.c 106 2010-06-29 17:19:50Z kulshres $ Contents: Easy to use drivers for ordinary differential equations (ODE) (with C and C++ callable interfaces including Fortran callable versions). Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #include #include #include #include "taping_p.h" #include BEGIN_C_DECLS /****************************************************************************/ /* DRIVERS FOR ODEs */ /*--------------------------------------------------------------------------*/ /* forodec */ /* forodec(tag, n, tau, dold, dnew, X[n][d+1]) */ int forodec(short tag, /* tape identifier */ int n, /* space dimension */ double tau, /* scaling defaults to 1.0 */ int dol, /* previous degree defaults to zero */ int deg, /* New degree of consistency */ double** Y) /* Taylor series */ { /********************************************************************* This is assumed to be the autonomous case. Here we are just going around computing the vectors y[][j] for dol < j <= deg by successive calls to forward that works on the tape identified by tag. This tape (array of file) must obviously have been generated by a the execution of an active section between trace_on and trace_off with n independent and n dependent variables y must have been set up as pointer to an array of n pointers to double arrays containing at least deg+1 components. The scaling by tau is sometimes necessary to avoid overflow. **********************************************************************/ int rc= 3; int i, j, k; double taut; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if ( n > ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.forodec_nax || deg > ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.forodec_dax ) { if (ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.forodec_nax) { myfree1(ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.forodec_y); myfree1(ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.forodec_z); myfree2(ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.forodec_Z); } ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.forodec_Z = myalloc2(n, deg); ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.forodec_z = myalloc1(n); ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.forodec_y = myalloc1(n); ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.forodec_nax = n; ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.forodec_dax = deg; } for (i = 0; i < n; ++i) { ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.forodec_y[i] = Y[i][0]; /*printf("y[%i] = %f\n",i,y[i]);*/ for (k = 0; k < deg; ++k) { Y[i][k] = Y[i][k+1]; /*printf("Y[%i][%i] = %f\n",i,k,Y[i][k]);*/ } } /****** Here we get going ********/ if (dol == 0) { j = dol; /* j = 0 */ k = (deg) * (j == deg-1 ) ; /* keep death values in prepration */ MINDEC(rc, zos_forward(tag, n, n, k, ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.forodec_y, ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.forodec_z)); /* for reverse called by jacode */ if(rc < 0) return rc; taut = tau / (1 + j); /* only the last time through. */ for (i = 0; i < n; ++i) Y[i][j] = taut * ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.forodec_z[i]; dol++; /* !!! */ } for (j = dol; j < deg; ++j) { k = (deg)*(j == deg-1) ; /* keep death values in prepration */ MINDEC(rc, hos_forward(tag, n, n, j, k, ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.forodec_y, Y, ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.forodec_z, ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.forodec_Z)); /* for reverse called by jacode */ if( rc < 0) return rc; taut = tau / (1 + j); /* only the last time through. */ for (i = 0; i < n; ++i) Y[i][j] = taut * ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.forodec_Z[i][j-1]; } /****** Done ********/ for (i = 0; i < n; ++i) { for (k = deg; k > 0; --k) { Y[i][k] = Y[i][k-1]; /*printf("Y[%i][%i] = %f\n",i,k,Y[i][k]);*/ } Y[i][0] = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.forodec_y[i]; /*printf("Y[%i][0] = %f\n",i,Y[i][0]);*/ } return rc; } /*--------------------------------------------------------------------------*/ /* accodec */ /* accodec(n, tau, d, Z[n][n][d+1], B[n][n][d+1], nz[n][n]) */ void accodec(int n, /* space dimension */ double tau, /* scaling defaults to 1.0 */ int deg, /* highest degree */ double*** A, /* input tensor of "partial" Jacobians */ double*** B, /* output tensor of "total" Jacobians */ short** nonzero ) /* optional sparsity characterization */ { /* The purpose of this subroutine is to compute the total derivatives B[i=0...n-1][j=0...n-1][k=0...deg]. The matrix obtained for fixed k represents the Jacobian of the (k+1)-st Taylor coefficient vector with respect to the base point of the ODE, i.e., the 0-th coefficient vector. The input array A[i=0...n-1][j=0...n-1][k=0...deg] has exactly the same format, except that it-s k-th matrix slice represents a partial derivative in that the indirect dependence of the k-th coefficient vector on the base point via the (k-1)-st and other lower Taylor coeffcients has not been taken into account. The B's are compute from the A's by the chainrule with the parameter tau thrown in for scaling. The calculation is performed so that A may directly be overwritten by B i.e. their pointers arguments may coincide to save storage. Sparsity is used so far only to reduce the operations count but not to save space. In general we expect that for each given pair (i,j) the entries A[i][j][k=0...] are nonzero either for all k, or for no k, or for k=0 only. On entry the optional short array nonzero may be used to identify all entries of the A[.][.][k] that are potentially nonzero, i.e. nonzero[i][j] <= 0 implies A[i][j][k] = 0 for all k nonzero[i][j] = 1 implies A[i][j][k] = 0 for all k > 0 . In other words we only allow the sparsity of the matrices A[.][.][k] to be increasing in that A[.][.][1] is possibly sparser than A[.][.][0] and all subseqent A[.][.][k] with k > 0 have the same sparsity pattern. That is the typical situation since A[.][.][k] is the k-th Taylor coefficient in the time expansion of the Jacobian of the right hand side. The entries of this square matrix tend to be either constant or trancendental functions of time. The matrices B_k = B[.][.][k] are obtained from the A_k = A[.][.][k] by the recurrence tau / k \ B_k = ----- | A_k + SUM A_{j-1} B_{k-j} | k+1 \ j=1 / Assuming that the diagonal entries A[i][i][0] are structurally nonzero we find that the matrices B[.][.][k=1..] can only lose sparsity as k increase. Therfore, we can redefine the nonpositive values nonzero[i][j] so that on exit k <= -nonzero[i][j] implies B[i][j][k] = 0 which is trivially satisfied for all positive values of nonzero[i][j]. Due to the increasing sparsity of the A_i and the decreasing sparsity of the B_i the first product in the sum of the RHS above determines the sparsity pattern of the resulting B_k. Hence the optimal values of the nonzero[i][j] depend only on the sparsity pattern of A_0. More specifically, all positive -nonzero[i][j] represent the length of the shortest directed path connecting nodes j and i in the incidence graph of A_0. */ int i,j,k,m,p,nzip,nzpj,isum; double *Aip, *Bpj, scale, sum; for (k=0;k<=deg;k++) /* Lets calculate B_k */ { scale = tau/(1.0+k); if(nonzero) { for (i=0;i 0); for (p=0;p 0) nzpj = 0; if(nzip > 0 && k > -nzpj ) /*otherwise all terms vanish*/ { Aip = A[i][p]; Bpj = B[p][j]+k-1; sum += *Aip*(*Bpj); isum =1; if(nzip > 1 ) /* the A[i][p][m>0] may be nonzero*/ for(m=k-1; m>-nzpj;m--) sum += (*(++Aip))*(*(--Bpj)); } } if(isum) /* we found something nonzero after all*/ B[i][j][k] = sum*scale; else { B[i][j][k]= 0; nonzero[i][j]--; } } } else { for (i=0;i0 ;m--) sum += (*(Aip++))*(*Bpj--); B[i][j][k] = sum*scale; } } } } } END_C_DECLS ADOL-C-2.4.1/ADOL-C/src/advector.cpp0000644000076600007660000003731112101513406015072 0ustar coincoin/* --------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ Revision: $Id$ Contents: advector.cpp contains a vector implementation that is able to trace subscripting operations. Copyright (c) Kshitij Kulshreshtha This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #include #include #include #include "oplate.h" #include "taping_p.h" using std::vector; adubref::adubref( locint lo, locint ref ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; location = lo; refloc = (size_t)trunc(fabs(ADOLC_GLOBAL_TAPE_VARS.store[location])); if (ref != refloc) { fprintf(DIAG_OUT,"ADOL-C error: strange construction of an active" " vector subscript reference\n(passed ref = %d, stored refloc = %d)\n",ref,refloc); exit(-2); } } adubref::operator adub() const { locint locat = next_loc(); ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_assign_a(locat,location); put_op(ref_copyout); ADOLC_PUT_LOCINT(location); // = arg ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat]=ADOLC_GLOBAL_TAPE_VARS.store[refloc]; return locat; } adub adubref::operator++( int ) { locint locat = next_loc(); ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_assign_a(locat,location); put_op(ref_copyout); ADOLC_PUT_LOCINT(location); // = arg ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat]=ADOLC_GLOBAL_TAPE_VARS.store[refloc]; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_incr_decr_a(incr_a,location); put_op(ref_incr_a); ADOLC_PUT_LOCINT(location); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[refloc]); } ADOLC_GLOBAL_TAPE_VARS.store[refloc]++; return locat; } adub adubref::operator--( int ) { locint locat = next_loc(); ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_assign_a(locat,location); put_op(ref_copyout); ADOLC_PUT_LOCINT(location); // = arg ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat]=ADOLC_GLOBAL_TAPE_VARS.store[refloc]; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_incr_decr_a(incr_a,location); put_op(ref_decr_a); ADOLC_PUT_LOCINT(location); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[refloc]); } ADOLC_GLOBAL_TAPE_VARS.store[refloc]--; return locat; } adubref& adubref::operator++() { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_incr_decr_a(incr_a,location); put_op(ref_incr_a); ADOLC_PUT_LOCINT(location); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[refloc]); } ADOLC_GLOBAL_TAPE_VARS.store[refloc]++; return *this; } adubref& adubref::operator--() { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_incr_decr_a(incr_a,location); put_op(ref_decr_a); ADOLC_PUT_LOCINT(location); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[refloc]); } ADOLC_GLOBAL_TAPE_VARS.store[refloc]--; return *this; } adubref& adubref::operator = ( double coval ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { if (coval == 0) { put_op(ref_assign_d_zero); ADOLC_PUT_LOCINT(location); // = res } else if (coval == 1.0) { put_op(ref_assign_d_one); ADOLC_PUT_LOCINT(location); // = res } else { put_op(ref_assign_d); ADOLC_PUT_LOCINT(location); // = res ADOLC_PUT_VAL(coval); // = coval } ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[refloc]); } ADOLC_GLOBAL_TAPE_VARS.store[refloc] = coval; return *this; } adubref& adubref::operator = ( const badouble& x ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint x_loc = x.loc(); if (location!=x_loc) /* test this to avoid for x=x statements adjoint(x)=0 in reverse mode */ { if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_assign_a(location,x.location); put_op(ref_assign_a); ADOLC_PUT_LOCINT(x_loc); // = arg ADOLC_PUT_LOCINT(location); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[refloc]); } ADOLC_GLOBAL_TAPE_VARS.store[refloc]=ADOLC_GLOBAL_TAPE_VARS.store[x_loc]; } return *this; } adubref& adubref::operator = ( const adubref& x ) { *this = adub(x); return *this; } adubref& adubref::operator <<= ( double coval ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { ADOLC_CURRENT_TAPE_INFOS.numInds++; put_op(ref_assign_ind); ADOLC_PUT_LOCINT(location); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[refloc]); } ADOLC_GLOBAL_TAPE_VARS.store[refloc] = coval; return *this; } void adubref::declareIndependent() { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { ADOLC_CURRENT_TAPE_INFOS.numInds++; put_op(ref_assign_ind); ADOLC_PUT_LOCINT(location); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[location]); } } adubref& adubref::operator >>= (double& coval) { adub(*this) >>= coval; return *this; } void adubref::declareDependent() { adub(*this).declareDependent(); } adubref& adubref::operator += ( double coval ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_d_same_arg(eq_plus_d,location,coval); put_op(ref_eq_plus_d); ADOLC_PUT_LOCINT(location); // = res ADOLC_PUT_VAL(coval); // = coval ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[refloc]); } ADOLC_GLOBAL_TAPE_VARS.store[refloc] += coval; return *this; } adubref& adubref::operator += ( const badouble& y ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint y_loc = y.loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_a_same_arg(eq_plus_a,location,y.location); put_op(ref_eq_plus_a); ADOLC_PUT_LOCINT(y_loc); // = arg ADOLC_PUT_LOCINT(location); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[refloc]); } ADOLC_GLOBAL_TAPE_VARS.store[refloc] += ADOLC_GLOBAL_TAPE_VARS.store[y_loc]; return *this; } adubref& adubref::operator -= ( double coval ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_d_same_arg(eq_min_d,location,coval); put_op(ref_eq_min_d); ADOLC_PUT_LOCINT(location); // = res ADOLC_PUT_VAL(coval); // = coval ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[refloc]); } ADOLC_GLOBAL_TAPE_VARS.store[refloc] -= coval; return *this; } adubref& adubref::operator -= ( const badouble& y ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint y_loc = y.loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_a_same_arg(eq_min_a,location,y.location); put_op(ref_eq_min_a); ADOLC_PUT_LOCINT(y_loc); // = arg ADOLC_PUT_LOCINT(location); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[refloc]); } ADOLC_GLOBAL_TAPE_VARS.store[refloc] -= ADOLC_GLOBAL_TAPE_VARS.store[y_loc]; return *this; } adubref& adubref::operator *= ( double coval ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_d_same_arg(eq_mult_d,location,coval); put_op(ref_eq_mult_d); ADOLC_PUT_LOCINT(location); // = res ADOLC_PUT_VAL(coval); // = coval ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[refloc]); } ADOLC_GLOBAL_TAPE_VARS.store[refloc] *= coval; return *this; } adubref& adubref::operator *= ( const badouble& y ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint y_loc = y.loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_a_same_arg(eq_mult_a,location,y.location); put_op(ref_eq_mult_a); ADOLC_PUT_LOCINT(y_loc); // = arg ADOLC_PUT_LOCINT(location); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[refloc]); } ADOLC_GLOBAL_TAPE_VARS.store[refloc] *= ADOLC_GLOBAL_TAPE_VARS.store[y_loc]; return *this; } adubref& adubref::operator /= (double y) { *this *= (1.0/y); return *this; } adubref& adubref::operator /= (const badouble& y) { *this *= (1.0/y); return *this; } void condassign( adubref res, const badouble &cond, const badouble &arg1, const badouble &arg2 ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_condassign(res.location,cond.location,arg1.location, // arg2.location); put_op(ref_cond_assign); ADOLC_PUT_LOCINT(cond.loc()); // = arg ADOLC_PUT_VAL(ADOLC_GLOBAL_TAPE_VARS.store[cond.loc()]); ADOLC_PUT_LOCINT(arg1.loc()); // = arg1 ADOLC_PUT_LOCINT(arg2.loc()); // = arg2 ADOLC_PUT_LOCINT(res.location); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[res.refloc]); } if (ADOLC_GLOBAL_TAPE_VARS.store[cond.loc()] > 0) ADOLC_GLOBAL_TAPE_VARS.store[res.refloc] = ADOLC_GLOBAL_TAPE_VARS.store[arg1.loc()]; else ADOLC_GLOBAL_TAPE_VARS.store[res.refloc] = ADOLC_GLOBAL_TAPE_VARS.store[arg2.loc()]; } void condassign( adubref res, const badouble &cond, const badouble &arg ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_condassign2(res.location,cond.location,arg.location); put_op(ref_cond_assign_s); ADOLC_PUT_LOCINT(cond.loc()); // = arg ADOLC_PUT_VAL(ADOLC_GLOBAL_TAPE_VARS.store[cond.loc()]); ADOLC_PUT_LOCINT(arg.loc()); // = arg1 ADOLC_PUT_LOCINT(res.location); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[res.refloc]); } if (ADOLC_GLOBAL_TAPE_VARS.store[cond.loc()] > 0) ADOLC_GLOBAL_TAPE_VARS.store[res.refloc] = ADOLC_GLOBAL_TAPE_VARS.store[arg.loc()]; } advector::blocker::blocker(size_t n) { dflt = new adouble; ensureContiguousLocations(n); } bool advector::nondecreasing() const { bool ret = true; double last = - ADOLC_MATH_NSP::numeric_limits::infinity(); vector::const_iterator iter = data.begin(); for ( ; iter != data.end() && ret ; iter++) { ret = ret && ( iter->value() >= last ); last = iter->value(); } return ret; } adub advector::operator[](const badouble& index) const { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; size_t idx = (size_t)trunc(fabs(ADOLC_GLOBAL_TAPE_VARS.store[index.loc()])); locint locat = next_loc(); size_t n = data.size(); static size_t callcounter = 0; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(subscript); ADOLC_PUT_LOCINT(index.loc()); ADOLC_PUT_LOCINT(locat); ADOLC_PUT_VAL(n); ADOLC_PUT_LOCINT(data[0].loc()); ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } if (idx >= n) fprintf(DIAG_OUT, "ADOL-C warning: index out of bounds while subscripting n=%z, idx=%z\n", n, idx); ADOLC_GLOBAL_TAPE_VARS.store[locat] = ADOLC_GLOBAL_TAPE_VARS.store[data[idx].loc()]; return locat; } adubref advector::operator[](const badouble& index) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; size_t idx = (size_t) trunc(fabs(ADOLC_GLOBAL_TAPE_VARS.store[index.loc()])); locint locat = next_loc(); size_t n = data.size(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(subscript_ref); ADOLC_PUT_LOCINT(index.loc()); ADOLC_PUT_LOCINT(locat); ADOLC_PUT_VAL(n); ADOLC_PUT_LOCINT(data[0].loc()); ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } if (idx >= n) fprintf(DIAG_OUT, "ADOL-C warning: index out of bounds while subscripting (ref) n=%z, idx=%z\n", n, idx); ADOLC_GLOBAL_TAPE_VARS.store[locat] = data[idx].loc(); return adubref(locat,data[idx].loc()); } adouble advector::lookupindex(const badouble& x, const badouble& y) const { if (!nondecreasing()) { fprintf(DIAG_OUT, "ADOL-C error: can only call lookup index if advector ist nondecreasing\n"); exit(-2); } if (y.value() < 0) { fprintf(DIAG_OUT, "ADOL-C error: index lookup needs a nonnegative denominator\n"); exit(-2); } adouble r = 0; size_t n = data.size(); for (int i = 0; i < n; i++) condassign(r, x - data[i]*y, (adouble) (i+1)); return r; } ADOL-C-2.4.1/ADOL-C/src/tapedoc/0000755000076600007660000000000012120272603014173 5ustar coincoinADOL-C-2.4.1/ADOL-C/src/tapedoc/tapedoc.c0000644000076600007660000013377312007756264016012 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: tapedoc/tapedoc.c Revision: $Id: tapedoc.c 337 2012-08-06 15:03:16Z kulshres $ Contents: Routine tape_doc(..) writes the taped operations in LaTeX-code to the file tape_doc.tex Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #include #include "oplate.h" #include "taping_p.h" #include #include #include BEGIN_C_DECLS /****************************************************************************/ /* MACROS */ #define computenumbers true /****************************************************************************/ /* STATIC VARIABLES */ /*--------------------------------------------------------------------------*/ static short tag; static int op_cnt; static int rev_op_cnt; static int pagelength; static FILE *fp; static char baseName[]="tape_"; static char extension[]=".tex"; /*--------------------------------------------------------------------------*/ /* operation names */ static char* a[] = { "death not", "assign ind", "assign dep", "assign a", "assign d", "eq plus d", "eq plus a", "eq min d", "eq min a", "eq mult d", "eq mult a", "plus a a", "plus d a", "min a a", "min d a", "mult a a", "mult d a", "div a a", "div d a", "exp op", "cos op", "sin op", "atan op", "log op", "pow op", "asin op", "acos op", "sqrt op", "asinh_op", "acosh_op", "atanh_op", "gen quad", "end of tape", "start of tape", "end of op", "end of int", "end of val", "cond assign $\\longrightarrow$", "cond assign s $\\longrightarrow$", "take stock op", "assign d one", "assign d zero", "incr a", "decr a", "neg sign a", "pos sign a", "min op", "abs val", "eq zero", "neq zero", "le zero", "gt zero", "ge zero", "lt zero", "eq plus prod", "eq min prod", "erf op", "ceil op", "floor op", "extern fctn" "ignore_me" }; /****************************************************************************/ /* LOCAL WRITE ROUTINES */ /*--------------------------------------------------------------------------*/ void filewrite_start( int opcode ) { char *fileName; int num; fileName=(char *)malloc(sizeof(char)*(9+sizeof(tag)*8+2)); if (fileName==NULL) fail(ADOLC_MALLOC_FAILED); strncpy(fileName, baseName, strlen(baseName)); num=sprintf(fileName+strlen(baseName), "%d", tag); strncpy(fileName+strlen(baseName)+num, extension, strlen(extension)); fileName[strlen(baseName)+num+strlen(extension)]=0; if ((fp = fopen(fileName,"w")) == NULL) { fprintf(DIAG_OUT,"cannot open file !\n"); exit(1); } fprintf(fp,"\\documentclass{article}\n"); fprintf(fp,"\\headheight0cm\n"); fprintf(fp,"\\headsep-1cm\n"); fprintf(fp,"\\textheight25cm\n"); fprintf(fp,"\\oddsidemargin-1cm\n"); fprintf(fp,"\\topmargin0cm\n"); fprintf(fp,"\\textwidth18cm\n"); fprintf(fp,"\\begin{document}\n"); fprintf(fp,"\\tiny\n"); #ifdef computenumbers fprintf(fp,"\\begin{tabular}{|r|r|r|l|r|r|r|r||r|r||r|r|r|r|} \\hline \n"); fprintf(fp," & & code & op & loc & loc & loc & loc & double & double & value & value & value & value \\\\ \\hline \n"); fprintf(fp," & & %i & start of tape & & & & & & & & & & \\\\ \\hline \n",opcode); #else fprintf(fp,"\\begin{tabular}{|r|r|r|l|r|r|r|r||r|r|} \\hline \n"); fprintf(fp," & & code & op & loc & loc & loc & loc & double & double \\\\ \\hline \n"); fprintf(fp," & & %i & start of tape & & & & & & & \\\\ \\hline \n",opcode); #endif pagelength = 0; } /****************************************************************************/ /* filewrite( opcode number, number locations, locations, values, */ /* number constants, constants ) */ /****************************************************************************/ void filewrite( unsigned short opcode, int nloc, int *loc, double *val,int ncst, double* cst) { int i; ++op_cnt; --rev_op_cnt; if (pagelength == 100) { /* 101 lines per page */ fprintf(fp,"\\end{tabular}\\\\\n"); fprintf(fp,"\\newpage\n"); #ifdef computenumbers fprintf(fp,"\\begin{tabular}{|r|r|r|l|r|r|r|r||r|r||r|r|r|r|} \\hline \n"); fprintf(fp," & & code & op & loc & loc & loc & loc & double & double & value & value & value & value \\\\ \\hline \n"); #else fprintf(fp,"\\begin{tabular}{|r|r|r|l|r|r|r|r||r|r|} \\hline \n"); fprintf(fp," & & code & op & loc & loc & loc & loc & double & double \\\\ \\hline \n"); #endif pagelength=-1; } /* write opcode counters and number */ fprintf(fp,"%i & %i & %i & ",op_cnt, rev_op_cnt, opcode); /* write opcode name if available */ i=0; while (a[opcode][i]) { fprintf(fp,"%c",a[opcode][i]); i++; } /* write locations (max 4) right-justified */ fprintf(fp," &"); if (opcode!=ext_diff) { /* default */ for(i=0; i<(4-nloc); i++) fprintf(fp," &"); for(i=0; i>=) */ res = get_locint_f(); loc_a[0]=res; #ifdef computenumbers val_a[0]=dp_T0[res]; valuepoint[indexd++]=dp_T0[res]; #endif filewrite(operation,1,loc_a,val_a,0,cst_d); break; /****************************************************************************/ /* OPERATION + ASSIGNMENT */ /*--------------------------------------------------------------------------*/ case eq_plus_d: /* Add a floating point to an eq_plus_d */ /* adouble. (+=) */ res = get_locint_f(); coval = get_val_f(); loc_a[0] = res; cst_d[0] = coval; #ifdef computenumbers dp_T0[res] += coval; val_a[0] = dp_T0[res]; #endif filewrite(operation,1,loc_a,val_a,1,cst_d); break; /*--------------------------------------------------------------------------*/ case eq_plus_a: /* Add an adouble to another eq_plus_a */ /* adouble. (+=) */ arg = get_locint_f(); res = get_locint_f(); loc_a[0]=arg; loc_a[1]=res; #ifdef computenumbers val_a[0]=dp_T0[arg]; dp_T0[res]+= dp_T0[arg]; val_a[1]=dp_T0[res]; #endif filewrite(operation,2,loc_a,val_a,0,cst_d); break; /*--------------------------------------------------------------------------*/ case eq_plus_prod: /* Add an product to an eq_plus_prod */ /* adouble. (+= x1*x2) */ arg1 = get_locint_f(); arg2 = get_locint_f(); res = get_locint_f(); loc_a[0]=arg1; loc_a[1]=arg2; loc_a[2]=res; #ifdef computenumbers val_a[0]=dp_T0[arg1]; val_a[1]=dp_T0[arg2]; dp_T0[res] += dp_T0[arg1]*dp_T0[arg2]; val_a[2]=dp_T0[res]; #endif filewrite(operation,3,loc_a,val_a,0,cst_d); break; /*--------------------------------------------------------------------------*/ case eq_min_d: /* Subtract a floating point from an eq_min_d */ /* adouble. (-=) */ res = get_locint_f(); coval = get_val_f(); loc_a[0] = res; cst_d[0] = coval; #ifdef computenumbers dp_T0[res] -= coval; val_a[0] = dp_T0[res]; #endif filewrite(operation,1,loc_a,val_a,1,cst_d); break; /*--------------------------------------------------------------------------*/ case eq_min_a: /* Subtract an adouble from another eq_min_a */ /* adouble. (-=) */ arg = get_locint_f(); res = get_locint_f(); loc_a[0]=arg; loc_a[1]=res; #ifdef computenumbers val_a[0]=dp_T0[arg]; dp_T0[res]-= dp_T0[arg]; val_a[1]=dp_T0[res]; #endif filewrite(operation,2,loc_a,val_a,0,cst_d); break; /*--------------------------------------------------------------------------*/ case eq_min_prod: /* Subtract an product from an eq_min_prod */ /* adouble. (+= x1*x2) */ arg1 = get_locint_f(); arg2 = get_locint_f(); res = get_locint_f(); loc_a[0]=arg1; loc_a[1]=arg2; loc_a[2]=res; #ifdef computenumbers val_a[0]=dp_T0[arg1]; val_a[1]=dp_T0[arg2]; dp_T0[res] -= dp_T0[arg1]*dp_T0[arg2]; val_a[2]=dp_T0[res]; #endif filewrite(operation,3,loc_a,val_a,0,cst_d); break; /*--------------------------------------------------------------------------*/ case eq_mult_d: /* Multiply an adouble by a eq_mult_d */ /* flaoting point. (*=) */ res = get_locint_f(); coval = get_val_f(); loc_a[0] = res; cst_d[0] = coval; #ifdef computenumbers dp_T0[res] *= coval; val_a[0] = dp_T0[res]; #endif filewrite(operation,1,loc_a,val_a,1,cst_d); break; /*--------------------------------------------------------------------------*/ case eq_mult_a: /* Multiply one adouble by another eq_mult_a */ /* (*=) */ arg = get_locint_f(); res = get_locint_f(); loc_a[0]=arg; loc_a[1]=res; #ifdef computenumbers val_a[0]=dp_T0[arg]; dp_T0[res]*= dp_T0[arg]; val_a[1]=dp_T0[res]; #endif filewrite(operation,2,loc_a,val_a,0,cst_d); break; /*--------------------------------------------------------------------------*/ case incr_a: /* Increment an adouble incr_a */ res = get_locint_f(); loc_a[0] = res; #ifdef computenumbers dp_T0[res]++; val_a[0] = dp_T0[res]; #endif filewrite(operation,1,loc_a,val_a,0,cst_d); break; /*--------------------------------------------------------------------------*/ case decr_a: /* Increment an adouble decr_a */ res = get_locint_f(); loc_a[0] = res; #ifdef computenumbers dp_T0[res]--; val_a[0] = dp_T0[res]; #endif filewrite(operation,1,loc_a,val_a,0,cst_d); break; /****************************************************************************/ /* BINARY OPERATIONS */ /*--------------------------------------------------------------------------*/ case plus_a_a: /* : Add two adoubles. (+) plus a_a */ arg1 = get_locint_f(); arg2 = get_locint_f(); res = get_locint_f(); loc_a[0]=arg1; loc_a[1]=arg2; loc_a[2]=res; #ifdef computenumbers val_a[0]=dp_T0[arg1]; val_a[1]=dp_T0[arg2]; dp_T0[res]=dp_T0[arg1]+dp_T0[arg2]; val_a[2]=dp_T0[res]; #endif filewrite(operation,3,loc_a,val_a,0,cst_d); break; /*--------------------------------------------------------------------------*/ case plus_d_a: /* Add an adouble and a double plus_d_a */ /* (+) */ arg = get_locint_f(); res = get_locint_f(); coval = get_val_f(); loc_a[0] = arg; loc_a[1] = res; cst_d[0] = coval; #ifdef computenumbers val_a[0]=dp_T0[arg]; dp_T0[res]= dp_T0[arg] + coval; val_a[1]=dp_T0[res]; #endif filewrite(operation,2,loc_a,val_a,1,cst_d); break; /*--------------------------------------------------------------------------*/ case min_a_a: /* Subtraction of two adoubles min_a_a */ /* (-) */ arg1 = get_locint_f(); arg2 = get_locint_f(); res = get_locint_f(); loc_a[0]=arg1; loc_a[1]=arg2; loc_a[2]=res; #ifdef computenumbers val_a[0]=dp_T0[arg1]; val_a[1]=dp_T0[arg2]; dp_T0[res]=dp_T0[arg1]-dp_T0[arg2]; val_a[2]=dp_T0[res]; #endif filewrite(operation,3,loc_a,val_a,0,cst_d); break; /*--------------------------------------------------------------------------*/ case min_d_a: /* Subtract an adouble from a min_d_a */ /* double (-) */ arg = get_locint_f(); res = get_locint_f(); coval = get_val_f(); loc_a[0] = arg; loc_a[1] = res; cst_d[0] = coval; #ifdef computenumbers val_a[0] = dp_T0[arg]; dp_T0[res] = coval - dp_T0[arg]; val_a[1] = dp_T0[res]; #endif filewrite(operation,2,loc_a,val_a,1,cst_d); break; /*--------------------------------------------------------------------------*/ case mult_a_a: /* Multiply two adoubles (*) mult_a_a */ arg1 = get_locint_f(); arg2 = get_locint_f(); res = get_locint_f(); loc_a[0]=arg1; loc_a[1]=arg2; loc_a[2]=res; #ifdef computenumbers val_a[0]=dp_T0[arg1]; val_a[1]=dp_T0[arg2]; dp_T0[res]=dp_T0[arg1]*dp_T0[arg2]; val_a[2]=dp_T0[res]; #endif filewrite(operation,3,loc_a,val_a,0,cst_d); break; /*--------------------------------------------------------------------------*/ case mult_d_a: /* Multiply an adouble by a double mult_d_a */ /* (*) */ arg = get_locint_f(); res = get_locint_f(); coval = get_val_f(); loc_a[0] = arg; loc_a[1] = res; cst_d[0] = coval; #ifdef computenumbers val_a[0] = dp_T0[arg]; dp_T0[res] = coval * dp_T0[arg]; val_a[1] = dp_T0[res]; #endif filewrite(operation,2,loc_a,val_a,1,cst_d); break; /*--------------------------------------------------------------------------*/ case div_a_a: /* Divide an adouble by an adouble div_a_a */ /* (/) */ arg1 = get_locint_f(); arg2 = get_locint_f(); res = get_locint_f(); loc_a[0]=arg1; loc_a[1]=arg2; loc_a[2]=res; #ifdef computenumbers val_a[0]=dp_T0[arg1]; val_a[1]=dp_T0[arg2]; dp_T0[res]=dp_T0[arg1]/dp_T0[arg2]; val_a[2]=dp_T0[res]; #endif filewrite(operation,3,loc_a,val_a,0,cst_d); break; /*--------------------------------------------------------------------------*/ case div_d_a: /* Division double - adouble (/) div_d_a */ arg = get_locint_f(); res = get_locint_f(); coval = get_val_f(); loc_a[0] = arg; loc_a[1] = res; cst_d[0] = coval; #ifdef computenumbers val_a[0] = dp_T0[arg]; dp_T0[res] = coval / dp_T0[arg]; val_a[1] = dp_T0[res]; #endif filewrite(operation,2,loc_a,val_a,1,cst_d); break; /****************************************************************************/ /* SIGN OPERATIONS */ /*--------------------------------------------------------------------------*/ case pos_sign_a: /* pos_sign_a */ arg = get_locint_f(); res = get_locint_f(); loc_a[0]=arg; loc_a[1]=res; #ifdef computenumbers val_a[0]=dp_T0[arg]; dp_T0[res]= dp_T0[arg]; val_a[1]=dp_T0[res]; #endif filewrite(operation,2,loc_a,val_a,0,cst_d); break; /*--------------------------------------------------------------------------*/ case neg_sign_a: /* neg_sign_a */ arg = get_locint_f(); res = get_locint_f(); loc_a[0]=arg; loc_a[1]=res; #ifdef computenumbers val_a[0]=dp_T0[arg]; dp_T0[res]= -dp_T0[arg]; val_a[1]=dp_T0[res]; #endif filewrite(operation,2,loc_a,val_a,0,cst_d); break; /****************************************************************************/ /* UNARY OPERATIONS */ /*--------------------------------------------------------------------------*/ case exp_op: /* exponent operation exp_op */ arg = get_locint_f(); res = get_locint_f(); loc_a[0]=arg; loc_a[1]=res; #ifdef computenumbers val_a[0]=dp_T0[arg]; dp_T0[res]= exp(dp_T0[arg]); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; val_a[1]=dp_T0[res]; #endif filewrite(operation,2,loc_a,val_a,0,cst_d); break; /*--------------------------------------------------------------------------*/ case sin_op: /* sine operation sin_op */ arg1 = get_locint_f(); arg2 = get_locint_f(); res = get_locint_f(); loc_a[0]=arg1; loc_a[1]=arg2; loc_a[2]=res; #ifdef computenumbers /* olvo 980923 changed order to allow x=sin(x) */ val_a[0]=dp_T0[arg1]; dp_T0[arg2]= cos(dp_T0[arg1]); dp_T0[res] = sin(dp_T0[arg1]); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; val_a[1]=dp_T0[arg2]; val_a[2]=dp_T0[res]; #endif filewrite(operation,3,loc_a,val_a,0,cst_d); break; /*--------------------------------------------------------------------------*/ case cos_op: /* cosine operation cos_op */ arg1 = get_locint_f(); arg2 = get_locint_f(); res = get_locint_f(); loc_a[0]=arg1; loc_a[1]=arg2; loc_a[2]=res; #ifdef computenumbers /* olvo 980923 changed order to allow x=cos(x) */ val_a[0]=dp_T0[arg1]; dp_T0[arg2]= sin(dp_T0[arg1]); dp_T0[res] = cos(dp_T0[arg1]); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; val_a[1]=dp_T0[arg2]; val_a[2]=dp_T0[res]; #endif filewrite(operation,3,loc_a,val_a,0,cst_d); break; /*--------------------------------------------------------------------------*/ case atan_op: /* atan_op */ arg1 = get_locint_f(); arg2 = get_locint_f(); res = get_locint_f(); loc_a[0]=arg1; loc_a[1]=arg2; loc_a[2]=res; #ifdef computenumbers val_a[0]=dp_T0[arg1]; dp_T0[res] = atan(dp_T0[arg1]); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; val_a[1]=dp_T0[arg2]; val_a[2]=dp_T0[res]; #endif filewrite(operation,3,loc_a,val_a,0,cst_d); break; /*--------------------------------------------------------------------------*/ case asin_op: /* asin_op */ arg1 = get_locint_f(); arg2 = get_locint_f(); res = get_locint_f(); loc_a[0]=arg1; loc_a[1]=arg2; loc_a[2]=res; #ifdef computenumbers val_a[0]=dp_T0[arg1]; dp_T0[res] = asin(dp_T0[arg1]); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; val_a[1]=dp_T0[arg2]; val_a[2]=dp_T0[res]; #endif filewrite(operation,3,loc_a,val_a,0,cst_d); break; /*--------------------------------------------------------------------------*/ case acos_op: /* acos_op */ arg1 = get_locint_f(); arg2 = get_locint_f(); res = get_locint_f(); loc_a[0]=arg1; loc_a[1]=arg2; loc_a[2]=res; #ifdef computenumbers val_a[0]=dp_T0[arg1]; dp_T0[res] = acos(dp_T0[arg1]); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; val_a[1]=dp_T0[arg2]; val_a[2]=dp_T0[res]; #endif filewrite(operation,3,loc_a,val_a,0,cst_d); break; #ifdef ATRIG_ERF /*--------------------------------------------------------------------------*/ case asinh_op: /* asinh_op */ arg1 = get_locint_f(); arg2 = get_locint_f(); res = get_locint_f(); loc_a[0]=arg1; loc_a[1]=arg2; loc_a[2]=res; #ifdef computenumbers val_a[0]=dp_T0[arg1]; dp_T0[res] = asinh(dp_T0[arg1]); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; val_a[1]=dp_T0[arg2]; val_a[2]=dp_T0[res]; #endif filewrite(operation,3,loc_a,val_a,0,cst_d); break; /*--------------------------------------------------------------------------*/ case acosh_op: /* acosh_op */ arg1 = get_locint_f(); arg2 = get_locint_f(); res = get_locint_f(); loc_a[0]=arg1; loc_a[1]=arg2; loc_a[2]=res; #ifdef computenumbers val_a[0]=dp_T0[arg1]; dp_T0[res] = acosh(dp_T0[arg1]); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; val_a[1]=dp_T0[arg2]; val_a[2]=dp_T0[res]; #endif filewrite(operation,3,loc_a,val_a,0,cst_d); break; /*--------------------------------------------------------------------------*/ case atanh_op: /* atanh_op */ arg1 = get_locint_f(); arg2 = get_locint_f(); res = get_locint_f(); loc_a[0]=arg1; loc_a[1]=arg2; loc_a[2]=res; #ifdef computenumbers val_a[0]=dp_T0[arg1]; dp_T0[res] = atanh(dp_T0[arg1]); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; val_a[1]=dp_T0[arg2]; val_a[2]=dp_T0[res]; #endif filewrite(operation,3,loc_a,val_a,0,cst_d); break; /*--------------------------------------------------------------------------*/ case erf_op: /* erf_op */ arg1 = get_locint_f(); arg2 = get_locint_f(); res = get_locint_f(); loc_a[0]=arg1; loc_a[1]=arg2; loc_a[2]=res; #ifdef computenumbers val_a[0]=dp_T0[arg1]; dp_T0[res] = erf(dp_T0[arg1]); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; val_a[1]=dp_T0[arg2]; val_a[2]=dp_T0[res]; #endif filewrite(operation,3,loc_a,val_a,0,cst_d); break; #endif /*--------------------------------------------------------------------------*/ case log_op: /* log_op */ arg = get_locint_f(); res = get_locint_f(); loc_a[0]=arg; loc_a[1]=res; #ifdef computenumbers val_a[0]=dp_T0[arg]; dp_T0[res]= log(dp_T0[arg]); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; val_a[1]=dp_T0[res]; #endif filewrite(operation,2,loc_a,val_a,0,cst_d); break; /*--------------------------------------------------------------------------*/ case pow_op: /* pow_op */ arg = get_locint_f(); res = get_locint_f(); coval = get_val_f(); cst_d[0]=coval; loc_a[0]=arg; loc_a[1]=res; #ifdef computenumbers val_a[0]=dp_T0[arg]; dp_T0[res] = pow(dp_T0[arg],coval); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; val_a[1]=dp_T0[res]; #endif filewrite(operation,2,loc_a,val_a,1,cst_d); break; /*--------------------------------------------------------------------------*/ case sqrt_op: /* sqrt_op */ arg = get_locint_f(); res = get_locint_f(); loc_a[0]=arg; loc_a[1]=res; #ifdef computenumbers val_a[0]=dp_T0[arg]; dp_T0[res]= sqrt(dp_T0[arg]); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; val_a[1]=dp_T0[res]; #endif filewrite(operation,2,loc_a,val_a,0,cst_d); break; /*--------------------------------------------------------------------------*/ case gen_quad: /* gen_quad */ arg1 = get_locint_f(); arg2 = get_locint_f(); res = get_locint_f(); cst_d[0] = get_val_f(); cst_d[1] = get_val_f(); loc_a[0]=arg1; loc_a[1]=arg2; loc_a[2]=res; #ifdef computenumbers val_a[0]=dp_T0[arg1]; dp_T0[res] = cst_d[1]; val_a[1]=dp_T0[arg2]; val_a[2]=dp_T0[res]; #endif filewrite(operation,3,loc_a,val_a,2,cst_d); break; /*--------------------------------------------------------------------------*/ case min_op: /* min_op */ arg1 = get_locint_f(); arg2 = get_locint_f(); res = get_locint_f(); coval = get_val_f(); loc_a[0] = arg1; loc_a[1] = arg2; loc_a[2] = res; cst_d[0] = coval; #ifdef computenumbers val_a[0] = dp_T0[arg1]; val_a[1] = dp_T0[arg2]; if (dp_T0[arg1] > dp_T0[arg2]) dp_T0[res] = dp_T0[arg2]; else dp_T0[res] = dp_T0[arg1]; val_a[2] = dp_T0[res]; #endif filewrite(operation,3,loc_a,val_a,1,cst_d); break; /*--------------------------------------------------------------------------*/ case abs_val: /* abs_val */ arg = get_locint_f(); res = get_locint_f(); coval = get_val_f(); loc_a[0] = arg; loc_a[1] = res; cst_d[0] = coval; #ifdef computenumbers val_a[0] = dp_T0[arg]; dp_T0[res] = fabs(dp_T0[arg]); val_a[1] = dp_T0[res]; #endif filewrite(operation,2,loc_a,val_a,1,cst_d); break; /*--------------------------------------------------------------------------*/ case ceil_op: /* ceil_op */ arg = get_locint_f(); res = get_locint_f(); coval = get_val_f(); loc_a[0] = arg; loc_a[1] = res; cst_d[0] = coval; #ifdef computenumbers val_a[0] = dp_T0[arg]; dp_T0[res] = ceil(dp_T0[arg]); val_a[1] = dp_T0[res]; #endif filewrite(operation,2,loc_a,val_a,1,cst_d); break; /*--------------------------------------------------------------------------*/ case floor_op: /* Compute ceil of adouble floor_op */ arg = get_locint_f(); res = get_locint_f(); coval = get_val_f(); loc_a[0] = arg; loc_a[1] = res; cst_d[0] = coval; #ifdef computenumbers val_a[0] = dp_T0[arg]; dp_T0[res] = floor(dp_T0[arg]); val_a[1] = dp_T0[res]; #endif filewrite(operation,2,loc_a,val_a,1,cst_d); break; /****************************************************************************/ /* CONDITIONALS */ /*--------------------------------------------------------------------------*/ case cond_assign: /* cond_assign */ arg = get_locint_f(); arg1 = get_locint_f(); arg2 = get_locint_f(); res = get_locint_f(); coval = get_val_f(); loc_a[0]=arg; loc_a[1]=arg1; loc_a[2]=arg2 ; loc_a[3]=res; cst_d[0]=coval; #ifdef computenumbers val_a[0]=dp_T0[arg]; val_a[1]=dp_T0[arg1]; val_a[2]=dp_T0[arg2]; if (dp_T0[arg]>0) dp_T0[res]=dp_T0[arg1]; else dp_T0[res]=dp_T0[arg2]; val_a[3]=dp_T0[res]; #endif filewrite(operation,4,loc_a,val_a,1,cst_d); break; /*--------------------------------------------------------------------------*/ case cond_assign_s: /* cond_assign_s */ arg = get_locint_f(); arg1 = get_locint_f(); res = get_locint_f(); coval = get_val_f(); loc_a[0]=arg; loc_a[1]=arg1; loc_a[2]=res; cst_d[0]=coval; #ifdef computenumbers val_a[0]=dp_T0[arg]; val_a[1]=dp_T0[arg1]; if (dp_T0[arg]>0) dp_T0[res]=dp_T0[arg1]; val_a[2]=dp_T0[res]; #endif filewrite(operation,3,loc_a,val_a,1,cst_d); break; /****************************************************************************/ /* REMAINING STUFF */ /*--------------------------------------------------------------------------*/ case take_stock_op: /* take_stock_op */ size = get_locint_f(); res = get_locint_f(); d = get_val_v_f(size); loc_a[0] = size; loc_a[1] = res; cst_d[0] = d[0]; #ifdef computenumbers for (l=0; l/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = ADOL-C/src/tapedoc DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/autoconf/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libtapedoc_la_LIBADD = am_libtapedoc_la_OBJECTS = tapedoc.lo libtapedoc_la_OBJECTS = $(am_libtapedoc_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/ADOL-C/src depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libtapedoc_la_SOURCES) DIST_SOURCES = $(libtapedoc_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH_FALSE = @ADVBRANCH_FALSE@ ADVBRANCH_TRUE = @ADVBRANCH_TRUE@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF_FALSE = @ATRIG_ERF_FALSE@ ATRIG_ERF_TRUE = @ATRIG_ERF_TRUE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COLPACK_CFLAGS = @COLPACK_CFLAGS@ COLPACK_LIBS = @COLPACK_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = @ac_adolc_cflags@ -DADOLC_INTERNAL=1 AM_CXXFLAGS = @ac_adolc_cxxflags@ -DADOLC_INTERNAL=1 AM_LDFLAGS = -no-undefined AM_CPPFLAGS = -I$(top_srcdir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/src MAINTAINERCLEANFILES = Makefile.in *~ *.orig noinst_LTLIBRARIES = libtapedoc.la libtapedoc_la_SOURCES = tapedoc.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/src/tapedoc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/src/tapedoc/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libtapedoc.la: $(libtapedoc_la_OBJECTS) $(libtapedoc_la_DEPENDENCIES) $(EXTRA_libtapedoc_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libtapedoc_la_OBJECTS) $(libtapedoc_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tapedoc.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.4.1/ADOL-C/src/int_reverse_s.c0000644000076600007660000000135411227420735015602 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: int_reverse_s.c Revision: $Id: int_reverse_s.c 42 2009-07-15 18:37:17Z awalther $ Contents: int_reverse (integer reverse mode safe for bit pattern propagation) Copyright (c) Andrea Walther, Christo Mitev This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #define _INT_REV_ 1 #define _NTIGHT_ 1 #include #undef _INT_REV_ #undef _NTIGHT_ ADOL-C-2.4.1/ADOL-C/src/indopro_forward_t.c0000644000076600007660000000137211227420735016454 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: int_forward_t.c Revision: $Id: indopro_forward_t.c 42 2009-07-15 18:37:17Z awalther $ Contents: int_forward (integer forward mode for bit pattern propagation) Copyright (c) Andrea Walther This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #define _INDO_ 1 #define _INDOPRO_ 1 #define _TIGHT_ 1 #include #undef _INDO_ #undef _INDOPRO_ #undef _TIGHT_ ADOL-C-2.4.1/ADOL-C/src/interfaces.cpp0000644000076600007660000003560611412425466015427 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: interfaces.cpp Revision: $Id: interfaces.cpp 106 2010-06-29 17:19:50Z kulshres $ Contents: Genuine C++ Interfaces to ADOL-C forward & reverse calls. Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #include #include /****************************************************************************/ /* MACROS */ #define fabs(x) ((x) > 0 ? (x) : -(x)) #define ceil(x) ((int)((x)+1) - (int)((x) == (int)(x))) /****************************************************************************/ /* FORWARD MODE, overloaded calls */ /****************************************************************************/ /* general call */ /* */ int forward( short tag, int m, int n, int d, int keep, double **X, double **Y) /* forward(tag, m, n, d, keep, X[n][d+1], Y[m][d+1]) */ { /* olvo 980729 general ec */ static double *x, *y, *xp, *yp; static int maxn, maxm; int rc = -1, i, k; if (n > maxn) { if (x) myfree1(x); if (xp) myfree1(xp); x = myalloc1(maxn = n); xp = myalloc1(maxn); } if (m > maxm) { if (y) myfree1(y); if (yp) myfree1(yp); y = myalloc1(maxm = m); yp = myalloc1(maxm); } /*------------------------------------------------------------------------*/ /* prepare input */ for (i=0; i 1) { for (k=d; k>0; k--) X[i][k] = X[i][k-1]; X[i][0] = x[i]; } for (i=0; i0; k--) Y[i][k] = Y[i][k-1]; Y[i][0] = y[i]; } return rc; } /****************************************************************************/ /* Y can be one dimensional if m=1 */ /* */ int forward( short tag, int m, int n, int d, int keep, double **X, double *Y) /* forward(tag, 1, n, d, keep, X[n][d+1], Y[d+1]), m=1 */ { /* olvo 980729 general ec */ static double *x, *xp; static int maxn; double y; int rc= -1, i, k; if (m == 1) { if (n > maxn) { if (x) myfree1(x); if (xp) myfree1(xp); x = myalloc1(maxn = n); xp = myalloc1(maxn); } /*----------------------------------------------------------------------*/ /* prepare input */ for (i=0; i 1) { for (k=d; k>0; k--) X[i][k] = X[i][k-1]; X[i][0] = x[i]; } for (k=d; k>0; k--) Y[k] = Y[k-1]; Y[0] = y; } else { fprintf(DIAG_OUT,"ADOL-C error: wrong Y dimension in forward \n"); exit(-1); } return rc; } /****************************************************************************/ /* X and Y can be one dimensional if d = 0 */ /* */ int forward( short tag, int m, int n, int d, int keep, double *X, double *Y) /* forward(tag, m, n, 0, keep, X[n], Y[m]), d=0 */ { int rc = -1; if (d != 0) { fprintf(DIAG_OUT,"ADOL-C error: wrong X and Y dimensions in forward \n"); exit(-1); } else rc = zos_forward(tag,m,n,keep,X,Y); return rc; } /****************************************************************************/ /* X and Y can be one dimensional if d omitted */ /* */ int forward(short tag, int m, int n, int keep, double *X, double *Y) /* forward(tag, m, n, keep, X[n], Y[m]) */ { return zos_forward(tag,m,n,keep,X,Y); } /****************************************************************************/ /* general call */ /* */ int forward( short tag, int m, int n, int d, int p, double *x, double ***X, double *y, double ***Y) /* forward(tag, m, n, d, p, x[n], X[n][p][d], y[m], Y[m][p][d]) */ { return hov_forward(tag,m,n,d,p,x,X,y,Y); } /****************************************************************************/ /* general call */ /* */ int forward( short tag, int m, int n, int p, double *x, double **X, double *y, double **Y) /* forward(tag, m, n, p, x[n], X[n][p], y[m], Y[m][p]) */ { return fov_forward(tag,m,n,p,x,X,y,Y); } /****************************************************************************/ /* REVERSE MODE, overloaded calls */ /****************************************************************************/ /* general call */ /* */ int reverse( short tag, int m, int n, int d, double *u, double **Z) /* reverse(tag, m, n, d, u[m], Z[n][d+1]) */ { return hos_reverse(tag,m,n,d,u,Z); } /****************************************************************************/ /* u can be a scalar if m=1 */ /* */ int reverse( short tag, int m, int n, int d, double u, double **Z) /* reverse(tag, 1, n, 0, u, Z[n][d+1]), m=1 => u scalar */ { int rc=-1; if (m != 1) { fprintf(DIAG_OUT,"ADOL-C error: wrong u dimension in scalar-reverse \n"); exit(-1); } else rc = hos_reverse(tag,m,n,d,&u,Z); return rc; } /****************************************************************************/ /* Z can be vector if d = 0; Done by specialized code */ /* */ int reverse( short tag, int m, int n, int d, double *u, double *Z) /* reverse(tag, m, n, 0, u[m], Z[n]), d=0 */ { if (d != 0) { fprintf(DIAG_OUT,"ADOL-C error: wrong Z dimension in scalar-reverse \n"); exit(-1); } return fos_reverse(tag,m,n,u,Z); } /****************************************************************************/ /* u and Z can be scalars if m=1 and d=0; */ /* */ int reverse( short tag, int m, int n, int d, double u, double *Z) /* reverse(tag, 1, n, 0, u, Z[n]), m=1 and d=0 => u and Z scalars */ { int rc=-1; if (m != 1 || d != 0 ) { fprintf(DIAG_OUT,"ADOL-C error: wrong u or Z dimension in scalar-reverse \n"); exit(-1); } else rc = fos_reverse(tag,m,n,&u,Z); \ return rc; } /****************************************************************************/ /* general call */ /* */ int reverse( short tag, int m, int n, int d, int q, double **U, double ***Z, short **nz) /* reverse(tag, m, n, d, q, U[q][m], Z[q][n][d+1], nz[q][n]) */ { return hov_reverse(tag,m,n,d,q,U,Z,nz); } /****************************************************************************/ /* U can be a vector if m=1 */ /* */ int reverse( short tag, int m, int n, int d, int q, double *U, double ***Z, short **nz) /* reverse(tag, 1, n, d, q, U[q], Z[q][n][d+1], nz[q][n]), m=1 => u vector */ { int rc=-1; if (m != 1) { fprintf(DIAG_OUT,"ADOL-C error: wrong U dimension in vector-reverse \n"); exit(-1); } else { /* olvo 980727 ??? */ /* double** upp = new double*[nrows]; */ double **upp = (double**) malloc(q*sizeof(double*)); for (int i=0; i Z matrix */ { int rc=-1; if (d != 0) { fprintf(DIAG_OUT,"ADOL-C error: wrong degree in vector-reverse \n"); exit(-1); } else rc = fov_reverse(tag,m,n,q,U,Z); return rc; } /****************************************************************************/ /* */ /* d=0 may be omitted, then Z may be a matrix; specialized code */ /* */ int reverse( short tag, int m, int n, int q, double **U, double **Z) /* reverse(tag, m, n, q, U[q][m], Z[q][n]), d=0 => Z matrix */ { int rc=-1; rc = fov_reverse(tag,m,n,q,U,Z); return rc; } /****************************************************************************/ /* */ /* If m=1 and d=0 then U can be vector and Z a matrix but no nz. */ /* */ int reverse( short tag, int m, int n, int d, int q, double *U, double **Z) /* reverse(tag, 1, n, 0, q, U[q], Z[q][n]), m=1 and d=0 => U vector and Z matrix but no nz */ { int rc=-1; /* olvo 981126 ??? what's that: */ /* (++d)--; *//* degre is reserved for the future use. Ingore this line */ if ((m != 1) || (d != 0)) { fprintf(DIAG_OUT,"ADOL-C error: wrong U dimension in vector-reverse \n"); exit(-1); } else { /* olvo 980727 ??? */ /* double ** upp = new double*[nrows]; */ double **upp = (double**) malloc(q*sizeof(double*)); for (int i=0; i #undef _INDO_ #undef _NONLIND_ #undef _NTIGHT_ ADOL-C-2.4.1/ADOL-C/src/nonl_ind_old_forward_t.c0000644000076600007660000000141212060360016017422 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: nonl_ind_forward_t.c Revision: $Id$ Contents: nonl_ind_forward_t (propagation of nonlinear index domains) Copyright (c) Andrea Walther, Kshitij Kulshreshtha This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #define _INDO_ 1 #define _NONLIND_OLD_ 1 #define _INDOPRO_ 1 #define _TIGHT_ 1 #include #undef _INDO_ #undef _NONLIND_OLD_ #undef _INDOPRO_ #undef _TIGHT_ ADOL-C-2.4.1/ADOL-C/src/Makefile.in0000644000076600007660000010503612120122253014621 0ustar coincoin# Makefile.in generated by automake 1.12.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @SPARSE_TRUE@am__append_1 = @COLPACK_LIBS@ subdir = ADOL-C/src DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/config.h.in $(top_srcdir)/autoconf/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" LTLIBRARIES = $(lib_LTLIBRARIES) @SPARSE_FALSE@libadolc_la_DEPENDENCIES = drivers/libdrivers.la \ @SPARSE_FALSE@ tapedoc/libtapedoc.la @SPARSE_TRUE@libadolc_la_DEPENDENCIES = drivers/libdrivers.la \ @SPARSE_TRUE@ sparse/libsparse.la tapedoc/libtapedoc.la am__libadolc_la_SOURCES_DIST = adalloc.c malloc.c adouble.cpp \ convolut.c fortutils.c interfaces.cpp interfacesf.c taping.c \ tape_handling.cpp zos_forward.c fos_forward.c fov_forward.c \ hos_forward.c hov_forward.c hov_wk_forward.c fos_reverse.c \ fov_reverse.c hos_reverse.c hos_ov_reverse.c hov_reverse.c \ forward_partx.c externfcts.cpp checkpointing.cpp fixpoint.cpp \ fov_offset_forward.c revolve.c advector.cpp taping_p.h \ int_forward_s.c int_forward_t.c indopro_forward_s.c \ indopro_forward_t.c nonl_ind_forward_s.c nonl_ind_forward_t.c \ nonl_ind_old_forward_s.c nonl_ind_old_forward_t.c \ int_reverse_s.c int_reverse_t.c @SPARSE_FALSE@am_libadolc_la_OBJECTS = adalloc.lo malloc.lo adouble.lo \ @SPARSE_FALSE@ convolut.lo fortutils.lo interfaces.lo \ @SPARSE_FALSE@ interfacesf.lo taping.lo tape_handling.lo \ @SPARSE_FALSE@ zos_forward.lo fos_forward.lo fov_forward.lo \ @SPARSE_FALSE@ hos_forward.lo hov_forward.lo hov_wk_forward.lo \ @SPARSE_FALSE@ fos_reverse.lo fov_reverse.lo hos_reverse.lo \ @SPARSE_FALSE@ hos_ov_reverse.lo hov_reverse.lo \ @SPARSE_FALSE@ forward_partx.lo externfcts.lo checkpointing.lo \ @SPARSE_FALSE@ fixpoint.lo fov_offset_forward.lo revolve.lo \ @SPARSE_FALSE@ advector.lo @SPARSE_TRUE@am_libadolc_la_OBJECTS = adalloc.lo malloc.lo adouble.lo \ @SPARSE_TRUE@ convolut.lo fortutils.lo interfaces.lo \ @SPARSE_TRUE@ interfacesf.lo taping.lo tape_handling.lo \ @SPARSE_TRUE@ zos_forward.lo fos_forward.lo fov_forward.lo \ @SPARSE_TRUE@ hos_forward.lo hov_forward.lo hov_wk_forward.lo \ @SPARSE_TRUE@ fos_reverse.lo fov_reverse.lo hos_reverse.lo \ @SPARSE_TRUE@ hos_ov_reverse.lo hov_reverse.lo forward_partx.lo \ @SPARSE_TRUE@ externfcts.lo checkpointing.lo fixpoint.lo \ @SPARSE_TRUE@ fov_offset_forward.lo revolve.lo int_forward_s.lo \ @SPARSE_TRUE@ int_forward_t.lo indopro_forward_s.lo \ @SPARSE_TRUE@ indopro_forward_t.lo nonl_ind_forward_s.lo \ @SPARSE_TRUE@ nonl_ind_forward_t.lo nonl_ind_old_forward_s.lo \ @SPARSE_TRUE@ nonl_ind_old_forward_t.lo int_reverse_s.lo \ @SPARSE_TRUE@ int_reverse_t.lo advector.lo libadolc_la_OBJECTS = $(am_libadolc_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent libadolc_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(libadolc_la_LDFLAGS) $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libadolc_la_SOURCES) DIST_SOURCES = $(am__libadolc_la_SOURCES_DIST) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = drivers tapedoc sparse DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH_FALSE = @ADVBRANCH_FALSE@ ADVBRANCH_TRUE = @ADVBRANCH_TRUE@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF_FALSE = @ATRIG_ERF_FALSE@ ATRIG_ERF_TRUE = @ATRIG_ERF_TRUE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COLPACK_CFLAGS = @COLPACK_CFLAGS@ COLPACK_LIBS = @COLPACK_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = @ac_adolc_cflags@ -DADOLC_INTERNAL=1 -std=gnu99 AM_CXXFLAGS = @ac_adolc_cxxflags@ -DADOLC_INTERNAL=1 AM_CPPFLAGS = -I$(top_srcdir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/src @SPARSE_FALSE@SUBDIRS = drivers tapedoc @SPARSE_TRUE@SUBDIRS = drivers sparse tapedoc MAINTAINERCLEANFILES = Makefile.in *~ *.orig adolc_config.h config.h.in EXTRA_DIST = uni5_for.c fo_rev.c ho_rev.c \ oplate.h taping_p.h malloc.h storemanager.h \ externfcts_p.h checkpointing_p.h buffer_temp.h lib_LTLIBRARIES = libadolc.la libadolc_la_LDFLAGS = -version-info 2:1:1 -no-undefined \ $(am__append_1) @SPARSE_FALSE@libadolc_la_SOURCES = adalloc.c malloc.c adouble.cpp \ @SPARSE_FALSE@ convolut.c fortutils.c\ @SPARSE_FALSE@ interfaces.cpp interfacesf.c \ @SPARSE_FALSE@ taping.c tape_handling.cpp \ @SPARSE_FALSE@ zos_forward.c fos_forward.c fov_forward.c \ @SPARSE_FALSE@ hos_forward.c hov_forward.c hov_wk_forward.c \ @SPARSE_FALSE@ fos_reverse.c fov_reverse.c \ @SPARSE_FALSE@ hos_reverse.c hos_ov_reverse.c hov_reverse.c \ @SPARSE_FALSE@ forward_partx.c \ @SPARSE_FALSE@ externfcts.cpp checkpointing.cpp \ @SPARSE_FALSE@ fixpoint.cpp fov_offset_forward.c revolve.c advector.cpp @SPARSE_TRUE@libadolc_la_SOURCES = adalloc.c malloc.c adouble.cpp \ @SPARSE_TRUE@ convolut.c fortutils.c \ @SPARSE_TRUE@ interfaces.cpp interfacesf.c \ @SPARSE_TRUE@ taping_p.h taping.c tape_handling.cpp \ @SPARSE_TRUE@ zos_forward.c fos_forward.c fov_forward.c \ @SPARSE_TRUE@ hos_forward.c hov_forward.c hov_wk_forward.c \ @SPARSE_TRUE@ fos_reverse.c fov_reverse.c \ @SPARSE_TRUE@ hos_reverse.c hos_ov_reverse.c hov_reverse.c \ @SPARSE_TRUE@ forward_partx.c \ @SPARSE_TRUE@ externfcts.cpp checkpointing.cpp \ @SPARSE_TRUE@ fixpoint.cpp fov_offset_forward.c revolve.c \ @SPARSE_TRUE@ int_forward_s.c int_forward_t.c \ @SPARSE_TRUE@ indopro_forward_s.c indopro_forward_t.c \ @SPARSE_TRUE@ nonl_ind_forward_s.c nonl_ind_forward_t.c \ @SPARSE_TRUE@ nonl_ind_old_forward_s.c nonl_ind_old_forward_t.c \ @SPARSE_TRUE@ int_reverse_s.c int_reverse_t.c advector.cpp @SPARSE_FALSE@libadolc_la_LIBADD = drivers/libdrivers.la tapedoc/libtapedoc.la @SPARSE_TRUE@libadolc_la_LIBADD = drivers/libdrivers.la sparse/libsparse.la \ @SPARSE_TRUE@ tapedoc/libtapedoc.la all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: .SUFFIXES: .c .cpp .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/src/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): config.h: stamp-h1 @if test ! -f $@; then rm -f stamp-h1; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status ADOL-C/src/config.h $(srcdir)/config.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libadolc.la: $(libadolc_la_OBJECTS) $(libadolc_la_DEPENDENCIES) $(EXTRA_libadolc_la_DEPENDENCIES) $(AM_V_CXXLD)$(libadolc_la_LINK) -rpath $(libdir) $(libadolc_la_OBJECTS) $(libadolc_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/adalloc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/adouble.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/advector.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/checkpointing.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/convolut.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/externfcts.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fixpoint.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fortutils.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/forward_partx.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fos_forward.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fos_reverse.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fov_forward.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fov_offset_forward.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fov_reverse.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hos_forward.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hos_ov_reverse.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hos_reverse.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hov_forward.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hov_reverse.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hov_wk_forward.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/indopro_forward_s.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/indopro_forward_t.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/int_forward_s.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/int_forward_t.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/int_reverse_s.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/int_reverse_t.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/interfaces.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/interfacesf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/malloc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonl_ind_forward_s.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonl_ind_forward_t.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonl_ind_old_forward_s.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonl_ind_old_forward_t.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/revolve.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tape_handling.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/taping.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zos_forward.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done cscopelist-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) config.h installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(libdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-libLTLIBRARIES .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ cscopelist-recursive ctags-recursive install-am install-strip \ tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool cscopelist \ cscopelist-recursive ctags ctags-recursive distclean \ distclean-compile distclean-generic distclean-hdr \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-libLTLIBRARIES install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-libLTLIBRARIES # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.4.1/ADOL-C/src/checkpointing.cpp0000644000076600007660000005160612053423074016122 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: checkpointing.cpp Revision: $Id: checkpointing.cpp 370 2012-11-22 13:18:52Z kulshres $ Contents: checkpointing algorithms Copyright (c) Andreas Kowarz This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #include "oplate.h" #include #include "taping_p.h" #include #include #include #include "checkpointing_p.h" #include #include #include using namespace std; ADOLC_BUFFER_TYPE ADOLC_EXT_DIFF_FCTS_BUFFER_DECL; /* field of pointers to the value fields of a checkpoint */ stack ADOLC_CHECKPOINTS_STACK_DECL; /* forward function declarations */ void init_edf(ext_diff_fct *edf); ADOLC_ext_fct cp_zos_forward; ADOLC_ext_fct_fos_forward cp_fos_forward; ADOLC_ext_fct_fov_forward cp_fov_forward; ADOLC_ext_fct_hos_forward cp_hos_forward; ADOLC_ext_fct_hov_forward cp_hov_forward; ADOLC_ext_fct_fos_reverse cp_fos_reverse; ADOLC_ext_fct_fov_reverse cp_fov_reverse; ADOLC_ext_fct_hos_reverse cp_hos_reverse; ADOLC_ext_fct_hov_reverse cp_hov_reverse; void cp_takeshot(CpInfos *cpInfos); void cp_restore(CpInfos *cpInfos); void cp_release(CpInfos *cpInfos); void cp_taping(CpInfos *cpInfos); void revolve_for(CpInfos *cpInfos); void revolveError(CpInfos *cpInfos); /* we do not really have an ext. diff. function that we want to be called */ int dummy(int n, double *x, int m, double *y) { return 0; } /* register one time step function (uses buffer template) */ CpInfos *reg_timestep_fct(ADOLC_TimeStepFuncion timeStepFunction) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; return ADOLC_EXT_DIFF_FCTS_BUFFER.append(timeStepFunction); } /* This is the main checkpointing function the user calls within the taping * process. It performs n time steps with or without taping and registers an * external dummy function which calls the actual checkpointing workhorses * from within the used drivers. */ int checkpointing (CpInfos *cpInfos) { int i; ext_diff_fct *edf; int oldTraceFlag; locint numVals; double *vals; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; // knockout if (cpInfos==NULL) fail(ADOLC_CHECKPOINTING_CPINFOS_NULLPOINTER); if (cpInfos->function==NULL) fail(ADOLC_CHECKPOINTING_NULLPOINTER_FUNCTION); if (cpInfos->function_double==NULL) fail(ADOLC_CHECKPOINTING_NULLPOINTER_FUNCTION_DOUBLE); if (cpInfos->adp_x==NULL) fail(ADOLC_CHECKPOINTING_NULLPOINTER_ARGUMENT); // register extern function edf=reg_ext_fct(dummy); init_edf(edf); // but we do not call it // we use direct taping to avoid unnecessary argument copying if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(ext_diff); ADOLC_PUT_LOCINT(edf->index); ADOLC_PUT_LOCINT(0); ADOLC_PUT_LOCINT(0); ADOLC_PUT_LOCINT(cpInfos->adp_x[0].loc()); ADOLC_PUT_LOCINT(cpInfos->adp_y[0].loc()); // this CpInfos id has to be read by the actual checkpointing // functions ADOLC_PUT_LOCINT(cpInfos->index); oldTraceFlag=ADOLC_CURRENT_TAPE_INFOS.traceFlag; ADOLC_CURRENT_TAPE_INFOS.traceFlag=0; } else oldTraceFlag=0; numVals = ADOLC_GLOBAL_TAPE_VARS.storeSize; vals = new double[numVals]; memcpy(vals, ADOLC_GLOBAL_TAPE_VARS.store, numVals * sizeof(double)); cpInfos->dp_internal_for = new double[cpInfos->n]; // initialize internal arguments for (i=0; in; ++i) cpInfos->dp_internal_for[i]=cpInfos->adp_x[i].getValue(); if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors != 0) // perform all time steps, tape the last, take checkpoints revolve_for(cpInfos); else // perform all time steps without taping for (i=0; isteps; ++i) cpInfos->function_double(cpInfos->n, cpInfos->dp_internal_for); memcpy(ADOLC_GLOBAL_TAPE_VARS.store, vals, numVals * sizeof(double)); delete[] vals; // update taylor stack; same structure as in adouble.cpp + // correction in taping.c if (oldTraceFlag != 0) { ADOLC_CURRENT_TAPE_INFOS.numTays_Tape += cpInfos->n; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors != 0) for (i = 0; i < cpInfos->n; ++i) ADOLC_WRITE_SCAYLOR(cpInfos->adp_y[i].getValue()); } // save results for (i=0; in; ++i) { cpInfos->adp_y[i].setValue(cpInfos->dp_internal_for[i]); } delete[] cpInfos->dp_internal_for; cpInfos->dp_internal_for = NULL; // normal taping again ADOLC_CURRENT_TAPE_INFOS.traceFlag=oldTraceFlag; return 0; } /* - reinit external function buffer and checkpointing buffer * - necessary when using tape within a different program */ void reinit_checkpointing() {} CpInfos *get_cp_fct(int index) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; return ADOLC_EXT_DIFF_FCTS_BUFFER.getElement(index); } /* initialize the CpInfos variable (function and index are set within * the template code */ void init_CpInfos(CpInfos *cpInfos) { char *ptr; ptr = (char *)cpInfos; for (unsigned int i = 0; i < sizeof(CpInfos); ++i) ptr[i] = 0; cpInfos->tapeNumber = -1; } /* initialize the information for the external function in a way that our * checkpointing functions are called */ void init_edf(ext_diff_fct *edf) { edf->function=dummy; edf->zos_forward=cp_zos_forward; edf->fos_forward=cp_fos_forward; edf->fov_forward=cp_fov_forward; edf->hos_forward=cp_hos_forward; edf->hov_forward=cp_hov_forward; edf->fos_reverse=cp_fos_reverse; edf->fov_reverse=cp_fov_reverse; edf->hos_reverse=cp_hos_reverse; edf->hov_reverse=cp_hov_reverse; } /****************************************************************************/ /* the following are the main checkpointing functions called by the */ /* external differentiated function alogrithms */ /****************************************************************************/ /* special case: use double version where possible, no taping */ int cp_zos_forward (int n, double *dp_x, int m, double *dp_y) { CpInfos *cpInfos; double *T0; int i, oldTraceFlag; locint arg; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; // taping off oldTraceFlag=ADOLC_CURRENT_TAPE_INFOS.traceFlag; ADOLC_CURRENT_TAPE_INFOS.traceFlag=0; // get checkpointing information cpInfos=get_cp_fct(ADOLC_CURRENT_TAPE_INFOS.cpIndex); T0 = ADOLC_CURRENT_TAPE_INFOS.dp_T0; // note the mode cpInfos->modeForward = ADOLC_ZOS_FORWARD; cpInfos->modeReverse = ADOLC_NO_MODE; // prepare arguments cpInfos->dp_internal_for=new double[cpInfos->n]; arg=ADOLC_CURRENT_TAPE_INFOS.lowestXLoc_for; for (i=0; in; ++i) { cpInfos->dp_internal_for[i]=T0[arg]; ++arg; } revolve_for(cpInfos); // write back arg = ADOLC_CURRENT_TAPE_INFOS.lowestYLoc_for; // keep input for (i=0; in; ++i) { ADOLC_WRITE_SCAYLOR(T0[arg]); T0[arg]=cpInfos->dp_internal_for[i]; ++arg; } delete[] cpInfos->dp_internal_for; cpInfos->dp_internal_for = NULL; // taping "on" ADOLC_CURRENT_TAPE_INFOS.traceFlag=oldTraceFlag; return 0; } void revolve_for(CpInfos *cpInfos) { /* init revolve */ cpInfos->check=-1; cpInfos->capo=0; cpInfos->info = 0; cpInfos->fine=cpInfos->steps; /* execute all time steps */ enum revolve_action whattodo; do { whattodo=revolve(&cpInfos->check, &cpInfos->capo, &cpInfos->fine, cpInfos->checkpoints, &cpInfos->info); switch (whattodo) { case revolve_takeshot: cp_takeshot(cpInfos); cpInfos->currentCP=cpInfos->capo; break; case revolve_advance: for (int i=0; icapo-cpInfos->currentCP; ++i) { cpInfos->function_double(cpInfos->n, cpInfos->dp_internal_for); } break; case revolve_firsturn: cp_taping(cpInfos); break; case revolve_error: revolveError(cpInfos); break; default: fail(ADOLC_CHECKPOINTING_UNEXPECTED_REVOLVE_ACTION); } } while (whattodo==revolve_takeshot || whattodo==revolve_advance); } int cp_fos_forward (int n, double *dp_x, double *dp_X, int m, double *dp_y, double *dp_Y) { printf("WARNING: Checkpointing algorithm not " "implemented for the fos_forward mode!\n"); return 0; } int cp_fov_forward (int n, double *dp_x, int p, double **dpp_X, int m, double *dp_y, double **dpp_Y) { printf("WARNING: Checkpointing algorithm not " "implemented for the fov_forward mode!\n"); return 0; } int cp_hos_forward (int n, double *dp_x, int d, double **dpp_X, int m, double *dp_y, double **dpp_Y) { printf("WARNING: Checkpointing algorithm not " "implemented for the hos_forward mode!\n"); return 0; } int cp_hov_forward (int n, double *dp_x, int d, int p, double ***dppp_X, int m, double *dp_y, double ***dppp_Y) { printf("WARNING: Checkpointing algorithm not " "implemented for the hov_forward mode!\n"); return 0; } int cp_fos_reverse (int m, double *dp_U, int n, double *dp_Z, double *dp_x, double *dp_y) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; revreal *A = ADOLC_CURRENT_TAPE_INFOS.rp_A; int oldTraceFlag; locint arg; CpInfos *cpInfos=get_cp_fct(ADOLC_CURRENT_TAPE_INFOS.cpIndex); char old_bsw; // note the mode cpInfos->modeReverse = ADOLC_FOS_REVERSE; cpInfos->dp_internal_for=new double[cpInfos->n]; cpInfos->dp_internal_rev=new double[cpInfos->n]; // taping "off" oldTraceFlag=ADOLC_CURRENT_TAPE_INFOS.traceFlag; ADOLC_CURRENT_TAPE_INFOS.traceFlag=0; arg=ADOLC_CURRENT_TAPE_INFOS.lowestYLoc_rev; for (int i=0; in; ++i) { cpInfos->dp_internal_rev[i]=A[arg]; ++arg; } // update taylor buffer for (int i = 0; i < cpInfos->n; ++i) { --arg; ADOLC_GET_TAYLOR(arg); } // execute second part of revolve_firstturn left from forward sweep fos_reverse(cpInfos->tapeNumber, cpInfos->n, cpInfos->n, cpInfos->dp_internal_rev, cpInfos->dp_internal_rev); old_bsw = ADOLC_GLOBAL_TAPE_VARS.branchSwitchWarning; ADOLC_GLOBAL_TAPE_VARS.branchSwitchWarning = 0; // checkpointing enum revolve_action whattodo; do { whattodo=revolve(&cpInfos->check, &cpInfos->capo, &cpInfos->fine, cpInfos->checkpoints, &cpInfos->info); switch (whattodo) { case revolve_terminate: break; case revolve_takeshot: cp_takeshot(cpInfos); cpInfos->currentCP=cpInfos->capo; break; case revolve_advance: for (int i=0; icapo-cpInfos->currentCP; ++i) cpInfos->function_double(cpInfos->n, cpInfos->dp_internal_for); break; case revolve_youturn: if (cpInfos->retaping != 0) cp_taping(cpInfos); // retaping forced else { // one forward step with keep and retaping if necessary if (zos_forward(cpInfos->tapeNumber, cpInfos->n, cpInfos->n, 1, cpInfos->dp_internal_for, cpInfos->dp_internal_for) < 0) cp_taping(cpInfos); } // one reverse step fos_reverse(cpInfos->tapeNumber, cpInfos->n, cpInfos->n, cpInfos->dp_internal_rev, cpInfos->dp_internal_rev); break; case revolve_restore: if (cpInfos->capo!=cpInfos->currentCP) cp_release(cpInfos); cpInfos->currentCP=cpInfos->capo; cp_restore(cpInfos); break; case revolve_error: revolveError(cpInfos); break; default: fail(ADOLC_CHECKPOINTING_UNEXPECTED_REVOLVE_ACTION); break; } } while (whattodo!=revolve_terminate && whattodo!=revolve_error); cp_release(cpInfos); // release first checkpoint if written ADOLC_GLOBAL_TAPE_VARS.branchSwitchWarning = old_bsw; // save results arg=ADOLC_CURRENT_TAPE_INFOS.lowestYLoc_rev; for (int i=0; in; ++i) { A[arg]=cpInfos->dp_internal_rev[i]; ++arg; } // clean up delete[] cpInfos->dp_internal_for; cpInfos->dp_internal_for = NULL; delete[] cpInfos->dp_internal_rev; cpInfos->dp_internal_rev = NULL; // taping "on" ADOLC_CURRENT_TAPE_INFOS.traceFlag=oldTraceFlag; return 0; } int cp_fov_reverse (int m, int p, double **dpp_U, int n, double **dpp_Z, double */*unused*/, double */*unused*/) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; revreal **A = ADOLC_CURRENT_TAPE_INFOS.rpp_A; int oldTraceFlag, numDirs; locint arg; CpInfos *cpInfos = get_cp_fct(ADOLC_CURRENT_TAPE_INFOS.cpIndex); char old_bsw; // note the mode cpInfos->modeReverse = ADOLC_FOV_REVERSE; numDirs = ADOLC_CURRENT_TAPE_INFOS.numDirs_rev; cpInfos->dp_internal_for = new double[cpInfos->n]; cpInfos->dpp_internal_rev = myalloc2(numDirs, cpInfos->n); // taping "off" oldTraceFlag = ADOLC_CURRENT_TAPE_INFOS.traceFlag; ADOLC_CURRENT_TAPE_INFOS.traceFlag = 0; arg = ADOLC_CURRENT_TAPE_INFOS.lowestYLoc_rev; for (int i = 0; i < cpInfos->n; ++i) { for (int j = 0; j < numDirs; ++j) { cpInfos->dpp_internal_rev[j][i] = A[arg][j]; } ++arg; } // update taylor buffer for (int i = 0; i < cpInfos->n; ++i) { --arg; ADOLC_GET_TAYLOR(arg); } // execute second part of revolve_firstturn left from forward sweep fov_reverse(cpInfos->tapeNumber, cpInfos->n, cpInfos->n, numDirs, cpInfos->dpp_internal_rev, cpInfos->dpp_internal_rev); old_bsw = ADOLC_GLOBAL_TAPE_VARS.branchSwitchWarning; ADOLC_GLOBAL_TAPE_VARS.branchSwitchWarning = 0; // checkpointing enum revolve_action whattodo; do { whattodo=revolve(&cpInfos->check, &cpInfos->capo, &cpInfos->fine, cpInfos->checkpoints, &cpInfos->info); switch (whattodo) { case revolve_terminate: break; case revolve_takeshot: cp_takeshot(cpInfos); cpInfos->currentCP = cpInfos->capo; break; case revolve_advance: for (int i = 0; i < cpInfos->capo - cpInfos->currentCP; ++i) cpInfos->function_double(cpInfos->n, cpInfos->dp_internal_for); break; case revolve_youturn: if (cpInfos->retaping != 0) cp_taping(cpInfos); // retaping forced else { // one forward step with keep and retaping if necessary if (zos_forward(cpInfos->tapeNumber, cpInfos->n, cpInfos->n, 1, cpInfos->dp_internal_for, cpInfos->dp_internal_for) < 0) cp_taping(cpInfos); } // one reverse step fov_reverse(cpInfos->tapeNumber, cpInfos->n, cpInfos->n, numDirs, cpInfos->dpp_internal_rev, cpInfos->dpp_internal_rev); break; case revolve_restore: if (cpInfos->capo != cpInfos->currentCP) cp_release(cpInfos); cpInfos->currentCP = cpInfos->capo; cp_restore(cpInfos); break; case revolve_error: revolveError(cpInfos); break; default: fail(ADOLC_CHECKPOINTING_UNEXPECTED_REVOLVE_ACTION); break; } } while (whattodo != revolve_terminate && whattodo != revolve_error); cp_release(cpInfos); // release first checkpoint if written ADOLC_GLOBAL_TAPE_VARS.branchSwitchWarning = old_bsw; // save results arg = ADOLC_CURRENT_TAPE_INFOS.lowestYLoc_rev; for (int i = 0; i < cpInfos->n; ++i) { for (int j = 0; j < numDirs; ++j) { A[arg][j] = cpInfos->dpp_internal_rev[j][i]; } ++arg; } // clean up delete[] cpInfos->dp_internal_for; cpInfos->dp_internal_for = NULL; myfree2(cpInfos->dpp_internal_rev); cpInfos->dpp_internal_rev = NULL; // taping "on" ADOLC_CURRENT_TAPE_INFOS.traceFlag=oldTraceFlag; return 0; } int cp_hos_reverse (int m, double *dp_U, int n, int d, double **dpp_Z) { printf("WARNING: Checkpointing algorithm not " "implemented for the hos_reverse mode!\n"); return 0; } int cp_hov_reverse (int m, int p, double **dpp_U, int n, int d, double ***dppp_Z, short **spp_nz) { printf("WARNING: Checkpointing algorithm not " "implemented for the hov_reverse mode!\n"); return 0; } /****************************************************************************/ /* functions for handling the checkpoint stack */ /****************************************************************************/ void cp_clearStack() { StackElement se; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; while (!ADOLC_CHECKPOINTS_STACK.empty()) { se = ADOLC_CHECKPOINTS_STACK.top(); ADOLC_CHECKPOINTS_STACK.pop(); delete[] se[0]; delete[] se; } } void cp_takeshot (CpInfos *cpInfos) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; StackElement se = new double *[2]; ADOLC_CHECKPOINTS_STACK.push(se); se[0] = new double[cpInfos->n]; for (int i = 0; i < cpInfos->n; ++i) se[0][i] = cpInfos->dp_internal_for[i]; if (cpInfos->saveNonAdoubles != NULL) se[1] = static_cast(cpInfos->saveNonAdoubles()); else se[1] = NULL; } void cp_restore (CpInfos *cpInfos) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; StackElement se = ADOLC_CHECKPOINTS_STACK.top(); for (int i = 0; i < cpInfos->n; ++i) cpInfos->dp_internal_for[i] = se[0][i]; if (se[1] != NULL) cpInfos->restoreNonAdoubles(static_cast(se[1])); } void cp_release (CpInfos *cpInfos) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (!ADOLC_CHECKPOINTS_STACK.empty()) { StackElement se = ADOLC_CHECKPOINTS_STACK.top(); ADOLC_CHECKPOINTS_STACK.pop(); delete[] se[0]; if (se[1] != NULL) delete[] se[1]; delete[] se; } } void cp_taping(CpInfos *cpInfos) { adouble *tapingAdoubles = new adouble[cpInfos->n]; trace_on(cpInfos->tapeNumber, 1); for (int i = 0; i < cpInfos->n; ++i) tapingAdoubles[i] <<= cpInfos->dp_internal_for[i]; cpInfos->function(cpInfos->n, tapingAdoubles); for (int i = 0; i < cpInfos->n; ++i) tapingAdoubles[i] >>= cpInfos->dp_internal_for[i]; trace_off(); delete[] tapingAdoubles; } /****************************************************************************/ /* revolve error function */ /****************************************************************************/ void revolveError (CpInfos *cpInfos) { switch(cpInfos->info) { case 10: printf(" Number of checkpoints stored exceeds " "checkup!\n Increase constant 'checkup' " "and recompile!\n"); break; case 11: printf(" Number of checkpoints stored = %d exceeds " "snaps = %d!\n Ensure 'snaps' > 0 and increase " "initial 'fine'!\n", cpInfos->check+1, cpInfos->checkpoints); break; case 12: printf(" Error occured in numforw!\n"); break; case 13: printf(" Enhancement of 'fine', 'snaps' checkpoints " "stored!\n Increase 'snaps'!\n"); break; case 14: printf(" Number of snaps exceeds checkup!\n Increase " "constant 'checkup' and recompile!\n"); break; case 15: printf(" Number of reps exceeds repsup!\n Increase " "constant 'repsup' and recompile!\n"); break; } fail(ADOLC_CHECKPOINTING_REVOLVE_IRREGULAR_TERMINATED); } ADOL-C-2.4.1/ADOL-C/src/int_forward_t.c0000644000076600007660000000135511227420735015575 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: int_forward_t.c Revision: $Id: int_forward_t.c 42 2009-07-15 18:37:17Z awalther $ Contents: int_forward (integer forward mode tight for bit pattern propagation) Copyright (c) Andrea Walther, Christo Mitev This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #define _INT_FOR_ 1 #define _TIGHT_ 1 #include #undef _INT_FOR_ #undef _TIGHT_ ADOL-C-2.4.1/ADOL-C/src/fov_offset_forward.c0000644000076600007660000000143111227420735016613 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: fov_offset_forward.c Revision: $Id: fov_offset_forward.c 42 2009-07-15 18:37:17Z awalther $ Contents: fov_offset_forward (first-order-vector forward mode with p-offset in arguments and taylors) Copyright (c) Sebastian Schlenkrich This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #define _FOV_ 1 #define _CHUNKED_ #undef _KEEP_ #include #undef _CHUNKED_ #undef _FOV_ ADOL-C-2.4.1/ADOL-C/src/hov_reverse.c0000644000076600007660000000140711227420735015261 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: hov_reverse.c Revision: $Id: hov_reverse.c 42 2009-07-15 18:37:17Z awalther $ Contents: hov_reverse (higher-order-vector reverse mode) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #define _HOV_ 1 #include #undef _HOV_ ADOL-C-2.4.1/ADOL-C/src/fortutils.c0000644000076600007660000000451411412425466014771 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: fortutils.c Revision: $Id: fortutils.c 106 2010-06-29 17:19:50Z kulshres $ Contents: Internal tools to handle Fortran arrays Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #include BEGIN_C_DECLS /****************************************************************************/ /* */ /*--------------------------------------------------------------------------*/ void spread1(int m, fdouble* x, double* X) { int j; for (j=0; j=1 * If native malloc(0) returns an invalid pointer use the * replacement-function instead. */ void *rpl_malloc(size_t n) { if (n == 0) n = 1; return malloc(n); } void *rpl_calloc(size_t n, size_t size) { if (n == 0) n = 1; if (size == 0) size = 1; return calloc(n, size); } #endif /* ADOLC_NO_MALLOC */ #if defined(ADOLC_NO_REALLOC) # undef realloc extern void *realloc(); void *rpl_realloc(void *ptr, size_t size) { if (size == 0) size = 1; if (ptr == NULL) ptr = rpl_malloc(1); return realloc(ptr, size); } #endif /* ADOLC_NO_REALLOC */ ADOL-C-2.4.1/ADOL-C/src/nonl_ind_old_forward_s.c0000644000076600007660000000141312060360016017422 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: nonl_ind_forward_s.c Revision: $Id$ Contents: nonl_ind_forward_s (propagation of nonlinear index domains) Copyright (c) Andrea Walther, Kshitij Kulshreshtha This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #define _INDO_ 1 #define _NONLIND_OLD_ 1 #define _INDOPRO_ 1 #define _NTIGHT_ 1 #include #undef _INDO_ #undef _NONLIND_OLD_ #undef _INDOPRO_ #undef _NTIGHT_ ADOL-C-2.4.1/ADOL-C/src/checkpointing_p.h0000644000076600007660000000312711412425466016106 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: checkpointing_p.h Revision: $Id: checkpointing_p.h 106 2010-06-29 17:19:50Z kulshres $ Contents: private functions for the checkpointing functions. Copyright (c) Andreas Kowarz This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_CHECKPOINTING_P_H) #define ADOLC_CHECKPOINTING_P_H 1 #include #include #include "buffer_temp.h" #include "taping_p.h" #include using std::stack; BEGIN_C_DECLS /****************************************************************************/ /* Now the C THINGS */ #define CP_BLOCK_SIZE 10 CpInfos *get_cp_fct(int index); void init_CpInfos(CpInfos *cpInfos); END_C_DECLS /****************************************************************************/ #if defined(__cplusplus) #define ADOLC_BUFFER_TYPE \ Buffer< CpInfos, ADOLC_TimeStepFuncion, CP_BLOCK_SIZE > extern ADOLC_BUFFER_TYPE ADOLC_EXT_DIFF_FCTS_BUFFER_DECL; /* field of pointers to the value fields of a checkpoint */ typedef double **StackElement; extern stack ADOLC_CHECKPOINTS_STACK_DECL; /* a cleanup function */ void cp_clearStack(); #endif #endif /* ADOLC_CHECKPOITING_P_H */ ADOL-C-2.4.1/ADOL-C/src/taping.c0000644000076600007660000027447112053423074014226 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: taping.c Revision: $Id: taping.c 370 2012-11-22 13:18:52Z kulshres $ Contents: all C functions directly accessing at least one of the four tapes (operations, locations, constants, value stack) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel, Kshitij Kulshreshtha This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #include #include #include "oplate.h" #include "taping_p.h" #include #include #if defined(_WINDOWS) && !__STDC__ #define stat _stat #define S_IFDIR _S_IFDIR #define S_IFMT _S_IFMT #endif #ifndef S_ISDIR #define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) #endif /*--------------------------------------------------------------------------*/ /* Tape identification (ADOLC & version check) */ ADOLC_ID adolc_id; /* first version with new tape structure * => to work with older tapes use older ADOL-C version */ #define ADOLC_NEW_TAPE_VERSION 2 #define ADOLC_NEW_TAPE_SUBVERSION 3 #define ADOLC_NEW_TAPE_PATCHLEVEL 0 /****************************************************************************/ /****************************************************************************/ /* HELP FUNCTIONS */ /****************************************************************************/ /****************************************************************************/ /*--------------------------------------------------------------------------*/ /* additional infos used by fail() */ int failAdditionalInfo1; int failAdditionalInfo2; locint failAdditionalInfo3; locint failAdditionalInfo4; void *failAdditionalInfo5; void *failAdditionalInfo6; /* outputs an appropriate error message using DIAG_OUT and exits the running * program */ void fail( int error ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; switch (error) { case ADOLC_MALLOC_FAILED: fprintf(DIAG_OUT, "ADOL-C error: Memory allocation failed!\n"); break; case ADOLC_INTEGER_TAPE_FOPEN_FAILED: case ADOLC_INTEGER_TAPE_FREAD_FAILED: fprintf(DIAG_OUT, "ADOL-C error: " "reading integer tape number %d!\n", failAdditionalInfo1); printError(); break; case ADOLC_TAPE_TO_OLD: fprintf(DIAG_OUT, "ADOL-C error: " "Used tape (%d) was written with ADOL-C version " "older than %d.%d.%d\n", failAdditionalInfo1, ADOLC_NEW_TAPE_VERSION, ADOLC_NEW_TAPE_SUBVERSION, ADOLC_NEW_TAPE_PATCHLEVEL); fprintf(DIAG_OUT, " " "This is ADOL-C %d.%d.%d\n", ADOLC_VERSION, ADOLC_SUBVERSION, ADOLC_PATCHLEVEL); break; case ADOLC_WRONG_LOCINT_SIZE: fprintf(DIAG_OUT, "ADOL-C error: Used tape (%d) was written with " "locints of size %d, size %d required.\n", ADOLC_CURRENT_TAPE_INFOS.tapeID, failAdditionalInfo1, failAdditionalInfo2); break; case ADOLC_MORE_STAT_SPACE_REQUIRED: fprintf(DIAG_OUT, "ADOL-C error: Not enough space for stats!\n" " Please contact the ADOL-C team!\n"); break; case ADOLC_TAPING_BUFFER_ALLOCATION_FAILED: fprintf(DIAG_OUT, "ADOL-C error: Cannot allocate tape buffers!\n"); break; case ADOLC_TAPING_TBUFFER_ALLOCATION_FAILED: fprintf(DIAG_OUT, "ADOL-C error: Cannot allocate taylor buffer!\n"); break; case ADOLC_TAPING_READ_ERROR_IN_TAYLOR_CLOSE: fprintf(DIAG_OUT, "ADOL-C error: Read error in taylor_close n= %d\n", failAdditionalInfo1); break; case ADOLC_TAPING_TO_MANY_TAYLOR_BUFFERS: fprintf(DIAG_OUT, "ADOL-C error: To many taylor buffers!\n" " Increase ADOLC_GLOBAL_TAPE_VARS.maxNumberTaylorBuffers\n"); break; case ADOLC_TAPING_TO_MANY_LOCINTS: fprintf(DIAG_OUT, "ADOL-C error: Maximal number (%d) of live active " "variables exceeded!\n\n" "Possible remedies :\n\n" " 1. Use more automatic local variables and\n" " allocate/deallocate adoubles on free store\n" " in a strictly last in first out fashion\n\n" " 2. Extend the range by redefining the type of\n" " locint (currently %d byte) from unsigned short " "(%d byte) or int\n" " to int (%d byte) or long (%d byte).\n", failAdditionalInfo3, (int)sizeof(locint), (int)sizeof(unsigned short), (int)sizeof(int), (int)sizeof(long) ); break; case ADOLC_TAPING_STORE_REALLOC_FAILED: fprintf(DIAG_OUT, "ADOL-C error: Failure to reallocate storage for " "adouble values!\n\n" " oldStore = %p\n" " newStore = NULL\n" " oldStoreSize = %u\n" " newStoreSize = %u\n\n" "Possible remedies :\n" " 1. Use more automatic local variables and \n" " allocate/deallocate adoubles on free store\n" " in a strictly last in first out fashion\n" " 2. Enlarge your system stacksize limit\n" , failAdditionalInfo5, failAdditionalInfo3, failAdditionalInfo4 ); break; case ADOLC_TAPING_FATAL_IO_ERROR: fprintf(DIAG_OUT, "ADOL-C error: Fatal error-doing a read or " "write!\n"); printError(); break; case ADOLC_TAPING_TAPE_STILL_IN_USE: fprintf(DIAG_OUT, "ADOL-C error: Tape %d is still in use!\n", failAdditionalInfo1); break; case ADOLC_TAPING_TAYLOR_OPEN_FAILED: fprintf(DIAG_OUT, "ADOL-C error: while opening taylor file!\n"); printError(); break; case ADOLC_EVAL_SEEK_VALUE_STACK: fprintf(DIAG_OUT, "ADOL-C error: in seeking value stack file!\n"); break; case ADOLC_EVAL_OP_TAPE_READ_FAILED: fprintf(DIAG_OUT, "ADOL-C error: while reading operations tape!\n"); break; case ADOLC_EVAL_VAL_TAPE_READ_FAILED: fprintf(DIAG_OUT, "ADOL-C error: while reading values tape!\n"); break; case ADOLC_EVAL_LOC_TAPE_READ_FAILED: fprintf(DIAG_OUT, "ADOL-C error: while reading locations tape!\n"); break; case ADOLC_EVAL_TAY_TAPE_READ_FAILED: fprintf(DIAG_OUT, "ADOL-C error: while reading value stack tape!\n"); break; case ADOLC_REVERSE_NO_TAYLOR_STACK: fprintf(DIAG_OUT, "ADOL-C error: No taylor stack found for tape " "%d! => Check forward sweep!\n", failAdditionalInfo1); break; case ADOLC_REVERSE_COUNTS_MISMATCH: fprintf(DIAG_OUT, "ADOL-C error: Reverse sweep on tape %d aborted!\n" " Number of dependents(%u) and/or " "independents(%u)\n" " variables passed to reverse is " "inconsistent\n" " with number recorded on tape(%u/%u)!\n", ADOLC_CURRENT_TAPE_INFOS.tapeID, failAdditionalInfo3, failAdditionalInfo4, ADOLC_CURRENT_TAPE_INFOS.stats[NUM_DEPENDENTS], ADOLC_CURRENT_TAPE_INFOS.stats[NUM_INDEPENDENTS]); break; case ADOLC_REVERSE_TAYLOR_COUNTS_MISMATCH: fprintf(DIAG_OUT, "ADOL-C error: Reverse fails on tape %d because " "the number of independent\n" " and/or dependent variables given to" " reverse are inconsistent\n" " with that of the internal taylor " "array!\n", ADOLC_CURRENT_TAPE_INFOS.tapeID); break; case ADOLC_BUFFER_NULLPOINTER_FUNCTION: fprintf(DIAG_OUT, "ADOL-C error: NULL pointer supplied in buffer " "handling.\n"); break; case ADOLC_BUFFER_INDEX_TO_LARGE: fprintf(DIAG_OUT, "ADOL-C error: Index for buffer element too " "large.\n"); break; case ADOLC_EXT_DIFF_NULLPOINTER_STRUCT: fprintf(DIAG_OUT, "ADOL-C error: Got null pointer as pointer to struct " " containing ext. diff. function information!\n"); break; case ADOLC_EXT_DIFF_WRONG_TAPESTATS: fprintf(DIAG_OUT, "ADOL-C error: Number of independents/dependents recorded on" " tape differ from number supplied by user!\n"); break; case ADOLC_EXT_DIFF_NULLPOINTER_FUNCTION: fprintf(DIAG_OUT, "ADOL-C error: Got NULL pointer as " "extern function pointer!\n"); break; case ADOLC_EXT_DIFF_NULLPOINTER_DIFFFUNC: fprintf(DIAG_OUT, "ADOL-C error: No function for external differentiation found" " to work with (null pointer)\n!"); break; case ADOLC_EXT_DIFF_NULLPOINTER_ARGUMENT: fprintf(DIAG_OUT, "ADOL-C error: Got at least one null pointer as argument to" " extern differnetiated function!\n"); break; case ADOLC_EXT_DIFF_WRONG_FUNCTION_INDEX: fprintf(DIAG_OUT, "ADOL-C error: Function with specified index not found!\n"); break; case ADOLC_EXT_DIFF_LOCATIONGAP: fprintf(DIAG_OUT, "ADOL-C error: active type arguments passed to call_ext_fct do not have contiguous ascending locations; use ensureContiguousLocations(size_t) to reserve contiguous blocks prior to allocation of the arguments.\n"); break; case ADOLC_CHECKPOINTING_CPINFOS_NULLPOINTER: fprintf(DIAG_OUT, "ADOL-C error: Got null pointer as pointer to struct " " containing checkpointing information!\n"); break; case ADOLC_CHECKPOINTING_NULLPOINTER_ARGUMENT: fprintf(DIAG_OUT, "ADOL-C error: Got null pointer instead of argument pointer " "within checkpointing infos!\n"); break; case ADOLC_CHECKPOINTING_NULLPOINTER_FUNCTION: fprintf(DIAG_OUT, "ADOL-C error: Got null pointer instead of function pointer " "within checkpointing infos!\n"); break; case ADOLC_CHECKPOINTING_NULLPOINTER_FUNCTION_DOUBLE: fprintf(DIAG_OUT, "ADOL-C error: Got null pointer instead of function (double " "version) pointer within checkpointing infos!\n"); break; case ADOLC_CHECKPOINTING_REVOLVE_IRREGULAR_TERMINATED: fprintf(DIAG_OUT, "ADOL-C error: Irregualar termination of REVOLVE!\n"); break; case ADOLC_CHECKPOINTING_UNEXPECTED_REVOLVE_ACTION: fprintf(DIAG_OUT, "ADOL-C error: Unextpected REVOLVE action in forward mode!\n" ); break; case ADOLC_WRONG_PLATFORM_32: fprintf(DIAG_OUT, "ADOL-C error: Trace was created on a 64-bit platfrom, cannot be opened on 32-bit platform!\n" ); break; case ADOLC_WRONG_PLATFORM_64: fprintf(DIAG_OUT, "ADOL-C error: Trace was created on a 32-bit platform, cannot be opened on 64-bit platform!\n" ); break; default: fprintf(DIAG_OUT, "ADOL-C error => unknown error type!\n"); exit (-1); break; } exit (error + 1); } /* print an error message describing the error number */ void printError() { fprintf(DIAG_OUT, " "); switch (errno) { case EACCES: fprintf(DIAG_OUT, ">>> Access denied! <<<\n"); break; case EFBIG: fprintf(DIAG_OUT, ">>> File too big! <<<\n"); break; case EMFILE: fprintf(DIAG_OUT, ">>> Too many open files for this process! <<<\n"); break; case ENAMETOOLONG: fprintf(DIAG_OUT, ">>> Path/file name too long! <<<\n"); break; case ENFILE: fprintf(DIAG_OUT, ">>> Too many open files for this system! <<<\n"); break; case ENOENT: fprintf(DIAG_OUT, ">>> File or directory not found! <<<\n"); break; case ENOSPC: fprintf(DIAG_OUT, ">>> No space left on device! <<<\n"); break; case EPERM: fprintf(DIAG_OUT, ">>> Operation not permitted! <<<\n"); break; case EROFS: fprintf(DIAG_OUT, ">>> File system is mounted read only! <<<\n"); break; default: fprintf(DIAG_OUT, ">>> "); fprintf(DIAG_OUT, "%s", strerror(errno)); fprintf(DIAG_OUT, " <<<\n"); break; } } /* the base names of every tape type */ char *tapeBaseNames[4]; void clearTapeBaseNames() { int i; for(i=0;i<4;i++) free(tapeBaseNames[i]); } /****************************************************************************/ /* The subroutine get_fstr appends to the tape base name of type tapeType */ /* the number fnum and ".tap" and returns a pointer to the resulting string.*/ /* The result string must be freed be thy caller! */ /****************************************************************************/ char *createFileName(short tapeID, int tapeType) { char *numberString, *fileName, *extension = ".tap", *currPos; #if defined(_OPENMP) char *threadName = "thread-", *threadNumberString = NULL; int threadNumber, threadNumberStringLength = 0, threadNameLength = 0; #endif /* _OPENMP */ int tapeBaseNameLength, numberStringLength, fileNameLength; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; failAdditionalInfo1 = tapeID; tapeBaseNameLength = strlen(tapeBaseNames[tapeType]); /* determine length of the number string */ if (tapeID != 0) numberStringLength = (int)log10((double)tapeID); else numberStringLength = 0; ++numberStringLength; numberString = malloc(sizeof(char) * (numberStringLength + 1)); if (numberString == NULL) fail(ADOLC_MALLOC_FAILED); sprintf(numberString, "%d", tapeID); #if defined(_OPENMP) /* determine length of the thread number string */ if (ADOLC_GLOBAL_TAPE_VARS.inParallelRegion == 1) { threadNameLength = strlen(threadName); threadNumber = omp_get_thread_num(); if (threadNumber != 0) threadNumberStringLength = (int)log10((double)threadNumber); else threadNumberStringLength = 0; ++threadNumberStringLength; threadNumberString = malloc(sizeof(char) * (threadNumberStringLength + 2)); if (threadNumberString == NULL) fail(ADOLC_MALLOC_FAILED); sprintf(threadNumberString, "%d", threadNumber); threadNumberString[threadNumberStringLength] = '_'; ++threadNumberStringLength; threadNumberString[threadNumberStringLength] = 0; } #endif /* _OPENMP */ /* malloc and create */ fileNameLength = tapeBaseNameLength + numberStringLength + 5; #if defined(_OPENMP) if (ADOLC_GLOBAL_TAPE_VARS.inParallelRegion == 1) fileNameLength += threadNameLength + threadNumberStringLength; #endif /* _OPENMP */ fileName = (char *)malloc(sizeof(char) * fileNameLength); if (fileName == NULL) fail(ADOLC_MALLOC_FAILED); currPos = fileName; strncpy(currPos, tapeBaseNames[tapeType], tapeBaseNameLength); currPos += tapeBaseNameLength; #if defined(_OPENMP) if (ADOLC_GLOBAL_TAPE_VARS.inParallelRegion == 1) { strncpy(currPos, threadName, threadNameLength); currPos += threadNameLength; strncpy(currPos, threadNumberString, threadNumberStringLength); currPos += threadNumberStringLength; } #endif /* _OPENMP */ strncpy(currPos, numberString, numberStringLength); currPos += numberStringLength; strncpy(currPos, extension, 4); currPos += 4; *currPos = 0; free(numberString); #if defined(_OPENMP) if (ADOLC_GLOBAL_TAPE_VARS.inParallelRegion == 1) free(threadNumberString); #endif /* _OPENMP */ return fileName; } /****************************************************************************/ /* Tries to read a local config file containing, e.g., buffer sizes */ /****************************************************************************/ #define ADOLC_LINE_LENGTH 100 void readConfigFile() { FILE *configFile = NULL; char inputLine[ADOLC_LINE_LENGTH + 1]; char *pos1 = NULL, *pos2 = NULL, *pos3 = NULL, *pos4 = NULL, *start = NULL, *end = NULL; int base; long int number = 0; char *path = NULL; int defdirsize = strlen(TAPE_DIR PATHSEPARATOR); tapeBaseNames[0] = strdup( TAPE_DIR PATHSEPARATOR ADOLC_LOCATIONS_NAME); tapeBaseNames[1] = strdup( TAPE_DIR PATHSEPARATOR ADOLC_VALUES_NAME); tapeBaseNames[2] = strdup( TAPE_DIR PATHSEPARATOR ADOLC_OPERATIONS_NAME); tapeBaseNames[3] = strdup( TAPE_DIR PATHSEPARATOR ADOLC_TAYLORS_NAME); ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; ADOLC_GLOBAL_TAPE_VARS.operationBufferSize = OBUFSIZE; ADOLC_GLOBAL_TAPE_VARS.locationBufferSize = LBUFSIZE; ADOLC_GLOBAL_TAPE_VARS.valueBufferSize = VBUFSIZE; ADOLC_GLOBAL_TAPE_VARS.taylorBufferSize = TBUFSIZE; ADOLC_GLOBAL_TAPE_VARS.maxNumberTaylorBuffers = TBUFNUM; if ((configFile = fopen(".adolcrc", "r")) != NULL) { fprintf(DIAG_OUT, "\nFile .adolcrc found! => Try to parse it!\n"); fprintf(DIAG_OUT, "****************************************\n"); while (fgets(inputLine, ADOLC_LINE_LENGTH + 1, configFile) == inputLine) { if (strlen(inputLine) == ADOLC_LINE_LENGTH && inputLine[ADOLC_LINE_LENGTH - 1] != 0xA) { fprintf(DIAG_OUT, "ADOL-C warning: Input line in .adolcrc exceeds" " %d characters!\n", ADOLC_LINE_LENGTH); fprintf(DIAG_OUT, " => Parsing aborted!!\n"); break; } pos1 = strchr(inputLine, '"'); pos2 = NULL; pos3 = NULL; pos4 = NULL; if (pos1 != NULL) { pos2 = strchr(pos1 + 1, '"'); if (pos2 != NULL) { pos3 = strchr(pos2 + 1, '"'); if (pos3 != NULL) pos4 = strchr(pos3 + 1, '"'); } } if (pos4 == NULL) { if (pos1 != NULL) fprintf(DIAG_OUT, "ADOL-C warning: Malformed input line " "in .adolcrc ignored!\n"); } else { if (*(pos3 + 1) == '0' && (*(pos3 + 2) == 'x' || *(pos3 + 2) == 'X')) { start = pos3 + 3; base = 16; } else if (*(pos3 + 1) == '0') { start = pos3 + 2; base = 8; } else { start = pos3 + 1; base = 10; } number = strtol(start, &end, base); if (end == start) { *pos2 = 0; *pos4 = 0; if (strcmp(pos1 + 1, "TAPE_DIR") == 0) { struct stat st; int err; path = pos3 + 1; err = stat(path,&st); if (err == 0 && S_ISDIR(st.st_mode)) { int pathlen, pathseplen, namelen[4]; int i; pathlen=strlen(path); pathseplen=strlen(PATHSEPARATOR); for(i = 0; i < 4; i++) namelen[i] = strlen(tapeBaseNames[i]); clearTapeBaseNames(); for(i = 0; i < 4; i++) { char *currpos; int fnamelen; tapeBaseNames[i] = (char*)calloc(namelen[i] - defdirsize + pathlen + pathseplen + 1, sizeof(char)); currpos = tapeBaseNames[i]; strncpy(currpos,path,pathlen); currpos += pathlen; strncpy(currpos,PATHSEPARATOR,pathseplen); currpos += pathseplen; switch (i) { case 0: fnamelen = strlen(ADOLC_LOCATIONS_NAME); strncpy(currpos,ADOLC_LOCATIONS_NAME,fnamelen); break; case 1: fnamelen = strlen(ADOLC_VALUES_NAME); strncpy(currpos,ADOLC_VALUES_NAME,fnamelen); break; case 2: fnamelen = strlen(ADOLC_OPERATIONS_NAME); strncpy(currpos,ADOLC_OPERATIONS_NAME,fnamelen); break; case 3: fnamelen = strlen(ADOLC_TAYLORS_NAME); strncpy(currpos,ADOLC_TAYLORS_NAME,fnamelen); break; } currpos += fnamelen; *currpos = '\0'; } fprintf(DIAG_OUT, "ADOL-C info: using TAPE_DIR %s for all disk bound tapes\n",path); } else fprintf(DIAG_OUT, "ADOL-C warning: TAPE_DIR %s in .adolcrc is not an existing directory,\n will continue using %s for writing tapes\n", path, TAPE_DIR); } else fprintf(DIAG_OUT, "ADOL-C warning: Unable to parse number in " ".adolcrc!\n"); } else { *pos2 = 0; *pos4 = 0; if (strcmp(pos1 + 1, "OBUFSIZE") == 0) { ADOLC_GLOBAL_TAPE_VARS.operationBufferSize = (locint)number; fprintf(DIAG_OUT, "Found operation buffer size: %u\n", (locint)number); } else if (strcmp(pos1 + 1, "LBUFSIZE") == 0) { ADOLC_GLOBAL_TAPE_VARS.locationBufferSize = (locint)number; fprintf(DIAG_OUT, "Found location buffer size: %u\n", (locint)number); } else if (strcmp(pos1 + 1, "VBUFSIZE") == 0) { ADOLC_GLOBAL_TAPE_VARS.valueBufferSize = (locint)number; fprintf(DIAG_OUT, "Found value buffer size: %u\n", (locint)number); } else if (strcmp(pos1 + 1, "TBUFSIZE") == 0) { ADOLC_GLOBAL_TAPE_VARS.taylorBufferSize = (locint)number; fprintf(DIAG_OUT, "Found taylor buffer size: %u\n", (locint)number); } else if (strcmp(pos1 + 1, "TBUFNUM") == 0) { ADOLC_GLOBAL_TAPE_VARS.maxNumberTaylorBuffers = (int)number; fprintf(DIAG_OUT, "Found maximal number of taylor buffers: " "%d\n", (int)number); } else { fprintf(DIAG_OUT, "ADOL-C warning: Unable to parse " "parameter name in .adolcrc!\n"); } } } } fprintf(DIAG_OUT, "****************************************\n\n"); fclose(configFile); } ADOLC_OPENMP_RESTORE_THREAD_NUMBER; } /****************************************************************************/ /****************************************************************************/ /* VALUE STACK FUNCTIONS */ /****************************************************************************/ /****************************************************************************/ static unsigned int numTBuffersInUse = 0; /* record all existing adoubles on the tape * - intended to be used in start_trace only */ void take_stock() { locint space_left, loc = 0; double *vals; size_t vals_left; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; space_left = get_val_space(); /* remaining space in const. tape buffer */ vals_left = ADOLC_GLOBAL_TAPE_VARS.storeSize; vals = ADOLC_GLOBAL_TAPE_VARS.store; /* if we have adoubles in use */ if (ADOLC_GLOBAL_TAPE_VARS.numLives > 0) { /* fill the current values (real) tape buffer and write it to disk * - do this as long as buffer can be fully filled */ while (space_left < vals_left) { put_op(take_stock_op); ADOLC_PUT_LOCINT(space_left); ADOLC_PUT_LOCINT(loc); put_vals_writeBlock(vals, space_left); vals += space_left; vals_left -= space_left; loc += space_left; space_left = get_val_space(); } /* store the remaining adouble values to the values tape buffer * -> no write to disk necessary */ if (vals_left > 0) { put_op(take_stock_op); ADOLC_PUT_LOCINT(vals_left); ADOLC_PUT_LOCINT(loc); put_vals_notWriteBlock(vals, vals_left); } } ADOLC_CURRENT_TAPE_INFOS.traceFlag = 1; } /****************************************************************************/ /* record all remaining live variables on the value stack tape */ /* - turns off trace_flag */ /* - intended to be used in stop_trace only */ /****************************************************************************/ locint keep_stock() { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; /* if we have adoubles in use */ if (ADOLC_GLOBAL_TAPE_VARS.numLives > 0) { locint loc2 = ADOLC_GLOBAL_TAPE_VARS.storeSize - 1; /* special signal -> all alive adoubles recorded on the end of the * value stack -> special handling at the beginning of reverse */ put_op(death_not); ADOLC_PUT_LOCINT(0); /* lowest loc */ ADOLC_PUT_LOCINT(loc2); /* highest loc */ ADOLC_CURRENT_TAPE_INFOS.numTays_Tape += ADOLC_GLOBAL_TAPE_VARS.storeSize; /* now really do it if keepTaylors ist set */ if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) { do { ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[loc2]); } while (loc2-- > 0); } } ADOLC_CURRENT_TAPE_INFOS.traceFlag = 0; return ADOLC_GLOBAL_TAPE_VARS.storeSize; } /****************************************************************************/ /* Set up statics for writing taylor data */ /****************************************************************************/ void taylor_begin(uint bufferSize, double **Tg, int degreeSave) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.tayBuffer != NULL) { # if defined(ADOLC_DEBUG) fprintf(DIAG_OUT, "\nADOL-C warning: !!! Taylor information for tape %d" " found that will be overwritten !!!\n\n", ADOLC_CURRENT_TAPE_INFOS.tapeID); # endif taylor_close(0); } else { /* check if new buffer is allowed */ if (numTBuffersInUse == ADOLC_GLOBAL_TAPE_VARS.maxNumberTaylorBuffers) fail(ADOLC_TAPING_TO_MANY_TAYLOR_BUFFERS); ++numTBuffersInUse; if (ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.tay_fileName == NULL) ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.tay_fileName = createFileName(ADOLC_CURRENT_TAPE_INFOS.tapeID, TAYLORS_TAPE); } /* initial setups */ ADOLC_CURRENT_TAPE_INFOS.dpp_T = Tg; if (ADOLC_CURRENT_TAPE_INFOS.tayBuffer != NULL) free(ADOLC_CURRENT_TAPE_INFOS.tayBuffer); ADOLC_CURRENT_TAPE_INFOS.tayBuffer = (revreal *) malloc(sizeof(revreal) * bufferSize); if (ADOLC_CURRENT_TAPE_INFOS.tayBuffer == NULL) fail(ADOLC_TAPING_TBUFFER_ALLOCATION_FAILED); ADOLC_CURRENT_TAPE_INFOS.deg_save = degreeSave; if (degreeSave >= 0 ) ADOLC_CURRENT_TAPE_INFOS.keepTaylors = 1; ADOLC_CURRENT_TAPE_INFOS.currTay = ADOLC_CURRENT_TAPE_INFOS.tayBuffer; ADOLC_CURRENT_TAPE_INFOS.lastTayP1 = ADOLC_CURRENT_TAPE_INFOS.currTay + bufferSize; ADOLC_CURRENT_TAPE_INFOS.inUse = 1; ADOLC_CURRENT_TAPE_INFOS.numTays_Tape = 0; } /****************************************************************************/ /* Close the taylor file, reset data. */ /****************************************************************************/ void taylor_close(uint buffer) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (buffer == 0) { /* enforces failure of reverse => retaping */ ADOLC_CURRENT_TAPE_INFOS.deg_save = -1; if (ADOLC_CURRENT_TAPE_INFOS.tay_file != NULL) { fclose(ADOLC_CURRENT_TAPE_INFOS.tay_file); remove(ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.tay_fileName); ADOLC_CURRENT_TAPE_INFOS.tay_file = NULL; } return; } if (ADOLC_CURRENT_TAPE_INFOS.tay_file != NULL) { if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) put_tay_block(ADOLC_CURRENT_TAPE_INFOS.currTay); } else { ADOLC_CURRENT_TAPE_INFOS.numTays_Tape = ADOLC_CURRENT_TAPE_INFOS.currTay - ADOLC_CURRENT_TAPE_INFOS.tayBuffer; } ADOLC_CURRENT_TAPE_INFOS.lastTayBlockInCore = 1; ADOLC_CURRENT_TAPE_INFOS.stats[TAY_STACK_SIZE] = ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; /* keep track of the Ind/Dep counts of the taylor stack */ ADOLC_CURRENT_TAPE_INFOS.tay_numInds = ADOLC_CURRENT_TAPE_INFOS.stats[NUM_INDEPENDENTS]; ADOLC_CURRENT_TAPE_INFOS.tay_numDeps = ADOLC_CURRENT_TAPE_INFOS.stats[NUM_DEPENDENTS]; #if defined(ADOLC_DEBUG) if (ADOLC_CURRENT_TAPE_INFOS.tay_file != NULL) fprintf(DIAG_OUT, "\n ADOL-C debug: Taylor file of length %d bytes " "completed\n", (int)(ADOLC_CURRENT_TAPE_INFOS.numTays_Tape*sizeof(revreal))); else fprintf(DIAG_OUT, "\n ADOL-C debug: Taylor array of length %d bytes " "completed\n", (int)(ADOLC_CURRENT_TAPE_INFOS.numTays_Tape*sizeof(revreal))); #endif } /****************************************************************************/ /* Initializes a reverse sweep. */ /****************************************************************************/ void taylor_back (short tag, int* dep, int* ind, int* degree) { int i, chunks; size_t number, remain, chunkSize; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; /* this should be removed soon since values can be accessed via */ /* ADOLC_CURRENT_TAPE_INFOS directly */ *dep = ADOLC_CURRENT_TAPE_INFOS.tay_numDeps; *ind = ADOLC_CURRENT_TAPE_INFOS.tay_numInds; *degree = ADOLC_CURRENT_TAPE_INFOS.deg_save; if (ADOLC_CURRENT_TAPE_INFOS.tayBuffer == NULL) fail(ADOLC_REVERSE_NO_TAYLOR_STACK); ADOLC_CURRENT_TAPE_INFOS.nextBufferNumber = ADOLC_CURRENT_TAPE_INFOS.numTays_Tape / ADOLC_CURRENT_TAPE_INFOS.stats[TAY_BUFFER_SIZE]; number = ADOLC_CURRENT_TAPE_INFOS.numTays_Tape % ADOLC_CURRENT_TAPE_INFOS.stats[TAY_BUFFER_SIZE]; ADOLC_CURRENT_TAPE_INFOS.currTay = ADOLC_CURRENT_TAPE_INFOS.tayBuffer + number; if (ADOLC_CURRENT_TAPE_INFOS.lastTayBlockInCore != 1) { if ( fseek(ADOLC_CURRENT_TAPE_INFOS.tay_file, sizeof(revreal) * ADOLC_CURRENT_TAPE_INFOS.nextBufferNumber * ADOLC_CURRENT_TAPE_INFOS.stats[TAY_BUFFER_SIZE], SEEK_SET) == -1 ) fail(ADOLC_EVAL_SEEK_VALUE_STACK); chunkSize = ADOLC_IO_CHUNK_SIZE / sizeof(revreal); chunks = number / chunkSize; for (i = 0; i < chunks; ++i) if ((failAdditionalInfo1 = fread(ADOLC_CURRENT_TAPE_INFOS.tayBuffer + i * chunkSize, chunkSize * sizeof(revreal), 1, ADOLC_CURRENT_TAPE_INFOS.tay_file)) != 1) fail(ADOLC_TAPING_FATAL_IO_ERROR); remain = number % chunkSize; if (remain != 0) if ((failAdditionalInfo1 = fread(ADOLC_CURRENT_TAPE_INFOS.tayBuffer + chunks * chunkSize, remain * sizeof(revreal), 1, ADOLC_CURRENT_TAPE_INFOS.tay_file)) != 1) fail(ADOLC_TAPING_FATAL_IO_ERROR); } --ADOLC_CURRENT_TAPE_INFOS.nextBufferNumber; } /****************************************************************************/ /* Writes the block of size depth of taylor coefficients from point loc to */ /* the taylor buffer. If the buffer is filled, then it is written to the */ /* taylor tape. */ /****************************************************************************/ void write_taylor(locint loc, int keep) { revreal *i; double *T; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; T = ADOLC_CURRENT_TAPE_INFOS.dpp_T[loc]; /* write data to buffer and put buffer to disk as long as data remain in * the T-buffer => don't create an empty value stack buffer! */ while (ADOLC_CURRENT_TAPE_INFOS.currTay + keep > ADOLC_CURRENT_TAPE_INFOS.lastTayP1) { for (i = ADOLC_CURRENT_TAPE_INFOS.currTay; i < ADOLC_CURRENT_TAPE_INFOS.lastTayP1; ++i) { *i = (revreal) * T; /* In this assignment the precision will be sacrificed if the type * revreal is defined as float. */ ++T; } keep -= ADOLC_CURRENT_TAPE_INFOS.lastTayP1 - ADOLC_CURRENT_TAPE_INFOS.currTay; put_tay_block(ADOLC_CURRENT_TAPE_INFOS.lastTayP1); } for (i = ADOLC_CURRENT_TAPE_INFOS.currTay; i < ADOLC_CURRENT_TAPE_INFOS.currTay + keep; ++i) { *i = (revreal) * T; /* In this assignment the precision will be sacrificed * if the type revreal is defined as float. */ ++T; } ADOLC_CURRENT_TAPE_INFOS.currTay += keep; } /****************************************************************************/ /* Writes the block of size depth of taylor coefficients from point loc to */ /* the taylor buffer. If the buffer is filled, then it is written to the */ /* taylor tape. */ /*--------------------------------------------------------------------------*/ void write_taylors(locint loc, int keep, int degree, int numDir) { int i, j; double *T; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; T = ADOLC_CURRENT_TAPE_INFOS.dpp_T[loc]; for (j = 0; j < numDir; ++j) { for (i = 0; i < keep; ++i) { if (ADOLC_CURRENT_TAPE_INFOS.currTay == ADOLC_CURRENT_TAPE_INFOS.lastTayP1) put_tay_block(ADOLC_CURRENT_TAPE_INFOS.lastTayP1); *ADOLC_CURRENT_TAPE_INFOS.currTay = (revreal) * T; /* The precision will be sacrificed if the type * revreal is defined as float. */ ++ADOLC_CURRENT_TAPE_INFOS.currTay; ++T; } /* for (i = keep; i < degree; ++i) ++T;*/ if (degree > keep) T += degree - keep; } } /****************************************************************************/ /* Write_scaylors writes # size elements from x to the taylor buffer. */ /****************************************************************************/ void write_scaylors(revreal *x, uint size) { revreal *i; uint j = 0; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; /* write data to buffer and put buffer to disk as long as data remain in * the x-buffer => don't create an empty value stack buffer! */ while (ADOLC_CURRENT_TAPE_INFOS.currTay + size > ADOLC_CURRENT_TAPE_INFOS.lastTayP1) { for (i = ADOLC_CURRENT_TAPE_INFOS.currTay; i < ADOLC_CURRENT_TAPE_INFOS.lastTayP1; ++i) { *i = x[j]; ++j; } size -= ADOLC_CURRENT_TAPE_INFOS.lastTayP1 - ADOLC_CURRENT_TAPE_INFOS.currTay; put_tay_block(ADOLC_CURRENT_TAPE_INFOS.lastTayP1); } for (i = ADOLC_CURRENT_TAPE_INFOS.currTay; i < ADOLC_CURRENT_TAPE_INFOS.tayBuffer + size; ++i) { *ADOLC_CURRENT_TAPE_INFOS.currTay = x[j]; ++j; } ADOLC_CURRENT_TAPE_INFOS.currTay += size; } /****************************************************************************/ /* Writes the value stack buffer onto hard disk. */ /****************************************************************************/ void put_tay_block(revreal *lastTayP1) { int i, chunks; size_t number, remain, chunkSize; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.tay_file == NULL) { ADOLC_CURRENT_TAPE_INFOS.tay_file = fopen(ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.tay_fileName, "w+b"); if (ADOLC_CURRENT_TAPE_INFOS.tay_file == NULL) fail(ADOLC_TAPING_TAYLOR_OPEN_FAILED); } number = lastTayP1 - ADOLC_CURRENT_TAPE_INFOS.tayBuffer; if (number != 0) { chunkSize = ADOLC_IO_CHUNK_SIZE / sizeof(revreal); chunks = number / chunkSize; for (i = 0; i < chunks; ++i) if ((failAdditionalInfo1 = fwrite(ADOLC_CURRENT_TAPE_INFOS.tayBuffer + i * chunkSize, chunkSize * sizeof(revreal), 1, ADOLC_CURRENT_TAPE_INFOS.tay_file) ) != 1) fail(ADOLC_TAPING_FATAL_IO_ERROR); remain = number % chunkSize; if (remain != 0) if ((failAdditionalInfo1 = fwrite(ADOLC_CURRENT_TAPE_INFOS.tayBuffer + chunks * chunkSize, remain * sizeof(revreal), 1, ADOLC_CURRENT_TAPE_INFOS.tay_file) ) != 1) fail(ADOLC_TAPING_FATAL_IO_ERROR); ADOLC_CURRENT_TAPE_INFOS.numTays_Tape += number; } ADOLC_CURRENT_TAPE_INFOS.currTay = ADOLC_CURRENT_TAPE_INFOS.tayBuffer; ADOLC_OPENMP_RESTORE_THREAD_NUMBER; } /****************************************************************************/ /* Puts a block of taylor coefficients from the value stack buffer to the */ /* taylor buffer. --- Higher Order Scalar */ /****************************************************************************/ void get_taylors(locint loc, int degree) { int j; revreal *i; revreal *T; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; T = ADOLC_CURRENT_TAPE_INFOS.rpp_T[loc] + degree; /* As long as all values from the taylor stack buffer will be used copy * them into the taylor buffer and load the next (previous) buffer. */ while (ADOLC_CURRENT_TAPE_INFOS.currTay - degree < ADOLC_CURRENT_TAPE_INFOS.tayBuffer) { for ( i = ADOLC_CURRENT_TAPE_INFOS.currTay - 1; i >= ADOLC_CURRENT_TAPE_INFOS.tayBuffer; --i ) { --T; *T = *i; } degree -= ADOLC_CURRENT_TAPE_INFOS.currTay - ADOLC_CURRENT_TAPE_INFOS.tayBuffer; get_tay_block_r(); } /* Copy the remaining values from the stack into the buffer ... */ for (j = 0; j < degree; ++j) { --ADOLC_CURRENT_TAPE_INFOS.currTay; --T; *T = *ADOLC_CURRENT_TAPE_INFOS.currTay; } } /****************************************************************************/ /* Puts a block of taylor coefficients from the value stack buffer to the */ /* taylor buffer. --- Higher Order Vector */ /****************************************************************************/ void get_taylors_p(locint loc, int degree, int numDir) { int i, j; revreal *T; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; T = ADOLC_CURRENT_TAPE_INFOS.rpp_T[loc] + degree * numDir; /* update the directions except the base point parts */ for (j = 0; j < numDir; ++j) { for (i = 1; i < degree; ++i) { if (ADOLC_CURRENT_TAPE_INFOS.currTay == ADOLC_CURRENT_TAPE_INFOS.tayBuffer) get_tay_block_r(); --ADOLC_CURRENT_TAPE_INFOS.currTay; --T; *T = *ADOLC_CURRENT_TAPE_INFOS.currTay; } --T; /* skip the base point part */ } /* now update the base point parts */ --ADOLC_CURRENT_TAPE_INFOS.currTay; for (i = 0; i < numDir; ++i) { *T = *ADOLC_CURRENT_TAPE_INFOS.currTay; T += degree; } } /****************************************************************************/ /* Gets the next (previous block) of the value stack */ /****************************************************************************/ void get_tay_block_r() { int i, chunks; size_t number, remain, chunkSize; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; ADOLC_CURRENT_TAPE_INFOS.lastTayBlockInCore = 0; number = ADOLC_CURRENT_TAPE_INFOS.stats[TAY_BUFFER_SIZE]; if ( fseek(ADOLC_CURRENT_TAPE_INFOS.tay_file, sizeof(revreal) * ADOLC_CURRENT_TAPE_INFOS.nextBufferNumber * number, SEEK_SET) == -1 ) fail(ADOLC_EVAL_SEEK_VALUE_STACK); chunkSize = ADOLC_IO_CHUNK_SIZE / sizeof(revreal); chunks = number / chunkSize; for (i = 0; i < chunks; ++i) if ((failAdditionalInfo1 = fread(ADOLC_CURRENT_TAPE_INFOS.tayBuffer + i * chunkSize, chunkSize * sizeof(revreal), 1, ADOLC_CURRENT_TAPE_INFOS.tay_file)) != 1) fail(ADOLC_TAPING_FATAL_IO_ERROR); remain = number % chunkSize; if (remain != 0) if ((failAdditionalInfo1 = fread(ADOLC_CURRENT_TAPE_INFOS.tayBuffer + chunks * chunkSize, remain * sizeof(revreal), 1, ADOLC_CURRENT_TAPE_INFOS.tay_file)) != 1) fail(ADOLC_TAPING_FATAL_IO_ERROR); ADOLC_CURRENT_TAPE_INFOS.currTay = ADOLC_CURRENT_TAPE_INFOS.lastTayP1; --ADOLC_CURRENT_TAPE_INFOS.nextBufferNumber; } /****************************************************************************/ /****************************************************************************/ /* NON-VALUE-STACK FUNCTIONS */ /****************************************************************************/ /****************************************************************************/ void initTapeBuffers() { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.opBuffer == NULL) ADOLC_CURRENT_TAPE_INFOS.opBuffer = (unsigned char *) malloc(ADOLC_CURRENT_TAPE_INFOS.stats[OP_BUFFER_SIZE] * sizeof(unsigned char)); if (ADOLC_CURRENT_TAPE_INFOS.locBuffer == NULL) ADOLC_CURRENT_TAPE_INFOS.locBuffer = (locint *) malloc(ADOLC_CURRENT_TAPE_INFOS.stats[LOC_BUFFER_SIZE] * sizeof(locint)); if (ADOLC_CURRENT_TAPE_INFOS.valBuffer == NULL) ADOLC_CURRENT_TAPE_INFOS.valBuffer = (double *) malloc(ADOLC_CURRENT_TAPE_INFOS.stats[VAL_BUFFER_SIZE] * sizeof(double)); if ( ADOLC_CURRENT_TAPE_INFOS.opBuffer == NULL || ADOLC_CURRENT_TAPE_INFOS.locBuffer == NULL || ADOLC_CURRENT_TAPE_INFOS.valBuffer == NULL ) fail(ADOLC_TAPING_BUFFER_ALLOCATION_FAILED); ADOLC_CURRENT_TAPE_INFOS.lastOpP1 = ADOLC_CURRENT_TAPE_INFOS.opBuffer + ADOLC_CURRENT_TAPE_INFOS.stats[OP_BUFFER_SIZE]; ADOLC_CURRENT_TAPE_INFOS.lastLocP1 = ADOLC_CURRENT_TAPE_INFOS.locBuffer + ADOLC_CURRENT_TAPE_INFOS.stats[LOC_BUFFER_SIZE]; ADOLC_CURRENT_TAPE_INFOS.lastValP1 = ADOLC_CURRENT_TAPE_INFOS.valBuffer + ADOLC_CURRENT_TAPE_INFOS.stats[VAL_BUFFER_SIZE]; } /****************************************************************************/ /* start_trace: (part of trace_on) */ /* Initialization for the taping process. Does buffer allocation, sets */ /* files names, and calls appropriate setup routines. */ /****************************************************************************/ void start_trace() { int i, space; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; initTapeBuffers(); ADOLC_CURRENT_TAPE_INFOS.currOp = ADOLC_CURRENT_TAPE_INFOS.opBuffer; ADOLC_CURRENT_TAPE_INFOS.currLoc = ADOLC_CURRENT_TAPE_INFOS.locBuffer; ADOLC_CURRENT_TAPE_INFOS.currVal = ADOLC_CURRENT_TAPE_INFOS.valBuffer; ADOLC_CURRENT_TAPE_INFOS.num_eq_prod = 0; /* Put operation denoting the start_of_the tape */ put_op(start_of_tape); /* Leave space for the stats */ space = STAT_SIZE * sizeof(size_t) + sizeof(ADOLC_ID); if (space > statSpace * sizeof(locint)) fail(ADOLC_MORE_STAT_SPACE_REQUIRED); for (i = 0; i < statSpace; ++i) ADOLC_PUT_LOCINT(0); /* initialize value stack if necessary */ if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) taylor_begin(ADOLC_CURRENT_TAPE_INFOS.stats[TAY_BUFFER_SIZE], NULL, 0); /* mark possible (hard disk) tape creation */ markNewTape(); } /****************************************************************************/ /* Stop Tracing. Clean up, and turn off trace_flag. */ /****************************************************************************/ void stop_trace(int flag) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; put_op(end_of_tape); /* Mark end of tape. */ ADOLC_CURRENT_TAPE_INFOS.stats[NUM_INDEPENDENTS] = ADOLC_CURRENT_TAPE_INFOS.numInds; ADOLC_CURRENT_TAPE_INFOS.stats[NUM_DEPENDENTS] = ADOLC_CURRENT_TAPE_INFOS.numDeps; ADOLC_CURRENT_TAPE_INFOS.stats[NUM_MAX_LIVES] = ADOLC_GLOBAL_TAPE_VARS.storeSize; ADOLC_CURRENT_TAPE_INFOS.stats[NUM_EQ_PROD] = ADOLC_CURRENT_TAPE_INFOS.num_eq_prod; taylor_close(ADOLC_CURRENT_TAPE_INFOS.stats[TAY_BUFFER_SIZE]); /* The taylor stack size base estimation results in a doubled taylor count * if we tape with keep (taylors counted in adouble.cpp/avector.cpp and * "keep_stock" even if not written and a second time when actually * written by "put_tay_block"). Correction follows here. */ if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors != 0 && ADOLC_CURRENT_TAPE_INFOS.tay_file != NULL) { ADOLC_CURRENT_TAPE_INFOS.stats[TAY_STACK_SIZE] /= 2; ADOLC_CURRENT_TAPE_INFOS.numTays_Tape /= 2; } close_tape(flag); /* closes the tape, files up stats, and writes the tape stats to the integer tape */ } /****************************************************************************/ /* Close open tapes, update stats and clean up. */ /****************************************************************************/ void close_tape(int flag) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; /* finish operations tape, close it, update stats */ if (flag != 0 || ADOLC_CURRENT_TAPE_INFOS.op_file != NULL) { if (ADOLC_CURRENT_TAPE_INFOS.currOp != ADOLC_CURRENT_TAPE_INFOS.opBuffer) { put_op_block(ADOLC_CURRENT_TAPE_INFOS.currOp); } if (ADOLC_CURRENT_TAPE_INFOS.op_file != NULL) fclose(ADOLC_CURRENT_TAPE_INFOS.op_file); ADOLC_CURRENT_TAPE_INFOS.op_file = NULL; ADOLC_CURRENT_TAPE_INFOS.stats[OP_FILE_ACCESS] = 1; free(ADOLC_CURRENT_TAPE_INFOS.opBuffer); ADOLC_CURRENT_TAPE_INFOS.opBuffer = NULL; } else { ADOLC_CURRENT_TAPE_INFOS.numOps_Tape = ADOLC_CURRENT_TAPE_INFOS.currOp - ADOLC_CURRENT_TAPE_INFOS.opBuffer; } ADOLC_CURRENT_TAPE_INFOS.stats[NUM_OPERATIONS] = ADOLC_CURRENT_TAPE_INFOS.numOps_Tape; /* finish constants tape, close it, update stats */ if (flag != 0 || ADOLC_CURRENT_TAPE_INFOS.val_file != NULL) { if (ADOLC_CURRENT_TAPE_INFOS.currVal != ADOLC_CURRENT_TAPE_INFOS.valBuffer) { put_val_block(ADOLC_CURRENT_TAPE_INFOS.currVal); } if (ADOLC_CURRENT_TAPE_INFOS.val_file != NULL) fclose(ADOLC_CURRENT_TAPE_INFOS.val_file); ADOLC_CURRENT_TAPE_INFOS.val_file = NULL; ADOLC_CURRENT_TAPE_INFOS.stats[VAL_FILE_ACCESS] = 1; free(ADOLC_CURRENT_TAPE_INFOS.valBuffer); ADOLC_CURRENT_TAPE_INFOS.valBuffer = NULL; } else { ADOLC_CURRENT_TAPE_INFOS.numVals_Tape = ADOLC_CURRENT_TAPE_INFOS.currVal - ADOLC_CURRENT_TAPE_INFOS.valBuffer; } ADOLC_CURRENT_TAPE_INFOS.stats[NUM_VALUES] = ADOLC_CURRENT_TAPE_INFOS.numVals_Tape; /* finish locations tape, update and write tape stats, close tape */ if (flag != 0 || ADOLC_CURRENT_TAPE_INFOS.loc_file != NULL) { if (ADOLC_CURRENT_TAPE_INFOS.currLoc != ADOLC_CURRENT_TAPE_INFOS.locBuffer) { put_loc_block(ADOLC_CURRENT_TAPE_INFOS.currLoc); } ADOLC_CURRENT_TAPE_INFOS.stats[NUM_LOCATIONS] = ADOLC_CURRENT_TAPE_INFOS.numLocs_Tape; ADOLC_CURRENT_TAPE_INFOS.stats[LOC_FILE_ACCESS] = 1; /* write tape stats */ fseek(ADOLC_CURRENT_TAPE_INFOS.loc_file, 0, 0); fwrite(&adolc_id, sizeof(ADOLC_ID), 1, ADOLC_CURRENT_TAPE_INFOS.loc_file); fwrite(ADOLC_CURRENT_TAPE_INFOS.stats, STAT_SIZE * sizeof(size_t), 1, ADOLC_CURRENT_TAPE_INFOS.loc_file); fclose(ADOLC_CURRENT_TAPE_INFOS.loc_file); ADOLC_CURRENT_TAPE_INFOS.loc_file = NULL; free(ADOLC_CURRENT_TAPE_INFOS.locBuffer); ADOLC_CURRENT_TAPE_INFOS.locBuffer = NULL; } else { ADOLC_CURRENT_TAPE_INFOS.numLocs_Tape = ADOLC_CURRENT_TAPE_INFOS.currLoc - ADOLC_CURRENT_TAPE_INFOS.locBuffer; ADOLC_CURRENT_TAPE_INFOS.stats[NUM_LOCATIONS] = ADOLC_CURRENT_TAPE_INFOS.numLocs_Tape; } } /****************************************************************************/ /* Free all resources used by a tape before overwriting the tape. */ /****************************************************************************/ void freeTapeResources(TapeInfos *tapeInfos) { free(tapeInfos->opBuffer); tapeInfos->opBuffer = NULL; free(tapeInfos->locBuffer); tapeInfos->locBuffer = NULL; free(tapeInfos->valBuffer); tapeInfos->valBuffer = NULL; if (tapeInfos->tayBuffer != NULL) { free(tapeInfos->tayBuffer); tapeInfos->tayBuffer = NULL; --numTBuffersInUse; } if (tapeInfos->op_file != NULL) { fclose(tapeInfos->op_file); tapeInfos->op_file = NULL; } if (tapeInfos->loc_file != NULL) { fclose(tapeInfos->loc_file); tapeInfos->loc_file = NULL; } if (tapeInfos->val_file != NULL) { fclose(tapeInfos->val_file); tapeInfos->val_file = NULL; } if (tapeInfos->tay_file != NULL) { fclose(tapeInfos->tay_file); tapeInfos->tay_file = NULL; } } /****************************************************************************/ /* Tapestats: */ /* Returns statistics on the tape tag with following meaning: */ /* tape_stat[0] = # of independent variables. */ /* tape_stat[1] = # of dependent variables. */ /* tape_stat[2] = max # of live variables. */ /* tape_stat[3] = value stack size. */ /* tape_stat[4] = buffer size (# of chars, # of doubles, # of locints) */ /* tape_stat[5] = # of operations. */ /* tape_stat[6] = operation file access flag (1 = file in use, 0 otherwise) */ /* tape_stat[7] = # of saved locations. */ /* tape_stat[8] = location file access flag (1 = file in use, 0 otherwise) */ /* tape_stat[9] = # of saved constant values. */ /* tape_stat[10]= value file access flag (1 = file in use, 0 otherwise) */ /****************************************************************************/ void tapestats(short tag, size_t *tape_stats) { int i; TapeInfos *tapeInfos; /* get the tapeInfos for tag */ tapeInfos = getTapeInfos(tag); /* copy stats to the users field */ for (i = 0; i < STAT_SIZE; ++i) tape_stats[i] = tapeInfos->stats[i]; } /****************************************************************************/ /* An all-in-one tape stats printing routine. */ /****************************************************************************/ void printTapeStats(FILE *stream, short tag) { size_t stats[STAT_SIZE]; tapestats(tag, (size_t *)&stats); fprintf(stream, "\n*** TAPE STATS (tape %d) **********\n", (int)tag); fprintf(stream, "Number of independents: %10zd\n", stats[NUM_INDEPENDENTS]); fprintf(stream, "Number of dependents: %10zd\n", stats[NUM_DEPENDENTS]); fprintf(stream, "\n"); fprintf(stream, "Max # of live adoubles: %10zd\n", stats[NUM_MAX_LIVES]); fprintf(stream, "Taylor stack size: %10zd\n", stats[TAY_STACK_SIZE]); fprintf(stream, "\n"); fprintf(stream, "Number of operations: %10zd\n", stats[NUM_OPERATIONS]); fprintf(stream, "Number of locations: %10zd\n", stats[NUM_LOCATIONS]); fprintf(stream, "Number of values: %10zd\n", stats[NUM_VALUES]); fprintf(stream, "\n"); fprintf(stream, "Operation file written: %10zd\n", stats[OP_FILE_ACCESS]); fprintf(stream, "Location file written: %10zd\n", stats[LOC_FILE_ACCESS]); fprintf(stream, "Value file written: %10zd\n", stats[VAL_FILE_ACCESS]); fprintf(stream, "\n"); fprintf(stream, "Operation buffer size: %10zd\n", stats[OP_BUFFER_SIZE]); fprintf(stream, "Location buffer size: %10zd\n", stats[LOC_BUFFER_SIZE]); fprintf(stream, "Value buffer size: %10zd\n", stats[VAL_BUFFER_SIZE]); fprintf(stream, "Taylor buffer size: %10zd\n", stats[TAY_BUFFER_SIZE]); fprintf(stream, "\n"); fprintf(stream, "Operation type size: %10zd\n", (size_t)sizeof(unsigned char)); fprintf(stream, "Location type size: %10zd\n", (size_t)sizeof(locint)); fprintf(stream, "Value type size: %10zd\n", (size_t)sizeof(double)); fprintf(stream, "Taylor type size: %10zd\n", (size_t)sizeof(revreal)); fprintf(stream, "**********************************\n\n"); } /****************************************************************************/ /* Does the actual reading from the hard disk into the stats buffer */ /****************************************************************************/ void read_tape_stats(TapeInfos *tapeInfos) { FILE *loc_file; int tapeVersion, limitVersion; ADOLC_ID tape_ADOLC_ID; if (tapeInfos->inUse != 0 && tapeInfos->tapingComplete == 0) return; limitVersion = 100 * ADOLC_NEW_TAPE_VERSION + 10 * ADOLC_NEW_TAPE_SUBVERSION + 1 * ADOLC_NEW_TAPE_PATCHLEVEL ; if ((loc_file = fopen(tapeInfos->pTapeInfos.loc_fileName, "rb")) == NULL) fail(ADOLC_INTEGER_TAPE_FOPEN_FAILED); if (fread(&tape_ADOLC_ID, sizeof(ADOLC_ID), 1, loc_file) != 1) fail(ADOLC_INTEGER_TAPE_FREAD_FAILED); if (fread(tapeInfos->stats, STAT_SIZE * sizeof(size_t), 1, loc_file) != 1) fail(ADOLC_INTEGER_TAPE_FREAD_FAILED); failAdditionalInfo1 = tapeInfos->tapeID; tapeVersion = 100 * tape_ADOLC_ID.adolc_ver + 10 * tape_ADOLC_ID.adolc_sub + 1 * tape_ADOLC_ID.adolc_lvl ; if (tapeVersion < limitVersion) fail(ADOLC_TAPE_TO_OLD); if (tape_ADOLC_ID.address_size != adolc_id.address_size) { if (tape_ADOLC_ID.address_size < adolc_id.address_size) fail(ADOLC_WRONG_PLATFORM_64); else fail(ADOLC_WRONG_PLATFORM_32); } if (tape_ADOLC_ID.locint_size != adolc_id.locint_size) { failAdditionalInfo1 = tape_ADOLC_ID.locint_size; failAdditionalInfo2 = adolc_id.locint_size; fail(ADOLC_WRONG_LOCINT_SIZE); } fclose(loc_file); tapeInfos->tapingComplete = 1; } /****************************************************************************/ /* Initialize a forward sweep. Get stats, open tapes, fill buffers, ... */ /****************************************************************************/ void init_for_sweep(short tag) { int i = 0, chunks, numLocsForStats; size_t number, remain, chunkSize; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; /* mark possible (hard disk) tape creation */ markNewTape(); /* make room for tapeInfos and read tape stats if necessary, keep value * stack information */ openTape(tag, ADOLC_FORWARD); initTapeBuffers(); /* init operations */ number = 0; if (ADOLC_CURRENT_TAPE_INFOS.stats[OP_FILE_ACCESS] == 1) { ADOLC_CURRENT_TAPE_INFOS.op_file = fopen(ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.op_fileName, "rb"); /* how much to read ? */ number = MIN_ADOLC(ADOLC_CURRENT_TAPE_INFOS.stats[OP_BUFFER_SIZE], ADOLC_CURRENT_TAPE_INFOS.stats[NUM_OPERATIONS]); if (number != 0) { chunkSize = ADOLC_IO_CHUNK_SIZE / sizeof(unsigned char); chunks = number / chunkSize; for (i = 0; i < chunks; ++i) if (fread(ADOLC_CURRENT_TAPE_INFOS.opBuffer + i * chunkSize, chunkSize * sizeof(unsigned char), 1, ADOLC_CURRENT_TAPE_INFOS.op_file) != 1 ) fail(ADOLC_EVAL_OP_TAPE_READ_FAILED); remain = number % chunkSize; if (remain != 0) if (fread(ADOLC_CURRENT_TAPE_INFOS.opBuffer + chunks * chunkSize, remain * sizeof(unsigned char), 1, ADOLC_CURRENT_TAPE_INFOS.op_file) != 1 ) fail(ADOLC_EVAL_OP_TAPE_READ_FAILED); } /* how much remains ? */ number = ADOLC_CURRENT_TAPE_INFOS.stats[NUM_OPERATIONS] - number; } ADOLC_CURRENT_TAPE_INFOS.numOps_Tape = number; ADOLC_CURRENT_TAPE_INFOS.currOp = ADOLC_CURRENT_TAPE_INFOS.opBuffer; /* init locations */ number = 0; if (ADOLC_CURRENT_TAPE_INFOS.stats[LOC_FILE_ACCESS] == 1) { ADOLC_CURRENT_TAPE_INFOS.loc_file = fopen(ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.loc_fileName, "rb"); /* how much to read ? */ number = MIN_ADOLC(ADOLC_CURRENT_TAPE_INFOS.stats[LOC_BUFFER_SIZE], ADOLC_CURRENT_TAPE_INFOS.stats[NUM_LOCATIONS]); if (number != 0) { chunkSize = ADOLC_IO_CHUNK_SIZE / sizeof(locint); chunks = number / chunkSize; for (i = 0; i < chunks; ++i) if (fread(ADOLC_CURRENT_TAPE_INFOS.locBuffer + i * chunkSize, chunkSize * sizeof(locint), 1, ADOLC_CURRENT_TAPE_INFOS.loc_file) != 1 ) fail(ADOLC_EVAL_LOC_TAPE_READ_FAILED); remain = number % chunkSize; if (remain != 0) if (fread(ADOLC_CURRENT_TAPE_INFOS.locBuffer + chunks * chunkSize, remain * sizeof(locint), 1, ADOLC_CURRENT_TAPE_INFOS.loc_file) != 1 ) fail(ADOLC_EVAL_LOC_TAPE_READ_FAILED); } /* how much remains ? */ number = ADOLC_CURRENT_TAPE_INFOS.stats[NUM_LOCATIONS] - number; } ADOLC_CURRENT_TAPE_INFOS.numLocs_Tape = number; /* skip stats */ numLocsForStats = statSpace; while (numLocsForStats >= ADOLC_CURRENT_TAPE_INFOS.stats[LOC_BUFFER_SIZE]) { get_loc_block_f(); numLocsForStats -= ADOLC_CURRENT_TAPE_INFOS.stats[LOC_BUFFER_SIZE]; } ADOLC_CURRENT_TAPE_INFOS.currLoc = ADOLC_CURRENT_TAPE_INFOS.locBuffer + numLocsForStats; /* init constants */ number = 0; if (ADOLC_CURRENT_TAPE_INFOS.stats[VAL_FILE_ACCESS] == 1) { ADOLC_CURRENT_TAPE_INFOS.val_file = fopen(ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.val_fileName, "rb"); /* how much to read ? */ number = MIN_ADOLC(ADOLC_CURRENT_TAPE_INFOS.stats[VAL_BUFFER_SIZE], ADOLC_CURRENT_TAPE_INFOS.stats[NUM_VALUES]); if (number != 0) { chunkSize = ADOLC_IO_CHUNK_SIZE / sizeof(double); chunks = number / chunkSize; for (i = 0; i < chunks; ++i) if (fread(ADOLC_CURRENT_TAPE_INFOS.valBuffer + i * chunkSize, chunkSize * sizeof(double), 1, ADOLC_CURRENT_TAPE_INFOS.val_file) != 1 ) fail(ADOLC_EVAL_VAL_TAPE_READ_FAILED); remain = number % chunkSize; if (remain != 0) if (fread(ADOLC_CURRENT_TAPE_INFOS.valBuffer + chunks * chunkSize, remain * sizeof(double), 1, ADOLC_CURRENT_TAPE_INFOS.val_file) != 1 ) fail(ADOLC_EVAL_VAL_TAPE_READ_FAILED); } /* how much remains ? */ number = ADOLC_CURRENT_TAPE_INFOS.stats[NUM_VALUES] - number; } ADOLC_CURRENT_TAPE_INFOS.numVals_Tape = number; ADOLC_CURRENT_TAPE_INFOS.currVal = ADOLC_CURRENT_TAPE_INFOS.valBuffer; } /****************************************************************************/ /* Initialize a reverse sweep. Get stats, open tapes, fill buffers, ... */ /****************************************************************************/ void init_rev_sweep(short tag) { int i, chunks; size_t number, remain, chunkSize; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; /* mark possible (hard disk) tape creation */ markNewTape(); /* make room for tapeInfos and read tape stats if necessary, keep value * stack information */ openTape(tag, ADOLC_REVERSE); initTapeBuffers(); /* init operations */ number = ADOLC_CURRENT_TAPE_INFOS.stats[NUM_OPERATIONS]; if (ADOLC_CURRENT_TAPE_INFOS.stats[OP_FILE_ACCESS] == 1) { ADOLC_CURRENT_TAPE_INFOS.op_file = fopen(ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.op_fileName, "rb"); number = (ADOLC_CURRENT_TAPE_INFOS.stats[NUM_OPERATIONS] / ADOLC_CURRENT_TAPE_INFOS.stats[OP_BUFFER_SIZE]) * ADOLC_CURRENT_TAPE_INFOS.stats[OP_BUFFER_SIZE]; fseek(ADOLC_CURRENT_TAPE_INFOS.op_file, number * sizeof(unsigned char), SEEK_SET); number = ADOLC_CURRENT_TAPE_INFOS.stats[NUM_OPERATIONS] % ADOLC_CURRENT_TAPE_INFOS.stats[OP_BUFFER_SIZE] ; if (number != 0) { chunkSize = ADOLC_IO_CHUNK_SIZE / sizeof(unsigned char); chunks = number / chunkSize; for (i = 0; i < chunks; ++i) if (fread(ADOLC_CURRENT_TAPE_INFOS.opBuffer + i * chunkSize, chunkSize * sizeof(unsigned char), 1, ADOLC_CURRENT_TAPE_INFOS.op_file) != 1 ) fail(ADOLC_EVAL_OP_TAPE_READ_FAILED); remain = number % chunkSize; if (remain != 0) if (fread(ADOLC_CURRENT_TAPE_INFOS.opBuffer + chunks * chunkSize, remain * sizeof(unsigned char), 1, ADOLC_CURRENT_TAPE_INFOS.op_file) != 1 ) fail(ADOLC_EVAL_OP_TAPE_READ_FAILED); } } ADOLC_CURRENT_TAPE_INFOS.numOps_Tape = ADOLC_CURRENT_TAPE_INFOS.stats[NUM_OPERATIONS] - number; ADOLC_CURRENT_TAPE_INFOS.currOp = ADOLC_CURRENT_TAPE_INFOS.opBuffer + number; /* init locations */ number = ADOLC_CURRENT_TAPE_INFOS.stats[NUM_LOCATIONS]; if (ADOLC_CURRENT_TAPE_INFOS.stats[LOC_FILE_ACCESS] == 1) { ADOLC_CURRENT_TAPE_INFOS.loc_file = fopen(ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.loc_fileName, "rb"); number = (ADOLC_CURRENT_TAPE_INFOS.stats[NUM_LOCATIONS] / ADOLC_CURRENT_TAPE_INFOS.stats[LOC_BUFFER_SIZE]) * ADOLC_CURRENT_TAPE_INFOS.stats[LOC_BUFFER_SIZE]; fseek(ADOLC_CURRENT_TAPE_INFOS.loc_file, number * sizeof(locint), SEEK_SET); number = ADOLC_CURRENT_TAPE_INFOS.stats[NUM_LOCATIONS] % ADOLC_CURRENT_TAPE_INFOS.stats[LOC_BUFFER_SIZE]; if (number != 0) { chunkSize = ADOLC_IO_CHUNK_SIZE / sizeof(locint); chunks = number / chunkSize; for (i = 0; i < chunks; ++i) if (fread(ADOLC_CURRENT_TAPE_INFOS.locBuffer + i * chunkSize, chunkSize * sizeof(locint), 1, ADOLC_CURRENT_TAPE_INFOS.loc_file) != 1 ) fail(ADOLC_EVAL_LOC_TAPE_READ_FAILED); remain = number % chunkSize; if (remain != 0) if (fread(ADOLC_CURRENT_TAPE_INFOS.locBuffer + chunks * chunkSize, remain * sizeof(locint), 1, ADOLC_CURRENT_TAPE_INFOS.loc_file) != 1 ) fail(ADOLC_EVAL_LOC_TAPE_READ_FAILED); } } ADOLC_CURRENT_TAPE_INFOS.numLocs_Tape = ADOLC_CURRENT_TAPE_INFOS.stats[NUM_LOCATIONS] - number; ADOLC_CURRENT_TAPE_INFOS.currLoc = ADOLC_CURRENT_TAPE_INFOS.locBuffer + number; /* init constants */ number = ADOLC_CURRENT_TAPE_INFOS.stats[NUM_VALUES]; if (ADOLC_CURRENT_TAPE_INFOS.stats[VAL_FILE_ACCESS] == 1) { ADOLC_CURRENT_TAPE_INFOS.val_file = fopen(ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.val_fileName, "rb"); number = (ADOLC_CURRENT_TAPE_INFOS.stats[NUM_VALUES] / ADOLC_CURRENT_TAPE_INFOS.stats[VAL_BUFFER_SIZE]) * ADOLC_CURRENT_TAPE_INFOS.stats[VAL_BUFFER_SIZE]; fseek(ADOLC_CURRENT_TAPE_INFOS.val_file, number * sizeof(double), SEEK_SET); number = ADOLC_CURRENT_TAPE_INFOS.stats[NUM_VALUES] % ADOLC_CURRENT_TAPE_INFOS.stats[VAL_BUFFER_SIZE]; if (number != 0) { chunkSize = ADOLC_IO_CHUNK_SIZE / sizeof(double); chunks = number / chunkSize; for (i = 0; i < chunks; ++i) if (fread(ADOLC_CURRENT_TAPE_INFOS.valBuffer + i * chunkSize, chunkSize * sizeof(double), 1, ADOLC_CURRENT_TAPE_INFOS.val_file) != 1 ) fail(ADOLC_EVAL_VAL_TAPE_READ_FAILED); remain = number % chunkSize; if (remain != 0) if (fread(ADOLC_CURRENT_TAPE_INFOS.valBuffer + chunks * chunkSize, remain * sizeof(double), 1, ADOLC_CURRENT_TAPE_INFOS.val_file) != 1 ) fail(ADOLC_EVAL_VAL_TAPE_READ_FAILED); } } ADOLC_CURRENT_TAPE_INFOS.numVals_Tape = ADOLC_CURRENT_TAPE_INFOS.stats[NUM_VALUES] - number; ADOLC_CURRENT_TAPE_INFOS.currVal = ADOLC_CURRENT_TAPE_INFOS.valBuffer + number; } /****************************************************************************/ /* Finish a forward or reverse sweep. */ /****************************************************************************/ void end_sweep() { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.op_file != NULL) { fclose(ADOLC_CURRENT_TAPE_INFOS.op_file); ADOLC_CURRENT_TAPE_INFOS.op_file = NULL; } if (ADOLC_CURRENT_TAPE_INFOS.loc_file != NULL) { fclose(ADOLC_CURRENT_TAPE_INFOS.loc_file); ADOLC_CURRENT_TAPE_INFOS.loc_file = NULL; } if (ADOLC_CURRENT_TAPE_INFOS.val_file != NULL) { fclose(ADOLC_CURRENT_TAPE_INFOS.val_file); ADOLC_CURRENT_TAPE_INFOS.val_file = NULL; } if (ADOLC_CURRENT_TAPE_INFOS.deg_save > 0) releaseTape(); /* keep value stack */ else releaseTape(); /* no value stack */ } /* --- Operations --- */ /****************************************************************************/ /* Puts an operation into the operation buffer. Ensures that location buffer*/ /* and constants buffer are prepared to take the belonging stuff. */ /****************************************************************************/ void put_op(unsigned char op) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; /* every operation writes <5 locations */ if (ADOLC_CURRENT_TAPE_INFOS.currLoc + 5 > ADOLC_CURRENT_TAPE_INFOS.lastLocP1) { *(ADOLC_CURRENT_TAPE_INFOS.lastLocP1 - 1) = ADOLC_CURRENT_TAPE_INFOS.lastLocP1 - ADOLC_CURRENT_TAPE_INFOS.currLoc; put_loc_block(ADOLC_CURRENT_TAPE_INFOS.lastLocP1); /* every operation writes 1 opcode */ if (ADOLC_CURRENT_TAPE_INFOS.currOp + 1 == ADOLC_CURRENT_TAPE_INFOS.lastOpP1) { *ADOLC_CURRENT_TAPE_INFOS.currOp = end_of_op; put_op_block(ADOLC_CURRENT_TAPE_INFOS.lastOpP1); *ADOLC_CURRENT_TAPE_INFOS.currOp = end_of_op; ++ADOLC_CURRENT_TAPE_INFOS.currOp; } *ADOLC_CURRENT_TAPE_INFOS.currOp = end_of_int; ++ADOLC_CURRENT_TAPE_INFOS.currOp; } /* every operation writes <5 values --- 3 should be sufficient */ if (ADOLC_CURRENT_TAPE_INFOS.currVal + 5 > ADOLC_CURRENT_TAPE_INFOS.lastValP1) { ADOLC_PUT_LOCINT(ADOLC_CURRENT_TAPE_INFOS.lastValP1 - ADOLC_CURRENT_TAPE_INFOS.currVal); put_val_block(ADOLC_CURRENT_TAPE_INFOS.lastValP1); /* every operation writes 1 opcode */ if (ADOLC_CURRENT_TAPE_INFOS.currOp + 1 == ADOLC_CURRENT_TAPE_INFOS.lastOpP1) { *ADOLC_CURRENT_TAPE_INFOS.currOp = end_of_op; put_op_block(ADOLC_CURRENT_TAPE_INFOS.lastOpP1); *ADOLC_CURRENT_TAPE_INFOS.currOp = end_of_op; ++ADOLC_CURRENT_TAPE_INFOS.currOp; } *ADOLC_CURRENT_TAPE_INFOS.currOp = end_of_val; ++ADOLC_CURRENT_TAPE_INFOS.currOp; } /* every operation writes 1 opcode */ if (ADOLC_CURRENT_TAPE_INFOS.currOp + 1 == ADOLC_CURRENT_TAPE_INFOS.lastOpP1) { *ADOLC_CURRENT_TAPE_INFOS.currOp = end_of_op; put_op_block(ADOLC_CURRENT_TAPE_INFOS.lastOpP1); *ADOLC_CURRENT_TAPE_INFOS.currOp = end_of_op; ++ADOLC_CURRENT_TAPE_INFOS.currOp; } *ADOLC_CURRENT_TAPE_INFOS.currOp = op; ++ADOLC_CURRENT_TAPE_INFOS.currOp; } /****************************************************************************/ /* Writes a block of operations onto hard disk and handles file creation, */ /* removal, ... */ /****************************************************************************/ void put_op_block(unsigned char *lastOpP1) { size_t i, chunks; size_t number, remain, chunkSize; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.op_file == NULL) { ADOLC_CURRENT_TAPE_INFOS.op_file = fopen(ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.op_fileName, "rb"); if (ADOLC_CURRENT_TAPE_INFOS.op_file != NULL) { #if defined(ADOLC_DEBUG) fprintf(DIAG_OUT, "ADOL-C debug: Old tapefile %s gets removed!\n", ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.op_fileName); #endif fclose(ADOLC_CURRENT_TAPE_INFOS.op_file); ADOLC_CURRENT_TAPE_INFOS.op_file = NULL; if (remove(ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.op_fileName)) fprintf(DIAG_OUT, "ADOL-C warning: " "Unable to remove old tapefile\n"); ADOLC_CURRENT_TAPE_INFOS.op_file = fopen(ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.op_fileName, "wb"); } else { ADOLC_CURRENT_TAPE_INFOS.op_file = fopen(ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.op_fileName, "wb"); } } number = lastOpP1 - ADOLC_CURRENT_TAPE_INFOS.opBuffer; chunkSize = ADOLC_IO_CHUNK_SIZE / sizeof(unsigned char); chunks = number / chunkSize; for (i = 0; i < chunks; ++i) if ((failAdditionalInfo1 = fwrite(ADOLC_CURRENT_TAPE_INFOS.opBuffer + i * chunkSize, chunkSize * sizeof(unsigned char), 1, ADOLC_CURRENT_TAPE_INFOS.op_file) ) != 1 ) fail(ADOLC_TAPING_FATAL_IO_ERROR); remain = number % chunkSize; if (remain != 0) if ((failAdditionalInfo1 = fwrite(ADOLC_CURRENT_TAPE_INFOS.opBuffer + chunks * chunkSize, remain * sizeof(unsigned char), 1, ADOLC_CURRENT_TAPE_INFOS.op_file) ) != 1 ) fail(ADOLC_TAPING_FATAL_IO_ERROR); ADOLC_CURRENT_TAPE_INFOS.numOps_Tape += number; ADOLC_CURRENT_TAPE_INFOS.currOp = ADOLC_CURRENT_TAPE_INFOS.opBuffer; ADOLC_OPENMP_RESTORE_THREAD_NUMBER; } /****************************************************************************/ /* Reads the next operations block into the internal buffer. */ /****************************************************************************/ void get_op_block_f() { size_t i, chunks; size_t number, remain, chunkSize; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; number = MIN_ADOLC(ADOLC_CURRENT_TAPE_INFOS.stats[OP_BUFFER_SIZE], ADOLC_CURRENT_TAPE_INFOS.numOps_Tape); chunkSize = ADOLC_IO_CHUNK_SIZE / sizeof(unsigned char); chunks = number / chunkSize; for (i = 0; i < chunks; ++i) if (fread(ADOLC_CURRENT_TAPE_INFOS.opBuffer + i * chunkSize, chunkSize * sizeof(unsigned char), 1, ADOLC_CURRENT_TAPE_INFOS.op_file) != 1) fail(ADOLC_EVAL_OP_TAPE_READ_FAILED); remain = number % chunkSize; if (remain != 0) if (fread(ADOLC_CURRENT_TAPE_INFOS.opBuffer + chunks * chunkSize, remain * sizeof(unsigned char), 1, ADOLC_CURRENT_TAPE_INFOS.op_file) != 1) fail(ADOLC_EVAL_OP_TAPE_READ_FAILED); ADOLC_CURRENT_TAPE_INFOS.numOps_Tape -= remain; ADOLC_CURRENT_TAPE_INFOS.currOp = ADOLC_CURRENT_TAPE_INFOS.opBuffer; } /****************************************************************************/ /* Reads the previous block of operations into the internal buffer. */ /****************************************************************************/ void get_op_block_r() { size_t i, chunks; size_t number, remain, chunkSize; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; number = ADOLC_CURRENT_TAPE_INFOS.stats[OP_BUFFER_SIZE]; fseek(ADOLC_CURRENT_TAPE_INFOS.op_file, sizeof(unsigned char) * (ADOLC_CURRENT_TAPE_INFOS.numOps_Tape - number), SEEK_SET); chunkSize = ADOLC_IO_CHUNK_SIZE / sizeof(unsigned char); chunks = number / chunkSize; for (i = 0; i < chunks; ++i) if (fread(ADOLC_CURRENT_TAPE_INFOS.opBuffer + i * chunkSize, chunkSize * sizeof(unsigned char), 1, ADOLC_CURRENT_TAPE_INFOS.op_file) != 1) fail(ADOLC_EVAL_OP_TAPE_READ_FAILED); remain = number % chunkSize; if (remain != 0) if (fread(ADOLC_CURRENT_TAPE_INFOS.opBuffer + chunks * chunkSize, remain * sizeof(unsigned char), 1, ADOLC_CURRENT_TAPE_INFOS.op_file) != 1) fail(ADOLC_EVAL_OP_TAPE_READ_FAILED); ADOLC_CURRENT_TAPE_INFOS.numOps_Tape -= number; ADOLC_CURRENT_TAPE_INFOS.currOp = ADOLC_CURRENT_TAPE_INFOS.opBuffer + number; } /* --- Locations --- */ /****************************************************************************/ /* Writes a block of locations onto hard disk and handles file creation, */ /* removal, ... */ /****************************************************************************/ void put_loc_block(locint *lastLocP1) { size_t i, chunks; size_t number, remain, chunkSize; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.loc_file == NULL) { ADOLC_CURRENT_TAPE_INFOS.loc_file = fopen(ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.loc_fileName, "rb"); if (ADOLC_CURRENT_TAPE_INFOS.loc_file != NULL) { #if defined(ADOLC_DEBUG) fprintf(DIAG_OUT, "ADOL-C debug: Old tapefile %s gets removed!\n", ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.loc_fileName); #endif fclose(ADOLC_CURRENT_TAPE_INFOS.loc_file); ADOLC_CURRENT_TAPE_INFOS.loc_file = NULL; if (remove(ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.loc_fileName)) fprintf(DIAG_OUT, "ADOL-C warning: " "Unable to remove old tapefile!\n"); ADOLC_CURRENT_TAPE_INFOS.loc_file = fopen(ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.loc_fileName, "wb"); } else { ADOLC_CURRENT_TAPE_INFOS.loc_file = fopen(ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.loc_fileName, "wb"); } } number = lastLocP1 - ADOLC_CURRENT_TAPE_INFOS.locBuffer; chunkSize = ADOLC_IO_CHUNK_SIZE / sizeof(locint); chunks = number / chunkSize; for (i = 0; i < chunks; ++i) if ((failAdditionalInfo1 = fwrite(ADOLC_CURRENT_TAPE_INFOS.locBuffer + i * chunkSize, chunkSize * sizeof(locint), 1, ADOLC_CURRENT_TAPE_INFOS.loc_file) ) != 1) fail(ADOLC_TAPING_FATAL_IO_ERROR); remain = number % chunkSize; if (remain != 0) if ((failAdditionalInfo1 = fwrite(ADOLC_CURRENT_TAPE_INFOS.locBuffer + chunks * chunkSize, remain * sizeof(locint), 1, ADOLC_CURRENT_TAPE_INFOS.loc_file) ) != 1) fail(ADOLC_TAPING_FATAL_IO_ERROR); ADOLC_CURRENT_TAPE_INFOS.numLocs_Tape += number; ADOLC_CURRENT_TAPE_INFOS.currLoc = ADOLC_CURRENT_TAPE_INFOS.locBuffer; ADOLC_OPENMP_RESTORE_THREAD_NUMBER; } /****************************************************************************/ /* Reads the next block of locations into the internal buffer. */ /****************************************************************************/ void get_loc_block_f() { size_t i, chunks; size_t number, remain, chunkSize; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; number = MIN_ADOLC(ADOLC_CURRENT_TAPE_INFOS.stats[LOC_BUFFER_SIZE], ADOLC_CURRENT_TAPE_INFOS.numLocs_Tape); chunkSize = ADOLC_IO_CHUNK_SIZE / sizeof (locint); chunks = number / chunkSize; for (i = 0; i < chunks; ++i) if (fread(ADOLC_CURRENT_TAPE_INFOS.locBuffer + i * chunkSize, chunkSize * sizeof(locint), 1, ADOLC_CURRENT_TAPE_INFOS.loc_file) != 1) fail(ADOLC_EVAL_LOC_TAPE_READ_FAILED); remain = number % chunkSize; if (remain != 0) if (fread(ADOLC_CURRENT_TAPE_INFOS.locBuffer + chunks * chunkSize, remain * sizeof(locint), 1, ADOLC_CURRENT_TAPE_INFOS.loc_file) != 1) fail(ADOLC_EVAL_LOC_TAPE_READ_FAILED); ADOLC_CURRENT_TAPE_INFOS.numLocs_Tape -= number; ADOLC_CURRENT_TAPE_INFOS.currLoc = ADOLC_CURRENT_TAPE_INFOS.locBuffer; } /****************************************************************************/ /* Reads the previous block of locations into the internal buffer. */ /****************************************************************************/ void get_loc_block_r() { size_t i, chunks; size_t number, remain, chunkSize; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; number = ADOLC_CURRENT_TAPE_INFOS.stats[LOC_BUFFER_SIZE]; fseek(ADOLC_CURRENT_TAPE_INFOS.loc_file, sizeof(locint) * (ADOLC_CURRENT_TAPE_INFOS.numLocs_Tape - number), SEEK_SET); chunkSize = ADOLC_IO_CHUNK_SIZE / sizeof(locint); chunks = number / chunkSize; for (i = 0; i < chunks; ++i) if (fread(ADOLC_CURRENT_TAPE_INFOS.locBuffer + i * chunkSize, chunkSize * sizeof(locint), 1, ADOLC_CURRENT_TAPE_INFOS.loc_file) != 1) fail(ADOLC_EVAL_LOC_TAPE_READ_FAILED); remain = number % chunkSize; if (remain != 0) if (fread(ADOLC_CURRENT_TAPE_INFOS.locBuffer + chunks * chunkSize, remain * sizeof(locint), 1, ADOLC_CURRENT_TAPE_INFOS.loc_file) != 1) fail(ADOLC_EVAL_LOC_TAPE_READ_FAILED); ADOLC_CURRENT_TAPE_INFOS.numLocs_Tape -= ADOLC_CURRENT_TAPE_INFOS.stats[LOC_BUFFER_SIZE]; ADOLC_CURRENT_TAPE_INFOS.currLoc = ADOLC_CURRENT_TAPE_INFOS.lastLocP1 - *(ADOLC_CURRENT_TAPE_INFOS.lastLocP1 - 1); } /* --- Values (Constants -- Real) --- */ /****************************************************************************/ /* Writes a block of constants (real) onto hard disk and handles file */ /* creation, removal, ... */ /****************************************************************************/ void put_vals_writeBlock(double *vals, locint numVals) { int i; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; for (i = 0; i < numVals; ++i) { *ADOLC_CURRENT_TAPE_INFOS.currVal = vals[i]; ++ADOLC_CURRENT_TAPE_INFOS.currVal; } ADOLC_PUT_LOCINT(ADOLC_CURRENT_TAPE_INFOS.lastValP1 - ADOLC_CURRENT_TAPE_INFOS.currVal); put_val_block(ADOLC_CURRENT_TAPE_INFOS.lastValP1); /* every operation writes 1 opcode */ if (ADOLC_CURRENT_TAPE_INFOS.currOp + 1 == ADOLC_CURRENT_TAPE_INFOS.lastOpP1) { *ADOLC_CURRENT_TAPE_INFOS.currOp = end_of_op; put_op_block(ADOLC_CURRENT_TAPE_INFOS.lastOpP1); *ADOLC_CURRENT_TAPE_INFOS.currOp = end_of_op; ++ADOLC_CURRENT_TAPE_INFOS.currOp; } *ADOLC_CURRENT_TAPE_INFOS.currOp = end_of_val; ++ADOLC_CURRENT_TAPE_INFOS.currOp; } /****************************************************************************/ /* Write some constants to the buffer without disk access */ /****************************************************************************/ void put_vals_notWriteBlock(double *vals, locint numVals) { int i; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; for (i = 0; i < numVals; ++i) { *ADOLC_CURRENT_TAPE_INFOS.currVal = vals[i]; ++ADOLC_CURRENT_TAPE_INFOS.currVal; } } /****************************************************************************/ /* Writes a block of constants (real) onto tape and handles file creation */ /* removal, ... */ /****************************************************************************/ void put_val_block(double *lastValP1) { size_t i, chunks; size_t number, remain, chunkSize; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.val_file == NULL) { ADOLC_CURRENT_TAPE_INFOS.val_file = fopen(ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.val_fileName, "rb"); if (ADOLC_CURRENT_TAPE_INFOS.val_file != NULL) { #if defined(ADOLC_DEBUG) fprintf(DIAG_OUT, "ADOL-C debug: Old tapefile %s gets removed!\n", ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.val_fileName); #endif fclose(ADOLC_CURRENT_TAPE_INFOS.val_file); ADOLC_CURRENT_TAPE_INFOS.val_file = NULL; if (remove(ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.val_fileName)) fprintf(DIAG_OUT, "ADOL-C warning: " "Unable to remove old tapefile\n"); ADOLC_CURRENT_TAPE_INFOS.val_file = fopen(ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.val_fileName, "wb"); } else { ADOLC_CURRENT_TAPE_INFOS.val_file = fopen(ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.val_fileName, "wb"); } } number = lastValP1 - ADOLC_CURRENT_TAPE_INFOS.valBuffer; chunkSize = ADOLC_IO_CHUNK_SIZE / sizeof(double); chunks = number / chunkSize; for (i = 0; i < chunks; ++i) if ((failAdditionalInfo1 = fwrite(ADOLC_CURRENT_TAPE_INFOS.valBuffer + i * chunkSize, chunkSize * sizeof(double), 1, ADOLC_CURRENT_TAPE_INFOS.val_file) ) != 1) fail(ADOLC_TAPING_FATAL_IO_ERROR); remain = number % chunkSize; if (remain != 0) if ((failAdditionalInfo1 = fwrite(ADOLC_CURRENT_TAPE_INFOS.valBuffer + chunks * chunkSize, remain * sizeof(double), 1, ADOLC_CURRENT_TAPE_INFOS.val_file) ) != 1) fail(ADOLC_TAPING_FATAL_IO_ERROR); ADOLC_CURRENT_TAPE_INFOS.numVals_Tape += number; ADOLC_CURRENT_TAPE_INFOS.currVal = ADOLC_CURRENT_TAPE_INFOS.valBuffer; ADOLC_OPENMP_RESTORE_THREAD_NUMBER; } /****************************************************************************/ /* Reads the next block of constants into the internal buffer. */ /****************************************************************************/ void get_val_block_f() { size_t i, chunks; size_t number, remain, chunkSize; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; number = MIN_ADOLC(ADOLC_CURRENT_TAPE_INFOS.stats[VAL_BUFFER_SIZE], ADOLC_CURRENT_TAPE_INFOS.numVals_Tape); chunkSize = ADOLC_IO_CHUNK_SIZE / sizeof (double); chunks = number / chunkSize; for (i = 0; i < chunks; ++i) if (fread(ADOLC_CURRENT_TAPE_INFOS.valBuffer + i * chunkSize, chunkSize * sizeof(double), 1, ADOLC_CURRENT_TAPE_INFOS.val_file) != 1) fail(ADOLC_EVAL_VAL_TAPE_READ_FAILED); remain = number % chunkSize; if (remain != 0) if (fread(ADOLC_CURRENT_TAPE_INFOS.valBuffer + chunks * chunkSize, remain * sizeof(double), 1, ADOLC_CURRENT_TAPE_INFOS.val_file) != 1) fail(ADOLC_EVAL_VAL_TAPE_READ_FAILED); ADOLC_CURRENT_TAPE_INFOS.numVals_Tape -= number; ADOLC_CURRENT_TAPE_INFOS.currVal = ADOLC_CURRENT_TAPE_INFOS.valBuffer; /* get_locint_f(); value used in reverse only */ ++ADOLC_CURRENT_TAPE_INFOS.currLoc; } /****************************************************************************/ /* Reads the previous block of values into the internal buffer. */ /****************************************************************************/ void get_val_block_r() { size_t i, chunks; size_t number, remain, chunkSize; locint temp; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; number = ADOLC_CURRENT_TAPE_INFOS.stats[VAL_BUFFER_SIZE]; fseek(ADOLC_CURRENT_TAPE_INFOS.val_file, sizeof(double) * (ADOLC_CURRENT_TAPE_INFOS.numVals_Tape - number), SEEK_SET); chunkSize = ADOLC_IO_CHUNK_SIZE / sizeof(double); chunks = number / chunkSize; for (i = 0; i < chunks; ++i) if (fread(ADOLC_CURRENT_TAPE_INFOS.valBuffer + i * chunkSize, chunkSize * sizeof(double), 1, ADOLC_CURRENT_TAPE_INFOS.val_file) != 1) fail(ADOLC_EVAL_VAL_TAPE_READ_FAILED); remain = number % chunkSize; if (remain != 0) if (fread(ADOLC_CURRENT_TAPE_INFOS.valBuffer + chunks * chunkSize, remain * sizeof(double), 1, ADOLC_CURRENT_TAPE_INFOS.val_file) != 1) fail(ADOLC_EVAL_VAL_TAPE_READ_FAILED); ADOLC_CURRENT_TAPE_INFOS.numVals_Tape -= number; --ADOLC_CURRENT_TAPE_INFOS.currLoc; temp = *ADOLC_CURRENT_TAPE_INFOS.currLoc; ADOLC_CURRENT_TAPE_INFOS.currVal = ADOLC_CURRENT_TAPE_INFOS.lastValP1 - temp; } /****************************************************************************/ /* Returns the number of free constants in the real tape. Ensures that it */ /* is at least 5. */ /****************************************************************************/ locint get_val_space(void) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.lastValP1 - 5 < ADOLC_CURRENT_TAPE_INFOS.currVal) { ADOLC_PUT_LOCINT(ADOLC_CURRENT_TAPE_INFOS.lastValP1 - ADOLC_CURRENT_TAPE_INFOS.currVal); put_val_block(ADOLC_CURRENT_TAPE_INFOS.lastValP1); /* every operation writes 1 opcode */ if (ADOLC_CURRENT_TAPE_INFOS.currOp + 1 == ADOLC_CURRENT_TAPE_INFOS.lastOpP1) { *ADOLC_CURRENT_TAPE_INFOS.currOp = end_of_op; put_op_block(ADOLC_CURRENT_TAPE_INFOS.lastOpP1); *ADOLC_CURRENT_TAPE_INFOS.currOp = end_of_op; ++ADOLC_CURRENT_TAPE_INFOS.currOp; } *ADOLC_CURRENT_TAPE_INFOS.currOp = end_of_val; ++ADOLC_CURRENT_TAPE_INFOS.currOp; } return (ADOLC_CURRENT_TAPE_INFOS.lastValP1 - ADOLC_CURRENT_TAPE_INFOS.currVal); } /****************************************************************************/ /* Returns a pointer to the first element of a values vector and skips the */ /* vector. -- Forward Mode -- */ /****************************************************************************/ double *get_val_v_f(locint size) { double *temp; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; temp = ADOLC_CURRENT_TAPE_INFOS.currVal; ADOLC_CURRENT_TAPE_INFOS.currVal += size; return temp; } /****************************************************************************/ /* Returns a pointer to the first element of a values vector and skips the */ /* vector. -- Reverse Mode -- */ /****************************************************************************/ double *get_val_v_r(locint size) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; ADOLC_CURRENT_TAPE_INFOS.currVal -= size; return ADOLC_CURRENT_TAPE_INFOS.currVal; } /* --- Updates / Corrections --- */ /****************************************************************************/ /* Not sure what's going on here! -> vector class ? --- kowarz */ /****************************************************************************/ void reset_val_r(void) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.currVal == ADOLC_CURRENT_TAPE_INFOS.valBuffer) get_val_block_r(); } /****************************************************************************/ /* Update locations tape to remove assignments involving temp. variables. */ /* e.g. t = a + b ; y = t => y = a + b */ /****************************************************************************/ int upd_resloc(locint temp, locint lhs) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.currLoc - ADOLC_CURRENT_TAPE_INFOS.locBuffer < 1) return 0; if (temp == *(ADOLC_CURRENT_TAPE_INFOS.currLoc - 1)) { *(ADOLC_CURRENT_TAPE_INFOS.currLoc - 1) = lhs; return 1; } return 0; } /****************************************************************************/ /* Update locations and operations tape to remove special operations inv. */ /* temporary variables. e.g. t = a * b ; y += t => y += a * b */ /****************************************************************************/ int upd_resloc_inc_prod(locint temp, locint newlhs, unsigned char newop) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.currLoc - ADOLC_CURRENT_TAPE_INFOS.locBuffer < 3) return 0; if (ADOLC_CURRENT_TAPE_INFOS.currOp - ADOLC_CURRENT_TAPE_INFOS.opBuffer < 1) return 0; if (temp == *(ADOLC_CURRENT_TAPE_INFOS.currLoc - 1) && mult_a_a == *(ADOLC_CURRENT_TAPE_INFOS.currOp - 1) && /* skipping recursive case */ newlhs != *(ADOLC_CURRENT_TAPE_INFOS.currLoc - 2) && newlhs != *(ADOLC_CURRENT_TAPE_INFOS.currLoc - 3) ) { *(ADOLC_CURRENT_TAPE_INFOS.currLoc - 1) = newlhs; *(ADOLC_CURRENT_TAPE_INFOS.currOp - 1) = newop; return 1; } return 0; } void enableBranchSwitchWarnings() { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; ADOLC_GLOBAL_TAPE_VARS.branchSwitchWarning = 1; } void disableBranchSwitchWarnings() { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; ADOLC_GLOBAL_TAPE_VARS.branchSwitchWarning = 0; } /****************************************************************************/ /* UTILs */ /****************************************************************************/ double make_nan() { double a, b; #ifdef inf_num a = non_num; b = non_den; #endif return a / b; } double make_inf() { double a, b; #ifdef inf_num a = inf_num; b = inf_den; #endif return a / b; } /****************************************************************************/ /* DEBUG FUNCTIONS */ #if defined(ADOLC_HARDDEBUG) /*--------------------------------------------------------------------------*/ unsigned char get_op_f() { unsigned char temp; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; temp = *ADOLC_CURRENT_TAPE_INFOS.currOp; ++ADOLC_CURRENT_TAPE_INFOS.currOp; fprintf(DIAG_OUT, "f_op: %i\n", temp - '\0'); /* why -'\0' ??? kowarz */ return temp; } /*--------------------------------------------------------------------------*/ unsigned char get_op_r() { unsigned char temp; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; --ADOLC_CURRENT_TAPE_INFOS.currOp; temp = *ADOLC_CURRENT_TAPE_INFOS.currOp; fprintf(DIAG_OUT, "r_op: %i\n", temp - '\0'); return temp; } /*--------------------------------------------------------------------------*/ locint get_locint_f() { locint temp; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; temp = *ADOLC_CURRENT_TAPE_INFOS.currLoc; ++ADOLC_CURRENT_TAPE_INFOS.currLoc; fprintf(DIAG_OUT, "f_loc: %i\n", temp); return temp; } /*--------------------------------------------------------------------------*/ locint get_locint_r() { unsigned char temp; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; --ADOLC_CURRENT_TAPE_INFOS.currLoc; temp = *ADOLC_CURRENT_TAPE_INFOS.currLoc; fprintf(DIAG_OUT, "r_loc: %i\n", temp); return temp; } /*--------------------------------------------------------------------------*/ double get_val_f() { double temp; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; temp = *ADOLC_CURRENT_TAPE_INFOS.currVal; ++ADOLC_CURRENT_TAPE_INFOS.currVal; fprintf(DIAG_OUT, "f_val: %e\n", temp); return temp; } /*--------------------------------------------------------------------------*/ double get_val_r() { double temp; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; --ADOLC_CURRENT_TAPE_INFOS.currVal; temp = *ADOLC_CURRENT_TAPE_INFOS.currVal; fprintf(DIAG_OUT, "r_val: %e\n", temp); return temp; } #endif ADOL-C-2.4.1/ADOL-C/src/ho_rev.c0000644000076600007660000026420512062606020014212 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: ho_rev.c Revision: $Id: ho_rev.c 376 2012-12-14 11:22:56Z kulshres $ Contents: Contains the routines : hos_reverse (higher-order-scalar reverse mode): define _HOS_ hos_ov_reverse (higher-order-scalar reverse mode on vectors): define _HOS_OV_ hov_reverse (higher-order-vector reverse mode): define _HOV_ Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel, Kshitij Kulshreshtha This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ /***************************************************************************** There are four basic versions of the procedure `reverse', which are optimized for the cases of scalar or vector reverse sweeps with first or higher derivatives, respectively. In the calling sequence this distinction is apparent from the type of the parameters `lagrange' and `results'. The former may be left out and the integer parameters `depen', `indep', `degre', and `nrows' must be set or default according to the following matrix of calling cases. no lagrange double* lagrange double** lagrange double* gradient of scalar weight vector times infeasible results valued function Jacobian product combination ( depen = 1 , ( depen > 0 , degre = 0 , degre = 0 , ------ nrows = 1 ) nrows = 1 ) double** Jacobian of vector weight vector times weight matrix results valued function Taylor-Jacobians times Jacobian ( 0 < depen ( depen > 0 , ( depen > 0 , = nrows , degre > 0 , degre = 0 , degre = 0 ) nrows = 1 ) nrows > 0 ) double*** full family of ------------ weigth matrix x results Taylor-Jacobians ------------ Taylor Jacobians *****************************************************************************/ /****************************************************************************/ /* MACROS */ #undef _ADOLC_VECTOR_ #undef _HIGHER_ORDER_ /*--------------------------------------------------------------------------*/ #ifdef _HOS_ #define GENERATED_FILENAME "hos_reverse" #define _HIGHER_ORDER_ #define RESULTS(l,indexi,k) results[indexi][k] #define LAGRANGE(l,indexd,k) lagrange[indexd][k] #define HOV_INC(T,degree) {} #define HOS_OV_INC(T,degree) {} #define GET_TAYL(loc,depth,p) \ { \ UPDATE_TAYLORREAD(depth) \ get_taylors(loc,depth); \ } /*--------------------------------------------------------------------------*/ #elif _HOS_OV_ #define GENERATED_FILENAME "hos_ov_reverse" #define _HIGHER_ORDER_ #define RESULTS(l,indexi,k) results[l][indexi][k] #define LAGRANGE(l,indexd,k) lagrange[indexd][k] #define HOV_INC(T,degree) T += degree; #define HOS_OV_INC(T,degree) T += degree; #define GET_TAYL(loc,depth,p) \ { \ UPDATE_TAYLORREAD(depth * p) \ get_taylors_p(loc,depth,p); \ } /*--------------------------------------------------------------------------*/ #elif _HOV_ #define GENERATED_FILENAME "hov_reverse" #define _ADOLC_VECTOR_ #define _HIGHER_ORDER_ #define RESULTS(l,indexi,k) results[l][indexi][k] #define LAGRANGE(l,indexd,k) lagrange[l][indexd][k] #define IF_HOV_ #define ENDIF_HOV_ #define HOV_INC(T,degree) T += degree; #define HOS_OV_INC(T,degree) #define GET_TAYL(loc,depth,p) \ { \ UPDATE_TAYLORREAD(depth) \ get_taylors(loc,depth); \ } #else #error Error ! Define [_HOS_ | _HOS_OV_ | _HOV_] #endif /*--------------------------------------------------------------------------*/ /* access to variables */ #ifdef _FOS_ /* why?, not in fo_rev.c ? */ #define ARES *Ares #define AARG *Aarg #define AARG1 *Aarg1 #define AARG2 *Aarg2 #define AQO *Aqo #define ARES_INC *Ares #define AARG_INC *Aarg #define AARG1_INC *Aarg1 #define AARG2_INC *Aarg2 #define AQO_INC *Aqo #define ARES_INC_O Ares #define AARG_INC_O Aarg #define AARG1_INC_O Aarg1 #define AARG2_INC_O Aarg2 #define AQO_INC_O Aqo #define ASSIGN_A(a,b) a = &b; #define HOS_OV_ASSIGN_A(Aqo, rp_Atemp) #define FOR_0_LE_l_LT_q l = 0; #elif _HOS_OV_ #define ARES *Ares #define AARG *Aarg #define AARG1 *Aarg1 #define AARG2 *Aarg2 #define AQO *Aqo #define ARES_INC *Ares++ #define AARG_INC *Aarg++ #define AARG1_INC *Aarg1++ #define AARG2_INC *Aarg2++ #define AQO_INC *Aqo++ #define ARES_INC_O Ares++ #define AARG_INC_O Aarg++ #define AARG1_INC_O Aarg1++ #define AARG2_INC_O Aarg2++ #define AQO_INC_O Aqo++ #define ASSIGN_A(a,b) a = b; #define HOS_OV_ASSIGN_A(a, b) a = b; #define FOR_0_LE_l_LT_q for(l=0;l=0; l--) /* why ? not used here */ #elif _HOS_OV_ #define FOR_0_LE_l_LT_p for (l=0; l=0; i--) #else #define FOR_0_LE_i_LT_k #define FOR_k_GT_i_GE_0 #endif #ifdef _HOV_ #define FOR_0_LE_l_LT_pk1 for (l=0; l #include #include "oplate.h" #include "taping_p.h" #include #include #if defined(ADOLC_DEBUG) #include #endif /* ADOLC_DEBUG */ BEGIN_C_DECLS /*--------------------------------------------------------------------------*/ /* Local Static Variables */ #ifdef _HOS_ /***************************************************************************/ /* Higher Order Scalar Reverse Pass. */ /***************************************************************************/ int hos_reverse(short tnum, /* tape id */ int depen, /* consistency chk on # of deps */ int indep, /* consistency chk on # of indeps */ int degre, /* highest derivative degre */ double *lagrange, /* range weight vector */ double **results) /* matrix of coefficient vectors */ { int i, j, rc; double** L = myalloc2(depen,degre+1); for ( i = 0; i < depen; ++i ) { L[i][0] = lagrange[i]; for ( j = 1; j <= degre; ++j ) L[i][j] = 0.0; } rc = hos_ti_reverse(tnum,depen,indep,degre,L,results); myfree2(L); return rc; } int hos_ti_reverse( short tnum, /* tape id */ int depen, /* consistency chk on # of deps */ int indep, /* consistency chk on # of indeps */ int degre, /* highest derivative degre */ double **lagrange, /* range weight vectors */ double **results) /* matrix of coefficient vectors */ #elif _HOS_OV_ /***************************************************************************/ /* Higher Order Scalar Reverse Pass, Vector Keep. */ /***************************************************************************/ int hos_ov_reverse(short tnum, /* tape id */ int depen, /* consistency chk on # of deps */ int indep, /* consistency chk on # of indeps */ int degre, /* highest derivative degre */ int nrows, /* # of Jacobian rows calculated */ double **lagrange, /* range weight vector */ double ***results) /* matrix of coefficient vectors */ #elif _HOV_ /***************************************************************************/ /* Higher Order Vector Reverse Pass. */ /***************************************************************************/ int hov_reverse(short tnum, /* tape id */ int depen, /* consistency chk on # of deps */ int indep, /* consistency chk on # of indeps */ int degre, /* highest derivative degre */ int nrows, /* # of Jacobian rows calculated */ double **lagrange, /* domain weight vector */ double ***results, /* matrix of coefficient vectors */ short **nonzero ) /* structural sparsity pattern */ { int i, j, k, rc; double*** L = myalloc3(nrows,depen,degre+1); for ( k = 0; k < nrows; ++k ) for ( i = 0; i < depen; ++i ) { L[k][i][0] = lagrange[k][i]; for ( j = 1; j <= degre; ++j ) L[k][i][j] = 0.0; } rc = hov_ti_reverse(tnum,depen,indep,degre,nrows,L,results,nonzero); myfree3(L); return rc; } int hov_ti_reverse( short tnum, /* tape id */ int depen, /* consistency chk on # of deps */ int indep, /* consistency chk on # of indeps */ int degre, /* highest derivative degre */ int nrows, /* # of Jacobian rows calculated */ double ***lagrange, /* domain weight vectors */ double ***results, /* matrix of coefficient vectors */ short **nonzero ) /* structural sparsity pattern */ #endif { /************************************************************************/ /* ALL VARIABLES */ unsigned char operation; /* operation code */ int dc, ret_c=3; locint size = 0; locint res = 0; locint arg = 0; locint arg1 = 0; locint arg2 = 0; double coval = 0, *d = 0; int indexi = 0, indexd = 0; /* loop indices */ int i, j, l, ls; /* other necessary variables */ double *x; int *jj; int taycheck; int numdep,numind; double aTmp; /*----------------------------------------------------------------------*/ /* Taylor stuff */ revreal *Tres, *Targ, *Targ1, *Targ2, *Tqo, *rp_Ttemp, *rp_Ttemp2; revreal **rpp_T; /*----------------------------------------------------------------------*/ /* Adjoint stuff */ #ifdef _FOS_ double Atemp; # define A_TEMP Atemp #endif revreal *Ares, *Aarg=NULL, *Aarg1, *Aarg2, *Aqo, *rp_Atemp, *rp_Atemp2; revreal **rpp_A, *AP1, *AP2; /*----------------------------------------------------------------------*/ int k = degre + 1; int k1 = k + 1; revreal comp; #ifdef _ADOLC_VECTOR_ int p = nrows; #endif #ifdef _HOV_ int pk1 = p*k1; int q = 1; #elif _HOS_OV_ int p = nrows; int pk1 = p*k1; int q = p; #else int q = 1; #endif ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; #if defined(ADOLC_DEBUG) /************************************************************************/ /* DEBUG MESSAGES */ fprintf(DIAG_OUT,"Call of %s(..) with tag: %d, n: %d, m %d,\n", GENERATED_FILENAME, tnum, indep, depen); #ifdef _HIGHER_ORDER_ fprintf(DIAG_OUT," degree: %d\n",degre); #endif #ifdef _ADOLC_VECTOR_ fprintf(DIAG_OUT," p: %d\n\n",nrows); #endif #endif /************************************************************************/ /* INITs */ /*----------------------------------------------------------------------*/ /* Set up stuff for the tape */ /* Initialize the Reverse Sweep */ init_rev_sweep(tnum); if ( (depen != ADOLC_CURRENT_TAPE_INFOS.stats[NUM_DEPENDENTS]) || (indep != ADOLC_CURRENT_TAPE_INFOS.stats[NUM_INDEPENDENTS]) ) fail(ADOLC_REVERSE_COUNTS_MISMATCH); indexi = ADOLC_CURRENT_TAPE_INFOS.stats[NUM_INDEPENDENTS] - 1; indexd = ADOLC_CURRENT_TAPE_INFOS.stats[NUM_DEPENDENTS] - 1; /************************************************************************/ /* MEMORY ALLOCATION STUFF */ /*----------------------------------------------------------------------*/ #ifdef _HOS_ /* HOS */ rpp_A = (revreal**)malloc(ADOLC_CURRENT_TAPE_INFOS.stats[NUM_MAX_LIVES] * sizeof(revreal*)); if (rpp_A == NULL) fail(ADOLC_MALLOC_FAILED); Aqo = (revreal*)malloc(ADOLC_CURRENT_TAPE_INFOS.stats[NUM_MAX_LIVES] * k1 * sizeof(revreal)); if (Aqo == NULL) fail(ADOLC_MALLOC_FAILED); for (i=0; i%i," " keep=%i!\n",degre,degre+1); exit(-2); }; if((numdep != depen)||(numind != indep)) { fprintf(DIAG_OUT,"\n ADOL-C error: reverse fails on tape %d because " "the number of\nindependent and/or dependent variables" " given to reverse are\ninconsistent with that of the" " internal taylor array.\n",tnum); exit(-2); } /************************************************************************/ /* REVERSE SWEEP */ #if defined(ADOLC_DEBUG) int v = 0; unsigned int countPerOperation[256], taylorPerOperation[256]; memset(countPerOperation, 0, 1024); memset(taylorPerOperation, 0, 1024); # define UPDATE_TAYLORREAD(X) taylorPerOperation[operation] += X; #else # define UPDATE_TAYLORREAD(X) #endif /* ADOLC_DEBUG */ operation=get_op_r(); #if defined(ADOLC_DEBUG) ++countPerOperation[operation]; #endif /* ADOLC_DEBUG */ while (operation != start_of_tape) { /* Switch statement to execute the operations in Reverse */ switch (operation) { /************************************************************/ /* MARKERS */ /*----------------------------------------------------------*/ case end_of_op: /* end_of_op */ get_op_block_r(); operation = get_op_r(); /* Skip next operation, it's another end_of_op */ break; /*----------------------------------------------------------*/ case end_of_int: /* end_of_int */ get_loc_block_r(); /* Get the next int block */ break; /*----------------------------------------------------------*/ case end_of_val: /* end_of_val */ get_val_block_r(); /* Get the next val block */ break; /*----------------------------------------------------------*/ case start_of_tape: /* start_of_tape */ case end_of_tape: /* end_of_tape */ break; /************************************************************/ /* COMPARISON */ /*----------------------------------------------------------*/ case eq_zero : /* eq_zero */ arg = get_locint_r(); ret_c = 0; break; /*----------------------------------------------------------*/ case neq_zero : /* neq_zero */ case gt_zero : /* gt_zero */ case lt_zero : /* lt_zero */ arg = get_locint_r(); break; /*----------------------------------------------------------*/ case ge_zero : /* ge_zero */ case le_zero : /* le_zero */ arg = get_locint_r(); if (*rpp_T[arg] == 0) ret_c = 0; break; /************************************************************/ /* ASSIGNMENTS */ /*----------------------------------------------------------*/ case assign_a: /* assign an adouble variable an assign_a */ /* adouble value. (=) */ res = get_locint_r(); arg = get_locint_r(); ASSIGN_A(Aarg, rpp_A[arg]) ASSIGN_A(Ares, rpp_A[res]) FOR_0_LE_l_LT_p if (0 == ARES) { HOV_INC(Aarg, k1) HOV_INC(Ares, k1) } else { MAXDEC(AARG,ARES); AARG_INC_O; ARES_INC = 0.0; FOR_0_LE_i_LT_k { /* ! no tempory */ AARG_INC += ARES; ARES_INC = 0.0; } } GET_TAYL(res,k,p) break; /*----------------------------------------------------------*/ case assign_d: /* assign an adouble variable a assign_d */ /* double value. (=) */ res = get_locint_r(); coval = get_val_r(); ASSIGN_A(Ares, rpp_A[res]) FOR_0_LE_l_LT_pk1 ARES_INC = 0.0; GET_TAYL(res,k,p) break; /*----------------------------------------------------------*/ case assign_d_zero: /* assign an adouble a assign_d_zero */ case assign_d_one: /* double value. (=) assign_d_one */ res = get_locint_r(); ASSIGN_A(Ares, rpp_A[res]) FOR_0_LE_l_LT_pk1 ARES_INC = 0.0; GET_TAYL(res,k,p) break; /*--------------------------------------------------------------------------*/ case assign_ind: /* assign an adouble variable an assign_ind */ /* independent double value (<<=) */ res = get_locint_r(); ASSIGN_A(Ares, rpp_A[res]) FOR_0_LE_l_LT_p { #ifdef _HOV_ if (nonzero) /* ??? question: why here? */ nonzero[l][indexi] = (int)ARES; #endif /* _HOV_ */ ARES_INC_O; FOR_0_LE_i_LT_k RESULTS(l,indexi,i) = ARES_INC; } GET_TAYL(res,k,p) indexi--; break; /*--------------------------------------------------------------------------*/ case assign_dep: /* assign a float variable a assign_dep */ /* dependent adouble value. (>>=) */ res = get_locint_r(); ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg, rpp_A[res]) /* just a helpful pointers */ FOR_0_LE_l_LT_p { ARES_INC_O; dc = -1; FOR_0_LE_i_LT_k { ARES_INC = LAGRANGE(l,indexd,i); if (LAGRANGE(l,indexd,i)) dc = i; } AARG = (dc < 0)? 0.0 : (dc > 0)? 2.0 : 1.0; HOV_INC(Aarg, k1) } indexd--; break; /****************************************************************************/ /* OPERATION + ASSIGNMENT */ /*--------------------------------------------------------------------------*/ case eq_plus_d: /* Add a floating point to an eq_plus_d */ /* adouble. (+=) */ res = get_locint_r(); coval = get_val_r(); GET_TAYL(res,k,p) break; /*--------------------------------------------------------------------------*/ case eq_plus_a: /* Add an adouble to another eq_plus_a */ /* adouble. (+=) */ res = get_locint_r(); arg = get_locint_r(); ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg, rpp_A[arg]); FOR_0_LE_l_LT_p if (0 == ARES) { HOV_INC(Ares, k1) HOV_INC(Aarg, k1) } else { MAXDEC(AARG,ARES); AARG_INC_O; ARES_INC_O; FOR_0_LE_i_LT_k AARG_INC += ARES_INC; } GET_TAYL(res,k,p) break; /*--------------------------------------------------------------------------*/ case eq_min_d: /* Subtract a floating point from an eq_min_d */ /* adouble. (-=) */ res = get_locint_r(); coval = get_val_r(); GET_TAYL(res,k,p) break; /*--------------------------------------------------------------------------*/ case eq_min_a: /* Subtract an adouble from another eq_min_a */ /* adouble. (-=) */ res = get_locint_r(); arg = get_locint_r(); ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg, rpp_A[arg]) FOR_0_LE_l_LT_p if (0==ARES) { HOV_INC(Ares, k1) HOV_INC(Aarg, k1) } else { MAXDEC(AARG,ARES); AARG_INC_O; ARES_INC_O; FOR_0_LE_i_LT_k AARG_INC -= ARES_INC; } GET_TAYL(res,k,p) break; /*--------------------------------------------------------------------------*/ case eq_mult_d: /* Multiply an adouble by a eq_mult_d */ /* flaoting point. (*=) */ res = get_locint_r(); coval = get_val_r(); ASSIGN_A(Ares, rpp_A[res]) FOR_0_LE_l_LT_p if ( 0 == ARES_INC ) HOV_INC(Ares, k) else FOR_0_LE_i_LT_k ARES_INC *= coval; GET_TAYL(res,k,p) break; /*--------------------------------------------------------------------------*/ case eq_mult_a: /* Multiply one adouble by another eq_mult_a */ /* (*=) */ res = get_locint_r(); arg = get_locint_r(); GET_TAYL(res,k,p) ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg, rpp_A[arg]) ASSIGN_A(Aqo, rp_Atemp) ASSIGN_T(Tres, rpp_T[res]) ASSIGN_T(Targ, rpp_T[arg]) FOR_0_LE_l_LT_p { if (0 == ARES) { HOV_INC(Aarg, k1) HOV_INC(Ares, k1) } else { MAXDEC(ARES,2.0); MAXDEC(AARG,ARES); AARG_INC_O; ARES_INC_O; conv(k,Ares,Targ,rp_Atemp); if(arg != res) { inconv(k,Ares,Tres,Aarg); FOR_0_LE_i_LT_k ARES_INC = AQO_INC; } else FOR_0_LE_i_LT_k ARES_INC = 2.0 * AQO_INC; HOV_INC(Aarg,k) HOS_OV_INC(Tres,k) HOS_OV_INC(Targ,k) HOS_OV_ASSIGN_A(Aqo, rp_Atemp) } } break; /*--------------------------------------------------------------------------*/ case incr_a: /* Increment an adouble incr_a */ case decr_a: /* Increment an adouble decr_a */ res = get_locint_r(); GET_TAYL(res,k,p) break; /****************************************************************************/ /* BINARY OPERATIONS */ /*--------------------------------------------------------------------------*/ case plus_a_a: /* : Add two adoubles. (+) plus a_a */ res = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg1, rpp_A[arg1]) ASSIGN_A(Aarg2, rpp_A[arg2]) FOR_0_LE_l_LT_p if (0 == ARES) { HOV_INC(Ares, k1) HOV_INC(Aarg1, k1) HOV_INC(Aarg2, k1) } else { aTmp = ARES; ARES_INC = 0.0; MAXDEC(AARG1,aTmp); MAXDEC(AARG2,aTmp); AARG2_INC_O; AARG1_INC_O; FOR_0_LE_i_LT_k { aTmp = ARES; ARES_INC = 0.0; AARG1_INC += aTmp; AARG2_INC += aTmp; } } GET_TAYL(res,k,p) break; /*--------------------------------------------------------------------------*/ case plus_d_a: /* Add an adouble and a double plus_d_a */ /* (+) */ res = get_locint_r(); arg = get_locint_r(); coval = get_val_r(); ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg, rpp_A[arg]) FOR_0_LE_l_LT_p if (0 == ARES) { HOV_INC(Ares, k1) HOV_INC(Aarg, k1) } else { aTmp = ARES; ARES_INC = 0.0; MAXDEC(AARG,aTmp); AARG_INC_O; FOR_0_LE_i_LT_k { aTmp = ARES; ARES_INC = 0.0; AARG_INC += aTmp; } } GET_TAYL(res,k,p) break; /*--------------------------------------------------------------------------*/ case min_a_a: /* Subtraction of two adoubles min_a_a */ /* (-) */ res = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg1, rpp_A[arg1]) ASSIGN_A(Aarg2, rpp_A[arg2]) FOR_0_LE_l_LT_p if (0 == ARES) { HOV_INC(Ares, k1) HOV_INC(Aarg1, k1) HOV_INC(Aarg2, k1) } else { aTmp = ARES; ARES_INC = 0.0; MAXDEC(AARG1,aTmp); MAXDEC(AARG2,aTmp); AARG2_INC_O; AARG1_INC_O; FOR_0_LE_i_LT_k { aTmp = ARES; ARES_INC = 0.0; AARG1_INC += aTmp; AARG2_INC -= aTmp; } } GET_TAYL(res,k,p) break; /*--------------------------------------------------------------------------*/ case min_d_a: /* Subtract an adouble from a min_d_a */ /* double (-) */ res = get_locint_r(); arg = get_locint_r(); coval = get_val_r(); ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg, rpp_A[arg]) FOR_0_LE_l_LT_p if (0 == ARES) { HOV_INC(Ares, k1) HOV_INC(Aarg, k1) } else { aTmp = ARES; ARES_INC = 0.0; MAXDEC(AARG,aTmp); AARG_INC_O; FOR_0_LE_i_LT_k { aTmp = ARES; ARES_INC = 0.0; AARG_INC -= aTmp; } } GET_TAYL(res,k,p) break; /*--------------------------------------------------------------------------*/ case mult_a_a: /* Multiply two adoubles (*) mult_a_a */ res = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); GET_TAYL(res,k,p) ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg2, rpp_A[arg2]) ASSIGN_A(Aarg1, rpp_A[arg1]) ASSIGN_T(Targ1, rpp_T[arg1]) ASSIGN_T(Targ2, rpp_T[arg2]) FOR_0_LE_l_LT_p if (0 == ARES) { HOV_INC(Aarg1, k1) HOV_INC(Aarg2, k1) HOV_INC(Ares, k1) } else { comp = (ARES > 2.0) ? ARES : 2.0 ; ARES_INC = 0.0; MAXDEC(AARG1,comp); MAXDEC(AARG2,comp); AARG1_INC_O; AARG2_INC_O; copyAndZeroset(k,Ares,rp_Atemp); inconv(k,rp_Atemp,Targ1,Aarg2); inconv(k,rp_Atemp,Targ2,Aarg1); HOV_INC(Ares, k) HOV_INC(Aarg1, k) HOV_INC(Aarg2, k) HOS_OV_INC(Targ1, k) HOS_OV_INC(Targ2, k) } break; /*--------------------------------------------------------------------------*/ /* olvo 991122: new op_code with recomputation */ case eq_plus_prod: /* increment a product of eq_plus_prod */ /* two adoubles (*) */ res = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg2, rpp_A[arg2]) ASSIGN_A(Aarg1, rpp_A[arg1]) ASSIGN_T(Targ1, rpp_T[arg1]) ASSIGN_T(Targ2, rpp_T[arg2]) /* RECOMPUTATION */ ASSIGN_T( Tres, rpp_T[res]) deconv1(k,Targ1,Targ2,Tres); FOR_0_LE_l_LT_p if (0 == ARES) { HOV_INC(Aarg1, k1) HOV_INC(Aarg2, k1) HOV_INC(Ares, k1) } else { comp = (ARES > 2.0) ? ARES : 2.0 ; ARES_INC = comp; MAXDEC(AARG1,comp); MAXDEC(AARG2,comp); AARG1_INC_O; AARG2_INC_O; inconv(k,Ares,Targ1,Aarg2); inconv(k,Ares,Targ2,Aarg1); HOV_INC(Ares, k) HOV_INC(Aarg1, k) HOV_INC(Aarg2, k) HOS_OV_INC(Targ1, k) HOS_OV_INC(Targ2, k) } break; /*--------------------------------------------------------------------------*/ /* olvo 991122: new op_code with recomputation */ case eq_min_prod: /* decrement a product of eq_min_prod */ /* two adoubles (*) */ res = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg2, rpp_A[arg2]) ASSIGN_A(Aarg1, rpp_A[arg1]) ASSIGN_T(Targ1, rpp_T[arg1]) ASSIGN_T(Targ2, rpp_T[arg2]) /* RECOMPUTATION */ ASSIGN_T( Tres, rpp_T[res]) inconv1(k,Targ1,Targ2,Tres); FOR_0_LE_l_LT_p if (0 == ARES) { HOV_INC(Aarg1, k1) HOV_INC(Aarg2, k1) HOV_INC(Ares, k1) } else { comp = (ARES > 2.0) ? ARES : 2.0 ; ARES_INC = comp; MAXDEC(AARG1,comp); MAXDEC(AARG2,comp); AARG1_INC_O; AARG2_INC_O; deconv1(k,Ares,Targ1,Aarg2); deconv1(k,Ares,Targ2,Aarg1); HOV_INC(Ares, k) HOV_INC(Aarg1, k) HOV_INC(Aarg2, k) HOS_OV_INC(Targ1, k) HOS_OV_INC(Targ2, k) } break; /*--------------------------------------------------------------------------*/ case mult_d_a: /* Multiply an adouble by a double mult_d_a */ /* (*) */ res = get_locint_r(); arg = get_locint_r(); coval = get_val_r(); ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg, rpp_A[arg]) FOR_0_LE_l_LT_p if (0 == ARES) { HOV_INC(Ares, k1) HOV_INC(Aarg, k1) } else { aTmp = ARES; ARES_INC = 0.0; MAXDEC(AARG,aTmp); AARG_INC_O; FOR_0_LE_i_LT_k { aTmp = ARES; ARES_INC = 0.0; AARG_INC += coval * aTmp; } } GET_TAYL(res,k,p) break; /*--------------------------------------------------------------------------*/ case div_a_a: /* Divide an adouble by an adouble div_a_a */ /* (/) */ res = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg2, rpp_A[arg2]) ASSIGN_A(Aarg1, rpp_A[arg1]) ASSIGN_T(Tres, rpp_T[res]) ASSIGN_T(Targ2, rpp_T[arg2]) /* olvo 980922 allows reflexive operation */ if (arg2 == res) { FOR_0_LE_l_LT_pk rp_Ttemp2[l] = Tres[l]; Tres = rp_Ttemp2; GET_TAYL(res,k,p) } VEC_COMPUTED_INIT FOR_0_LE_l_LT_p { if (0 == ARES) { HOV_INC(Ares, k1) HOV_INC(Aarg1, k1) HOV_INC(Aarg2, k1) } else { aTmp = ARES; ARES_INC = 0.0; MAXDEC(AARG1,3.0); MAXDEC(AARG1,aTmp); MAXDEC(AARG2,3.0); MAXDEC(AARG2,aTmp); AARG1_INC_O; AARG2_INC_O; VEC_COMPUTED_CHECK recipr(k,1.0,Targ2,rp_Ttemp); conv0(k ,rp_Ttemp, Tres, rp_Atemp2); VEC_COMPUTED_END copyAndZeroset(k,Ares,rp_Atemp); inconv(k, rp_Atemp, rp_Ttemp, Aarg1); deconv(k, rp_Atemp, rp_Atemp2, Aarg2); HOV_INC(Ares, k) HOV_INC(Aarg1, k) HOV_INC(Aarg2, k) HOS_OV_INC(Tres, k) HOS_OV_INC(Targ2, k) } } if (res != arg2) GET_TAYL(res,k,p) break; /*--------------------------------------------------------------------------*/ case div_d_a: /* Division double - adouble (/) div_d_a */ res = get_locint_r(); arg = get_locint_r(); coval = get_val_r(); ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg, rpp_A[arg]) ASSIGN_T(Tres, rpp_T[res]) ASSIGN_T(Targ, rpp_T[arg]) /* olvo 980922 allows reflexive operation */ if (arg == res) { FOR_0_LE_l_LT_pk rp_Ttemp2[l] = Tres[l]; Tres = rp_Ttemp2; GET_TAYL(arg,k,p) } VEC_COMPUTED_INIT FOR_0_LE_l_LT_p { if (0 == ARES) { HOV_INC(Ares, k1) HOV_INC(Aarg, k1) } else { aTmp = ARES; ARES_INC = 0.0; MAXDEC(AARG,aTmp); MAXDEC(AARG,3.0); AARG_INC_O; VEC_COMPUTED_CHECK recipr(k,1.0,Targ,rp_Ttemp); conv0(k, rp_Ttemp, Tres, rp_Atemp); VEC_COMPUTED_END deconvZeroR(k,Ares,rp_Atemp,Aarg); HOV_INC(Ares, k) HOV_INC(Aarg, k) HOS_OV_INC(Tres, k) HOS_OV_INC(Targ, k) } } GET_TAYL(res,k,p) break; /****************************************************************************/ /* SIGN OPERATIONS */ /*--------------------------------------------------------------------------*/ case pos_sign_a: /* pos_sign_a */ res = get_locint_r(); arg = get_locint_r(); ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg, rpp_A[arg]) FOR_0_LE_l_LT_p if (0 == ARES) { HOV_INC(Ares, k1) HOV_INC(Aarg, k1) } else { aTmp = ARES; ARES_INC = 0.0; MAXDEC(AARG,aTmp); AARG_INC_O; FOR_0_LE_i_LT_k { aTmp = ARES; ARES_INC = 0.0; AARG_INC += aTmp; } } GET_TAYL(res,k,p) break; /*--------------------------------------------------------------------------*/ case neg_sign_a: /* neg_sign_a */ res = get_locint_r(); arg = get_locint_r(); ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg, rpp_A[arg]) FOR_0_LE_l_LT_p if (0 == ARES) { HOV_INC(Ares, k1) HOV_INC(Aarg, k1) } else { aTmp = ARES; ARES_INC = 0.0; MAXDEC(AARG,aTmp); AARG_INC_O; FOR_0_LE_i_LT_k { aTmp = ARES; ARES_INC = 0.0; AARG_INC -= aTmp; } } GET_TAYL(res,k,p) break; /****************************************************************************/ /* UNARY OPERATIONS */ /*--------------------------------------------------------------------------*/ case exp_op: /* exponent operation exp_op */ res = get_locint_r(); arg = get_locint_r(); ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg, rpp_A[arg]) ASSIGN_T(Tres, rpp_T[res]) ASSIGN_T(Targ, rpp_T[arg]) FOR_0_LE_l_LT_p { if (0 == ARES) { HOV_INC(Aarg, k1) HOV_INC(Ares, k1) } else { aTmp = ARES; ARES_INC = 0.0; MAXDEC(AARG,aTmp); MAXDEC(AARG,4.0); AARG_INC_O; inconv0(k,Ares,Tres,Aarg); HOV_INC(Ares, k) HOV_INC(Aarg, k) HOS_OV_INC(Tres, k) } } GET_TAYL(res,k,p) break; /*--------------------------------------------------------------------------*/ case sin_op: /* sine operation sin_op */ res = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg1, rpp_A[arg1]) ASSIGN_T(Targ2, rpp_T[arg2]) FOR_0_LE_l_LT_p { if (0 == ARES) { HOV_INC(Aarg1, k1) HOV_INC(Ares, k1) } else { aTmp = ARES; ARES_INC = 0.0; MAXDEC(AARG1,aTmp); MAXDEC(AARG1,4.0); AARG1_INC_O; inconv0(k,Ares,Targ2,Aarg1); HOV_INC(Ares, k) HOV_INC(Aarg1, k) HOS_OV_INC(Targ2, k) } } GET_TAYL(res,k,p) GET_TAYL(arg2,k,p) /* olvo 980710 covalue */ /* NOTE: rpp_A[arg2] should be 0 already */ break; /*--------------------------------------------------------------------------*/ case cos_op: /* cosine operation cos_op */ res = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg1, rpp_A[arg1]) ASSIGN_T(Targ2, rpp_T[arg2]) FOR_0_LE_l_LT_p { if (0 == ARES) { HOV_INC(Aarg1, k1) HOV_INC(Ares, k1) } else { aTmp = ARES; ARES_INC = 0.0; MAXDEC(AARG1,aTmp); MAXDEC(AARG1,4.0); AARG1_INC_O; deconv0(k,Ares,Targ2,Aarg1); HOV_INC(Ares, k) HOV_INC(Aarg1, k) HOS_OV_INC(Targ2, k) } } GET_TAYL(res,k,p) GET_TAYL(arg2,k,p) /* olvo 980710 covalue */ /* NOTE: rpp_A[arg2] should be 0 already */ break; /*xxx*/ /*--------------------------------------------------------------------------*/ case atan_op: /* atan_op */ case asin_op: /* asin_op */ case acos_op: /* acos_op */ case asinh_op: /* asinh_op */ case acosh_op: /* acosh_op */ case atanh_op: /* atanh_op */ case erf_op: /* erf_op */ res = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); GET_TAYL(res,k,p) ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg1, rpp_A[arg1]) ASSIGN_T(Targ2, rpp_T[arg2]) FOR_0_LE_l_LT_p { if (0 == ARES) { HOV_INC(Aarg1, k1) HOV_INC(Ares, k1) } else { aTmp = ARES; ARES_INC = 0.0; MAXDEC(AARG1,aTmp); MAXDEC(AARG1,4.0); AARG1_INC_O; inconv0(k,Ares,Targ2,Aarg1); HOV_INC(Aarg1, k) HOV_INC(Ares, k) HOS_OV_INC(Targ2, k) } } break; /*--------------------------------------------------------------------------*/ case log_op: /* log_op */ res = get_locint_r(); arg = get_locint_r(); GET_TAYL(res,k,p) ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg, rpp_A[arg]) ASSIGN_T(Targ, rpp_T[arg]) VEC_COMPUTED_INIT FOR_0_LE_l_LT_p { if (0 == ARES) { HOV_INC(Aarg, k1) HOV_INC(Ares, k1) } else { aTmp = ARES; ARES_INC = 0.0; MAXDEC(AARG,aTmp); MAXDEC(AARG,4.0); AARG_INC_O; VEC_COMPUTED_CHECK recipr(k,1.0,Targ,rp_Ttemp); VEC_COMPUTED_END inconv0(k,Ares,rp_Ttemp,Aarg); HOV_INC(Ares, k) HOV_INC(Aarg, k) HOS_OV_INC(Targ2, k) } } break; /*--------------------------------------------------------------------------*/ case pow_op: /* pow_op */ res = get_locint_r(); arg = get_locint_r(); coval = get_val_r(); ASSIGN_T(Targ, rpp_T[arg]) ASSIGN_T(Tres, rpp_T[res]) ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg, rpp_A[arg]) /* olvo 980921 allows reflexive operation */ if (arg == res) { FOR_0_LE_l_LT_pk rp_Ttemp2[l] = Tres[l]; Tres = rp_Ttemp2; GET_TAYL(arg,k,p) } VEC_COMPUTED_INIT FOR_0_LE_l_LT_p if (0 == ARES) { HOV_INC(Aarg, k1) HOV_INC(Ares, k1) } else { aTmp = ARES; ARES_INC = 0.0; MAXDEC(AARG,aTmp); MAXDEC(AARG,4.0); AARG_INC_O; VEC_COMPUTED_CHECK if (fabs(Targ[0]) > ADOLC_EPS) { divide(k,Tres,Targ,rp_Ttemp); for (i=0;i 1) { Aarg[i] = 0; Ares[i] = 0; } if ((coval - i < 1) && (coval - i > 0)) { Aarg[i] = make_inf(); Ares[i] = 0; } if (coval - i < 0) { Aarg[i] = make_nan(); Ares[i] = 0; } } } else { if (coval == 1) { FOR_0_LE_i_LT_k { /* ! no tempory */ AARG_INC += ARES; ARES_INC = 0.0; } } else { /* coval is an int > 1 */ /* the following is not efficient but at least it works */ /* it reformulates x^n into x* ... *x n times */ copyAndZeroset(k,Ares,rp_Atemp); inconv(k,rp_Atemp,Targ,Aarg); inconv(k,rp_Atemp,Targ,Aarg); if (coval == 3) { conv(k,Aarg,Targ,rp_Atemp); FOR_0_LE_i_LT_k Aarg[i] = 2.0 * rp_Atemp[i]; } } } } } VEC_COMPUTED_END HOV_INC(Ares, k) HOV_INC(Aarg, k) HOS_OV_INC(Tres, k) HOS_OV_INC(Targ, k) } GET_TAYL(res,k,p) break; /*--------------------------------------------------------------------------*/ case sqrt_op: /* sqrt_op */ res = get_locint_r(); arg = get_locint_r(); ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg, rpp_A[arg]) ASSIGN_T(Tres, rpp_T[res]) VEC_COMPUTED_INIT FOR_0_LE_l_LT_p if (0 == ARES) { HOV_INC(Aarg, k1) HOV_INC(Ares, k1) } else { aTmp = ARES; ARES_INC = 0.0; MAXDEC(AARG,aTmp); MAXDEC(AARG,4.0); AARG_INC_O; VEC_COMPUTED_CHECK recipr(k,0.5,Tres,rp_Ttemp); VEC_COMPUTED_END inconv0(k,Ares,rp_Ttemp,Aarg); HOV_INC(Ares, k) HOV_INC(Aarg, k) HOS_OV_INC(Tres,k) } GET_TAYL(res,k,p) break; /*--------------------------------------------------------------------------*/ case gen_quad: /* gen_quad */ res = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); coval = get_val_r(); coval = get_val_r(); ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg1, rpp_A[arg1]) ASSIGN_T(Targ2, rpp_T[arg2]) FOR_0_LE_l_LT_p if (0 == ARES) { HOV_INC(Aarg1, k1) HOV_INC(Ares, k1) } else { aTmp = ARES; ARES_INC = 0.0; MAXDEC(AARG1,aTmp); MAXDEC(AARG1,4.0); AARG1_INC_O; inconv0(k,Ares,Targ2,Aarg1); HOV_INC(Aarg1, k) HOV_INC(Ares, k) HOS_OV_INC(Targ2, k) } GET_TAYL(res,k,p) break; /*--------------------------------------------------------------------------*/ case min_op: /* min_op */ #ifdef _HOS_OV_ fprintf(DIAG_OUT," operation min_op not implemented for hos_ov"); break; #endif res = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); coval = get_val_r(); GET_TAYL(res,k,p) ASSIGN_A(Aarg1, rpp_A[arg1]) ASSIGN_A(Aarg2, rpp_A[arg2]) ASSIGN_A(Ares, rpp_A[res]) ASSIGN_T(Targ1, rpp_T[arg1]) ASSIGN_T(Targ2, rpp_T[arg2]) ASSIGN_A(AP1, NULL) ASSIGN_A(AP2, Ares) if (Targ1[0] > Targ2[0]) { FOR_0_LE_l_LT_p { if ((coval) && (*AP2)) MINDEC(ret_c,2); HOV_INC(AP2,k1) } AP1 = Aarg2; arg = 0; } else if (Targ1[0] < Targ2[0]) { FOR_0_LE_l_LT_p { if ((!coval) && (*AP2)) MINDEC(ret_c,2); HOV_INC(AP2,k1) } AP1 = Aarg1; arg = 0; } else /* both are equal */ /* must be changed for hos_ov, but how? */ /* seems to influence the return value */ for (i=1;i Targ2[i]) { FOR_0_LE_l_LT_p { if (*AP2) MINDEC(ret_c,1); HOV_INC(AP2,k1) } AP1 = Aarg2; arg = i+1; } else if (Targ1[i] < Targ2[i]) { FOR_0_LE_l_LT_p { if (*AP2) MINDEC(ret_c,1); HOV_INC(AP2,k1) } AP1 = Aarg1; arg = i+1; } if (AP1 != NULL) break; } if (AP1 != NULL) FOR_0_LE_l_LT_p { if (0 == ARES) { HOV_INC(AP1, k1) HOV_INC(Ares,k1); } else { aTmp = ARES; ARES_INC = 0.0; if (arg) /* we are at the tie */ *AP1 = 5.0; else MAXDEC(*AP1,aTmp); AP1++; for (i=0;i0) && (aTmp)) MINDEC(ret_c,2); AARG_INC += x[l] * aTmp; } } HOS_OV_INC(Targ,k) } break; /*--------------------------------------------------------------------------*/ case ceil_op: /* ceil_op */ res = get_locint_r(); arg = get_locint_r(); coval = get_val_r(); GET_TAYL(res,k,p) coval = (coval != ceil(*rpp_T[arg]) ); ASSIGN_A(Ares, rpp_A[res]) FOR_0_LE_l_LT_p if (0 == ARES) { HOV_INC(Aarg, k1) HOV_INC(Ares, k1) } else { ARES_INC = 0.0; AARG_INC = 5.0; FOR_0_LE_i_LT_k { if ((coval) && (ARES)) MINDEC(ret_c,2); ARES_INC = 0.0; } HOV_INC(Aarg, k) } break; /*--------------------------------------------------------------------------*/ case floor_op: /* floor_op */ res = get_locint_r(); arg = get_locint_r(); coval = get_val_r(); GET_TAYL(res,k,p) coval = ( coval != floor(*rpp_T[arg]) ); ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg, rpp_A[arg]) FOR_0_LE_l_LT_p if (0 == ARES) { HOV_INC(Aarg, k1) HOV_INC(Ares, k1) } else { ARES = 0.0; AARG_INC = 5.0; FOR_0_LE_i_LT_k { if ( (coval) && (ARES) ) MINDEC(ret_c,2); ARES_INC = 0.0; } HOV_INC(Aarg, k) } break; /****************************************************************************/ /* CONDITIONALS */ /*--------------------------------------------------------------------------*/ case cond_assign: /* cond_assign */ res = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); arg = get_locint_r(); coval = get_val_r(); GET_TAYL(res,k,p) ASSIGN_A(Aarg1, rpp_A[arg1]) ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg2, rpp_A[arg2]) ASSIGN_T(Targ, rpp_T[arg]) /* olvo 980925 changed code a little bit */ if (TARG > 0.0) { if (res != arg1) FOR_0_LE_l_LT_p { if (0 == ARES) { HOV_INC(Ares, k1) HOV_INC(Aarg1, k1) } else { if (coval <= 0.0) MINDEC(ret_c,2); MAXDEC(AARG1,ARES); ARES_INC = 0.0; AARG1_INC_O; FOR_0_LE_i_LT_k { AARG1_INC += ARES; ARES_INC = 0; } } } else FOR_0_LE_l_LT_p { if ((coval <= 0.0) && (ARES)) MINDEC(ret_c,2); HOV_INC(Ares, k1) } } else /* TARG <= 0.0 */ { if (res != arg2) FOR_0_LE_l_LT_p { if (0 == ARES) { HOV_INC(Ares, k1) HOV_INC(Aarg2, k1) } else { if (TARG == 0.0) /* we are at the tie */ { MINDEC(ret_c,0); AARG1 = 5.0; AARG2_INC = 5.0; } else { if (coval <= 0.0) MINDEC(ret_c,2); MAXDEC(AARG2,ARES); AARG2_INC_O; } ARES_INC = 0.0; FOR_0_LE_i_LT_k { AARG2_INC += ARES; ARES_INC = 0; } } HOV_INC(Aarg1, k1) } else FOR_0_LE_l_LT_p { if (ARES) { if (TARG == 0.0) /* we are at the tie */ { MINDEC(ret_c,0); AARG1 = 5.0; AARG2 = 5.0; } else if (coval <= 0.0) MINDEC(ret_c,2); } HOV_INC(Ares, k1) HOV_INC(Aarg1, k1) HOV_INC(Aarg2, k1) } } break; /*--------------------------------------------------------------------------*/ case cond_assign_s: /* cond_assign_s */ res = get_locint_r(); arg1 = get_locint_r(); arg = get_locint_r(); coval = get_val_r(); GET_TAYL(res,k,p) ASSIGN_A(Aarg1, rpp_A[arg1]) ASSIGN_A(Ares, rpp_A[res]) ASSIGN_T(Targ, rpp_T[arg]) /* olvo 980925 changed code a little bit */ if (TARG == 0.0) /* we are at the tie */ { FOR_0_LE_l_LT_p { if (ARES) AARG1 = 5.0; HOV_INC(Aarg1, k1) HOV_INC(Ares, k1) } MINDEC(ret_c,0); } else if (TARG > 0.0) { if (res != arg1) FOR_0_LE_l_LT_p { if (0 == ARES) { HOV_INC(Ares, k1) HOV_INC(Aarg1, k1) } else { if (coval <= 0.0) MINDEC(ret_c,2); MAXDEC(AARG1,ARES); ARES_INC = 0.0; AARG1_INC_O; FOR_0_LE_i_LT_k { (AARG1_INC) += ARES; ARES_INC = 0; } } } else FOR_0_LE_l_LT_p { if ((coval <= 0.0) && (ARES)) MINDEC(ret_c,2); HOV_INC(Ares, k1) } } break; /*--------------------------------------------------------------------------*/ /* NEW CONDITIONALS */ /*--------------------------------------------------------------------------*/ #if defined(ADOLC_ADVANCED_BRANCHING) case neq_a_a: case eq_a_a: case le_a_a: case ge_a_a: case lt_a_a: case gt_a_a: res = get_locint_r(); arg1 = get_locint_r(); arg = get_locint_r(); coval = get_val_r(); ASSIGN_A(Ares, rpp_A[res]) FOR_0_LE_l_LT_pk1 ARES_INC = 0.0; GET_TAYL(res,k,p) break; #endif /*--------------------------------------------------------------------------*/ case subscript: coval = get_val_r(); { size_t cnt, idx, numval = (size_t)trunc(fabs(coval)); locint vectorloc; vectorloc = get_locint_r(); res = get_locint_r(); arg = get_locint_r(); ASSIGN_T(Targ, rpp_T[arg]) idx = (size_t)trunc(fabs(TARG)); if (idx >= numval) fprintf(DIAG_OUT, "ADOL-C warning: index out of bounds while subscripting n=%z, idx=%z\n", numval, idx); arg1 = vectorloc+idx; ASSIGN_A(Aarg1, rpp_A[arg1]) ASSIGN_A(Ares, rpp_A[res]) FOR_0_LE_l_LT_p if (0 == ARES) { HOV_INC(Aarg1, k1) HOV_INC(Ares, k1) } else { MAXDEC(AARG1,ARES); AARG1_INC_O; ARES_INC = 0.0; FOR_0_LE_i_LT_k { AARG1_INC += ARES; ARES_INC = 0.0; } } GET_TAYL(res,k,p) } break; case subscript_ref: coval = get_val_r(); { size_t cnt, idx, numval = (size_t)trunc(fabs(coval)); locint vectorloc; vectorloc = get_locint_r(); res = get_locint_r(); arg = get_locint_r(); ASSIGN_T(Targ, rpp_T[arg]) ASSIGN_T(Tres, rpp_T[res]) idx = (size_t)trunc(fabs(TARG)); if (idx >= numval) fprintf(DIAG_OUT, "ADOL-C warning: index out of bounds while subscripting (ref) n=%z, idx=%z\n", numval, idx); arg1 = (size_t)trunc(fabs(TRES)); // This is actually NOP // basically all we need is that arg1 == vectorloc[idx] // so doing a check here is probably good if (arg1 != vectorloc+idx) { fprintf(DIAG_OUT, "ADOL-C error: indexed active position does not match referenced position\nindexed = %d, referenced = %d\n", vectorloc+idx, arg1); exit(-2); } GET_TAYL(res,k,p) } break; case ref_copyout: res = get_locint_r(); arg1 = get_locint_r(); ASSIGN_T(Targ1, rpp_T[arg1]) arg = (size_t)trunc(fabs(TARG1)); ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg, rpp_A[arg]) FOR_0_LE_l_LT_p if (0 == ARES) { HOV_INC(Aarg, k1) HOV_INC(Ares, k1) } else { MAXDEC(AARG,ARES); AARG_INC_O; ARES_INC = 0.0; FOR_0_LE_i_LT_k { AARG_INC += ARES; ARES_INC = 0.0; } } GET_TAYL(res,k,p) break; case ref_incr_a: /* Increment an adouble incr_a */ case ref_decr_a: /* Increment an adouble decr_a */ arg1 = get_locint_r(); ASSIGN_T(Targ1, rpp_T[arg1]) res = (size_t)trunc(fabs(TARG1)); GET_TAYL(res,k,p) break; case ref_assign_d: /* assign an adouble variable a assign_d */ /* double value. (=) */ coval = get_val_r(); // fallthrough case ref_assign_d_zero: /* assign an adouble a assign_d_zero */ case ref_assign_d_one: /* double value. (=) assign_d_one */ arg1 = get_locint_r(); ASSIGN_T(Targ1, rpp_T[arg1]) res = (size_t)trunc(fabs(TARG1)); ASSIGN_A(Ares, rpp_A[res]) FOR_0_LE_l_LT_pk1 ARES_INC = 0.0; GET_TAYL(res,k,p) break; case ref_assign_a: /* assign an adouble variable an assign_a */ /* adouble value. (=) */ arg1 = get_locint_r(); arg = get_locint_r(); ASSIGN_T(Targ1, rpp_T[arg1]) res = (size_t)trunc(fabs(TARG1)); ASSIGN_A(Aarg, rpp_A[arg]) ASSIGN_A(Ares, rpp_A[res]) FOR_0_LE_l_LT_p if (0 == ARES) { HOV_INC(Aarg, k1) HOV_INC(Ares, k1) } else { MAXDEC(AARG,ARES); AARG_INC_O; ARES_INC = 0.0; FOR_0_LE_i_LT_k { /* ! no tempory */ AARG_INC += ARES; ARES_INC = 0.0; } } GET_TAYL(res,k,p) break; case ref_assign_ind: /* assign an adouble variable an assign_ind */ /* independent double value (<<=) */ arg1 = get_locint_r(); ASSIGN_T(Targ1, rpp_T[arg1]) res = (size_t)trunc(fabs(TARG1)); ASSIGN_A(Ares, rpp_A[res]) FOR_0_LE_l_LT_p { #ifdef _HOV_ if (nonzero) /* ??? question: why here? */ nonzero[l][indexi] = (int)ARES; #endif /* _HOV_ */ ARES_INC_O; FOR_0_LE_i_LT_k RESULTS(l,indexi,i) = ARES_INC; } GET_TAYL(res,k,p) indexi--; break; case ref_eq_plus_d: /* Add a floating point to an eq_plus_d */ /* adouble. (+=) */ arg1 = get_locint_r(); ASSIGN_T(Targ1, rpp_T[arg1]) res = (size_t)trunc(fabs(TARG1)); coval = get_val_r(); GET_TAYL(res,k,p) break; case ref_eq_plus_a: /* Add an adouble to another eq_plus_a */ /* adouble. (+=) */ arg1 = get_locint_r(); arg = get_locint_r(); ASSIGN_T(Targ1, rpp_T[arg1]) res = (size_t)trunc(fabs(TARG1)); ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg, rpp_A[arg]) FOR_0_LE_l_LT_p if (0 == ARES) { HOV_INC(Ares, k1) HOV_INC(Aarg, k1) } else { MAXDEC(AARG,ARES); AARG_INC_O; ARES_INC_O; FOR_0_LE_i_LT_k AARG_INC += ARES_INC; } GET_TAYL(res,k,p) break; case ref_eq_min_d: /* Subtract a floating point from an eq_min_d */ /* adouble. (-=) */ arg1 = get_locint_r(); ASSIGN_T(Targ1, rpp_T[arg1]) res = (size_t)trunc(fabs(TARG1)); coval = get_val_r(); GET_TAYL(res,k,p) break; case ref_eq_min_a: /* Subtract an adouble from another eq_min_a */ /* adouble. (-=) */ arg1 = get_locint_r(); arg = get_locint_r(); ASSIGN_T(Targ1, rpp_T[arg1]) res = (size_t)trunc(fabs(TARG1)); ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg, rpp_A[arg]) FOR_0_LE_l_LT_p if (0==ARES) { HOV_INC(Ares, k1) HOV_INC(Aarg, k1) } else { MAXDEC(AARG,ARES); AARG_INC_O; ARES_INC_O; FOR_0_LE_i_LT_k AARG_INC -= ARES_INC; } GET_TAYL(res,k,p) break; case ref_eq_mult_d: /* Multiply an adouble by a eq_mult_d */ /* flaoting point. (*=) */ arg1 = get_locint_r(); ASSIGN_T(Targ1, rpp_T[arg1]) res = (size_t)trunc(fabs(TARG1)); coval = get_val_r(); ASSIGN_A(Ares, rpp_A[res]) FOR_0_LE_l_LT_p if ( 0 == ARES_INC ) HOV_INC(Ares, k) else FOR_0_LE_i_LT_k ARES_INC *= coval; GET_TAYL(res,k,p) break; case ref_eq_mult_a: /* Multiply one adouble by another eq_mult_a */ /* (*=) */ arg1 = get_locint_r(); arg = get_locint_r(); ASSIGN_T(Targ1, rpp_T[arg1]) res = (size_t)trunc(fabs(TARG1)); GET_TAYL(res,k,p) ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg, rpp_A[arg]) ASSIGN_A(Aqo, rp_Atemp) ASSIGN_T(Tres, rpp_T[res]) ASSIGN_T(Targ, rpp_T[arg]) FOR_0_LE_l_LT_p { if (0 == ARES) { HOV_INC(Aarg, k1) HOV_INC(Ares, k1) } else { MAXDEC(ARES,2.0); MAXDEC(AARG,ARES); AARG_INC_O; ARES_INC_O; conv(k,Ares,Targ,rp_Atemp); if(arg != res) { inconv(k,Ares,Tres,Aarg); FOR_0_LE_i_LT_k ARES_INC = AQO_INC; } else FOR_0_LE_i_LT_k ARES_INC = 2.0 * AQO_INC; HOV_INC(Aarg,k) HOS_OV_INC(Tres,k) HOS_OV_INC(Targ,k) HOS_OV_ASSIGN_A(Aqo, rp_Atemp) } } break; case ref_cond_assign: /* cond_assign */ { revreal *Tref; locint ref = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); arg = get_locint_r(); coval = get_val_r(); ASSIGN_T(Tref, rpp_T[ref]) #ifdef _HIGHER_ORDER_ #define TREF *Tref #else #define TREF rpp_T[ref] #endif res = (size_t)trunc(fabs(TREF)); #undef TREF GET_TAYL(res,k,p) ASSIGN_A(Aarg1, rpp_A[arg1]) ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg2, rpp_A[arg2]) ASSIGN_T(Targ, rpp_T[arg]) /* olvo 980925 changed code a little bit */ if (TARG > 0.0) { if (res != arg1) FOR_0_LE_l_LT_p { if (0 == ARES) { HOV_INC(Ares, k1) HOV_INC(Aarg1, k1) } else { if (coval <= 0.0) MINDEC(ret_c,2); MAXDEC(AARG1,ARES); ARES_INC = 0.0; AARG1_INC_O; FOR_0_LE_i_LT_k { AARG1_INC += ARES; ARES_INC = 0; } } } else FOR_0_LE_l_LT_p { if ((coval <= 0.0) && (ARES)) MINDEC(ret_c,2); HOV_INC(Ares, k1) } } else /* TARG <= 0.0 */ { if (res != arg2) FOR_0_LE_l_LT_p { if (0 == ARES) { HOV_INC(Ares, k1) HOV_INC(Aarg2, k1) } else { if (TARG == 0.0) /* we are at the tie */ { MINDEC(ret_c,0); AARG1 = 5.0; AARG2_INC = 5.0; } else { if (coval <= 0.0) MINDEC(ret_c,2); MAXDEC(AARG2,ARES); AARG2_INC_O; } ARES_INC = 0.0; FOR_0_LE_i_LT_k { AARG2_INC += ARES; ARES_INC = 0; } } HOV_INC(Aarg1, k1) } else FOR_0_LE_l_LT_p { if (ARES) { if (TARG == 0.0) /* we are at the tie */ { MINDEC(ret_c,0); AARG1 = 5.0; AARG2 = 5.0; } else if (coval <= 0.0) MINDEC(ret_c,2); } HOV_INC(Ares, k1) HOV_INC(Aarg1, k1) HOV_INC(Aarg2, k1) } } } break; case ref_cond_assign_s: /* cond_assign_s */ arg2 = get_locint_r(); arg1 = get_locint_r(); arg = get_locint_r(); coval = get_val_r(); ASSIGN_T(Targ2, rpp_T[arg2]) res = (size_t)trunc(fabs(TARG2)); GET_TAYL(res,k,p) ASSIGN_A(Aarg1, rpp_A[arg1]) ASSIGN_A(Ares, rpp_A[res]) ASSIGN_T(Targ, rpp_T[arg]) /* olvo 980925 changed code a little bit */ if (TARG == 0.0) /* we are at the tie */ { FOR_0_LE_l_LT_p { if (ARES) AARG1 = 5.0; HOV_INC(Aarg1, k1) HOV_INC(Ares, k1) } MINDEC(ret_c,0); } else if (TARG > 0.0) { if (res != arg1) FOR_0_LE_l_LT_p { if (0 == ARES) { HOV_INC(Ares, k1) HOV_INC(Aarg1, k1) } else { if (coval <= 0.0) MINDEC(ret_c,2); MAXDEC(AARG1,ARES); ARES_INC = 0.0; AARG1_INC_O; FOR_0_LE_i_LT_k { (AARG1_INC) += ARES; ARES_INC = 0; } } } else FOR_0_LE_l_LT_p { if ((coval <= 0.0) && (ARES)) MINDEC(ret_c,2); HOV_INC(Ares, k1) } } break; /****************************************************************************/ /* REMAINING STUFF */ /*--------------------------------------------------------------------------*/ case take_stock_op: /* take_stock_op */ res = get_locint_r(); size = get_locint_r(); d = get_val_v_r(size); res += size; for (ls=size;ls>0;ls--) { res--; ASSIGN_A( Ares, rpp_A[res]) FOR_0_LE_l_LT_pk1 ARES_INC = 0.0; } break; /*--------------------------------------------------------------------------*/ case death_not: /* death_not */ arg2 = get_locint_r(); arg1 = get_locint_r(); for (j=arg1;j<=arg2;j++) { ASSIGN_A(Aarg1, rpp_A[j]) FOR_0_LE_l_LT_p for (i=0; i 0) printf("operation %3d: %6d time(s) - %6d taylors read (%10.2f per operation)\n", v, countPerOperation[v], taylorPerOperation[v], (double)taylorPerOperation[v] / (double)countPerOperation[v]); printf("\n"); #endif /* ADOLC_DEBUG */ /* clean up */ free((char*)*rpp_T); free((char*) rpp_T); free(*rpp_A); free(rpp_A); free(rp_Ttemp); free(rp_Ttemp2); free(rp_Atemp); free(rp_Atemp2); free((char*) jj); free((char*) x); end_sweep(); return ret_c; } /****************************************************************************/ /* THAT'S ALL */ END_C_DECLS ADOL-C-2.4.1/ADOL-C/src/tape_handling.cpp0000644000076600007660000014242512030074043016063 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: tape_handling.cpp Revision: $Id: tape_handling.cpp 353 2012-09-24 15:11:31Z kulshres $ Contents: management of tape infos Copyright (c) Andreas Kowarz, Andrea Walther, Kshitij Kulshreshtha, Benjamin Letschert This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #include "taping_p.h" #include "checkpointing_p.h" #include #include #include #include #include #ifdef HAVE_UNISTD_H #include #endif #include #include #include using namespace std; #ifdef SPARSE BEGIN_C_DECLS extern void freeSparseJacInfos(double *y, double **B, unsigned int **JP, void *g, void *jr1d, int seed_rows, int seed_clms, int depen); extern void freeSparseHessInfos(double **Hcomp, double ***Xppp, double ***Yppp, double ***Zppp, double **Upp, unsigned int **HP, void *g, void *hr, int p, int indep); END_C_DECLS #endif GlobalTapeVarsCL::GlobalTapeVarsCL() { store = NULL; storeSize = 0; numLives = 0; storeManagerPtr = new StoreManagerLocintBlock(store, storeSize, numLives); } GlobalTapeVarsCL::~GlobalTapeVarsCL() { if (storeManagerPtr) { delete storeManagerPtr; storeManagerPtr = NULL; } } const GlobalTapeVarsCL& GlobalTapeVarsCL::operator=(const GlobalTapeVarsCL& gtv) { storeSize = gtv.storeSize; numLives = gtv.numLives; maxLoc = gtv.maxLoc; operationBufferSize = gtv.operationBufferSize; locationBufferSize = gtv.locationBufferSize; valueBufferSize = gtv.valueBufferSize; taylorBufferSize = gtv.taylorBufferSize; maxNumberTaylorBuffers = gtv.maxNumberTaylorBuffers; inParallelRegion = gtv.inParallelRegion; newTape = gtv.newTape; branchSwitchWarning = gtv.branchSwitchWarning; currentTapeInfosPtr = gtv.currentTapeInfosPtr; store = new double[storeSize]; memcpy(store, gtv.store, storeSize*sizeof(double)); storeManagerPtr = new StoreManagerLocintBlock( dynamic_cast(gtv.storeManagerPtr), store, storeSize, numLives); return *this; } StoreManagerLocint::StoreManagerLocint(double * &storePtr, size_t &size, size_t &numlives) : storePtr(storePtr), indexFree(0), head(0), maxsize(size), currentfill(numlives) { #ifdef ADOLC_DEBUG std::cerr << "StoreManagerInteger::StoreManagerInteger()\n"; #endif } StoreManagerLocint::~StoreManagerLocint() { #ifdef ADOLC_DEBUG std::cerr << "StoreManagerInteger::~StoreManagerInteger()\n"; #endif if (storePtr) { delete[] storePtr; storePtr = 0; } if (indexFree) { delete[] indexFree; indexFree = 0; } maxsize = 0; currentfill = 0; head = 0; } StoreManagerLocint::StoreManagerLocint(const StoreManagerLocint *const stm, double * &storePtr, size_t &size, size_t &numlives) : storePtr(storePtr), maxsize(size), currentfill(numlives) { #ifdef ADOLC_DEBUG std::cerr << "StoreManagerInteger::StoreManagerInteger()\n"; #endif head = stm->head; indexFree = new locint[maxsize]; for (int i = 0; i < maxsize; i++) indexFree[i] = stm->indexFree[i]; } locint StoreManagerLocint::next_loc() { if (head == 0) { grow(); } assert(head); locint const result = head; head = indexFree[head]; ++currentfill; #ifdef ADOLC_DEBUG std::cerr << "next_loc: " << result << " fill: " << size() << "max: " << maxSize() << endl; #endif return result; } void StoreManagerLocint::free_loc(locint loc) { assert(0 < loc && loc < maxsize); indexFree[loc] = head; head = loc; --currentfill; #ifdef ADOLC_DEBUG std::cerr << "free_loc: " << loc << " fill: " << size() << "max: " << maxSize() << endl; #endif } void StoreManagerLocint::grow() { if (maxsize == 0) maxsize += initialSize; size_t const oldMaxsize = maxsize; maxsize *= 2; if (maxsize > std::numeric_limits::max()) { // encapsulate this error message fprintf(DIAG_OUT,"\nADOL-C error:\n"); fprintf(DIAG_OUT,"maximal number (%d) of live active variables exceeded\n\n", std::numeric_limits::max()); exit(-3); } #ifdef ADOLC_DEBUG std::cerr << "StoreManagerInteger::grow(): increase size from " << oldMaxsize << " to " << maxsize << " entries (currently " << size() << " entries used)\n"; assert(oldMaxsize == initialSize or size() == oldMaxsize); #endif double *const oldStore = storePtr; locint *const oldIndex = indexFree; #if defined(ADOLC_DEBUG) std::cerr << "StoreManagerInteger::grow(): allocate " << maxsize * sizeof(double) << " B doubles " << "and " << maxsize * sizeof(locint) << " B locints\n"; #endif storePtr = new double[maxsize]; indexFree = new locint[maxsize]; // we use index 0 as end-of-list marker size_t i = 1; storePtr[0] = std::numeric_limits::quiet_NaN(); if (oldMaxsize != initialSize) { // not the first time #if defined(ADOLC_DEBUG) std::cerr << "StoreManagerInteger::grow(): copy values\n"; #endif for (size_t j = i; j < oldMaxsize; ++j) { indexFree[j] = oldIndex[j]; } for (size_t j = i; j < oldMaxsize; ++j) { storePtr[j] = oldStore[j]; } // reset i to start of new slots (upper half) i = oldMaxsize; #if defined(ADOLC_DEBUG) std::cerr << "StoreManagerInteger::grow(): free " << oldMaxsize * sizeof(double) << " + " << oldMaxsize * sizeof(locint) << " B\n"; #endif delete [] oldStore; delete [] oldIndex; } head = i; // create initial linked list for new slots for ( ; i < maxsize-1; ++i) { indexFree[i] = i + 1; } indexFree[i] = 0; // end marker assert(i == maxsize-1); } /****************************************************************************/ /* Returns the next free location in "adouble" memory. */ /****************************************************************************/ locint next_loc() { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; return ADOLC_GLOBAL_TAPE_VARS.storeManagerPtr->next_loc(); } /****************************************************************************/ /* frees the specified location in "adouble" memory */ /****************************************************************************/ void free_loc(locint loc) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; ADOLC_GLOBAL_TAPE_VARS.storeManagerPtr->free_loc(loc); } /* vector of tape infos for all tapes in use */ vector ADOLC_TAPE_INFOS_BUFFER_DECL; /* stack of pointers to tape infos * represents the order of tape usage when doing nested taping */ stack ADOLC_TAPE_STACK_DECL; /* the main tape info buffer and its fallback */ TapeInfos ADOLC_CURRENT_TAPE_INFOS_DECL; TapeInfos ADOLC_CURRENT_TAPE_INFOS_FALLBACK_DECL; /* global tapeing variables */ GlobalTapeVars ADOLC_GLOBAL_TAPE_VARS_DECL; #if defined(_OPENMP) static vector *tapeInfosBuffer_s; static stack *tapeStack_s; static TapeInfos *currentTapeInfos_s; static TapeInfos *currentTapeInfos_fallBack_s; static GlobalTapeVars *globalTapeVars_s; static ADOLC_BUFFER_TYPE *ADOLC_extDiffFctsBuffer_s; static stack *ADOLC_checkpointsStack_s; static revolve_nums *revolve_numbers_s; static vector *tapeInfosBuffer_p; static stack *tapeStack_p; static TapeInfos *currentTapeInfos_p; static TapeInfos *currentTapeInfos_fallBack_p; static GlobalTapeVars *globalTapeVars_p; static ADOLC_BUFFER_TYPE *ADOLC_extDiffFctsBuffer_p; static stack *ADOLC_checkpointsStack_p; static revolve_nums *revolve_numbers_p; #endif /*--------------------------------------------------------------------------*/ /* This function sets the flag "newTape" if either a taylor buffer has been */ /* created or a taping process has been performed. Calling the function is */ /* also useful to "convince" the linker of including the cleaner part into */ /* the binary when linking statically! */ /*--------------------------------------------------------------------------*/ void markNewTape() { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; ADOLC_GLOBAL_TAPE_VARS.newTape = 1; } /* inits the struct for the new tape */ void initTapeInfos(TapeInfos *newTapeInfos) { char *ptr; ptr = (char *)newTapeInfos; for (unsigned int i = 0; i < sizeof(TapeInfos) - sizeof(PersistantTapeInfos); ++i) ptr[i] = 0; } /* as above but keep allocated buffers if possible */ void initTapeInfos_keep(TapeInfos *newTapeInfos) { unsigned char *opBuffer = newTapeInfos->opBuffer; locint *locBuffer = newTapeInfos->locBuffer; double *valBuffer = newTapeInfos->valBuffer; revreal *tayBuffer = newTapeInfos->tayBuffer; FILE *tay_file = newTapeInfos->tay_file; initTapeInfos(newTapeInfos); newTapeInfos->opBuffer = opBuffer; newTapeInfos->locBuffer = locBuffer; newTapeInfos->valBuffer = valBuffer; newTapeInfos->tayBuffer = tayBuffer; newTapeInfos->tay_file = tay_file; } /* inits a new tape and updates the tape stack (called from start_trace) * - returns 0 without error * - returns 1 if tapeID was already/still in use */ int initNewTape(short tapeID) { TapeInfos *newTapeInfos = NULL; bool newTI = false; int retval = 0; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; /* check if tape is in use */ vector::iterator tiIter; if (!ADOLC_TAPE_INFOS_BUFFER.empty()) { for (tiIter=ADOLC_TAPE_INFOS_BUFFER.begin(); tiIter!=ADOLC_TAPE_INFOS_BUFFER.end(); ++tiIter) { if ((*tiIter)->tapeID==tapeID) { newTapeInfos=*tiIter; if ((*tiIter)->inUse != 0) { if ((*tiIter)->tapingComplete == 0) fail(ADOLC_TAPING_TAPE_STILL_IN_USE); if ( (*tiIter)->stats[OP_FILE_ACCESS] == 0 && (*tiIter)->stats[LOC_FILE_ACCESS] == 0 && (*tiIter)->stats[VAL_FILE_ACCESS] == 0 ) { # if defined(ADOLC_DEBUG) fprintf(DIAG_OUT, "\nADOL-C warning: Tape %d existed in main memory" " only and gets overwritten!\n\n", tapeID); # endif /* free associated resources */ retval = 1; } } if ((*tiIter)->tay_file != NULL) rewind((*tiIter)->tay_file); initTapeInfos_keep(*tiIter); (*tiIter)->tapeID = tapeID; #ifdef SPARSE freeSparseJacInfos(newTapeInfos->pTapeInfos.sJinfos.y, newTapeInfos->pTapeInfos.sJinfos.B, newTapeInfos->pTapeInfos.sJinfos.JP, newTapeInfos->pTapeInfos.sJinfos.g, newTapeInfos->pTapeInfos.sJinfos.jr1d, newTapeInfos->pTapeInfos.sJinfos.seed_rows, newTapeInfos->pTapeInfos.sJinfos.seed_clms, newTapeInfos->pTapeInfos.sJinfos.depen); freeSparseHessInfos(newTapeInfos->pTapeInfos.sHinfos.Hcomp, newTapeInfos->pTapeInfos.sHinfos.Xppp, newTapeInfos->pTapeInfos.sHinfos.Yppp, newTapeInfos->pTapeInfos.sHinfos.Zppp, newTapeInfos->pTapeInfos.sHinfos.Upp, newTapeInfos->pTapeInfos.sHinfos.HP, newTapeInfos->pTapeInfos.sHinfos.g, newTapeInfos->pTapeInfos.sHinfos.hr, newTapeInfos->pTapeInfos.sHinfos.p, newTapeInfos->pTapeInfos.sHinfos.indep); newTapeInfos->pTapeInfos.inJacSparseUse=0; newTapeInfos->pTapeInfos.inHessSparseUse=0; newTapeInfos->pTapeInfos.sJinfos.B=NULL; newTapeInfos->pTapeInfos.sJinfos.y=NULL; newTapeInfos->pTapeInfos.sJinfos.g=NULL; newTapeInfos->pTapeInfos.sJinfos.jr1d=NULL; newTapeInfos->pTapeInfos.sJinfos.Seed=NULL; newTapeInfos->pTapeInfos.sJinfos.JP=NULL; newTapeInfos->pTapeInfos.sJinfos.depen=0; newTapeInfos->pTapeInfos.sJinfos.nnz_in=0; newTapeInfos->pTapeInfos.sJinfos.seed_rows=0; newTapeInfos->pTapeInfos.sJinfos.seed_clms=0; newTapeInfos->pTapeInfos.sHinfos.Zppp=NULL; newTapeInfos->pTapeInfos.sHinfos.Yppp=NULL; newTapeInfos->pTapeInfos.sHinfos.Xppp=NULL; newTapeInfos->pTapeInfos.sHinfos.Upp=NULL; newTapeInfos->pTapeInfos.sHinfos.Hcomp=NULL; newTapeInfos->pTapeInfos.sHinfos.HP=NULL; newTapeInfos->pTapeInfos.sHinfos.g=NULL; newTapeInfos->pTapeInfos.sHinfos.hr=NULL; newTapeInfos->pTapeInfos.sHinfos.nnz_in=0; newTapeInfos->pTapeInfos.sHinfos.indep=0; newTapeInfos->pTapeInfos.sHinfos.p=0; #endif break; } } } /* create new info struct and initialize it */ if (newTapeInfos == NULL) { newTapeInfos = new TapeInfos(tapeID); newTI = true; } newTapeInfos->traceFlag=1; newTapeInfos->inUse=1; #ifdef SPARSE newTapeInfos->pTapeInfos.inJacSparseUse=0; newTapeInfos->pTapeInfos.inHessSparseUse=0; newTapeInfos->pTapeInfos.sJinfos.B=NULL; newTapeInfos->pTapeInfos.sJinfos.y=NULL; newTapeInfos->pTapeInfos.sJinfos.g=NULL; newTapeInfos->pTapeInfos.sJinfos.jr1d=NULL; newTapeInfos->pTapeInfos.sJinfos.Seed=NULL; newTapeInfos->pTapeInfos.sJinfos.JP=NULL; newTapeInfos->pTapeInfos.sJinfos.depen=0; newTapeInfos->pTapeInfos.sJinfos.nnz_in=0; newTapeInfos->pTapeInfos.sJinfos.seed_rows=0; newTapeInfos->pTapeInfos.sJinfos.seed_clms=0; newTapeInfos->pTapeInfos.sHinfos.Zppp=NULL; newTapeInfos->pTapeInfos.sHinfos.Yppp=NULL; newTapeInfos->pTapeInfos.sHinfos.Xppp=NULL; newTapeInfos->pTapeInfos.sHinfos.Upp=NULL; newTapeInfos->pTapeInfos.sHinfos.Hcomp=NULL; newTapeInfos->pTapeInfos.sHinfos.HP=NULL; newTapeInfos->pTapeInfos.sHinfos.g=NULL; newTapeInfos->pTapeInfos.sHinfos.hr=NULL; newTapeInfos->pTapeInfos.sHinfos.nnz_in=0; newTapeInfos->pTapeInfos.sHinfos.indep=0; newTapeInfos->pTapeInfos.sHinfos.p=0; #endif newTapeInfos->stats[OP_BUFFER_SIZE] = ADOLC_GLOBAL_TAPE_VARS.operationBufferSize; newTapeInfos->stats[LOC_BUFFER_SIZE] = ADOLC_GLOBAL_TAPE_VARS.locationBufferSize; newTapeInfos->stats[VAL_BUFFER_SIZE] = ADOLC_GLOBAL_TAPE_VARS.valueBufferSize; newTapeInfos->stats[TAY_BUFFER_SIZE] = ADOLC_GLOBAL_TAPE_VARS.taylorBufferSize; /* update tapeStack and save tapeInfos */ if (ADOLC_GLOBAL_TAPE_VARS.currentTapeInfosPtr != NULL) { memcpy(ADOLC_GLOBAL_TAPE_VARS.currentTapeInfosPtr, &ADOLC_CURRENT_TAPE_INFOS, sizeof(TapeInfos)); ADOLC_TAPE_STACK.push(ADOLC_GLOBAL_TAPE_VARS.currentTapeInfosPtr); } else { memcpy(&ADOLC_CURRENT_TAPE_INFOS_FALLBACK, &ADOLC_CURRENT_TAPE_INFOS, sizeof(TapeInfos)); ADOLC_TAPE_STACK.push(&ADOLC_CURRENT_TAPE_INFOS_FALLBACK); } if (newTI) ADOLC_TAPE_INFOS_BUFFER.push_back(newTapeInfos); /* set the new tape infos as current */ memcpy(&ADOLC_CURRENT_TAPE_INFOS, newTapeInfos, sizeof(TapeInfos)); ADOLC_GLOBAL_TAPE_VARS.currentTapeInfosPtr = newTapeInfos; return retval; } /* opens an existing tape or creates a new handle for a tape on hard disk * - called from init_for_sweep and init_rev_sweep */ void openTape(short tapeID, char mode) { TapeInfos *tempTapeInfos=NULL; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; /* check if tape information exist in memory */ vector::iterator tiIter; if (!ADOLC_TAPE_INFOS_BUFFER.empty()) { for (tiIter=ADOLC_TAPE_INFOS_BUFFER.begin(); tiIter!=ADOLC_TAPE_INFOS_BUFFER.end(); ++tiIter) { if ((*tiIter)->tapeID == tapeID) { /* tape has been used before (in the current program) */ if ((*tiIter)->inUse == 0) { /* forward sweep */ if ((*tiIter)->tay_file != NULL) rewind((*tiIter)->tay_file); initTapeInfos_keep(*tiIter); (*tiIter)->traceFlag=1; (*tiIter)->tapeID = tapeID; (*tiIter)->tapingComplete = 1; (*tiIter)->inUse = 1; read_tape_stats(*tiIter); } if (ADOLC_GLOBAL_TAPE_VARS.currentTapeInfosPtr != NULL) { memcpy(ADOLC_GLOBAL_TAPE_VARS.currentTapeInfosPtr, &ADOLC_CURRENT_TAPE_INFOS, sizeof(TapeInfos)); ADOLC_TAPE_STACK.push( ADOLC_GLOBAL_TAPE_VARS.currentTapeInfosPtr); } else { memcpy(&ADOLC_CURRENT_TAPE_INFOS_FALLBACK, &ADOLC_CURRENT_TAPE_INFOS, sizeof(TapeInfos)); ADOLC_TAPE_STACK.push(&ADOLC_CURRENT_TAPE_INFOS_FALLBACK); } memcpy(&ADOLC_CURRENT_TAPE_INFOS, *tiIter, sizeof(TapeInfos)); ADOLC_GLOBAL_TAPE_VARS.currentTapeInfosPtr = *tiIter; return; } } } /* tapeID not used so far */ if (mode == ADOLC_REVERSE) { failAdditionalInfo1 = tapeID; fail(ADOLC_REVERSE_NO_TAYLOR_STACK); } /* create new info struct and initialize it */ tempTapeInfos = new TapeInfos(tapeID); tempTapeInfos->traceFlag=1; tempTapeInfos->inUse = 1; tempTapeInfos->tapingComplete = 1; ADOLC_TAPE_INFOS_BUFFER.push_back(tempTapeInfos); read_tape_stats(tempTapeInfos); /* update tapeStack and save tapeInfos */ if (ADOLC_GLOBAL_TAPE_VARS.currentTapeInfosPtr != NULL) { memcpy(ADOLC_GLOBAL_TAPE_VARS.currentTapeInfosPtr, &ADOLC_CURRENT_TAPE_INFOS, sizeof(TapeInfos)); ADOLC_TAPE_STACK.push(ADOLC_GLOBAL_TAPE_VARS.currentTapeInfosPtr); } else { memcpy(&ADOLC_CURRENT_TAPE_INFOS_FALLBACK, &ADOLC_CURRENT_TAPE_INFOS, sizeof(TapeInfos)); ADOLC_TAPE_STACK.push(&ADOLC_CURRENT_TAPE_INFOS_FALLBACK); } /* set the new tape infos as current */ memcpy(&ADOLC_CURRENT_TAPE_INFOS, tempTapeInfos, sizeof(TapeInfos)); ADOLC_GLOBAL_TAPE_VARS.currentTapeInfosPtr = tempTapeInfos; } /* release the current tape and give control to the previous one */ void releaseTape() { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; /* if operations, locations and constants tapes have been written and value * stack information have not been created tapeInfos are no longer needed*/ if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors == 0 && ADOLC_CURRENT_TAPE_INFOS.stats[OP_FILE_ACCESS] == 1 && ADOLC_CURRENT_TAPE_INFOS.stats[LOC_FILE_ACCESS] == 1 && ADOLC_CURRENT_TAPE_INFOS.stats[VAL_FILE_ACCESS] == 1 ) { ADOLC_CURRENT_TAPE_INFOS.inUse = 0; } memcpy(ADOLC_GLOBAL_TAPE_VARS.currentTapeInfosPtr, &ADOLC_CURRENT_TAPE_INFOS, sizeof(TapeInfos)); ADOLC_GLOBAL_TAPE_VARS.currentTapeInfosPtr = ADOLC_TAPE_STACK.top(); memcpy(&ADOLC_CURRENT_TAPE_INFOS, ADOLC_GLOBAL_TAPE_VARS.currentTapeInfosPtr, sizeof(TapeInfos)); ADOLC_TAPE_STACK.pop(); if (ADOLC_TAPE_STACK.empty()) ADOLC_GLOBAL_TAPE_VARS.currentTapeInfosPtr = NULL; } /* updates the tape infos for the given ID - a tapeInfos struct is created * and registered if non is found but its state will remain "not in use" */ TapeInfos *getTapeInfos(short tapeID) { TapeInfos *tapeInfos; vector::iterator tiIter; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; /* check if TapeInfos for tapeID exist */ if (!ADOLC_TAPE_INFOS_BUFFER.empty()) { for (tiIter=ADOLC_TAPE_INFOS_BUFFER.begin(); tiIter!=ADOLC_TAPE_INFOS_BUFFER.end(); ++tiIter) { if ((*tiIter)->tapeID==tapeID) { tapeInfos=*tiIter; if (tapeInfos->inUse==0) read_tape_stats(tapeInfos); return tapeInfos; } } } /* create new TapeInfos, initialize and update tapeInfosBuffer */ tapeInfos = new TapeInfos(tapeID); ADOLC_TAPE_INFOS_BUFFER.push_back(tapeInfos); tapeInfos->traceFlag=1; tapeInfos->inUse=0; #ifdef SPARSE tapeInfos->pTapeInfos.inJacSparseUse=0; tapeInfos->pTapeInfos.inHessSparseUse=0; #endif tapeInfos->tapingComplete = 1; read_tape_stats(tapeInfos); return tapeInfos; } #ifdef SPARSE /* updates the tape infos on sparse Jac for the given ID */ void setTapeInfoJacSparse(short tapeID, SparseJacInfos sJinfos) { TapeInfos *tapeInfos; vector::iterator tiIter; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; /* check if TapeInfos for tapeID exist */ if (!ADOLC_TAPE_INFOS_BUFFER.empty()) { for (tiIter=ADOLC_TAPE_INFOS_BUFFER.begin(); tiIter!=ADOLC_TAPE_INFOS_BUFFER.end(); ++tiIter) { if ((*tiIter)->tapeID==tapeID) { tapeInfos=*tiIter; // free memory of tape entry that had been used previously freeSparseJacInfos(tapeInfos->pTapeInfos.sJinfos.y, tapeInfos->pTapeInfos.sJinfos.B, tapeInfos->pTapeInfos.sJinfos.JP, tapeInfos->pTapeInfos.sJinfos.g, tapeInfos->pTapeInfos.sJinfos.jr1d, tapeInfos->pTapeInfos.sJinfos.seed_rows, tapeInfos->pTapeInfos.sJinfos.seed_clms, tapeInfos->pTapeInfos.sJinfos.depen); tapeInfos->pTapeInfos.sJinfos.y=sJinfos.y; tapeInfos->pTapeInfos.sJinfos.Seed=sJinfos.Seed; tapeInfos->pTapeInfos.sJinfos.B=sJinfos.B; tapeInfos->pTapeInfos.sJinfos.JP=sJinfos.JP; tapeInfos->pTapeInfos.sJinfos.depen=sJinfos.depen; tapeInfos->pTapeInfos.sJinfos.nnz_in=sJinfos.nnz_in; tapeInfos->pTapeInfos.sJinfos.seed_clms=sJinfos.seed_clms; tapeInfos->pTapeInfos.sJinfos.seed_rows=sJinfos.seed_rows; tapeInfos->pTapeInfos.sJinfos.g=sJinfos.g; tapeInfos->pTapeInfos.sJinfos.jr1d=sJinfos.jr1d; } } } } #endif #ifdef SPARSE /* updates the tape infos on sparse Hess for the given ID */ void setTapeInfoHessSparse(short tapeID, SparseHessInfos sHinfos) { TapeInfos *tapeInfos; vector::iterator tiIter; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; /* check if TapeInfos for tapeID exist */ if (!ADOLC_TAPE_INFOS_BUFFER.empty()) { for (tiIter=ADOLC_TAPE_INFOS_BUFFER.begin(); tiIter!=ADOLC_TAPE_INFOS_BUFFER.end(); ++tiIter) { if ((*tiIter)->tapeID==tapeID) { tapeInfos=*tiIter; // free memory of tape entry that had been used previously freeSparseHessInfos(tapeInfos->pTapeInfos.sHinfos.Hcomp, tapeInfos->pTapeInfos.sHinfos.Xppp, tapeInfos->pTapeInfos.sHinfos.Yppp, tapeInfos->pTapeInfos.sHinfos.Zppp, tapeInfos->pTapeInfos.sHinfos.Upp, tapeInfos->pTapeInfos.sHinfos.HP, tapeInfos->pTapeInfos.sHinfos.g, tapeInfos->pTapeInfos.sHinfos.hr, tapeInfos->pTapeInfos.sHinfos.p, tapeInfos->pTapeInfos.sHinfos.indep); tapeInfos->pTapeInfos.sHinfos.Hcomp=sHinfos.Hcomp; tapeInfos->pTapeInfos.sHinfos.Xppp=sHinfos.Xppp; tapeInfos->pTapeInfos.sHinfos.Yppp=sHinfos.Yppp; tapeInfos->pTapeInfos.sHinfos.Zppp=sHinfos.Zppp; tapeInfos->pTapeInfos.sHinfos.Upp=sHinfos.Upp; tapeInfos->pTapeInfos.sHinfos.HP=sHinfos.HP; tapeInfos->pTapeInfos.sHinfos.indep=sHinfos.indep; tapeInfos->pTapeInfos.sHinfos.nnz_in=sHinfos.nnz_in; tapeInfos->pTapeInfos.sHinfos.p=sHinfos.p; tapeInfos->pTapeInfos.sHinfos.g=sHinfos.g; tapeInfos->pTapeInfos.sHinfos.hr=sHinfos.hr; } } } } #endif void init() { ADOLC_OPENMP_THREAD_NUMBER; errno = 0; ADOLC_OPENMP_GET_THREAD_NUMBER; #if defined(_OPENMP) tapeInfosBuffer = new vector; tapeStack = new stack; currentTapeInfos = new TapeInfos; currentTapeInfos->tapingComplete = 1; currentTapeInfos_fallBack = new TapeInfos; globalTapeVars = new GlobalTapeVars; ADOLC_extDiffFctsBuffer = new ADOLC_BUFFER_TYPE; ADOLC_checkpointsStack = new stack; revolve_numbers = new revolve_nums; #endif /* _OPENMP */ ADOLC_CURRENT_TAPE_INFOS.traceFlag = 0; ADOLC_CURRENT_TAPE_INFOS.keepTaylors = 0; ADOLC_GLOBAL_TAPE_VARS.maxLoc=1; for (uint i=0; i::iterator tiIter; if (!ADOLC_TAPE_INFOS_BUFFER.empty()) { for (tiIter=ADOLC_TAPE_INFOS_BUFFER.begin(); tiIter!=ADOLC_TAPE_INFOS_BUFFER.end(); ++tiIter) { /* close open files though they may be incomplete */ if ((*tiIter)->op_file!=NULL) { fclose((*tiIter)->op_file); (*tiIter)->op_file = NULL; } if ((*tiIter)->val_file!=NULL) { fclose((*tiIter)->val_file); (*tiIter)->val_file = NULL; } if ((*tiIter)->loc_file!=NULL) { fclose((*tiIter)->loc_file); (*tiIter)->loc_file = NULL; } if ((*tiIter)->tay_file!=NULL) { fclose((*tiIter)->tay_file); (*tiIter)->tay_file = NULL; remove((*tiIter)->pTapeInfos.tay_fileName); } if ((*tiIter)->opBuffer != NULL) { free((*tiIter)->opBuffer); (*tiIter)->opBuffer = NULL; } if ((*tiIter)->valBuffer != NULL) { free((*tiIter)->valBuffer); (*tiIter)->valBuffer = NULL; } if ((*tiIter)->locBuffer != NULL) { free((*tiIter)->locBuffer); (*tiIter)->locBuffer = NULL; } if ((*tiIter)->tayBuffer != NULL) { free((*tiIter)->tayBuffer); (*tiIter)->tayBuffer = NULL; } #ifdef SPARSE freeSparseJacInfos((*tiIter)->pTapeInfos.sJinfos.y, (*tiIter)->pTapeInfos.sJinfos.B, (*tiIter)->pTapeInfos.sJinfos.JP, (*tiIter)->pTapeInfos.sJinfos.g, (*tiIter)->pTapeInfos.sJinfos.jr1d, (*tiIter)->pTapeInfos.sJinfos.seed_rows, (*tiIter)->pTapeInfos.sJinfos.seed_clms, (*tiIter)->pTapeInfos.sJinfos.depen); freeSparseHessInfos((*tiIter)->pTapeInfos.sHinfos.Hcomp, (*tiIter)->pTapeInfos.sHinfos.Xppp, (*tiIter)->pTapeInfos.sHinfos.Yppp, (*tiIter)->pTapeInfos.sHinfos.Zppp, (*tiIter)->pTapeInfos.sHinfos.Upp, (*tiIter)->pTapeInfos.sHinfos.HP, (*tiIter)->pTapeInfos.sHinfos.g, (*tiIter)->pTapeInfos.sHinfos.hr, (*tiIter)->pTapeInfos.sHinfos.p, (*tiIter)->pTapeInfos.sHinfos.indep); #endif /* remove "main" tape files if not all three have been written */ int filesWritten = (*tiIter)->stats[OP_FILE_ACCESS] + (*tiIter)->stats[LOC_FILE_ACCESS] + (*tiIter)->stats[VAL_FILE_ACCESS]; if ( (filesWritten > 0) && ((*tiIter)->pTapeInfos.keepTape == 0) ) { /* try to remove all tapes (even those not written by this * run) => this ensures that there is no mixture of tapes from * different ADOLC runs */ if ( (*tiIter)->stats[OP_FILE_ACCESS] == 1 ) remove((*tiIter)->pTapeInfos.op_fileName); if ( (*tiIter)->stats[LOC_FILE_ACCESS] == 1 ) remove((*tiIter)->pTapeInfos.loc_fileName); if ( (*tiIter)->stats[VAL_FILE_ACCESS] == 1 ) remove((*tiIter)->pTapeInfos.val_fileName); } if ((*tiIter)->pTapeInfos.op_fileName != NULL) { free((*tiIter)->pTapeInfos.op_fileName); (*tiIter)->pTapeInfos.op_fileName = NULL; } if ((*tiIter)->pTapeInfos.val_fileName != NULL) { free((*tiIter)->pTapeInfos.val_fileName); (*tiIter)->pTapeInfos.val_fileName = NULL; } if ((*tiIter)->pTapeInfos.loc_fileName != NULL) { free((*tiIter)->pTapeInfos.loc_fileName); (*tiIter)->pTapeInfos.loc_fileName = NULL; } if ((*tiIter)->pTapeInfos.tay_fileName != NULL) { free((*tiIter)->pTapeInfos.tay_fileName); (*tiIter)->pTapeInfos.tay_fileName = NULL; } delete *tiIter; } } cp_clearStack(); if (ADOLC_GLOBAL_TAPE_VARS.store != NULL) { delete[] ADOLC_GLOBAL_TAPE_VARS.store; ADOLC_GLOBAL_TAPE_VARS.store = NULL; } #if defined(_OPENMP) if (ADOLC_GLOBAL_TAPE_VARS.inParallelRegion == 0) { /* cleanup on program exit */ delete revolve_numbers; delete ADOLC_checkpointsStack; delete ADOLC_extDiffFctsBuffer; delete globalTapeVars; delete currentTapeInfos; delete currentTapeInfos_fallBack; delete tapeStack; delete tapeInfosBuffer; } #endif ADOLC_OPENMP_RESTORE_THREAD_NUMBER; clearTapeBaseNames(); } int removeTape(short tapeID, short type) { TapeInfos *tapeInfos = NULL; vector::iterator tiIter; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; /* check if TapeInfos for tapeID exist */ if (!ADOLC_TAPE_INFOS_BUFFER.empty()) { for (tiIter = ADOLC_TAPE_INFOS_BUFFER.begin(); tiIter != ADOLC_TAPE_INFOS_BUFFER.end(); ++tiIter) { if ((*tiIter)->tapeID == tapeID) { tapeInfos = *tiIter; if (tapeInfos->tapingComplete == 0) return -1; ADOLC_TAPE_INFOS_BUFFER.erase(tiIter); break; } } } if (tapeInfos == NULL) { // might be on disk only tapeInfos = new TapeInfos(tapeID); tapeInfos->tapingComplete = 1; } freeTapeResources(tapeInfos); #ifdef SPARSE freeSparseJacInfos(tapeInfos->pTapeInfos.sJinfos.y, tapeInfos->pTapeInfos.sJinfos.B, tapeInfos->pTapeInfos.sJinfos.JP, tapeInfos->pTapeInfos.sJinfos.g, tapeInfos->pTapeInfos.sJinfos.jr1d, tapeInfos->pTapeInfos.sJinfos.seed_rows, tapeInfos->pTapeInfos.sJinfos.seed_clms, tapeInfos->pTapeInfos.sJinfos.depen); freeSparseHessInfos(tapeInfos->pTapeInfos.sHinfos.Hcomp, tapeInfos->pTapeInfos.sHinfos.Xppp, tapeInfos->pTapeInfos.sHinfos.Yppp, tapeInfos->pTapeInfos.sHinfos.Zppp, tapeInfos->pTapeInfos.sHinfos.Upp, tapeInfos->pTapeInfos.sHinfos.HP, tapeInfos->pTapeInfos.sHinfos.g, tapeInfos->pTapeInfos.sHinfos.hr, tapeInfos->pTapeInfos.sHinfos.p, tapeInfos->pTapeInfos.sHinfos.indep); #endif ADOLC_OPENMP_RESTORE_THREAD_NUMBER; if (type == ADOLC_REMOVE_COMPLETELY) { remove(tapeInfos->pTapeInfos.op_fileName); remove(tapeInfos->pTapeInfos.loc_fileName); remove(tapeInfos->pTapeInfos.val_fileName); } free(tapeInfos->pTapeInfos.op_fileName); free(tapeInfos->pTapeInfos.val_fileName); free(tapeInfos->pTapeInfos.loc_fileName); if (tapeInfos->pTapeInfos.tay_fileName != NULL) free(tapeInfos->pTapeInfos.tay_fileName); delete tapeInfos; return 0; } /****************************************************************************/ /* Initialization for the taping process. Creates buffers for this tape, */ /* sets files names, and calls appropriate setup routines. */ /****************************************************************************/ int trace_on(short tnum, int keepTaylors) { int retval = 0; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; /* allocate memory for TapeInfos and update tapeStack */ retval = initNewTape(tnum); ADOLC_CURRENT_TAPE_INFOS.keepTaylors=keepTaylors; if (keepTaylors!=0) ADOLC_CURRENT_TAPE_INFOS.deg_save=1; start_trace(); take_stock(); /* record all existing adoubles on the tape */ return retval; } int trace_on(short tnum, int keepTaylors, uint obs, uint lbs, uint vbs, uint tbs) { int retval = 0; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; /* allocate memory for TapeInfos and update tapeStack */ retval = initNewTape(tnum); ADOLC_CURRENT_TAPE_INFOS.stats[OP_BUFFER_SIZE] = obs; ADOLC_CURRENT_TAPE_INFOS.stats[LOC_BUFFER_SIZE] = lbs; ADOLC_CURRENT_TAPE_INFOS.stats[VAL_BUFFER_SIZE] = vbs; ADOLC_CURRENT_TAPE_INFOS.stats[TAY_BUFFER_SIZE] = tbs; ADOLC_CURRENT_TAPE_INFOS.keepTaylors=keepTaylors; if (keepTaylors!=0) ADOLC_CURRENT_TAPE_INFOS.deg_save=1; start_trace(); take_stock(); /* record all existing adoubles on the tape */ return retval; } /****************************************************************************/ /* Stop Tracing. Cleans up, and turns off trace_flag. Flag not equal zero */ /* enforces writing of the three main tape files (op+loc+val). */ /****************************************************************************/ void trace_off(int flag) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.keepTape = flag; keep_stock(); /* copy remaining live variables + trace_flag = 0 */ stop_trace(flag); cout.flush(); ADOLC_CURRENT_TAPE_INFOS.tapingComplete = 1; releaseTape(); } bool isTaping() { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; return ADOLC_CURRENT_TAPE_INFOS.traceFlag != 0; } /****************************************************************************/ /* A class for initialization/finalization and OpenMP handling */ /****************************************************************************/ class Keeper { public: inline Keeper() { dummy = 0; init(); readConfigFile(); } inline ~Keeper() { cleanUp(); } inline void touch() { dummy = 1; } private: int dummy; }; /* a static instance that does all work */ static Keeper theKeeper; /** * Hope to convince the linker to link the keeper code into the executable. */ void initADOLC() { theKeeper.touch(); } /****************************************************************************/ /****************************************************************************/ /* The following is necessary to provide a separate ADOL-C environment for */ /* each OpenMP worker. */ /****************************************************************************/ /****************************************************************************/ #if defined(_OPENMP) #include "adolc_openmp.h" ADOLC_OpenMP ADOLC_OpenMP_Handler; ADOLC_OpenMP_NC ADOLC_OpenMP_Handler_NC; int ADOLC_parallel_doCopy; static bool waitForMaster_begin = true; static bool waitForMaster_end = true; static bool firstParallel = true; /****************************************************************************/ /* Used by OpenMP to create a separate environment for every worker thread. */ /****************************************************************************/ void beginParallel() { ADOLC_OPENMP_THREAD_NUMBER; #if defined(ADOLC_THREADSAVE_ERRNO) errno = omp_get_thread_num(); #endif ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_threadNumber == 0) { /* master only */ int numThreads = omp_get_num_threads(); tapeInfosBuffer_s = tapeInfosBuffer; tapeStack_s = tapeStack; currentTapeInfos_s = currentTapeInfos; currentTapeInfos_fallBack_s = currentTapeInfos_fallBack; globalTapeVars_s = globalTapeVars; ADOLC_extDiffFctsBuffer_s = ADOLC_extDiffFctsBuffer; ADOLC_checkpointsStack_s = ADOLC_checkpointsStack; revolve_numbers_s = revolve_numbers; if (firstParallel) { tapeInfosBuffer = new vector[numThreads]; tapeStack = new stack[numThreads]; currentTapeInfos = new TapeInfos[numThreads]; currentTapeInfos_fallBack = new TapeInfos[numThreads]; globalTapeVars = new GlobalTapeVars[numThreads]; ADOLC_extDiffFctsBuffer = new ADOLC_BUFFER_TYPE[numThreads]; ADOLC_checkpointsStack = new stack[numThreads]; revolve_numbers = new revolve_nums[numThreads]; } else { tapeInfosBuffer = tapeInfosBuffer_p; tapeStack = tapeStack_p; currentTapeInfos = currentTapeInfos_p; currentTapeInfos_fallBack = currentTapeInfos_fallBack_p; globalTapeVars = globalTapeVars_p; ADOLC_extDiffFctsBuffer = ADOLC_extDiffFctsBuffer_p; ADOLC_checkpointsStack = ADOLC_checkpointsStack_p; revolve_numbers = revolve_numbers_p; } /* - set inParallelRegion for tmpGlobalTapeVars because it is source * for initializing the parallel globalTapeVars structs * - inParallelRegion has to be set to one for all workers by master. * This is necessary, to deter a speedy master from assuming all * workers are done, in endParallel, before they even leaved * beginParallel. */ globalTapeVars_s[0].inParallelRegion = 1; for (int i = 0; i < numThreads; ++i) globalTapeVars[i].inParallelRegion = 1; waitForMaster_end = true; waitForMaster_begin = false; } else while (waitForMaster_begin) { usleep(1000); /* if anyone knows a better value, ... :-) */ } if (firstParallel) { ADOLC_EXT_DIFF_FCTS_BUFFER.init(init_CpInfos); /* Use assignment operator instead of open coding * this copies the store and the storemanager too */ ADOLC_GLOBAL_TAPE_VARS = *globalTapeVars_s; ADOLC_GLOBAL_TAPE_VARS.newTape = 0; ADOLC_CURRENT_TAPE_INFOS.tapingComplete = 1; ADOLC_GLOBAL_TAPE_VARS.currentTapeInfosPtr = NULL; } else { if (ADOLC_parallel_doCopy) { ADOLC_GLOBAL_TAPE_VARS.storeSize = globalTapeVars_s->storeSize; ADOLC_GLOBAL_TAPE_VARS.numLives = globalTapeVars_s->numLives; ADOLC_GLOBAL_TAPE_VARS.branchSwitchWarning = globalTapeVars_s->branchSwitchWarning; /* deleting the storemanager deletes the store too */ delete ADOLC_GLOBAL_TAPE_VARS.storeManagerPtr; ADOLC_GLOBAL_TAPE_VARS.store = new double[ADOLC_GLOBAL_TAPE_VARS.storeSize]; memcpy(ADOLC_GLOBAL_TAPE_VARS.store, globalTapeVars_s->store, ADOLC_GLOBAL_TAPE_VARS.storeSize * sizeof(double)); ADOLC_GLOBAL_TAPE_VARS.storeManagerPtr = new StoreManagerLocintBlock( dynamic_cast(globalTapeVars_s->storeManagerPtr), ADOLC_GLOBAL_TAPE_VARS.store, ADOLC_GLOBAL_TAPE_VARS.storeSize, ADOLC_GLOBAL_TAPE_VARS.numLives); } } } /****************************************************************************/ /* Used by OpenMP to destroy the separate environment of every worker. */ /****************************************************************************/ /* There are n+1 instances of ADOLC_OpenMP => n within the parallel region * and one in the serial part! */ void endParallel() { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; /* do nothing if called at program exit (serial part) */ if (ADOLC_threadNumber == 0 && ADOLC_GLOBAL_TAPE_VARS.inParallelRegion == 0) return; ADOLC_GLOBAL_TAPE_VARS.inParallelRegion = 0; if (ADOLC_threadNumber == 0) { /* master only */ int num; int numThreads = omp_get_num_threads(); bool firstIt = true; do { /* wait until all slaves have left the parallel part */ if (firstIt) firstIt = false; else usleep(1000); /* no busy waiting */ num = 1; for (int i = 1; i < numThreads; ++i) if (globalTapeVars[i].inParallelRegion == 0) ++num; } while (num != numThreads); firstParallel = false; revolve_numbers_p = revolve_numbers; ADOLC_checkpointsStack_p = ADOLC_checkpointsStack; ADOLC_extDiffFctsBuffer_p = ADOLC_extDiffFctsBuffer; globalTapeVars_p = globalTapeVars; currentTapeInfos_p = currentTapeInfos; currentTapeInfos_fallBack_p = currentTapeInfos_fallBack; tapeStack_p = tapeStack; tapeInfosBuffer_p = tapeInfosBuffer; revolve_numbers = revolve_numbers_s; ADOLC_checkpointsStack = ADOLC_checkpointsStack_s; ADOLC_extDiffFctsBuffer = ADOLC_extDiffFctsBuffer_s; globalTapeVars = globalTapeVars_s; currentTapeInfos = currentTapeInfos_s; currentTapeInfos_fallBack = currentTapeInfos_fallBack_s; tapeStack = tapeStack_s; tapeInfosBuffer = tapeInfosBuffer_s; ADOLC_GLOBAL_TAPE_VARS.inParallelRegion = 0; waitForMaster_begin = true; waitForMaster_end = false; } else while (waitForMaster_end) { usleep(1000); // no busy waiting } } #endif /* _OPENMP */ TapeInfos::TapeInfos() { initTapeInfos(this); } TapeInfos::TapeInfos(short _tapeID) { initTapeInfos(this); tapeID = _tapeID; pTapeInfos.op_fileName = createFileName(tapeID, OPERATIONS_TAPE); pTapeInfos.loc_fileName = createFileName(tapeID, LOCATIONS_TAPE); pTapeInfos.val_fileName = createFileName(tapeID, VALUES_TAPE); pTapeInfos.tay_fileName = NULL; } StoreManagerLocintBlock::StoreManagerLocintBlock(double * &storePtr, size_t &size, size_t &numlives) : storePtr(storePtr), maxsize(size), currentfill(numlives) { indexFree.clear(); #ifdef ADOLC_DEBUG std::cerr << "StoreManagerIntegerBlock::StoreManagerIntegerBlock()\n"; #endif } StoreManagerLocintBlock::~StoreManagerLocintBlock() { #ifdef ADOLC_DEBUG std::cerr << "StoreManagerIntegerBlock::~StoreManagerIntegerBlock()\n"; #endif if (storePtr) { delete[] storePtr; storePtr = 0; } if (!indexFree.empty() ) { indexFree.clear(); } maxsize = 0; currentfill = 0; } StoreManagerLocintBlock::StoreManagerLocintBlock( const StoreManagerLocintBlock *const stm, double * &storePtr, size_t &size, size_t &numlives) : storePtr(storePtr), maxsize(size), currentfill(numlives) { #ifdef ADOLC_DEBUG std::cerr << "StoreManagerInteger::StoreManagerInteger()\n"; #endif indexFree.clear(); list::const_iterator iter = stm->indexFree.begin(); for (; iter != stm->indexFree.end(); iter++) indexFree.push_back( *iter ); } locint StoreManagerLocintBlock::next_loc() { if ( indexFree.empty() ) grow(); locint const result = indexFree.front().next; indexFree.front().next++; indexFree.front().size--; ++currentfill; #ifdef ADOLC_DEBUG std::cerr << "StoreManagerLocintBlock::next_loc: result: " << result << " fill: " << size() << "max: " << maxSize() << endl; list::iterator iter = indexFree.begin(); for( ; iter != indexFree.end(); iter++ ) std::cerr << "INDEXFELD ( " << iter->next << " , " << iter->size << ")" << endl; #endif if (indexFree.front().size == 0) { if (indexFree.size() <= 1) grow(); else indexFree.pop_front(); } return result; } void StoreManagerLocintBlock::ensure_block(size_t n) { bool found = false; #ifdef ADOLC_DEBUG std::cerr << "StoreManagerLocintBlock::ensure_Block: required " << n << " ... "; std::cerr << "searching for big enough block " << endl; #endif list::iterator iter = indexFree.begin(); for (; iter != indexFree.end() ; iter++ ) { if ( iter->size >= n) { if (iter != indexFree.begin() ) { struct FreeBlock tmp(*iter); iter = indexFree.erase(iter); indexFree.push_front(tmp); } found = true; break; } } if (!found) { #ifdef ADOLC_DEBUG std::cerr << "no big enough block...growing " << endl; #endif grow(n); } #ifdef ADOLC_DEBUG std::cerr << "StoreManagerLocintBlock::ensure_Block: " << " fill: " << size() << "max: " << maxSize() << " ensure_Block (" << n << ")" << endl; iter = indexFree.begin(); for( ; iter != indexFree.end(); iter++ ) std::cerr << "INDEXFELD ( " << iter->next << " , " << iter->size << ")" << endl; #endif } void StoreManagerLocintBlock::grow(size_t minGrow) { // first figure out what eventual size we want size_t const oldMaxsize = maxsize; if (maxsize == 0){ maxsize = initialSize; } else { maxsize *= 2; } if (minGrow > 0) { while (maxsize - oldMaxsize < minGrow) { maxsize *= 2; } } if (maxsize > std::numeric_limits::max()) { // encapsulate this error message fprintf(DIAG_OUT,"\nADOL-C error:\n"); fprintf(DIAG_OUT,"maximal number (%u) of live active variables exceeded\n\n", std::numeric_limits::max()); exit(-3); } #ifdef ADOLC_DEBUG // index 0 is not used, means one slot less std::cerr << "StoreManagerIntegerBlock::grow(): increase size from " << oldMaxsize << " to " << maxsize << " entries (currently " << size() << " entries used)\n"; #endif double *const oldStore = storePtr; #if defined(ADOLC_DEBUG) std::cerr << "StoreManagerInteger::grow(): allocate " << maxsize * sizeof(double) << " B doubles\n"; #endif storePtr = new double[maxsize]; assert(storePtr); memset(storePtr, 0, maxsize*sizeof(double)); if (oldStore != NULL) { // not the first time #if defined(ADOLC_DEBUG) std::cerr << "StoreManagerInteger::grow(): copy values\n"; #endif memcpy(storePtr, oldStore, oldMaxsize*sizeof(double)); #if defined(ADOLC_DEBUG) std::cerr << "StoreManagerInteger::grow(): free " << oldMaxsize * sizeof(double) << "\n"; #endif delete [] oldStore; } bool foundTail = false; list::iterator iter = indexFree.begin(); for (; iter != indexFree.end() ; iter++ ) { if (iter->next + iter->size == oldMaxsize ) { iter->size += (maxsize - oldMaxsize); struct FreeBlock tmp(*iter); iter = indexFree.erase(iter); indexFree.push_front(tmp); foundTail = true; break; } } if (! foundTail) { struct FreeBlock tmp; tmp.next = oldMaxsize; tmp.size = (maxsize - oldMaxsize); indexFree.push_front(tmp); } iter = indexFree.begin(); while (iter != indexFree.end()) { if (iter->size == 0) iter=indexFree.erase(iter); // don't leave 0 blocks around else iter++; } #ifdef ADOLC_DEBUG std::cerr << "Growing:" << endl; iter = indexFree.begin(); for( ; iter != indexFree.end(); iter++ ) std::cerr << "INDEXFELD ( " << iter->next << " , " << iter->size << ")" << endl; #endif } void StoreManagerLocintBlock::free_loc(locint loc) { assert( loc < maxsize); list::iterator iter = indexFree.begin(); for (; iter != indexFree.end() ; iter++ ) { if (loc+1 == iter->next || iter->next + iter->size == loc) { iter->size++; if (loc + 1 == iter->next) iter->next = loc; // bringing the matched element to the front maybe a good idea // in case several contiguous adouble are deallcated right after // one another, e.g. advector struct FreeBlock tmp(*iter); iter = indexFree.erase(iter); indexFree.push_front(tmp); iter = indexFree.begin(); break; } } if (iter == indexFree.end()) { struct FreeBlock tmp; tmp.next = loc; tmp.size = 1; indexFree.push_front(tmp); } --currentfill; #ifdef ADOLC_DEBUG std::cerr << "free_loc: " << loc << " fill: " << size() << "max: " << maxSize() << endl; iter = indexFree.begin(); for( ; iter != indexFree.end(); iter++ ) std::cerr << "INDEXFELD ( " << iter->next << " , " << iter->size << ")" << endl; #endif } void ensureContiguousLocations(size_t n) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; ADOLC_GLOBAL_TAPE_VARS.storeManagerPtr->ensure_block(n); } ADOL-C-2.4.1/ADOL-C/src/forward_partx.c0000644000076600007660000001356011412425466015621 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: forward_partx.c Revision: $Id: forward_partx.c 106 2010-06-29 17:19:50Z kulshres $ Contents: Copyright (c) Andrea Walther This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #include #include BEGIN_C_DECLS /*--------------------------------------------------------------------------*/ /* ZOS_PARTX */ /* zos_forward_partx(tag, m, mdim[n], n, x[n][d], y[m]) */ /* (based on zos_forward) */ int zos_forward_partx(short tag, int m, int n, int *ndim, double **x, double *y) { double *x0; /* base point */ int i,j,ind,sum_n, rc; sum_n = 0; for(i=0;i #include BEGIN_C_DECLS /****************************************************************************/ /* Now the C THINGS */ #define EDFCTS_BLOCK_SIZE 10 ext_diff_fct *get_ext_diff_fct(int index); void init_ext_diff_fct(ext_diff_fct *edfct); END_C_DECLS /****************************************************************************/ #endif /* ADOLC_EXTERNFCTS_P_H */ ADOL-C-2.4.1/ADOL-C/src/fov_reverse.c0000644000076600007660000000140611227420735015256 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: fov_reverse.c Revision: $Id: fov_reverse.c 42 2009-07-15 18:37:17Z awalther $ Contents: fov_reverse (first-order-vector reverse mode) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #define _FOV_ 1 #include #undef _FOV_ ADOL-C-2.4.1/ADOL-C/src/fov_forward.c0000644000076600007660000000142611227420735015251 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: fov_forward.c Revision: $Id: fov_forward.c 42 2009-07-15 18:37:17Z awalther $ Contents: fov_forward (first-order-vector forward mode) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #define _FOV_ 1 #undef _KEEP_ #include #undef _FOV_ ADOL-C-2.4.1/ADOL-C/src/config.h.in0000644000076600007660000001025112120122253014571 0ustar coincoin/* ADOL-C/src/config.h.in. Generated from configure.ac by autoheader. */ /* ADOL-C adouble zeroing mode */ #undef ADOLC_ADOUBLE_STDCZERO /* ADOL-C debug mode */ #undef ADOLC_DEBUG /* ADOL-C hard debug mode */ #undef ADOLC_HARDDEBUG /* ADOL-C Patchlevel */ #undef ADOLC_PATCHLEVEL /* ADOL-C Subversion */ #undef ADOLC_SUBVERSION /* ADOL-C thread save errno mode */ #undef ADOLC_THREADSAVE_ERRNO /* Use calloc instead of malloc for memory allocation */ #undef ADOLC_USE_CALLOC /* ADOL-C Version */ #undef ADOLC_VERSION /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the `floor' function. */ #undef HAVE_FLOOR /* Define to 1 if you have the `fmax' function. */ #undef HAVE_FMAX /* Define to 1 if you have the `fmin' function. */ #undef HAVE_FMIN /* Define to 1 if you have the `ftime' function. */ #undef HAVE_FTIME /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define 1 if ColPack is available */ #undef HAVE_LIBCOLPACK /* Define to 1 if your system has a GNU libc compatible `malloc' function, and to 0 otherwise. */ #undef HAVE_MALLOC /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the `pow' function. */ #undef HAVE_POW /* Define to 1 if your system has a GNU libc compatible `realloc' function, and to 0 otherwise. */ #undef HAVE_REALLOC /* Define to 1 if you have the `sqrt' function. */ #undef HAVE_SQRT /* Define to 1 if stdbool.h conforms to C99. */ #undef HAVE_STDBOOL_H /* Define to 1 if you have the header file. */ #undef HAVE_STDDEF_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDIO_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the `strchr' function. */ #undef HAVE_STRCHR /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the `strtol' function. */ #undef HAVE_STRTOL /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TIMEB_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the `trunc' function. */ #undef HAVE_TRUNC /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if the system has the type `_Bool'. */ #undef HAVE__BOOL /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* The size of `void *', as computed by sizeof. */ #undef SIZEOF_VOID_P /* Define 1 if sparse derivative propagation is to be enabled */ #undef SPARSE /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define to 1 if you can safely include both and . */ #undef TIME_WITH_SYS_TIME /* Define to 1 if your declares `struct tm'. */ #undef TM_IN_SYS_TIME /* Version number of package */ #undef VERSION /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus #undef inline #endif /* Define to rpl_malloc if the replacement function should be used. */ #undef malloc /* Define to rpl_realloc if the replacement function should be used. */ #undef realloc /* Define to `unsigned int' if does not define. */ #undef size_t ADOL-C-2.4.1/ADOL-C/src/adouble.cpp0000644000076600007660000021326312062606020014701 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: adouble.cpp Revision: $Id: adouble.cpp 376 2012-12-14 11:22:56Z kulshres $ Contents: adouble.C contains that definitions of procedures used to define various badouble, adub, and adouble operations. These operations actually have two purposes. The first purpose is to actual compute the function, just as the same code written for double precision (single precision - complex - interval) arithmetic would. The second purpose is to write a transcript of the computation for the reverse pass of automatic differentiation. Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel, Kshitij Kulshreshtha This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #include #include "oplate.h" #include "taping_p.h" using namespace std; /****************************************************************************/ /* HELPFUL FUNCTIONS */ /*--------------------------------------------------------------------------*/ void condassign( double &res, const double &cond, const double &arg1, const double &arg2 ) { res = cond > 0 ? arg1 : arg2; } /*--------------------------------------------------------------------------*/ void condassign( double &res, const double &cond, const double &arg) { res = cond > 0 ? arg : res; } /*--------------------------------------------------------------------------*/ /* The remaining routines define the badouble, adub and adouble routines. */ /*--------------------------------------------------------------------------*/ /****************************************************************************/ /* CONSTRUCTORS */ /*--------------------------------------------------------------------------*/ adouble::adouble() { location = next_loc(); ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; #if defined(ADOLC_ADOUBLE_STDCZERO) if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(assign_d_zero); ADOLC_PUT_LOCINT(location); // = res } ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[location]); ADOLC_GLOBAL_TAPE_VARS.store[location] = 0.; #endif } /*--------------------------------------------------------------------------*/ adouble::adouble( double coval ) { location = next_loc(); ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { if (coval == 0) { put_op(assign_d_zero); ADOLC_PUT_LOCINT(location); // = res } else if (coval == 1.0) { put_op(assign_d_one); ADOLC_PUT_LOCINT(location); // = res } else { put_op(assign_d); ADOLC_PUT_LOCINT(location); // = res ADOLC_PUT_VAL(coval); // = coval } ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[location]); } ADOLC_GLOBAL_TAPE_VARS.store[location] = coval; } /*--------------------------------------------------------------------------*/ adouble::adouble( const adouble& a ) { location = next_loc(); ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(assign_a); ADOLC_PUT_LOCINT(a.location); // = arg ADOLC_PUT_LOCINT(location); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[location]); } ADOLC_GLOBAL_TAPE_VARS.store[location] = ADOLC_GLOBAL_TAPE_VARS.store[a.location]; } /*--------------------------------------------------------------------------*/ adouble::adouble( const adub& a ) { location = next_loc(); ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(assign_a); ADOLC_PUT_LOCINT(a.loc()); // = arg ADOLC_PUT_LOCINT(location); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[location]); } ADOLC_GLOBAL_TAPE_VARS.store[location] = ADOLC_GLOBAL_TAPE_VARS.store[a.loc()]; } /****************************************************************************/ /* DESTRUCTORS */ /*--------------------------------------------------------------------------*/ adouble::~adouble() { #ifdef overwrite free_loc(location); #endif } /*--------------------------------------------------------------------------*/ adub::~adub() { #ifdef overwrite free_loc(location); #endif } /****************************************************************************/ /* VALUE */ /*--------------------------------------------------------------------------*/ double badouble::getValue() const { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; return ADOLC_GLOBAL_TAPE_VARS.store[location]; } void badouble::setValue( const double x ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; ADOLC_GLOBAL_TAPE_VARS.store[location]=x; } /****************************************************************************/ /* ASSIGNMENTS */ /*--------------------------------------------------------------------------*/ /* Assign an adouble variable a constant value. */ badouble& badouble::operator = ( double coval ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { if (coval == 0) { put_op(assign_d_zero); ADOLC_PUT_LOCINT(location); // = res } else if (coval == 1.0) { put_op(assign_d_one); ADOLC_PUT_LOCINT(location); // = res } else { put_op(assign_d); ADOLC_PUT_LOCINT(location); // = res ADOLC_PUT_VAL(coval); // = coval } ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[location]); } ADOLC_GLOBAL_TAPE_VARS.store[location] = coval; return *this; } /*--------------------------------------------------------------------------*/ /* Assign an adouble variable a constant value. */ adouble& adouble::operator = ( double coval ) { (*this).badouble::operator=(coval); return (*this); } /*--------------------------------------------------------------------------*/ /* Assign an adouble variable to an independent value. */ badouble& badouble::operator <<= ( double coval ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { ADOLC_CURRENT_TAPE_INFOS.numInds++; put_op(assign_ind); ADOLC_PUT_LOCINT(location); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[location]); } ADOLC_GLOBAL_TAPE_VARS.store[location] = coval; return *this; } void badouble::declareIndependent() { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { ADOLC_CURRENT_TAPE_INFOS.numInds++; put_op(assign_ind); ADOLC_PUT_LOCINT(location); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[location]); } } /*--------------------------------------------------------------------------*/ /* Assign a float variable from a dependent adouble value. */ badouble& badouble::operator >>= ( double& coval ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { ADOLC_CURRENT_TAPE_INFOS.numDeps++; put_op(assign_dep); ADOLC_PUT_LOCINT(location); // = res } coval = double (ADOLC_GLOBAL_TAPE_VARS.store[location]); return *this; } void badouble::declareDependent() { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { ADOLC_CURRENT_TAPE_INFOS.numDeps++; put_op(assign_dep); ADOLC_PUT_LOCINT(location); // = res } } /*--------------------------------------------------------------------------*/ /* Assign an Badouble variable an Badouble value. */ badouble& badouble::operator = ( const badouble& x ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint x_loc = x.loc(); if (location!=x_loc) /* test this to avoid for x=x statements adjoint(x)=0 in reverse mode */ { if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_assign_a(location,x.location); put_op(assign_a); ADOLC_PUT_LOCINT(x_loc); // = arg ADOLC_PUT_LOCINT(location); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[location]); } ADOLC_GLOBAL_TAPE_VARS.store[location]=ADOLC_GLOBAL_TAPE_VARS.store[x_loc]; } return *this; } /*--------------------------------------------------------------------------*/ /* Assign an Badouble variable an Badouble value. */ adouble& adouble::operator = ( const badouble& x ) { (*this).badouble::operator=(x); return (*this); } /*--------------------------------------------------------------------------*/ /* Assign an adouble an adub */ /* olvo 980517 new version griewank */ badouble& badouble::operator = ( const adub& a ) { locint a_loc = a.loc(); ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; int upd = 0; /* 981020 olvo skip upd_resloc(..) if no tracing performed */ if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) upd = upd_resloc(a_loc,location); if (upd) { /* olvo 980708 new n2l & 980921 changed interface */ revreal tempVal = ADOLC_GLOBAL_TAPE_VARS.store[a_loc]; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_OVERWRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[location],&ADOLC_GLOBAL_TAPE_VARS.store[a_loc]); ADOLC_GLOBAL_TAPE_VARS.store[location] = tempVal; } else { if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_assign_a(location,a_loc); put_op(assign_a); ADOLC_PUT_LOCINT(a_loc); // = arg ADOLC_PUT_LOCINT(location); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[location]); } ADOLC_GLOBAL_TAPE_VARS.store[location] = ADOLC_GLOBAL_TAPE_VARS.store[a_loc]; } return *this; } /*--------------------------------------------------------------------------*/ /* Assign an adouble an adub */ /* olvo 980517 new version griewank */ adouble& adouble::operator = ( const adub& a ) { (*this).badouble::operator=(a); return (*this); } /****************************************************************************/ /* INPUT / OUTPUT */ /*--------------------------------------------------------------------------*/ /* Output an adouble value !!! No tracing of this action */ std::ostream& operator << ( std::ostream& out, const badouble& y ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; return out << ADOLC_GLOBAL_TAPE_VARS.store[y.location] << "(a)" ; } /*--------------------------------------------------------------------------*/ /* Input adouble value */ std::istream& operator >> ( std::istream& in, const badouble& y ) { double coval; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; in >> coval; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_assign_d(y.location,coval); if (coval == 0) { put_op(assign_d_zero); ADOLC_PUT_LOCINT(y.location); // = res } else if (coval == 1.0) { put_op(assign_d_one); ADOLC_PUT_LOCINT(y.location); // = res } else { put_op(assign_d); ADOLC_PUT_LOCINT(y.location); // = res ADOLC_PUT_VAL(coval); // = coval } ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[y.location]); } ADOLC_GLOBAL_TAPE_VARS.store[y.location] = coval; return in; } /****************************************************************************/ /* INCREMENT / DECREMENT */ /*--------------------------------------------------------------------------*/ /* Postfix increment */ adub adouble::operator++( int ) { locint locat = next_loc(); ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_assign_a(locat,location); put_op(assign_a); ADOLC_PUT_LOCINT(location); // = arg ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat]=ADOLC_GLOBAL_TAPE_VARS.store[location]; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_incr_decr_a(incr_a,location); put_op(incr_a); ADOLC_PUT_LOCINT(location); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[location]); } ADOLC_GLOBAL_TAPE_VARS.store[location]++; return locat; } /*--------------------------------------------------------------------------*/ /* Postfix decrement */ adub adouble::operator--( int ) { locint locat = next_loc(); ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_assign_a(locat,location); put_op(assign_a); ADOLC_PUT_LOCINT(location); // = arg ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat]=ADOLC_GLOBAL_TAPE_VARS.store[location]; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_incr_decr_a(decr_a,location); put_op(decr_a); ADOLC_PUT_LOCINT(location); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[location]); } ADOLC_GLOBAL_TAPE_VARS.store[location]--; return locat; } /*--------------------------------------------------------------------------*/ /* Prefix increment */ badouble& adouble::operator++() { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_incr_decr_a(incr_a,location); put_op(incr_a); ADOLC_PUT_LOCINT(location); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[location]); } ADOLC_GLOBAL_TAPE_VARS.store[location]++; return *this; } /*--------------------------------------------------------------------------*/ /* Prefix decrement */ badouble& adouble::operator--() { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_incr_decr_a(decr_a,location); put_op(decr_a); ADOLC_PUT_LOCINT(location); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[location]); } ADOLC_GLOBAL_TAPE_VARS.store[location]--; return *this; } /****************************************************************************/ /* OPERATION + ASSIGNMENT */ /*--------------------------------------------------------------------------*/ /* Adding a floating point to an adouble */ badouble& badouble::operator += ( double coval ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_d_same_arg(eq_plus_d,location,coval); put_op(eq_plus_d); ADOLC_PUT_LOCINT(location); // = res ADOLC_PUT_VAL(coval); // = coval ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[location]); } ADOLC_GLOBAL_TAPE_VARS.store[location] += coval; return *this; } /*--------------------------------------------------------------------------*/ /* Subtracting a floating point from an adouble */ badouble& badouble::operator -= ( double coval ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_d_same_arg(eq_min_d,location,coval); put_op(eq_min_d); ADOLC_PUT_LOCINT(location); // = res ADOLC_PUT_VAL(coval); // = coval ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[location]); } ADOLC_GLOBAL_TAPE_VARS.store[location] -= coval; return *this; } /*--------------------------------------------------------------------------*/ /* Add an adouble to another adouble */ badouble& badouble::operator += ( const badouble& y ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint y_loc = y.loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_a_same_arg(eq_plus_a,location,y.location); put_op(eq_plus_a); ADOLC_PUT_LOCINT(y_loc); // = arg ADOLC_PUT_LOCINT(location); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[location]); } ADOLC_GLOBAL_TAPE_VARS.store[location] += ADOLC_GLOBAL_TAPE_VARS.store[y_loc]; return *this; } /*--------------------------------------------------------------------------*/ /* olvo 991122 new version for y += x1 * x2; */ badouble& badouble::operator += ( const adub& a ) { locint a_loc = a.loc(); ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; int upd = 0; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { upd = upd_resloc_inc_prod(a_loc,location,eq_plus_prod); } if (upd) { ADOLC_GLOBAL_TAPE_VARS.store[location] += ADOLC_GLOBAL_TAPE_VARS.store[a_loc]; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_DELETE_SCAYLOR(&ADOLC_GLOBAL_TAPE_VARS.store[a_loc]); --ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; ++ADOLC_CURRENT_TAPE_INFOS.num_eq_prod; } else { if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_assign_a(location,a_loc); put_op(eq_plus_a); ADOLC_PUT_LOCINT(a_loc); // = arg ADOLC_PUT_LOCINT(location); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[location]); } ADOLC_GLOBAL_TAPE_VARS.store[location] += ADOLC_GLOBAL_TAPE_VARS.store[a_loc]; } return *this; } /*--------------------------------------------------------------------------*/ /* Subtract an adouble from another adouble */ badouble& badouble::operator -= ( const badouble& y ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint y_loc = y.loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_a_same_arg(eq_min_a,location,y.location); put_op(eq_min_a); ADOLC_PUT_LOCINT(y_loc); // = arg ADOLC_PUT_LOCINT(location); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[location]); } ADOLC_GLOBAL_TAPE_VARS.store[location] -= ADOLC_GLOBAL_TAPE_VARS.store[y_loc]; return *this; } /*--------------------------------------------------------------------------*/ /* olvo 991122 new version for y -= x1 * x2; */ badouble& badouble::operator -= ( const adub& a ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint a_loc = a.loc(); int upd = 0; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { upd = upd_resloc_inc_prod(a_loc,location,eq_min_prod); } if (upd) { ADOLC_GLOBAL_TAPE_VARS.store[location] -= ADOLC_GLOBAL_TAPE_VARS.store[a_loc]; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_DELETE_SCAYLOR(&ADOLC_GLOBAL_TAPE_VARS.store[a_loc]); --ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; ++ADOLC_CURRENT_TAPE_INFOS.num_eq_prod; } else { if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_assign_a(location,a_loc); put_op(eq_min_a); ADOLC_PUT_LOCINT(a_loc); // = arg ADOLC_PUT_LOCINT(location); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[location]); } ADOLC_GLOBAL_TAPE_VARS.store[location] -= ADOLC_GLOBAL_TAPE_VARS.store[a_loc]; } return *this; } /*--------------------------------------------------------------------------*/ /* Multiply an adouble by a floating point */ badouble& badouble::operator *= ( double coval ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_d_same_arg(eq_mult_d,location,coval); put_op(eq_mult_d); ADOLC_PUT_LOCINT(location); // = res ADOLC_PUT_VAL(coval); // = coval ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[location]); } ADOLC_GLOBAL_TAPE_VARS.store[location] *= coval; return *this; } /*--------------------------------------------------------------------------*/ /* Multiply one adouble by another adouble*/ badouble& badouble::operator *= ( const badouble& y ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint y_loc = y.loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_a_same_arg(eq_mult_a,location,y.location); put_op(eq_mult_a); ADOLC_PUT_LOCINT(y_loc); // = arg ADOLC_PUT_LOCINT(location); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[location]); } ADOLC_GLOBAL_TAPE_VARS.store[location] *= ADOLC_GLOBAL_TAPE_VARS.store[y_loc]; return *this; } /*--------------------------------------------------------------------------*/ badouble& badouble::operator /= (double y) { *this = *this/y; return *this; } /*--------------------------------------------------------------------------*/ badouble& badouble::operator /= (const badouble& y) { *this = *this * (1.0/y); return *this; } /****************************************************************************/ /* COMPARISON */ /*--------------------------------------------------------------------------*/ /* The Not Equal Operator (!=) */ int operator != ( const badouble& v, double coval ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (coval) return (-coval+v != 0); else { if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(ADOLC_GLOBAL_TAPE_VARS.store[v.location] ? neq_zero : eq_zero); ADOLC_PUT_LOCINT(v.location); } return (ADOLC_GLOBAL_TAPE_VARS.store[v.location] != 0); } } /*--------------------------------------------------------------------------*/ /* The Equal Operator (==) */ int operator == ( const badouble& v, double coval) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (coval) return (-coval+v == 0); else { if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(ADOLC_GLOBAL_TAPE_VARS.store[v.location] ? neq_zero : eq_zero); ADOLC_PUT_LOCINT(v.location); } return (ADOLC_GLOBAL_TAPE_VARS.store[v.location] == 0); } } /*--------------------------------------------------------------------------*/ /* The Less than or Equal Operator (<=) */ int operator <= ( const badouble& v, double coval ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (coval) return (-coval+v <= 0); else { int b = (ADOLC_GLOBAL_TAPE_VARS.store[v.location] <= 0); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(b ? le_zero : gt_zero); ADOLC_PUT_LOCINT(v.location); } return b; } } /*--------------------------------------------------------------------------*/ /* The Greater than or Equal Operator (>=) */ int operator >= ( const badouble& v, double coval ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (coval) return (-coval+v >= 0); else { int b = (ADOLC_GLOBAL_TAPE_VARS.store[v.location] >= 0); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(b ? ge_zero : lt_zero); ADOLC_PUT_LOCINT(v.location); } return b; } } /*--------------------------------------------------------------------------*/ /* The Greater than Operator (>) */ int operator > ( const badouble& v, double coval ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (coval) return (-coval+v > 0); else { int b = (ADOLC_GLOBAL_TAPE_VARS.store[v.location] > 0); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(b ? gt_zero : le_zero); ADOLC_PUT_LOCINT(v.location); } return b; } } /*--------------------------------------------------------------------------*/ /* The Less than Operator (<) */ int operator < ( const badouble& v, double coval ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (coval) return (-coval+v < 0); else { int b = (ADOLC_GLOBAL_TAPE_VARS.store[v.location] < 0); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(b ? lt_zero : ge_zero); ADOLC_PUT_LOCINT(v.location); } return b; } } /****************************************************************************/ /* SIGN OPERATORS */ /*--------------------------------------------------------------------------*/ /* olvo 980709 modified positive sign operator ??? possibly there is a better way */ adub operator + ( const badouble& x ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_pos_sign_a(locat,x.location); put_op(pos_sign_a); ADOLC_PUT_LOCINT(x.location); // = arg ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = ADOLC_GLOBAL_TAPE_VARS.store[x.location]; return locat; } /*--------------------------------------------------------------------------*/ /* olvo 980709 modified negative sign operator */ adub operator - ( const badouble& x ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_neg_sign_a(locat,x.location); put_op(neg_sign_a); ADOLC_PUT_LOCINT(x.location); // = arg ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = -ADOLC_GLOBAL_TAPE_VARS.store[x.location]; return locat; } /****************************************************************************/ /* BINARY OPERATORS */ /* NOTE: each operator calculates address of temporary and returns an adub */ /*--------------------------------------------------------------------------*/ /* Adding two adoubles */ adub operator + ( const badouble& x, const badouble& y ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_two_a_rec(plus_a_a,locat,x.location,y.location); put_op(plus_a_a); ADOLC_PUT_LOCINT(x.location); // = arg1 ADOLC_PUT_LOCINT(y.location); // = arg2 ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = ADOLC_GLOBAL_TAPE_VARS.store[x.location] + ADOLC_GLOBAL_TAPE_VARS.store[y.location]; return locat; } /*--------------------------------------------------------------------------*/ /* Adding a adouble and a floating point */ adub operator + ( double coval, const badouble& y ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); /* olvo 980708 test coval to be zero */ if (coval) { if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_args_d_a(plus_d_a,locat,coval,y.location); put_op(plus_d_a); ADOLC_PUT_LOCINT(y.location); // = arg ADOLC_PUT_LOCINT(locat); // = res ADOLC_PUT_VAL(coval); // = coval ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = coval + ADOLC_GLOBAL_TAPE_VARS.store[y.location]; } else { if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_pos_sign_a(locat,y.location); put_op(pos_sign_a); ADOLC_PUT_LOCINT(y.location); // = arg ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = ADOLC_GLOBAL_TAPE_VARS.store[y.location]; } return locat; } /*--------------------------------------------------------------------------*/ adub operator + ( const badouble& y, double coval) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); /* olvo 980708 test coval to be zero */ if (coval) { if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_args_d_a(plus_d_a,locat,coval,y.location); put_op(plus_d_a); ADOLC_PUT_LOCINT(y.location); // = arg ADOLC_PUT_LOCINT(locat); // = res ADOLC_PUT_VAL(coval); // = coval ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = coval + ADOLC_GLOBAL_TAPE_VARS.store[y.location]; } else { if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_pos_sign_a(locat,y.location); put_op(pos_sign_a); ADOLC_PUT_LOCINT(y.location); // = arg ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = ADOLC_GLOBAL_TAPE_VARS.store[y.location]; } return locat; } /*--------------------------------------------------------------------------*/ /* Subtraction of two adoubles */ adub operator - ( const badouble& x, const badouble& y ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_two_a_rec(min_a_a,locat,x.location,y.location); put_op(min_a_a); ADOLC_PUT_LOCINT(x.location); // = arg1 ADOLC_PUT_LOCINT(y.location); // = arg2 ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = ADOLC_GLOBAL_TAPE_VARS.store[x.location] - ADOLC_GLOBAL_TAPE_VARS.store[y.location]; return locat; } /*--------------------------------------------------------------------------*/ /* Subtract an adouble from a floating point */ adub operator - ( double coval, const badouble& y ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); /* olvo 980708 test coval to be zero */ if (coval) { if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_args_d_a(min_d_a,locat,coval,y.location); put_op(min_d_a); ADOLC_PUT_LOCINT(y.location); // = arg ADOLC_PUT_LOCINT(locat); // = res ADOLC_PUT_VAL(coval); // = coval ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = coval - ADOLC_GLOBAL_TAPE_VARS.store[y.location]; } else { if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_neg_sign_a(locat,y.location); put_op(neg_sign_a); ADOLC_PUT_LOCINT(y.location); // = arg ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = -ADOLC_GLOBAL_TAPE_VARS.store[y.location]; } return locat; } /*--------------------------------------------------------------------------*/ /* Multiply two adoubles */ adub operator * ( const badouble& x, const badouble& y ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_two_a_rec(mult_a_a,locat,x.location,y.location); put_op(mult_a_a); ADOLC_PUT_LOCINT(x.location); // = arg1 ADOLC_PUT_LOCINT(y.location); // = arg2 ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = ADOLC_GLOBAL_TAPE_VARS.store[x.location] * ADOLC_GLOBAL_TAPE_VARS.store[y.location]; return locat; } /*--------------------------------------------------------------------------*/ /* Multiply an adouble by a floating point */ /* olvo 980709 modified */ adub operator * ( double coval, const badouble& y ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); if ( coval == 1.0 ) { if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_pos_sign_a(locat,y.location); put_op(pos_sign_a); ADOLC_PUT_LOCINT(y.location); // = arg ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = ADOLC_GLOBAL_TAPE_VARS.store[y.location]; } else if ( coval == -1.0 ) { if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_neg_sign_a(locat,y.location); put_op(neg_sign_a); ADOLC_PUT_LOCINT(y.location); // = arg ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = -ADOLC_GLOBAL_TAPE_VARS.store[y.location]; } else { if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_args_d_a(mult_d_a,locat,coval,y.location); put_op(mult_d_a); ADOLC_PUT_LOCINT(y.location); // = arg ADOLC_PUT_LOCINT(locat); // = res ADOLC_PUT_VAL(coval); // = coval ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = coval * ADOLC_GLOBAL_TAPE_VARS.store[y.location]; } return locat; } /*--------------------------------------------------------------------------*/ /* Divide an adouble by another adouble */ adub operator / ( const badouble& x, const badouble& y ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_two_a_rec(div_a_a,locat,x.location,y.location); put_op(div_a_a); ADOLC_PUT_LOCINT(x.location); // = arg1 ADOLC_PUT_LOCINT(y.location); // = arg2 ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = ADOLC_GLOBAL_TAPE_VARS.store[x.location] / ADOLC_GLOBAL_TAPE_VARS.store[y.location]; return locat; } /*--------------------------------------------------------------------------*/ /* Division floating point - adouble */ adub operator / ( double coval, const badouble& y ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_args_d_a(div_d_a,locat,coval,y.location); put_op(div_d_a); ADOLC_PUT_LOCINT(y.location); // = arg ADOLC_PUT_LOCINT(locat); // = res ADOLC_PUT_VAL(coval); // = coval ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = coval / ADOLC_GLOBAL_TAPE_VARS.store[y.location]; return locat; } /****************************************************************************/ /* SINGLE OPERATIONS */ /*--------------------------------------------------------------------------*/ /* Compute exponential of adouble */ adub exp ( const badouble& x ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_single_op(exp_op,locat,x.location); put_op(exp_op); ADOLC_PUT_LOCINT(x.location); // = arg ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = ADOLC_MATH_NSP::exp(ADOLC_GLOBAL_TAPE_VARS.store[x.location]); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; return locat; } /*--------------------------------------------------------------------------*/ /* Compute logarithm of adouble */ adub log ( const badouble& x ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_single_op(log_op,locat,x.location); put_op(log_op); ADOLC_PUT_LOCINT(x.location); // = arg ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = ADOLC_MATH_NSP::log(ADOLC_GLOBAL_TAPE_VARS.store[x.location]); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; return locat; } /*--------------------------------------------------------------------------*/ /* Compute sqrt of adouble */ adub sqrt ( const badouble& x ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_single_op(sqrt_op,locat,x.location); put_op(sqrt_op); ADOLC_PUT_LOCINT(x.location); // = arg ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = ADOLC_MATH_NSP::sqrt(ADOLC_GLOBAL_TAPE_VARS.store[x.location]); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; return locat; } /****************************************************************************/ /* QUAD OPERATIONS */ /*--------------------------------------------------------------------------*/ /* Compute sin of adouble !!! Sin and Cos are always evaluated together */ adub sin ( const badouble& x ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); adouble y; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_quad(sin_op,locat,x.location,y.location); put_op(sin_op); ADOLC_PUT_LOCINT(x.location); // = arg1 ADOLC_PUT_LOCINT(y.location); // = arg2 ADOLC_PUT_LOCINT(locat); // = res ADOLC_CURRENT_TAPE_INFOS.numTays_Tape += 2; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) { /* olvo 980921 changed order */ ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[y.location]); ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } } ADOLC_GLOBAL_TAPE_VARS.store[locat] = ADOLC_MATH_NSP::sin(ADOLC_GLOBAL_TAPE_VARS.store[x.location]); ADOLC_GLOBAL_TAPE_VARS.store[y.location] = ADOLC_MATH_NSP::cos(ADOLC_GLOBAL_TAPE_VARS.store[x.location]); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; return locat; } /*--------------------------------------------------------------------------*/ /* Compute cos of adouble */ adub cos ( const badouble& x ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); adouble y; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_quad(cos_op, locat,x.location,y.location); put_op(cos_op); ADOLC_PUT_LOCINT(x.location); // = arg1 ADOLC_PUT_LOCINT(y.location); // = arg2 ADOLC_PUT_LOCINT(locat); // = res ADOLC_CURRENT_TAPE_INFOS.numTays_Tape += 2; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) { /* olvo 980921 changed order */ ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[y.location]); ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } } ADOLC_GLOBAL_TAPE_VARS.store[locat] = ADOLC_MATH_NSP::cos(ADOLC_GLOBAL_TAPE_VARS.store[x.location]); ADOLC_GLOBAL_TAPE_VARS.store[y.location] = ADOLC_MATH_NSP::sin(ADOLC_GLOBAL_TAPE_VARS.store[x.location]); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; return locat; } /*--------------------------------------------------------------------------*/ /* Compute tan of adouble */ adub tan ( const badouble& x ) { return sin(x) / cos(x); } /*--------------------------------------------------------------------------*/ /* Asin value -- really a quadrature */ adub asin ( const badouble& x ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); adouble y = 1.0 / sqrt(1.0 - x*x); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_quad(asin_op,locat,x.location,y.location); put_op(asin_op); ADOLC_PUT_LOCINT(x.location); // = arg1 ADOLC_PUT_LOCINT(y.location); // = arg2 ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = ADOLC_MATH_NSP::asin(ADOLC_GLOBAL_TAPE_VARS.store[x.location]); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; return locat; } /*--------------------------------------------------------------------------*/ /* Acos value -- really a quadrature */ adub acos ( const badouble& x ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); adouble y = -1.0 / sqrt(1.0 - x*x); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_quad(acos_op,locat,x.location,y.location); put_op(acos_op); ADOLC_PUT_LOCINT(x.location); // = arg1 ADOLC_PUT_LOCINT(y.location); // = arg2 ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = ADOLC_MATH_NSP::acos(ADOLC_GLOBAL_TAPE_VARS.store[x.location]); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; return locat; } /*--------------------------------------------------------------------------*/ /* Atan value -- really a quadrature */ adub atan ( const badouble& x ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); adouble y = 1.0 / (1.0 + x*x); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_quad(atan_op,locat,x.location,y.location); put_op(atan_op); ADOLC_PUT_LOCINT(x.location); // = arg1 ADOLC_PUT_LOCINT(y.location); // = arg2 ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = ADOLC_MATH_NSP::atan(ADOLC_GLOBAL_TAPE_VARS.store[x.location]); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; return locat; } /*--------------------------------------------------------------------------*/ adouble atan2( const badouble& y, const badouble& x) { adouble a1, a2, ret, sy; const double pihalf = ADOLC_MATH_NSP::asin(1.0); /* y+0.0 is a hack since condassign is currently not defined for badoubles */ condassign( sy, y, (adouble)1.0 , (adouble)-1.0 ); condassign( a1, x, atan(y/x), atan(y/x)+sy*2*pihalf); condassign( a2, fabs(y), sy*pihalf-atan(x/y), (adouble) 0.0 ); condassign( ret, fabs(x) - fabs(y), a1, a2 ); return ret; } /*--------------------------------------------------------------------------*/ /* power value -- adouble ^ floating point */ adub pow ( const badouble& x, double coval ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_args_d_a(pow_op,locat,cocval,x.location); put_op(pow_op); ADOLC_PUT_LOCINT(x.location); // = arg ADOLC_PUT_LOCINT(locat); // = res ADOLC_PUT_VAL(coval); // = coval ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = ADOLC_MATH_NSP::pow(ADOLC_GLOBAL_TAPE_VARS.store[x.location],coval); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; return locat; } /*--------------------------------------------------------------------------*/ /* power value --- floating point ^ adouble */ adouble pow ( double coval, const badouble& y ) { adouble ret; if (coval <= 0) { fprintf(DIAG_OUT,"\nADOL-C message: exponent at zero/negative constant basis deactivated\n"); } condassign (ret, (adouble) coval, exp(y*ADOLC_MATH_NSP::log(coval)), (adouble) ADOLC_MATH_NSP::pow(coval,y.getValue()) ); return ret; } /*--------------------------------------------------------------------------*/ /* power value --- adouble ^ adouble */ adouble pow ( const badouble& x, const badouble& y) { adouble a1, a2, ret; double vx = x.getValue(); double vy = y.getValue(); if (!(vx > 0)) { if (vx < 0 || vy >= 0) fprintf(DIAG_OUT,"\nADOL-C message: exponent of zero/negative basis deactivated\n"); else fprintf(DIAG_OUT,"\nADOL-C message: negative exponent and zero basis deactivated\n"); } condassign(a1, -y, (adouble) ADOLC_MATH_NSP::pow(vx,vy), pow(x,vy)); condassign(a2, fabs(x), pow(x, vy), a1); condassign(ret, x, exp(y*log(x)),a2); return ret; } /*--------------------------------------------------------------------------*/ /* log base 10 of an adouble */ adub log10 ( const badouble& x ) { return log(x) / ADOLC_MATH_NSP::log(10.0); } /*--------------------------------------------------------------------------*/ /* Hyperbolic Sine of an adouble */ /* 981119 olvo changed as J.M. Aparicio suggested */ adub sinh ( const badouble& x ) { if (x.getValue() < 0.0) { adouble temp = exp(x); return 0.5*(temp - 1.0/temp); } else { adouble temp = exp(-x); return 0.5*(1.0/temp - temp); } } /*--------------------------------------------------------------------------*/ /* Hyperbolic Cosine of an adouble */ /* 981119 olvo changed as J.M. Aparicio suggested */ adub cosh ( const badouble& x ) { adouble temp = (x.getValue() < 0.0) ? exp(x) : exp(-x); return 0.5*(temp + 1.0/temp); } /*--------------------------------------------------------------------------*/ /* Hyperbolic Tangent of an adouble value. */ /* 981119 olvo changed as J.M. Aparicio suggested */ adub tanh ( const badouble& x ) { if (x.getValue() < 0.0) { adouble temp = exp(2.0*x); return (temp - 1.0)/(temp + 1.0); } else { adouble temp = exp((-2.0)*x); return (1.0 - temp)/(temp + 1.0); } } /*--------------------------------------------------------------------------*/ /* Ceiling function (NOTE: This function is nondifferentiable) */ adub ceil ( const badouble& x ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat=next_loc(); double coval = ADOLC_MATH_NSP::ceil(ADOLC_GLOBAL_TAPE_VARS.store[x.location]); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_args_d_a(ceil_op,locat,coval,x.location); put_op(ceil_op); ADOLC_PUT_LOCINT(x.location); // = arg ADOLC_PUT_LOCINT(locat); // = res ADOLC_PUT_VAL(coval); // = coval ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = coval; return locat; } /*--------------------------------------------------------------------------*/ /* Floor function (NOTE: This function is nondifferentiable) */ adub floor ( const badouble& x ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat=next_loc(); double coval = ADOLC_MATH_NSP::floor(ADOLC_GLOBAL_TAPE_VARS.store[x.location]); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_args_d_a(floor_op,locat,coval,x.location); put_op(floor_op); ADOLC_PUT_LOCINT(x.location); // = arg ADOLC_PUT_LOCINT(locat); // = res ADOLC_PUT_VAL(coval); // = coval ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = coval; return locat; } #ifdef ATRIG_ERF /* NOTE: enable if your compiler knows asinh, acosh, atanh, erf */ /*--------------------------------------------------------------------------*/ /* Asinh value -- really a quadrature */ adub asinh ( const badouble& x ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); adouble y = 1.0 / sqrt(1.0 + x*x); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_quad(asinh_op,locat,x.location,y.location); put_op(asinh_op); ADOLC_PUT_LOCINT(x.location); // = arg1 ADOLC_PUT_LOCINT(y.location); // = arg2 ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = ADOLC_MATH_NSP_ERF::asinh(ADOLC_GLOBAL_TAPE_VARS.store[x.location]); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; return locat; } /*--------------------------------------------------------------------------*/ /* Acosh value -- really a quadrature */ adub acosh ( const badouble& x ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); adouble y = 1.0 / sqrt(1.0 - x*x); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_quad(acosh_op,locat,x.location,y.location); put_op(acosh_op); ADOLC_PUT_LOCINT(x.location); // = arg1 ADOLC_PUT_LOCINT(y.location); // = arg2 ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = ADOLC_MATH_NSP_ERF::acosh(ADOLC_GLOBAL_TAPE_VARS.store[x.location]); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; return locat; } /*--------------------------------------------------------------------------*/ /* Atanh value -- really a quadrature */ adub atanh ( const badouble& x ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); adouble y = 1.0 / (1.0 - x*x); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_quad(atanh_op,locat,x.location,y.location); put_op(atanh_op); ADOLC_PUT_LOCINT(x.location); // = arg1 ADOLC_PUT_LOCINT(y.location); // = arg2 ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = ADOLC_MATH_NSP_ERF::atanh(ADOLC_GLOBAL_TAPE_VARS.store[x.location]); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; return locat; } /*--------------------------------------------------------------------------*/ /* The error function erf */ adub erf( const badouble& x ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); adouble y = 2.0 / ADOLC_MATH_NSP_ERF::sqrt(ADOLC_MATH_NSP::acos(-1.0))*exp(-x*x); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_quad(erf_op,locat,x.location,y.location); put_op(erf_op); ADOLC_PUT_LOCINT(x.location); // = arg1 ADOLC_PUT_LOCINT(y.location); // = arg2 ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = ADOLC_MATH_NSP_ERF::erf(ADOLC_GLOBAL_TAPE_VARS.store[x.location]); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; return locat; } #endif /*--------------------------------------------------------------------------*/ /* Fabs Function (NOTE: This function is also nondifferentiable at x=0) */ adub fabs ( const badouble& x ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); double coval = 1.0; double temp = ADOLC_MATH_NSP::fabs(ADOLC_GLOBAL_TAPE_VARS.store[x.location]); if (temp != ADOLC_GLOBAL_TAPE_VARS.store[x.location]) coval = 0.0; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { /* write_args_d_a(abs_val,locat,coval,x.location); */ put_op(abs_val); ADOLC_PUT_LOCINT(x.location); /* arg */ ADOLC_PUT_LOCINT(locat); /* res */ ADOLC_PUT_VAL(coval); /* coval */ ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = temp; return locat; } /*--------------------------------------------------------------------------*/ /* max and min functions (changed : 11/15/95) */ adub fmin ( const badouble& x, const badouble& y ) { /* olvo 980702 tested: return 0.5*fabs(x+y-fabs(x-y)); */ ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); if (ADOLC_GLOBAL_TAPE_VARS.store[y.location] < ADOLC_GLOBAL_TAPE_VARS.store[x.location]) { if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_min_op(x.location,y.location,locat,0.0); put_op(min_op); ADOLC_PUT_LOCINT(x.location); // = arg1 ADOLC_PUT_LOCINT(y.location); // = arg2 ADOLC_PUT_LOCINT(locat); // = res ADOLC_PUT_VAL(0.0); // = coval ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat]=ADOLC_GLOBAL_TAPE_VARS.store[y.location]; } else { if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_min_op(x.location,y.location,locat,1.0); put_op(min_op); ADOLC_PUT_LOCINT(x.location); // = arg1 ADOLC_PUT_LOCINT(y.location); // = arg2 ADOLC_PUT_LOCINT(locat); // = res ADOLC_PUT_VAL(1.0); // = coval ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat]=ADOLC_GLOBAL_TAPE_VARS.store[x.location]; } return locat; } /*--------------------------------------------------------------------------*/ /*21.8.96*/ adub fmin ( double d, const badouble& y ) { adouble x = d; return (fmin (x,y)); } /*--------------------------------------------------------------------------*/ adub fmin ( const badouble& x, double d ) { adouble y = d; return (fmin (x,y)); } /*--------------------------------------------------------------------------*/ adub fmax ( const badouble& x, const badouble& y ) { return (-fmin(-x,-y)); } /*--------------------------------------------------------------------------*/ /*21.8.96*/ adub fmax ( double d, const badouble& y ) { adouble x = d; return (-fmin(-x,-y)); } /*--------------------------------------------------------------------------*/ adub fmax ( const badouble& x, double d ) { adouble y = d; return (-fmin(-x,-y)); } /*--------------------------------------------------------------------------*/ /* Ldexp Function */ adub ldexp ( const badouble& x, int exp ) { return x*ldexp(1.0,exp); } /*--------------------------------------------------------------------------*/ /* Macro for user defined quadratures, example myquad is below.*/ /* the forward sweep tests if the tape is executed exactly at */ /* the same argument point otherwise it stops with a returnval */ #define extend_quad(func,integrand)\ adouble func ( const badouble& arg )\ { adouble temp; \ adouble val; \ integrand; \ ADOLC_OPENMP_THREAD_NUMBER; \ ADOLC_OPENMP_GET_THREAD_NUMBER; \ if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) \ { put_op(gen_quad); \ ADOLC_PUT_LOCINT(arg.location); \ ADOLC_PUT_LOCINT(val.location); \ ADOLC_PUT_LOCINT(temp.location); \ ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; \ if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) \ ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[temp.location]); \ } \ ADOLC_GLOBAL_TAPE_VARS.store[temp.location]=func(ADOLC_GLOBAL_TAPE_VARS.store[arg.location]); \ if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) \ { ADOLC_PUT_VAL(ADOLC_GLOBAL_TAPE_VARS.store[arg.location]); \ ADOLC_PUT_VAL(ADOLC_GLOBAL_TAPE_VARS.store[temp.location]); \ } \ return temp; } double myquad(double& x) { double res; res = ADOLC_MATH_NSP::log(x); return res; } /* This defines the natural logarithm as a quadrature */ extend_quad(myquad,val = 1/arg) /****************************************************************************/ /* CONDITIONALS */ /*--------------------------------------------------------------------------*/ #if defined(ADOLC_ADVANCED_BRANCHING) adub operator != (const badouble& x, const badouble& y) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; double xval = ADOLC_GLOBAL_TAPE_VARS.store[x.location]; double yval = ADOLC_GLOBAL_TAPE_VARS.store[y.location]; double res = (double)(xval != yval); locint locat = next_loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(neq_a_a); ADOLC_PUT_LOCINT(x.location); // arg ADOLC_PUT_LOCINT(y.location); // arg1 ADOLC_PUT_VAL(res); // check for branch switch ADOLC_PUT_LOCINT(locat); // res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = res; return locat; } /*--------------------------------------------------------------------------*/ adub operator == (const badouble& x, const badouble& y) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; double xval = ADOLC_GLOBAL_TAPE_VARS.store[x.location]; double yval = ADOLC_GLOBAL_TAPE_VARS.store[y.location]; double res = (double)(xval == yval); locint locat = next_loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(eq_a_a); ADOLC_PUT_LOCINT(x.location); // arg ADOLC_PUT_LOCINT(y.location); // arg1 ADOLC_PUT_VAL(res); // check for branch switch ADOLC_PUT_LOCINT(locat); // res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = res; return locat; } /*--------------------------------------------------------------------------*/ adub operator <= (const badouble& x, const badouble& y) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; double xval = ADOLC_GLOBAL_TAPE_VARS.store[x.location]; double yval = ADOLC_GLOBAL_TAPE_VARS.store[y.location]; double res = (double)(xval <= yval); locint locat = next_loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(le_a_a); ADOLC_PUT_LOCINT(x.location); // arg ADOLC_PUT_LOCINT(y.location); // arg1 ADOLC_PUT_VAL(res); // check for branch switch ADOLC_PUT_LOCINT(locat); // res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = res; return locat; } /*--------------------------------------------------------------------------*/ adub operator >= (const badouble& x, const badouble& y) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; double xval = ADOLC_GLOBAL_TAPE_VARS.store[x.location]; double yval = ADOLC_GLOBAL_TAPE_VARS.store[y.location]; double res = (double)(xval >= yval); locint locat = next_loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(ge_a_a); ADOLC_PUT_LOCINT(x.location); // arg ADOLC_PUT_LOCINT(y.location); // arg1 ADOLC_PUT_VAL(res); // check for branch switch ADOLC_PUT_LOCINT(locat); // res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = res; return locat; } /*--------------------------------------------------------------------------*/ adub operator > (const badouble& x, const badouble& y) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; double xval = ADOLC_GLOBAL_TAPE_VARS.store[x.location]; double yval = ADOLC_GLOBAL_TAPE_VARS.store[y.location]; double res = (double)(xval > yval); locint locat = next_loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(gt_a_a); ADOLC_PUT_LOCINT(x.location); // arg ADOLC_PUT_LOCINT(y.location); // arg1 ADOLC_PUT_VAL(res); // check for branch switch ADOLC_PUT_LOCINT(locat); // res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = res; return locat; } /*--------------------------------------------------------------------------*/ adub operator < (const badouble& x, const badouble& y) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; double xval = ADOLC_GLOBAL_TAPE_VARS.store[x.location]; double yval = ADOLC_GLOBAL_TAPE_VARS.store[y.location]; double res = (double)(xval < yval); locint locat = next_loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(lt_a_a); ADOLC_PUT_LOCINT(x.location); // arg ADOLC_PUT_LOCINT(y.location); // arg1 ADOLC_PUT_VAL(res); // check for branch switch ADOLC_PUT_LOCINT(locat); // res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = res; return locat; } #endif /*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/ void condassign( adouble &res, const badouble &cond, const badouble &arg1, const badouble &arg2 ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_condassign(res.location,cond.location,arg1.location, // arg2.location); put_op(cond_assign); ADOLC_PUT_LOCINT(cond.location); // = arg ADOLC_PUT_VAL(ADOLC_GLOBAL_TAPE_VARS.store[cond.location]); ADOLC_PUT_LOCINT(arg1.location); // = arg1 ADOLC_PUT_LOCINT(arg2.location); // = arg2 ADOLC_PUT_LOCINT(res.location); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[res.location]); } if (ADOLC_GLOBAL_TAPE_VARS.store[cond.location] > 0) ADOLC_GLOBAL_TAPE_VARS.store[res.location] = ADOLC_GLOBAL_TAPE_VARS.store[arg1.location]; else ADOLC_GLOBAL_TAPE_VARS.store[res.location] = ADOLC_GLOBAL_TAPE_VARS.store[arg2.location]; } /*--------------------------------------------------------------------------*/ void condassign( adouble &res, const badouble &cond, const badouble &arg ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_condassign2(res.location,cond.location,arg.location); put_op(cond_assign_s); ADOLC_PUT_LOCINT(cond.location); // = arg ADOLC_PUT_VAL(ADOLC_GLOBAL_TAPE_VARS.store[cond.location]); ADOLC_PUT_LOCINT(arg.location); // = arg1 ADOLC_PUT_LOCINT(res.location); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[res.location]); } if (ADOLC_GLOBAL_TAPE_VARS.store[cond.location] > 0) ADOLC_GLOBAL_TAPE_VARS.store[res.location] = ADOLC_GLOBAL_TAPE_VARS.store[arg.location]; } /****************************************************************************/ /* THAT'S ALL*/ ADOL-C-2.4.1/ADOL-C/src/hos_forward.c0000644000076600007660000000145011227420735015245 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: hos_forward.c Revision: $Id: hos_forward.c 42 2009-07-15 18:37:17Z awalther $ Contents: hos_forward (higher-order-scalar forward mode) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #define _HOS_ 1 #define _KEEP_ 1 #include #undef _KEEP_ #undef _HOS_ ADOL-C-2.4.1/ADOL-C/src/sparse/0000755000076600007660000000000012120272604014052 5ustar coincoinADOL-C-2.4.1/ADOL-C/src/sparse/sparsedrivers.cpp0000644000076600007660000011536112060360024017456 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: sparse/sparsedrivers.cpp Revision: $Id: sparsedrivers.cpp 373 2012-12-07 12:24:52Z kulshres $ Contents: "Easy To Use" C++ interfaces of SPARSE package Copyright (c) Andrea Walther This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #include #include "oplate.h" #include #include #include "taping_p.h" #if defined(ADOLC_INTERNAL) # if HAVE_CONFIG_H # include "config.h" # endif #endif #if HAVE_LIBCOLPACK #include #endif #include #include #if HAVE_LIBCOLPACK using namespace ColPack; #endif using namespace std; /****************************************************************************/ /******* sparse Jacobains, separate drivers ***************/ /****************************************************************************/ /*--------------------------------------------------------------------------*/ /* sparsity pattern Jacobian */ /*--------------------------------------------------------------------------*/ /* */ int jac_pat( short tag, /* tape identification */ int depen, /* number of dependent variables */ int indep, /* number of independent variables */ const double *basepoint, /* independant variable values */ unsigned int **crs, /* returned compressed row block-index storage */ int *options /* control options options[0] : way of sparsity pattern computation 0 - propagation of index domains (default) 1 - propagation of bit pattern options[1] : test the computational graph control flow 0 - safe mode (default) 1 - tight mode options[2] : way of bit pattern propagation 0 - automatic detection (default) 1 - forward mode 2 - reverse mode */ ) { int rc= -1; int i, ctrl_options[2]; if (crs == NULL) { fprintf(DIAG_OUT,"ADOL-C user error in jac_pat(...) : " "parameter crs may not be NULL !\n"); exit(-1); } else for (i=0; i 1 )) options[0] = 0; /* default */ if (( options[1] < 0 ) || (options[1] > 1 )) options[1] = 0; /* default */ if (( options[2] < -1 ) || (options[2] > 2 )) options[2] = 0; /* default */ if (options[0] == 0) { if (options[1] == 1) rc = indopro_forward_tight(tag, depen, indep, basepoint, crs); else { rc = indopro_forward_safe(tag, depen, indep, basepoint, crs); } } else { ctrl_options[0] = options[1]; ctrl_options[1] = options[2]; rc = bit_vector_propagation( tag, depen, indep, basepoint, crs, ctrl_options); } return(rc); } /*--------------------------------------------------------------------------*/ /* seed matrix for Jacobian */ /*--------------------------------------------------------------------------*/ void generate_seed_jac (int m, int n, unsigned int **JP, double*** Seed, int *p, int option /* control options option : way of compression 0 - column compression (default) 1 - row compression */ ) #if HAVE_LIBCOLPACK { int dummy, i, j; BipartiteGraphPartialColoringInterface *g = new BipartiteGraphPartialColoringInterface(SRC_MEM_ADOLC, JP, m, n); if (option == 1) g->GenerateSeedJacobian_unmanaged(Seed, p, &dummy, "SMALLEST_LAST","ROW_PARTIAL_DISTANCE_TWO"); else g->GenerateSeedJacobian_unmanaged(Seed, &dummy, p, "SMALLEST_LAST","COLUMN_PARTIAL_DISTANCE_TWO"); delete g; } #else { fprintf(DIAG_OUT, "ADOL-C error: function %s can only be used if linked with ColPack\n", __FUNCTION__); exit(-1); } #endif /****************************************************************************/ /******* sparse Hessians, separate drivers ***************/ /****************************************************************************/ /*---------------------------------------------------------------------------*/ /* sparsity pattern Hessian */ /* */ int hess_pat( short tag, /* tape identification */ int indep, /* number of independent variables */ const double *basepoint, /* independant variable values */ unsigned int **crs, /* returned compressed row block-index storage */ int option /* control option option : test the computational graph control flow 0 - safe mode (default) 1 - tight mode 2 - old safe mode 3 - old tight mode */ ) { int rc= -1; int i; if (crs == NULL) { fprintf(DIAG_OUT,"ADOL-C user error in hess_pat(...) : " "parameter crs may not be NULL !\n"); exit(-1); } else for (i=0; i 3 )) option = 0; /* default */ if (option == 3) rc = nonl_ind_old_forward_tight(tag, 1, indep, basepoint, crs); else if (option == 2) rc = nonl_ind_old_forward_safe(tag, 1, indep, basepoint, crs); else if (option == 1) rc = nonl_ind_forward_tight(tag, 1, indep, basepoint, crs); else rc = nonl_ind_forward_safe(tag, 1, indep, basepoint, crs); return(rc); } /*--------------------------------------------------------------------------*/ /* seed matrix for Hessian */ /*--------------------------------------------------------------------------*/ void generate_seed_hess (int n, unsigned int **HP, double*** Seed, int *p, int option /* control options option : way of compression 0 - indirect recovery (default) 1 - direct recovery */ ) #if HAVE_LIBCOLPACK { int seed_rows, i, j; GraphColoringInterface *g = new GraphColoringInterface(SRC_MEM_ADOLC, HP, n); if (option == 0) g->GenerateSeedHessian_unmanaged(Seed, &seed_rows, p, "SMALLEST_LAST","ACYCLIC_FOR_INDIRECT_RECOVERY"); else g->GenerateSeedHessian_unmanaged(Seed, &seed_rows, p, "SMALLEST_LAST","STAR"); delete g; } #else { fprintf(DIAG_OUT, "ADOL-C error: function %s can only be used if linked with ColPack\n", __FUNCTION__); exit(-1); } #endif static void deepcopy_HP(unsigned int ***HPnew, unsigned int **HP, int indep) { int i,j,s; *HPnew = (unsigned int **)malloc(indep*sizeof(unsigned int *)); for (i=0; i 1 )) options[0] = 0; /* default */ if (( options[1] < 0 ) || (options[1] > 1 )) options[1] = 0; /* default */ if (( options[2] < -1 ) || (options[2] > 2 )) options[2] = 0; /* default */ if (( options[3] < 0 ) || (options[3] > 1 )) options[3] = 0; /* default */ sJinfos.JP = (unsigned int **) malloc(depen*sizeof(unsigned int *)); ret_val = jac_pat(tag, depen, indep, basepoint, sJinfos.JP, options); if (ret_val < 0) { printf(" ADOL-C error in sparse_jac() \n"); return ret_val; } sJinfos.depen = depen; sJinfos.nnz_in = depen; sJinfos.nnz_in = 0; for (i=0;iGenerateSeedJacobian(&(sJinfos.Seed), &(sJinfos.seed_rows), &(sJinfos.seed_clms), "SMALLEST_LAST","ROW_PARTIAL_DISTANCE_TWO"); sJinfos.seed_clms = indep; ret_val = sJinfos.seed_rows; } else { g->GenerateSeedJacobian(&(sJinfos.Seed), &(sJinfos.seed_rows), &(sJinfos.seed_clms), "SMALLEST_LAST","COLUMN_PARTIAL_DISTANCE_TWO"); sJinfos.seed_rows = depen; ret_val = sJinfos.seed_clms; } sJinfos.B = myalloc2(sJinfos.seed_rows,sJinfos.seed_clms); sJinfos.y = myalloc1(depen); sJinfos.g = (void *) g; sJinfos.jr1d = (void *) jr1d; setTapeInfoJacSparse(tag, sJinfos); tapeInfos=getTapeInfos(tag); memcpy(&ADOLC_CURRENT_TAPE_INFOS, tapeInfos, sizeof(TapeInfos)); } else { tapeInfos=getTapeInfos(tag); memcpy(&ADOLC_CURRENT_TAPE_INFOS, tapeInfos, sizeof(TapeInfos)); sJinfos.depen = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sJinfos.depen; sJinfos.nnz_in = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sJinfos.nnz_in; sJinfos.JP = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sJinfos.JP; sJinfos.B = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sJinfos.B; sJinfos.y = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sJinfos.y; sJinfos.Seed = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sJinfos.Seed; sJinfos.seed_rows = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sJinfos.seed_rows; sJinfos.seed_clms = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sJinfos.seed_clms; g = (BipartiteGraphPartialColoringInterface *)ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sJinfos.g; jr1d = (JacobianRecovery1D *)ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sJinfos.jr1d; } if (sJinfos.nnz_in != *nnz) { printf(" ADOL-C error in sparse_jac():" " Number of nonzeros not consistent," " repeat call with repeat = 0 \n"); return -3; } if (options[2] == -1) return ret_val; /* compute jacobian times matrix product */ if (options[3] == 1) { ret_val = zos_forward(tag,depen,indep,1,basepoint,sJinfos.y); if (ret_val < 0) return ret_val; MINDEC(ret_val,fov_reverse(tag,depen,indep,sJinfos.seed_rows,sJinfos.Seed,sJinfos.B)); } else ret_val = fov_forward(tag, depen, indep, sJinfos.seed_clms, basepoint, sJinfos.Seed, sJinfos.y, sJinfos.B); /* recover compressed Jacobian => ColPack library */ if (*values != NULL && *rind != NULL && *cind != NULL) { // everything is preallocated, we assume correctly // call usermem versions if (options[3] == 1) jr1d->RecoverD2Row_CoordinateFormat_usermem(g, sJinfos.B, sJinfos.JP, rind, cind, values); else jr1d->RecoverD2Cln_CoordinateFormat_usermem(g, sJinfos.B, sJinfos.JP, rind, cind, values); } else { // at least one of rind cind values is not allocated, deallocate others // and call unmanaged versions if (*values != NULL) free(*values); if (*rind != NULL) free(*rind); if (*cind != NULL) free(*cind); if (options[3] == 1) jr1d->RecoverD2Row_CoordinateFormat_unmanaged(g, sJinfos.B, sJinfos.JP, rind, cind, values); else jr1d->RecoverD2Cln_CoordinateFormat_unmanaged(g, sJinfos.B, sJinfos.JP, rind, cind, values); } return ret_val; } #else { fprintf(DIAG_OUT, "ADOL-C error: function %s can only be used if linked with ColPack\n", __FUNCTION__); exit(-1); } #endif /****************************************************************************/ /******* sparse Hessians, complete driver ***************/ /****************************************************************************/ int sparse_hess( short tag, /* tape identification */ int indep, /* number of independent variables */ int repeat, /* indicated repeated call with same seed */ const double *basepoint, /* independant variable values */ int *nnz, /* number of nonzeros */ unsigned int **rind, /* row index */ unsigned int **cind, /* column index */ double **values, /* non-zero values */ int *options /* control options options[0] :test the computational graph control flow 0 - safe mode (default) 1 - tight mode 2 - old safe mode 3 - old tight mode options[1] : way of recovery 0 - indirect recovery 1 - direct recovery */ ) #if HAVE_LIBCOLPACK { int i, l; unsigned int j; SparseHessInfos sHinfos; double **Seed; int dummy; double y; int ret_val=-1; GraphColoringInterface *g; TapeInfos *tapeInfos; double *v, *w, **X, yt, lag=1; HessianRecovery *hr; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; /* Generate sparsity pattern, determine nnz, allocate memory */ if (repeat <= 0) { if (( options[0] < 0 ) || (options[0] > 3 )) options[0] = 0; /* default */ if (( options[1] < 0 ) || (options[1] > 1 )) options[1] = 0; /* default */ if (repeat == 0) { sHinfos.HP = (unsigned int **) malloc(indep*sizeof(unsigned int *)); /* generate sparsity pattern */ ret_val = hess_pat(tag, indep, basepoint, sHinfos.HP, options[0]); if (ret_val < 0) { printf(" ADOL-C error in sparse_hess() \n"); return ret_val; } } else { tapeInfos=getTapeInfos(tag); memcpy(&ADOLC_CURRENT_TAPE_INFOS, tapeInfos, sizeof(TapeInfos)); if (indep != ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sHinfos.indep) { fprintf(DIAG_OUT,"ADOL-C Error: wrong number of independents stored in hessian pattern.\n"); exit(-1); } deepcopy_HP(&sHinfos.HP,ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sHinfos.HP,indep); } sHinfos.indep = indep; sHinfos.nnz_in = 0; for (i=0;i= i) sHinfos.nnz_in++; } *nnz = sHinfos.nnz_in; /* compute seed matrix => ColPack library */ Seed = NULL; g = new GraphColoringInterface(SRC_MEM_ADOLC, sHinfos.HP, indep); hr = new HessianRecovery; if (options[1] == 0) g->GenerateSeedHessian(&Seed, &dummy, &sHinfos.p, "SMALLEST_LAST","ACYCLIC_FOR_INDIRECT_RECOVERY"); else g->GenerateSeedHessian(&Seed, &dummy, &sHinfos.p, "SMALLEST_LAST","STAR"); sHinfos.Hcomp = myalloc2(indep,sHinfos.p); sHinfos.Xppp = myalloc3(indep,sHinfos.p,1); for (i=0; i ColPack library */ // if (options[1] == 0) // HessianRecovery::IndirectRecover_CoordinateFormat(g, sHinfos.Hcomp, sHinfos.HP, rind, cind, values); // else // HessianRecovery::DirectRecover_CoordinateFormat(g, sHinfos.Hcomp, sHinfos.HP, rind, cind, values); if (*values != NULL && *rind != NULL && *cind != NULL) { // everything is preallocated, we assume correctly // call usermem versions if (options[1] == 0) hr->IndirectRecover_CoordinateFormat_usermem(g, sHinfos.Hcomp, sHinfos.HP, rind, cind, values); else hr->DirectRecover_CoordinateFormat_usermem(g, sHinfos.Hcomp, sHinfos.HP, rind, cind, values); } else { // at least one of rind cind values is not allocated, deallocate others // and call unmanaged versions if (*values != NULL) free(*values); if (*rind != NULL) free(*rind); if (*cind != NULL) free(*cind); if (options[1] == 0) hr->IndirectRecover_CoordinateFormat_unmanaged(g, sHinfos.Hcomp, sHinfos.HP, rind, cind, values); else hr->DirectRecover_CoordinateFormat_unmanaged(g, sHinfos.Hcomp, sHinfos.HP, rind, cind, values); } return ret_val; } #else { fprintf(DIAG_OUT, "ADOL-C error: function %s can only be used if linked with ColPack\n", __FUNCTION__); exit(-1); } #endif /****************************************************************************/ /******* sparse Hessians, set and get sparsity pattern ***************/ /****************************************************************************/ void set_HP( short tag, /* tape identification */ int indep, /* number of independent variables */ unsigned int ** HP) #ifdef SPARSE { SparseHessInfos sHinfos; TapeInfos *tapeInfos; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; tapeInfos=getTapeInfos(tag); memcpy(&ADOLC_CURRENT_TAPE_INFOS, tapeInfos, sizeof(TapeInfos)); sHinfos.nnz_in = 0; deepcopy_HP(&sHinfos.HP,HP,indep); sHinfos.Hcomp = NULL; sHinfos.Xppp = NULL; sHinfos.Yppp = NULL; sHinfos.Zppp = NULL; sHinfos.Upp = NULL; sHinfos.p = 0; sHinfos.g = NULL; sHinfos.hr = NULL; sHinfos.indep = indep; setTapeInfoHessSparse(tag, sHinfos); } #else { fprintf(DIAG_OUT, "ADOL-C error: function %s can only be used if sparse configuration option was used\n", __FUNCTION__); exit(-1); } #endif void get_HP( short tag, /* tape identification */ int indep, /* number of independent variables */ unsigned int *** HP) #ifdef SPARSE { SparseHessInfos sHinfos; TapeInfos *tapeInfos; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; tapeInfos=getTapeInfos(tag); memcpy(&ADOLC_CURRENT_TAPE_INFOS, tapeInfos, sizeof(TapeInfos)); deepcopy_HP(HP,ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sHinfos.HP,indep); } #else { fprintf(DIAG_OUT, "ADOL-C error: function %s can only be used if sparse configuration option was used\n", __FUNCTION__); exit(-1); } #endif /*****************************************************************************/ /* JACOBIAN BLOCK PATTERN */ /* ------------------------------------------------------------------------- */ int bit_vector_propagation( short tag, /* tape identification */ int depen, /* number of dependent variables */ int indep, /* number of independent variables */ const double *basepoint, /* independant variable values */ unsigned int **crs, /* compressed block row storage */ int *options /* control options */ /* options[0] : way of bit pattern propagation 0 - automatic detection (default) 1 - forward mode 2 - reverse mode options[1] : test the computational graph control flow 0 - safe variant (default) 1 - tight variant */ ) { int rc= 3; char forward_mode, tight_mode; int i, ii, j, jj, k, k_old, bits_per_long, i_blocks_per_strip, d_blocks_per_strip; int this_strip_i_bl_idx, next_strip_i_bl_idx, this_strip_d_bl_idx, next_strip_d_bl_idx; int stripmined_calls, strip_idx; int p_stripmine, q_stripmine, p_ind_bl_bp, q_dep_bl_bp, i_bl_idx, d_bl_idx; unsigned long int value1, v; unsigned long int **seed=NULL, *s, **jac_bit_pat=NULL, *jac; unsigned char *indep_blocks_flags=NULL, *i_b_flags; double *valuepoint=NULL; if ( options[1] == 0 ) { if ( depen >= indep/2 ) options[1] = 1; /* forward */ else options[1] = 2; /* reverse */ } if ( options[1] == 1 ) forward_mode = 1; else forward_mode = 0; if ( options[0] == 1 ) tight_mode = 1; else tight_mode = 0; if ( ! forward_mode ) valuepoint = myalloc1(depen); /* bit pattern parameters */ /* number of bits in an unsigned long int variable */ bits_per_long = 8 * sizeof(unsigned long int); /* olvo 20000214 nl: inserted explicit cast to unsigned long int */ value1 = (unsigned long int) 1 << (bits_per_long - 1); /* 10000....0 */ /* =================================================== forward propagation */ if ( forward_mode ) { if (( tight_mode ) && ( basepoint == NULL )) { fprintf(DIAG_OUT, "ADOL-C error in jac_pat(...) : supply basepoint x for tight mode.\n"); exit(-1); } /* indep partial derivatives for the whole Jacobian */ /* number of unsigned longs to store the whole seed / Jacobian matrice */ p_ind_bl_bp = indep / bits_per_long + ( (indep % bits_per_long) != 0 ); /* number of unsigned longs to store the seed / Jacobian strips */ if ( p_ind_bl_bp <= PQ_STRIPMINE_MAX ) { p_stripmine = p_ind_bl_bp; stripmined_calls = 1; } else { p_stripmine = PQ_STRIPMINE_MAX; stripmined_calls = p_ind_bl_bp / PQ_STRIPMINE_MAX + ( (p_ind_bl_bp % PQ_STRIPMINE_MAX) != 0 ); } /* number of independent blocks per seed / Jacobian strip */ i_blocks_per_strip = p_stripmine * bits_per_long; /* allocate memory --------------------------------------------------- */ if ( ! (indep_blocks_flags = (unsigned char*) calloc(i_blocks_per_strip, sizeof(char)) ) ) { fprintf(DIAG_OUT, "ADOL-C error, "__FILE__ ":%i : \njac_pat(...) unable to allocate %i bytes !\n", __LINE__, (int)(i_blocks_per_strip*sizeof(char))); exit(-1); } seed = myalloc2_ulong(indep, p_stripmine); jac_bit_pat = myalloc2_ulong(depen, p_stripmine); /* strip-mining : repeated forward calls ----------------------------- */ for (strip_idx = 0; strip_idx < stripmined_calls; strip_idx++) { /* build a partition of the seed matrix (indep x indep_blocks) --- */ /* (indep x i_blocks_per_strip) as a bit pattern */ s = seed[0]; for (i=0; i int !!! */ *s++ = 0; /* set old seed matrix to 0 */ this_strip_i_bl_idx = strip_idx * i_blocks_per_strip; next_strip_i_bl_idx = (strip_idx+1) * i_blocks_per_strip; if ( next_strip_i_bl_idx > indep ) next_strip_i_bl_idx = indep; v = value1; /* 10000....0 */ for (i=0; i> ((i - this_strip_i_bl_idx) % bits_per_long); } /* bit pattern propagation by forward ---------------------------- */ if ( tight_mode ) { rc = int_forward_tight( tag, depen, indep, p_stripmine, basepoint, seed, valuepoint, jac_bit_pat); } else { rc = int_forward_safe ( tag, depen, indep, p_stripmine, seed, jac_bit_pat); } /* extract pattern from bit patterns --------------------- */ for (j = 0; j < depen; j++) { ii = -1; v = 0; jac = jac_bit_pat[j]; i_b_flags = indep_blocks_flags; for (i_bl_idx = 0; i_bl_idx < i_blocks_per_strip; i_bl_idx++) { if ( !v ) { v = value1; /* 10000....0 */ ii++; } if ( v & jac[ii] ) *i_b_flags = 1; i_b_flags++; v = v >> 1; } if ( strip_idx == 0 ) k_old = 0; else k_old = crs[j][0]; k = 0; i_b_flags = indep_blocks_flags; for (i = 0; i < i_blocks_per_strip; i++) k += *i_b_flags++; if ((k > 0 ) || ( strip_idx == 0 )) { if ( ! (crs[j] = (unsigned int*)realloc(crs[j], (k_old+k+1)*sizeof(unsigned int))) ) { fprintf(DIAG_OUT, "ADOL-C error, "__FILE__ ":%i : \njac_pat(...) unable to allocate %i bytes !\n", __LINE__, (int)((k_old+k+1)*sizeof(unsigned int))); exit(-1); } if ( strip_idx == 0 ) crs[j][0] = 0; if ( k > 0 ) { k = crs[j][0] + 1; i_b_flags = indep_blocks_flags; for (i = 0; i < i_blocks_per_strip; i++) { if ( *i_b_flags ) { crs[j][k++] = this_strip_i_bl_idx + i; *i_b_flags = 0; } i_b_flags++; } /* current/total number of non-zero blocks of indep. vars. */ crs[j][0] = k - 1; } } } } /* strip_idx */ } /* forward */ /* =================================================== reverse propagation */ else { /* depen weight vectors for the whole Jacobian */ /* number of unsigned longs to store the whole seed / Jacobian matrice */ q_dep_bl_bp = depen / bits_per_long + ( (depen % bits_per_long) != 0 ); /* number of unsigned longs to store the seed / Jacobian strips */ if ( q_dep_bl_bp <= PQ_STRIPMINE_MAX ) { q_stripmine = q_dep_bl_bp; stripmined_calls = 1; } else { q_stripmine = PQ_STRIPMINE_MAX; stripmined_calls = q_dep_bl_bp / PQ_STRIPMINE_MAX + ( (q_dep_bl_bp % PQ_STRIPMINE_MAX) != 0 ); } /* number of dependent blocks per seed / Jacobian strip */ d_blocks_per_strip = q_stripmine * bits_per_long; /* allocate memory --------------------------------------------------- */ if ( ! (indep_blocks_flags = (unsigned char*)calloc(indep, sizeof(unsigned char)) ) ) { fprintf(DIAG_OUT, "ADOL-C error, "__FILE__ ":%i : \njac_pat(...) unable to allocate %i bytes !\n", __LINE__, (int)(indep*sizeof(unsigned char))); exit(-1); } seed = myalloc2_ulong(q_stripmine, depen); jac_bit_pat = myalloc2_ulong(q_stripmine, indep); /* olvo 20000214: call to forward required in tight mode only, in safe mode no basepoint available! */ if ( tight_mode ) { if ( basepoint == NULL ) { fprintf(DIAG_OUT, "ADOL-C error in jac_pat(..) : "); fprintf(DIAG_OUT, "no basepoint x for tight mode supplied.\n"); exit(-1); } rc = zos_forward(tag, depen, indep, 1, basepoint, valuepoint); } /* strip-mining : repeated reverse calls ----------------------------- */ for (strip_idx = 0; strip_idx < stripmined_calls; strip_idx++) { /* build a partition of the seed matrix (depen_blocks x depen) */ /* (d_blocks_per_strip x depen) as a bit pattern */ s = seed[0]; for (jj=0; jj int !!! */ for (j=0; j depen ) next_strip_d_bl_idx = depen; v = value1; /* 10000....0 */ for (j=0; j> ((j - this_strip_d_bl_idx) % bits_per_long); } /* bit pattern propagation by reverse ---------------------------- */ if ( tight_mode ) rc = int_reverse_tight( tag, depen, indep, q_stripmine, seed, jac_bit_pat); else rc = int_reverse_safe ( tag, depen, indep, q_stripmine, seed, jac_bit_pat); /* extract pattern from bit patterns --------------------- */ jj = -1; v = 0; for (d_bl_idx = this_strip_d_bl_idx; d_bl_idx < next_strip_d_bl_idx; d_bl_idx++) { if ( !v ) { v = value1; /* 10000....0 */ jj++; } jac = jac_bit_pat[jj]; for (i=0; i> 1; k=0; i_b_flags = indep_blocks_flags; for (i=0; i #include #include #if defined(__cplusplus) /****************************************************************************/ /* Bit pattern propagation; general call */ /* */ int forward( short tag, int m, int n, int p, double *x, unsigned long int **X, double *y, unsigned long int **Y, char mode) /* forward(tag, m, n, p, x[n], X[n][p], y[m], Y[m][p], mode) */ { int rc = -1; if (mode == 1) // tight version if (x != NULL) rc = int_forward_tight(tag,m,n,p,x,X,y,Y); else { fprintf(DIAG_OUT,"ADOL-C error: no basepoint for bit" " pattern forward tight.\n"); exit(-1); } else if (mode == 0) // safe version rc = int_forward_safe(tag,m,n,p,X,Y); else { fprintf(DIAG_OUT,"ADOL-C error: bad mode parameter to bit" " pattern forward.\n"); exit(-1); } return (rc); } /****************************************************************************/ /* Bit pattern propagation; no basepoint */ /* */ int forward( short tag, int m, int n, int p, unsigned long int **X, unsigned long int **Y, char mode) /* forward(tag, m, n, p, X[n][p], Y[m][p], mode) */ { if (mode != 0) // not safe { fprintf(DIAG_OUT,"ADOL-C error: bad mode parameter to bit" " pattern forward.\n"); exit(-1); } return int_forward_safe(tag,m,n,p,X,Y); } /****************************************************************************/ /* */ /* Bit pattern propagation, general call */ /* */ int reverse( short tag, int m, int n, int q, unsigned long int **U, unsigned long int **Z, char mode) /* reverse(tag, m, n, q, U[q][m], Z[q][n]) */ { int rc=-1; /* ! use better the tight version, the safe version supports no subscripts*/ if (mode == 0) // safe version rc = int_reverse_safe(tag,m,n,q,U,Z); else if (mode == 1) rc = int_reverse_tight(tag,m,n,q,U,Z); else { fprintf(DIAG_OUT,"ADOL-C error: bad mode parameter" " to bit pattern reverse.\n"); exit(-1); } return rc; } /****************************************************************************/ #endif ADOL-C-2.4.1/ADOL-C/src/sparse/Makefile.am0000644000076600007660000000173212032277512016116 0ustar coincoin############################################################################## ## Makefile.am -- Process this file with automake to produce Makefile.in ## Revision: $Id: Makefile.am 354 2012-10-01 11:32:26Z kulshres $ ## ## Copyright (C) Andrea Walther, Andreas Kowarz ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## AM_CFLAGS = @ac_adolc_cflags@ -DADOLC_INTERNAL=1 -DSPARSE=1 AM_CXXFLAGS = @ac_adolc_cxxflags@ -DADOLC_INTERNAL=1 -DSPARSE=1 AM_CPPFLAGS = -I$(top_srcdir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/src @COLPACK_CFLAGS@ MAINTAINERCLEANFILES = Makefile.in *~ *.orig noinst_LTLIBRARIES = libsparse.la libsparse_la_SOURCES = sparse_fo_rev.cpp sparsedrivers.cpp ADOL-C-2.4.1/ADOL-C/src/sparse/Makefile.in0000644000076600007660000004143412062606346016136 0ustar coincoin# Makefile.in generated by automake 1.12.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = ADOL-C/src/sparse DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/autoconf/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libsparse_la_LIBADD = am_libsparse_la_OBJECTS = sparse_fo_rev.lo sparsedrivers.lo libsparse_la_OBJECTS = $(am_libsparse_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/ADOL-C/src depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libsparse_la_SOURCES) DIST_SOURCES = $(libsparse_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH_FALSE = @ADVBRANCH_FALSE@ ADVBRANCH_TRUE = @ADVBRANCH_TRUE@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF_FALSE = @ATRIG_ERF_FALSE@ ATRIG_ERF_TRUE = @ATRIG_ERF_TRUE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COLPACK_CFLAGS = @COLPACK_CFLAGS@ COLPACK_LIBS = @COLPACK_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = @ac_adolc_cflags@ -DADOLC_INTERNAL=1 -DSPARSE=1 AM_CXXFLAGS = @ac_adolc_cxxflags@ -DADOLC_INTERNAL=1 -DSPARSE=1 AM_CPPFLAGS = -I$(top_srcdir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/src @COLPACK_CFLAGS@ MAINTAINERCLEANFILES = Makefile.in *~ *.orig noinst_LTLIBRARIES = libsparse.la libsparse_la_SOURCES = sparse_fo_rev.cpp sparsedrivers.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/src/sparse/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/src/sparse/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libsparse.la: $(libsparse_la_OBJECTS) $(libsparse_la_DEPENDENCIES) $(EXTRA_libsparse_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) $(libsparse_la_OBJECTS) $(libsparse_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sparse_fo_rev.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sparsedrivers.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.4.1/ADOL-C/Makefile.in0000644000076600007660000004546612062606346014063 0ustar coincoin# Makefile.in generated by automake 1.12.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = ADOL-C DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = src test include examples DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH_FALSE = @ADVBRANCH_FALSE@ ADVBRANCH_TRUE = @ADVBRANCH_TRUE@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF_FALSE = @ATRIG_ERF_FALSE@ ATRIG_ERF_TRUE = @ATRIG_ERF_TRUE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COLPACK_CFLAGS = @COLPACK_CFLAGS@ COLPACK_LIBS = @COLPACK_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = foreign @ADDEXA_FALSE@@DOCEXA_FALSE@@PAREXA_FALSE@SUBDIRS = src test include @ADDEXA_FALSE@@DOCEXA_FALSE@@PAREXA_TRUE@SUBDIRS = src examples test \ @ADDEXA_FALSE@@DOCEXA_FALSE@@PAREXA_TRUE@ include @ADDEXA_TRUE@@DOCEXA_FALSE@SUBDIRS = src examples test include @DOCEXA_TRUE@SUBDIRS = src examples test include MAINTAINERCLEANFILES = Makefile.in all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done cscopelist-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) \ cscopelist-recursive ctags-recursive install-am install-strip \ tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ cscopelist cscopelist-recursive ctags ctags-recursive \ distclean distclean-generic distclean-libtool distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-recursive uninstall uninstall-am test: all cd test; $(MAKE) test # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.4.1/ADOL-C/test/0000755000076600007660000000000012120272603012744 5ustar coincoinADOL-C-2.4.1/ADOL-C/test/fminmax.cpp0000644000076600007660000000021611451375310015113 0ustar coincoin#include int main(int, char **) { double x = 3, y = 4; fmax(x, y); fmin(x, y); return 0; } ADOL-C-2.4.1/ADOL-C/test/powexam.cpp0000644000076600007660000000774711466462255015167 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: powexam.cpp Revision: $Id: powexam.cpp 42 2009-07-15 18:37:17Z awalther $ Contents: computation of n-th power for testing Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ /****************************************************************************/ /* INCLUDES */ #include /* use of ALL ADOL-C interfaces */ #include using namespace std; /****************************************************************************/ /* ADOUBLE ROUTINE */ adouble power(adouble x, int n) { adouble z = 1; if (n>0) /* Recursion and branches */ { int nh = n/2; /* that do not depend on */ z = power(x,nh); /* adoubles are fine !!!! */ z *= z; if (2*nh != n) z *= x; return z; } /* end if */ else { if (n==0) /* The local adouble z dies */ return z; /* as it goes out of scope. */ else return 1/power(x,-n); } /* end else */ } /* end power */ /****************************************************************************/ /* MAIN PROGRAM */ int main() { int i,tag = 1; int n; cout << "COMPUTATION OF N-TH POWER (ADOL-C Documented Example)\n\n"; cout << "monomial degree=5 \n"; /* input the desired degree */ n = 5; /* allocations and initializations */ double** X; double** Y; X = myalloc2(1,n+4); Y = myalloc2(1,n+4); X[0][0] = 0.5; /* function value = 0. coefficient */ X[0][1] = 1.0; /* first derivative = 1. coefficient */ for(i=0; i>= Y[0][0]; /* only one dependent adouble */ trace_off(); /* no global adouble has died */ /* end of active section */ double u[1]; /* weighting vector */ double maxerr = 0; u[0]=1; /* for reverse call */ for(i=0; i maxerr) maxerr = abs(Y[0][i]-y.value()); } else { Z[0][i] = Z[0][i-1]/i; /* scale derivative to Taylorcoeff. */ cout << Y[0][i] << " - " << Z[0][i] << " = " << Y[0][i]-Z[0][i] << " (should be 0)\n"; if (abs( Y[0][i]-Z[0][i]) > maxerr) maxerr = abs(Y[0][i]-y.value()); } reverse(tag,1,1,i,u,Z); /* evaluate the (i+1)-st deriv. */ } /* end for */ if (maxerr < 10e-8) printf("TEST PASSED\n"); return 1; } /* end main */ ADOL-C-2.4.1/ADOL-C/test/speelpenning.cpp0000644000076600007660000000607211732370353016155 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: speelpenning.cpp Revision: $Id: speelpenning.cpp 42 2009-07-15 18:37:17Z awalther $ Contents: speelpennings example for testing Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ /****************************************************************************/ /* INCLUDES */ #include // use of active doubles #include // use of "Easy to Use" drivers // gradient(.) and hessian(.) #include // use of taping #include using namespace std; #include #include /****************************************************************************/ /* MAIN PROGRAM */ int main() { int n,i,j; size_t tape_stats[STAT_SIZE]; cout << "SPEELPENNINGS PRODUCT (ADOL-C Documented Example)\n\n"; cout << "number of independent variables = 100 \n"; n = 100; double *xp = new double[n]; double yp = 0.0; adouble *x = new adouble[n]; adouble y = 1; for(i=0; i>= yp; delete[] x; trace_off(); tapestats(1,tape_stats); // reading of tape statistics cout<<"maxlive "<j) // lower half of hessian errh += fabs(H[i][j]-g[i]/xp[j]); } // end for } // end for cout << yp-1/(1.0+n) << " error in function \n"; cout << errg <<" error in gradient \n"; cout << errh <<" consistency check \n"; if ((errg < 10e-8) && (errh < 10e-8)) printf("TEST PASSED\n"); return 1; } // end main ADOL-C-2.4.1/ADOL-C/test/Makefile.am0000644000076600007660000000253612032335060015005 0ustar coincoin############################################################################## ## Makefile.am -- Process this file with automake to produce Makefile.in ## Revision: $Id: Makefile.am 61 2009-12-07 14:49:34Z awalther $ ## ## Copyright (C) Andrea Walther ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## noinst_PROGRAMS = powexam speelpenning fminmax speelpenning_SOURCES = speelpenning.cpp powexam_SOURCES = powexam.cpp fminmax_SOURCES = fminmax.cpp powexam_LDADD = ../src/libadolc.la speelpenning_LDADD = ../src/libadolc.la fminmax_LDADD = ../src/libadolc.la AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Cygwin AM_CPPFLAGS = -I$(srcdir)/../include EXTRA_DIST = run_tests # This line is necessary to allow VPATH compilation with MS compilers # on Cygwin DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/inc test: powexam speelpenning chmod u+x $(srcdir)/run_tests $(srcdir)/run_tests ADOL-C-2.4.1/ADOL-C/test/Makefile.in0000644000076600007660000004343312062606346015032 0ustar coincoin# Makefile.in generated by automake 1.12.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ noinst_PROGRAMS = powexam$(EXEEXT) speelpenning$(EXEEXT) \ fminmax$(EXEEXT) subdir = ADOL-C/test DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/autoconf/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_fminmax_OBJECTS = fminmax.$(OBJEXT) fminmax_OBJECTS = $(am_fminmax_OBJECTS) fminmax_DEPENDENCIES = ../src/libadolc.la AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am_powexam_OBJECTS = powexam.$(OBJEXT) powexam_OBJECTS = $(am_powexam_OBJECTS) powexam_DEPENDENCIES = ../src/libadolc.la am_speelpenning_OBJECTS = speelpenning.$(OBJEXT) speelpenning_OBJECTS = $(am_speelpenning_OBJECTS) speelpenning_DEPENDENCIES = ../src/libadolc.la depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(fminmax_SOURCES) $(powexam_SOURCES) \ $(speelpenning_SOURCES) DIST_SOURCES = $(fminmax_SOURCES) $(powexam_SOURCES) \ $(speelpenning_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH_FALSE = @ADVBRANCH_FALSE@ ADVBRANCH_TRUE = @ADVBRANCH_TRUE@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF_FALSE = @ATRIG_ERF_FALSE@ ATRIG_ERF_TRUE = @ATRIG_ERF_TRUE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COLPACK_CFLAGS = @COLPACK_CFLAGS@ COLPACK_LIBS = @COLPACK_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ speelpenning_SOURCES = speelpenning.cpp powexam_SOURCES = powexam.cpp fminmax_SOURCES = fminmax.cpp powexam_LDADD = ../src/libadolc.la speelpenning_LDADD = ../src/libadolc.la fminmax_LDADD = ../src/libadolc.la AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Cygwin AM_CPPFLAGS = -I$(srcdir)/../include EXTRA_DIST = run_tests # This line is necessary to allow VPATH compilation with MS compilers # on Cygwin DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/inc all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/test/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/test/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list fminmax$(EXEEXT): $(fminmax_OBJECTS) $(fminmax_DEPENDENCIES) $(EXTRA_fminmax_DEPENDENCIES) @rm -f fminmax$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(fminmax_OBJECTS) $(fminmax_LDADD) $(LIBS) powexam$(EXEEXT): $(powexam_OBJECTS) $(powexam_DEPENDENCIES) $(EXTRA_powexam_DEPENDENCIES) @rm -f powexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(powexam_OBJECTS) $(powexam_LDADD) $(LIBS) speelpenning$(EXEEXT): $(speelpenning_OBJECTS) $(speelpenning_DEPENDENCIES) $(EXTRA_speelpenning_DEPENDENCIES) @rm -f speelpenning$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(speelpenning_OBJECTS) $(speelpenning_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fminmax.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/powexam.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/speelpenning.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am test: powexam speelpenning chmod u+x $(srcdir)/run_tests $(srcdir)/run_tests # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.4.1/ADOL-C/test/run_tests0000755000076600007660000000264711326322574014743 0ustar coincoin############################################################################## ## run_unitTest ## Revision: $Id$ ## ## Copyright (C) Andrea Walther ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## srcdir="." retval=0 echo " " echo Running tests... echo " " echo Testing powexam... ./powexam >tmpfile 2>&1 grep "TEST PASSED" tmpfile 1>/dev/null 2>&1 if test $? = 0; then echo " " echo " Test passed!" echo " " else retval=-1 echo " " echo " ---- 8< ---- Start of test program output ---- 8< ----" cat tmpfile echo " ---- 8< ---- End of test program output ---- 8< ----" echo " " echo " ******** Test FAILED! ********" echo "Output of the test program is above." fi rm -rf tmpfile echo Testing speelpenning... ./speelpenning >tmpfile 2>&1 grep "TEST PASSED" tmpfile 1>/dev/null 2>&1 if test $? = 0; then echo " " echo " Test passed!" echo " " else retval=-1 echo " " echo " ---- 8< ---- Start of test program output ---- 8< ----" cat tmpfile echo " ---- 8< ---- End of test program output ---- 8< ----" echo " " echo " ******** Test FAILED! ********" echo "Output of the test program is above." fi rm -rf tmpfile exit $retval ADOL-C-2.4.1/ADOL-C/include/0000755000076600007660000000000012120272603013410 5ustar coincoinADOL-C-2.4.1/ADOL-C/include/adolc/0000755000076600007660000000000012120272603014472 5ustar coincoinADOL-C-2.4.1/ADOL-C/include/adolc/convolut.h0000644000076600007660000000674412032277512016535 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: convolut.h Revision: $Id: convolut.h 354 2012-10-01 11:32:26Z kulshres $ Contents: Convolution routines (used by ho_rev.mc) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_CONVOLUT_H) #define ADOLC_CONVOLUT_H 1 #include BEGIN_C_DECLS /****************************************************************************/ /* CONVOLUTION */ /*--------------------------------------------------------------------------*/ /* Evaluates convolution of a and b to c */ void conv( int dim, revreal *a, revreal *b, revreal *c ); void conv0( int dim, revreal *a, revreal *b, revreal *c ); /****************************************************************************/ /* INCREMENTAL CONVOLUTION */ /*--------------------------------------------------------------------------*/ /* Increments truncated convolution of a and b to c */ void inconv ( int dim, revreal *a, revreal *b, revreal* c ); /*--------------------------------------------------------------------------*/ /* Increments truncated convolution of a and b to c and sets a to zero */ void inconv0( int dim, revreal *a, revreal *b, revreal* c ); void inconv1( int dim, revreal *a, revreal *b, revreal* c ); /****************************************************************************/ /* DECREMENTAL CONVOLUTION */ /*--------------------------------------------------------------------------*/ /* Decrements truncated convolution of a and b to c */ void deconv ( int dim, revreal* a, revreal *b, revreal* c ); /*--------------------------------------------------------------------------*/ /* Decrements truncated convolution of a and b to c and sets a to zero */ void deconv0( int dim, revreal* a, revreal *b, revreal* c ); void deconv1( int dim, revreal* a, revreal *b, revreal* c ); void deconvZeroR( int dim, revreal *a, revreal *b, revreal *c ); /****************************************************************************/ /* OTHER USEFUL ROUTINES */ /*--------------------------------------------------------------------------*/ void divide(int dim, revreal* a, revreal *b, revreal* c); /*--------------------------------------------------------------------------*/ void recipr(int dim, double a, revreal *b, revreal* c); /****************************************************************************/ /* ZEROING */ /*--------------------------------------------------------------------------*/ /* Set a to zero */ void zeroset(int dim, double* a); /*--------------------------------------------------------------------------*/ /* Copies a to tmp and initializes a to zero */ void copyAndZeroset( int dim, revreal *a, revreal* tmp); /****************************************************************************/ END_C_DECLS #endif ADOL-C-2.4.1/ADOL-C/include/adolc/adutilsc.h0000644000076600007660000000146712032277512016471 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: adutilsc.h Revision: $Id: adutilsc.h 354 2012-10-01 11:32:26Z kulshres $ Contents: Provides all C/C++ interfaces of ADOL-C. NOTICE: This file is kept for compatibility reasons only. The new header adolc.h is included. Copyright (c) Andreas Kowarz This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_ADUTILSC_H) #define ADOLC_ADUTILSC_H 1 #include #endif ADOL-C-2.4.1/ADOL-C/include/adolc/dvlparms.h0000644000076600007660000000414612032277512016506 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: dvlparms.h Revision: $Id: dvlparms.h 354 2012-10-01 11:32:26Z kulshres $ Contents: Developer parameters: These parameters are intended for use by the developers and maintainers of ADOL-C to specify library wide definitions. Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_DVLPARMS_H) #define ADOLC_DVLPARMS_H 1 /*--------------------------------------------------------------------------*/ /* Directory where tapes are created */ #define TAPE_DIR "." /* File names for the tapes */ #define ADOLC_TAYLORS_NAME "ADOLC-Taylors_" #define ADOLC_VALUES_NAME "ADOLC-Values_" #define ADOLC_LOCATIONS_NAME "ADOLC-Locations_" #define ADOLC_OPERATIONS_NAME "ADOLC-Operations_" #ifdef _WINDOWS #define PATHSEPARATOR "\\" #else #define PATHSEPARATOR "/" #endif /****************************************************************************/ /* Tells ADOL-C which name space offers the mathematical functions */ #define ADOLC_MATH_NSP std /* For error function with gcc compiler */ #define ADOLC_MATH_NSP_ERF /*--------------------------------------------------------------------------*/ /* TAPE IDENTIFICATION (ADOLC & version check) */ #define statSpace 35 #define adolcIDSize 5 /* NOTE: adolcIDSize + statSize <= statSpace required! */ /*--------------------------------------------------------------------------*/ /* ADOL-C configuration (never change this) */ #define overwrite 1 #define compsize > /*--------------------------------------------------------------------------*/ #endif ADOL-C-2.4.1/ADOL-C/include/adolc/fixpoint.h0000644000076600007660000000275112032277512016516 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: fixpoint.h Revision: $Id: fixpoint.h 354 2012-10-01 11:32:26Z kulshres $ Contents: all C functions directly accessing at least one of the four tapes (operations, locations, constants, value stack) Copyright (c) Andreas Kowarz, Sebastian Schlenkrich This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_FIXPOINT_H) #define ADOLC_FIXPOINT_H 1 #include BEGIN_C_DECLS int fp_iteration ( int sub_tape_num, int (*double_F)(double*, double* ,double*, int, int), int (*adouble_F)(adouble*, adouble*, adouble*, int, int), double (*norm)(double*, int), double (*norm_deriv)(double*, int), double epsilon, double epsilon_deriv, int N_max, int N_max_deriv, adouble *x_0, adouble *u, adouble *x_fix, int dim_x, int dim_u ); END_C_DECLS #endif /* ADOLC_FIXPOINT_H */ ADOL-C-2.4.1/ADOL-C/include/adolc/advector.h0000644000076600007660000001202012101513414016442 0ustar coincoin/* --------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ Revision: $Id$ Contents: advector.h contains a vector implementation that is able to trace subscripting operations. Copyright (c) Kshitij Kulshreshtha This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #if !defined(ADOLC_ADVECTOR_H) #define ADOLC_ADVECTOR_H 1 /****************************************************************************/ /* THIS FILE IS C++ */ #ifdef __cplusplus #include #include /****************************************************************************/ /* THIS IS ONLY FOR TAPED VERSION */ #if !defined(TAPELESS) class advector; class adubref; class ADOLC_DLL_EXPORT adubref { /* This class is supposed to be used only when an advector subscript * occurs as an lvalue somewhere. What we need to do is read the location * of the referenced adouble out of store[location] and perform * operations with this refloc. This means that the tape needs new * opcodes (ref_assign_* /ref_eq_* / ref_{incr,decr}_a) for each of * these operations, most of the code will simply be copied from * adouble class, since the operation is really the same except for * the part where the refloc is read from store[location]. * Reverse mode is also straightforward the same way. * * Convert to a new adub as soon as used as rvalue, this is why adubref * is not a child of badouble, since it should never occur as rvalue. */ friend ADOLC_DLL_EXPORT class adub; friend ADOLC_DLL_EXPORT class advector; protected: locint location; locint refloc; explicit adubref( locint lo, locint ref ); explicit adubref( void ) { fprintf(DIAG_OUT,"ADOL-C error: illegal default construction of adubref" " variable\n"); exit(-2); } explicit adubref( double ) { fprintf(DIAG_OUT,"ADOL-C error: illegal construction of adubref" " variable from double\n"); exit(-2); } explicit adubref( const badouble& ) { fprintf(DIAG_OUT,"ADOL-C error: illegal construction of adubref" " variable from badouble\n"); exit(-2); } explicit adubref( const adub& ) { fprintf(DIAG_OUT,"ADOL-C error: illegal construction of adubref" " variable from adub\n"); exit(-2); } public: /* adub prevents postfix operators to occur on the left side of an assignment which would not work */ adub operator++( int ); adub operator--( int ); adubref& operator++( void ); adubref& operator--( void ); adubref& operator = ( double ); adubref& operator = ( const badouble& ); adubref& operator = ( const adubref& ); adubref& operator += ( double ); adubref& operator += ( const badouble& ); adubref& operator -= ( double x ); adubref& operator -= ( const badouble& ); adubref& operator *= ( double x ); adubref& operator *= ( const badouble& ); adubref& operator /= ( double x ); adubref& operator /= ( const badouble& ); adubref& operator <<= ( double ); void declareIndependent(); adubref& operator >>= ( double& ); void declareDependent(); operator adub() const; friend ADOLC_DLL_EXPORT void condassign(adubref, const badouble&, const badouble&, const badouble&); friend ADOLC_DLL_EXPORT void condassign(adubref, const badouble&, const badouble&); }; class advector { private: struct ADOLC_DLL_EXPORT blocker { adouble *dflt; blocker() {} blocker(size_t n); ~blocker() {} } blk; std::vector data; ADOLC_DLL_EXPORT bool nondecreasing() const; public: ADOLC_DLL_EXPORT advector() : blk(), data() {} ADOLC_DLL_EXPORT explicit advector(size_t n) : blk(n), data(n, *blk.dflt) { delete blk.dflt; } ADOLC_DLL_EXPORT ~advector() {} ADOLC_DLL_EXPORT advector(const advector& x) : blk(x.data.size()), data(x.data) { delete blk.dflt; } ADOLC_DLL_EXPORT advector(const vector& v) : blk(v.size()), data(v) { delete blk.dflt; } ADOLC_DLL_EXPORT size_t size() const { return data.size(); } ADOLC_DLL_EXPORT operator const vector&() const { return data; } ADOLC_DLL_EXPORT operator vector&() { return data; } ADOLC_DLL_EXPORT adub operator[](const badouble& index) const; ADOLC_DLL_EXPORT adubref operator[](const badouble& index); ADOLC_DLL_EXPORT adouble& operator[](size_t i) { return data[i]; } ADOLC_DLL_EXPORT const adouble& operator[](size_t i) const { return data[i]; } ADOLC_DLL_EXPORT adouble lookupindex(const badouble& x, const badouble& y) const; }; #endif /* TAPELESS */ #endif /* __cplusplus */ #endif /* ADOLC_ADVECTOR_H */ ADOL-C-2.4.1/ADOL-C/include/adolc/usrparms.h0000644000076600007660000000570312062606010016522 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: usrparms.h Revision: $Id: usrparms.h 375 2012-12-14 11:22:48Z kulshres $ Contents: User parameters: These parameters might affect the performance of the ADOL-C system; they are intended to be tweeked by users and local maintainence personal. Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_USRPARMS_H) #define ADOLC_USRPARMS_H 1 /*--------------------------------------------------------------------------*/ /* Buffer sizes */ #define OBUFSIZE 524288 /* 16384 or 65536 */ #define LBUFSIZE 524288 /* 16384 or 65536 */ #define VBUFSIZE 524288 /* 16384 or 65536 */ /*--------------------------------------------------------------------------*/ /* Buffer size for temporary Taylor store */ #define TBUFSIZE 524288 /* 16384 or 65536 */ /*--------------------------------------------------------------------------*/ /* Number of temporary Taylor stores*/ #define TBUFNUM 32 /*--------------------------------------------------------------------------*/ /* Data types used by Fortran callable versions of functions */ #define fint long #define fdouble double /*--------------------------------------------------------------------------*/ /* Definionion of inf and NaN */ #define inf_num 1.0 /* don't undefine these; on non-IEEE machines */ #define inf_den 0.0 /* change the values to get small fractions */ #define non_num 0.0 /* (inf_num/inf_den) and (non_num/non_den) */ #define non_den 0.0 /* respectively, see the documentation */ #define ADOLC_EPS 10E-20 /* for test on zero */ /****************************************************************************/ /* Standard output used for diagnostics by ADOL-C, */ /* e.g. stdout or stderr or whatever file identifier */ #define DIAG_OUT stderr /*--------------------------------------------------------------------------*/ /* Constants used by the checkpointing part (revolve) */ #define ADOLC_CHECKUP 1000 #define ADOLC_REPSUP 1000 /*--------------------------------------------------------------------------*/ /* Maximal size (Bytes) of a block to be written with fwrite or read with */ /* fread --- power of 2 > 8 preferable ;-) --- */ #define ADOLC_IO_CHUNK_SIZE 1073741824 /*--------------------------------------------------------------------------*/ #endif ADOL-C-2.4.1/ADOL-C/include/adolc/fortutils.h0000644000076600007660000000271612032277512016712 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: fortutils.h Revision: $Id: fortutils.h 354 2012-10-01 11:32:26Z kulshres $ Contents: Internal tools to handle Fortran arrays Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_FORTUTILS_H) #define ADOLC_FORTUTILS_H 1 #include /****************************************************************************/ /* Now the C THINGS */ BEGIN_C_DECLS ADOLC_DLL_EXPORT void spread1(int m, fdouble* x, double* X); ADOLC_DLL_EXPORT void pack1(int m, double* X, fdouble* x); ADOLC_DLL_EXPORT void spread2(int m, int n, fdouble* x, double** X); ADOLC_DLL_EXPORT void pack2(int m, int n, double** X, fdouble* x); ADOLC_DLL_EXPORT void spread3(int m, int n, int p, fdouble* x, double*** X); ADOLC_DLL_EXPORT void pack3(int m, int n, int p, double*** X, fdouble* x); END_C_DECLS /****************************************************************************/ #endif ADOL-C-2.4.1/ADOL-C/include/adolc/adolc_settings.h0000644000076600007660000000250012101471121017635 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: adolc_settings.h Revision: $Id$ Contents: ADOL-C Settings: These parameters might affect the performance of the ADOL-C system; and are set by the configure script during the build. Do not edit this file. Copyright (c) Kshitij Kulshreshtha This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_ADOLC_SETTINGS_H) #define ADOLC_ADOLC_SETTINGS_H 1 /*--------------------------------------------------------------------------*/ /* ADOL-C data types */ typedef uint32_t locint; /* ensure locint is unsigned */ typedef double revreal; /*--------------------------------------------------------------------------*/ /* Enable/disable asinh, acosh,atanh, erf */ #undef ATRIG_ERF // #define ATRIG_ERF 1 /*--------------------------------------------------------------------------*/ /* Enable/disable advanced branching */ #undef ADOLC_ADVANCED_BRANCHING // #define ADOLC_ADVANCED_BRANCHING 1 #endif ADOL-C-2.4.1/ADOL-C/include/adolc/adolc.h0000644000076600007660000000540212032277512015734 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: adolc.h Revision: $Id: adolc.h 354 2012-10-01 11:32:26Z kulshres $ Contents: Provides all C/C++ interfaces of ADOL-C. NOTICE: ALL C/C++ headers will be included DEPENDING ON whether the source code is plain C or C/C++ code. Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_ADOLC_H) #define ADOLC_ADOLC_H 1 #include /****************************************************************************/ /* Now the pure C++ THINGS */ #if defined(__cplusplus) /*--------------------------------------------------------------------------*/ /* Operator overloading things (active doubles & vectors) */ # include # include # include # include #endif /****************************************************************************/ /* Now the C/C++ THINGS */ /*--------------------------------------------------------------------------*/ /* interfaces to basic forward/reverse routines */ #include /*--------------------------------------------------------------------------*/ /* interfaces to "Easy To Use" driver routines for ... */ #include /* optimization & nonlinear equations */ #include /* higher order tensors & inverse/implicit functions */ #include /* ordinary differential equations */ /*--------------------------------------------------------------------------*/ /* interfaces to TAPEDOC package */ #include /*--------------------------------------------------------------------------*/ /* interfaces to SPARSE package */ #if defined(SPARSE) #include #include #endif /*--------------------------------------------------------------------------*/ /* tape and value stack utilities */ #include /*--------------------------------------------------------------------------*/ /* allocation utilities */ #include /****************************************************************************/ #endif ADOL-C-2.4.1/ADOL-C/include/adolc/adolc_openmp.h0000644000076600007660000000337112032277512017315 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: adolc_openmp.h Revision: $Id: adolc_openmp.h 354 2012-10-01 11:32:26Z kulshres $ Contents: header file for openmp parallel differentiation Copyright (c) Andreas Kowarz This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #if !defined(ADOLC_ADOLC_OPENMP_H) #define ADOLC_ADOLC_OPENMP_H 1 #if !defined(__cplusplus) #warning ADOLC_OPENMP IS ONLY USEFUL WHEN COMPILED WITH C++ !!! #else #if !defined(_OPENMP) #error OPENMP NOT ENABLED AT COMPILE TIME !!! #else #include extern void beginParallel(); extern void endParallel(); extern int ADOLC_parallel_doCopy; typedef struct ADOLC_OpenMP { inline ADOLC_OpenMP() {} inline ADOLC_OpenMP(const ADOLC_OpenMP &arg) { ADOLC_parallel_doCopy = 1; beginParallel(); } inline ~ADOLC_OpenMP() { endParallel(); } } ADOLC_OpenMP; typedef struct ADOLC_OpenMP_NC { inline ADOLC_OpenMP_NC() {} inline ADOLC_OpenMP_NC(const ADOLC_OpenMP_NC &arg) { ADOLC_parallel_doCopy = 0; beginParallel(); } inline ~ADOLC_OpenMP_NC() { endParallel(); } } ADOLC_OpenMP_NC; extern ADOLC_OpenMP ADOLC_OpenMP_Handler; extern ADOLC_OpenMP_NC ADOLC_OpenMP_Handler_NC; #define ADOLC_OPENMP firstprivate(ADOLC_OpenMP_Handler) #define ADOLC_OPENMP_NC firstprivate(ADOLC_OpenMP_Handler_NC) #endif /* _OPENMP */ #endif /* __cplusplus */ #endif /* ADOLC_ADOLC_OPENMP_H */ ADOL-C-2.4.1/ADOL-C/include/adolc/Makefile.am0000644000076600007660000000177712062606010016540 0ustar coincoin############################################################################## ## Makefile.am -- Process this file with automake to produce Makefile.in ## Revision: $Id$ ## ## Copyright (C) Andrea Walther, Andreas Kowarz, Kshitij Kulshreshtha ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## pkginclude_HEADERS = adolc.h adalloc.h adouble.h adutils.h adutilsc.h \ common.h convolut.h dvlparms.h fortutils.h\ interfaces.h taping.h usrparms.h \ externfcts.h checkpointing.h fixpoint.h\ adolc_sparse.h adolc_openmp.h \ revolve.h advector.h adolc_settings.h SUBDIRS = drivers tapedoc EXTRA_DIST = adolc_settings.h.in if SPARSE SUBDIRS += sparse endif ADOL-C-2.4.1/ADOL-C/include/adolc/drivers/0000755000076600007660000000000012120272603016150 5ustar coincoinADOL-C-2.4.1/ADOL-C/include/adolc/drivers/taylor.h0000644000076600007660000000657312032277512017654 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: drivers/taylor.h Revision: $Id: taylor.h 354 2012-10-01 11:32:26Z kulshres $ Contents: Easy to use drivers for the evaluation of higher order derivative tensors and inverse/impicit function differentiation Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_DRIVERS_TAYLOR_H) #define ADOLC_DRIVERS_TAYLOR_H 1 #include BEGIN_C_DECLS /****************************************************************************/ /* TENSOR EVALUATIONS */ /*--------------------------------------------------------------------------*/ /* tensor_eval(tag,m,n,d,p,x[n],tensor[m][dim],S[n][p]) with dim = ((p+d) over d) */ ADOLC_DLL_EXPORT int tensor_eval (short tag, int m, int n, int d, int p, double *x, double **tensor, double **S); /*--------------------------------------------------------------------------*/ /* inverse_tensor_eval(tag,n,d,p,x,tensor[n][dim],S[n][p]) with dim = ((p+d) over d) */ ADOLC_DLL_EXPORT int inverse_tensor_eval (short tag, int n, int d, int p, double *x, double **tensor, double **S); /*--------------------------------------------------------------------------*/ /* inverse_Taylor_prop(tag,n,d,Y[n][d+1],X[n][d+1]) */ ADOLC_DLL_EXPORT int inverse_Taylor_prop (short tag, int n, int d, double** Y, double** X); /****************************************************************************/ /* ACCESS TO TENSOR VALUES */ /*--------------------------------------------------------------------------*/ /* tensor_value(d,m,y[m],tensori[m][dim],multi[d]) with dim = ((p+d) over d) */ ADOLC_DLL_EXPORT void tensor_value (int d, int m, double *y, double **tensor, int *multi); /*--------------------------------------------------------------------------*/ /* void** tensorsetup(m,p,d,tensorig) */ ADOLC_DLL_EXPORT void** tensorsetup(int m, int p, int d, double** tensorig); /*--------------------------------------------------------------------------*/ /* void freetensor(m,p,d,tensor) */ ADOLC_DLL_EXPORT void freetensor(int m, int p, int d, double** tensor); /*--------------------------------------------------------------------------*/ /* int address(d, im[d]) */ ADOLC_DLL_EXPORT int address(int d, int* im); /****************************************************************************/ /* UTILS */ /*--------------------------------------------------------------------------*/ /* int binomi(a,b) ---> binomial coefficient to compute tensor dimension */ ADOLC_DLL_EXPORT long binomi(int a, int b); /*--------------------------------------------------------------------------*/ /* jac_solv(tag,n,x,b,mode) */ ADOLC_DLL_EXPORT int jac_solv (unsigned short tag, int n, const double* x, double* b, unsigned short mode); END_C_DECLS /****************************************************************************/ #endif ADOL-C-2.4.1/ADOL-C/include/adolc/drivers/odedrivers.h0000644000076600007660000001347012032277512020502 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: drivers/odedrivers.h Revision: $Id: odedrivers.h 354 2012-10-01 11:32:26Z kulshres $ Contents: Easy to use drivers for ordinary differential equations (ODE) (with C and C++ callable interfaces including Fortran callable versions). Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_DRIVERS_ODEDRIVERS_H) #define ADOLC_DRIVERS_ODEDRIVERS_H 1 #include #include BEGIN_C_DECLS /****************************************************************************/ /* DRIVERS FOR ODEs */ /*--------------------------------------------------------------------------*/ /* forodec */ /* forodec(tag, n, tau, dold, dnew, X[n][d+1]) */ ADOLC_DLL_EXPORT int forodec(short,int,double,int,int,double**); ADOLC_DLL_EXPORT fint forodec_(fint*,fint*,fdouble*,fint*,fint*,fdouble*); /*--------------------------------------------------------------------------*/ /* accodec */ /* accodec(n, tau, d, Z[n][n][d+1], B[n][n][d+1], nz[n][n]) */ ADOLC_DLL_EXPORT void accodec(int,double,int,double***,double***,short**); ADOLC_DLL_EXPORT fint accodec_(fint*,fdouble*,fint*,fdouble*,fdouble*); END_C_DECLS /****************************************************************************/ /****************************************************************************/ /* Now the C++ THINGS */ #if defined(__cplusplus) /****************************************************************************/ /* DRIVERS FOR ODEs, overloaded calls */ /*--------------------------------------------------------------------------*/ /* forode */ /* forode(tag, n, tau, dold, dnew, X[n][d+1]) */ inline int forode( short tag, // tape identifier int n, // space dimension double tau, // scaling int dold, // previous degree defaults to zero int dnew, // New degree of consistency double **X) // Taylor series { return forodec(tag,n,tau,dold,dnew,X); } /*--------------------------------------------------------------------------*/ /* forode */ /* the scaling tau defaults to 1 */ /* */ /* forode(tag, n, dold, dnew, X[n][d+1]) */ inline int forode(short tag, int n, int dold, int dnew, double** X) { return forodec(tag,n,1.0,dold,dnew,X); } /*--------------------------------------------------------------------------*/ /* forode */ /* previous order defaults to 0 */ /* */ /* forode(tag, n, tau, dnew, X[n][d+1]) */ inline int forode( short tag, int n, double tau, int deg, double **X) { return forodec(tag,n,tau,0,deg, X); } /*--------------------------------------------------------------------------*/ /* forode */ /* both tau and dold default */ /* */ /* forode(tag, n, dnew, X[n][d+1]) */ inline int forode(short tag, int n, int deg, double** X) { return forode(tag,n,1.0,0,deg,X); } /*--------------------------------------------------------------------------*/ /* accode */ /* accode(n, tau, d, Z[n][n][d+1], B[n][n][d+1], nz[n][n]) */ inline void accode( int n, // space dimension double tau, // scaling defaults to 1.0 int deg, // highest degree double ***A, // input tensor of "partial" Jacobians double ***B, // output tensor of "total" Jacobians short **nonzero = 0) // optional sparsity characterization { accodec(n,tau,deg,A,B,nonzero); } /*--------------------------------------------------------------------------*/ /* accode */ /* scaling defaults to 1 */ /* */ /* accode(n, d, Z[n][n][d+1], B[n][n][d+1], nz[n][n]) */ inline void accode( int n, // space dimension int deg, // highest degree double ***A, // input tensor of "partial" Jacobians double ***B, // output tensor of "total" Jacobians short **nonzero = 0) // optional sparsity characterization { accodec(n,1.0,deg,A,B,nonzero); } #endif /****************************************************************************/ #endif ADOL-C-2.4.1/ADOL-C/include/adolc/drivers/Makefile.am0000644000076600007660000000130712032277512020213 0ustar coincoin############################################################################## ## Makefile.am -- Process this file with automake to produce Makefile.in ## Revision: $Id: Makefile.am 354 2012-10-01 11:32:26Z kulshres $ ## ## Copyright (C) Andrea Walther, Andreas Kowarz, Kshitij Kulshreshta ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## libdriversincludedir = $(pkgincludedir)/drivers libdriversinclude_HEADERS = drivers.h odedrivers.h taylor.h ADOL-C-2.4.1/ADOL-C/include/adolc/drivers/Makefile.in0000644000076600007660000003673212062606346020242 0ustar coincoin# Makefile.in generated by automake 1.12.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = ADOL-C/include/adolc/drivers DIST_COMMON = $(libdriversinclude_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdriversincludedir)" HEADERS = $(libdriversinclude_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH_FALSE = @ADVBRANCH_FALSE@ ADVBRANCH_TRUE = @ADVBRANCH_TRUE@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF_FALSE = @ATRIG_ERF_FALSE@ ATRIG_ERF_TRUE = @ATRIG_ERF_TRUE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COLPACK_CFLAGS = @COLPACK_CFLAGS@ COLPACK_LIBS = @COLPACK_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ libdriversincludedir = $(pkgincludedir)/drivers libdriversinclude_HEADERS = drivers.h odedrivers.h taylor.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/include/adolc/drivers/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/include/adolc/drivers/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-libdriversincludeHEADERS: $(libdriversinclude_HEADERS) @$(NORMAL_INSTALL) @list='$(libdriversinclude_HEADERS)'; test -n "$(libdriversincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(libdriversincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdriversincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libdriversincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(libdriversincludedir)" || exit $$?; \ done uninstall-libdriversincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(libdriversinclude_HEADERS)'; test -n "$(libdriversincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(libdriversincludedir)'; $(am__uninstall_files_from_dir) ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libdriversincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-libdriversincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-libdriversincludeHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool cscopelist ctags distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-libdriversincludeHEADERS install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-libdriversincludeHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.4.1/ADOL-C/include/adolc/drivers/drivers.h0000644000076600007660000001312612032277512020010 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: drivers/drivers.h Revision: $Id: drivers.h 354 2012-10-01 11:32:26Z kulshres $ Contents: Easy to use drivers for optimization and nonlinear equations (with C and C++ callable interfaces including Fortran callable versions). Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_DRIVERS_DRIVERS_H) #define ADOLC_DRIVERS_DRIVERS_H 1 #include BEGIN_C_DECLS /****************************************************************************/ /* DRIVERS FOR OPTIMIZATION AND NONLINEAR EQUATIONS */ /*--------------------------------------------------------------------------*/ /* function */ /* function(tag, m, n, x[n], y[m]) */ ADOLC_DLL_EXPORT int function(short,int,int,double*,double*); ADOLC_DLL_EXPORT fint function_(fint*,fint*,fint*,fdouble*,fdouble*); /*--------------------------------------------------------------------------*/ /* gradient */ /* gradient(tag, n, x[n], g[n]) */ ADOLC_DLL_EXPORT int gradient(short,int,const double*,double*); ADOLC_DLL_EXPORT fint gradient_(fint*,fint*,fdouble*,fdouble*); /*--------------------------------------------------------------------------*/ /* jacobian */ /* jacobian(tag, m, n, x[n], J[m][n]) */ ADOLC_DLL_EXPORT int jacobian(short,int,int,const double*,double**); ADOLC_DLL_EXPORT fint jacobian_(fint*,fint*,fint*,fdouble*,fdouble*); /*--------------------------------------------------------------------------*/ /* large_jacobian */ /* large_jacobian(tag, m, n, k, x[n], y[m], J[m][n]) */ ADOLC_DLL_EXPORT int large_jacobian(short,int,int,int,double*,double*,double**); ADOLC_DLL_EXPORT fint large_jacobian_(fint*,fint*,fint*,fint*,fdouble*,fdouble*,fdouble*); /*--------------------------------------------------------------------------*/ /* vector_jacobian */ /* vec_jac(tag, m, n, repeat, x[n], u[m], v[n]) */ ADOLC_DLL_EXPORT int vec_jac(short,int,int,int,double*,double*,double*); ADOLC_DLL_EXPORT fint vec_jac_(fint*,fint*,fint*,fint*, fdouble*,fdouble*,fdouble*); /*--------------------------------------------------------------------------*/ /* jacobian_vector */ /* jac_vec(tag, m, n, x[n], v[n], u[m]); */ ADOLC_DLL_EXPORT int jac_vec(short,int,int,double*,double*,double*); ADOLC_DLL_EXPORT fint jac_vec_(fint*,fint*,fint*,fdouble*,fdouble*,fdouble*); /*--------------------------------------------------------------------------*/ /* hessian */ /* hessian(tag, n, x[n], lower triangle of H[n][n]) */ /* uses Hessian-vector product */ ADOLC_DLL_EXPORT int hessian(short,int,double*,double**); ADOLC_DLL_EXPORT fint hessian_(fint*,fint*,fdouble*,fdouble*); /*--------------------------------------------------------------------------*/ /* hessian2 */ /* hessian2(tag, n, x[n], lower triangle of H[n][n]) */ /* uses Hessian-matrix product */ ADOLC_DLL_EXPORT int hessian2(short,int,double*,double**); ADOLC_DLL_EXPORT fint hessian2_(fint*,fint*,fdouble*,fdouble*); /*--------------------------------------------------------------------------*/ /* hessian_vector */ /* hess_vec(tag, n, x[n], v[n], w[n]) */ ADOLC_DLL_EXPORT int hess_vec(short,int,double*,double*,double*); ADOLC_DLL_EXPORT fint hess_vec_(fint*,fint*,fdouble*,fdouble*,fdouble*); /*--------------------------------------------------------------------------*/ /* hessian_matrix */ /* hess_mat(tag, n, q, x[n], V[n][q], W[n][q]) */ ADOLC_DLL_EXPORT int hess_mat(short,int,int,double*,double**,double**); ADOLC_DLL_EXPORT fint hess_mat_(fint*,fint*,fint*, fdouble*,fdouble**,fdouble**); /*--------------------------------------------------------------------------*/ /* lagrange_hessian_vector */ /* lagra_hess_vec(tag, m, n, x[n], v[n], u[m], w[n]) */ ADOLC_DLL_EXPORT int lagra_hess_vec(short,int,int,double*, double*,double*,double*); ADOLC_DLL_EXPORT fint lagra_hess_vec_(fint*,fint*,fint*, fdouble*,fdouble*,fdouble*,fdouble*); END_C_DECLS /****************************************************************************/ #endif ADOL-C-2.4.1/ADOL-C/include/adolc/interfaces.h0000644000076600007660000005555112060360016017000 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: interfaces.h Revision: $Id: interfaces.h 372 2012-12-07 12:24:46Z kulshres $ Contents: Declaration of the standard interfaces to ADOL-C forward and reverse calls (C++, C and Fortran callable C functions). Functions prototyped here are defined in the files uni5_for.mc for zos_forward.c fos_forward.c hos_forward.c fov_forward.c hov_forward.c hov_wk_forward.c fo_rev.mc for fos_reverse.c fov_reverse.c ho_rev.mc for hos_reverse.c hos_ov_reverse.c hov_reverse.c hos_ti_reverse.c hov_ti_reverse.c interfacesC.C interfacesf.c ADOL-C Abreviations : zos : zero-order-scalar mode fos : first-order-scalar mode hos : higher-order-scalar mode fov : first-order-vector mode hov : higher-order-vector mode wk : with keep ov : over vector (forward) ti : Taylor input Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_INTERFACES_H) #define ADOLC_INTERFACES_H 1 #include #if defined(SPARSE) #include #include #endif /****************************************************************************/ /****************************************************************************/ /* Now the C++ THINGS */ #if defined(__cplusplus) /****************************************************************************/ /* FORWARD MODE, overloaded calls */ /*--------------------------------------------------------------------------*/ /* General scalar call. For d=0 or d=1 done by specialized code */ /* */ /* forward(tag, m, n, d, keep, X[n][d+1], Y[m][d+1]) : hos || fos || zos */ ADOLC_DLL_EXPORT int forward(short, int, int, int, int, double**, double**); /*--------------------------------------------------------------------------*/ /* Y can be one dimensional if m=1. d=0 or d=1 done by specialized code */ /* */ /* forward(tag, m, n, d, keep, X[n][d+1], Y[d+1]) : hos || fos || zos */ ADOLC_DLL_EXPORT int forward(short, int, int, int, int, double**, double*); /*--------------------------------------------------------------------------*/ /* X and Y can be one dimensional if d = 0; done by specialized code */ /* */ /* forward(tag, m, n, d, keep, X[n], Y[m]) : zos */ ADOLC_DLL_EXPORT int forward(short, int, int, int, int, double*, double*); /*--------------------------------------------------------------------------*/ /* X and Y can be one dimensional if d omitted; done by specialized code */ /* */ /* forward(tag, m, n, keep, X[n], Y[m]) : zos */ ADOLC_DLL_EXPORT int forward(short, int, int, int, double*, double*); /*--------------------------------------------------------------------------*/ /* General vector call */ /* */ /* forward(tag, m, n, d, p, x[n], X[n][p][d], y[m], Y[m][p][d]) : hov */ ADOLC_DLL_EXPORT int forward(short, int, int, int, int, double*, double***, double*, double***); /*--------------------------------------------------------------------------*/ /* d = 1 may be omitted. General vector call, done by specialized code */ /* */ /* forward(tag, m, n, p, x[n], X[n][p], y[m], Y[m][p]) : fov */ ADOLC_DLL_EXPORT int forward( short, int, int, int, double*, double**, double*, double**); /****************************************************************************/ /* REVERSE MODE, overloaded calls */ /*--------------------------------------------------------------------------*/ /* General call */ /* */ /* reverse(tag, m, n, d, u[m], Z[n][d+1]) : hos */ ADOLC_DLL_EXPORT int reverse(short, int, int, int, double*, double**); /*--------------------------------------------------------------------------*/ /* u can be a scalar if m=1 */ /* */ /* reverse(tag, m, n, d, u, Z[n][d+1]) : hos */ ADOLC_DLL_EXPORT int reverse(short, int, int, int, double, double**); /*--------------------------------------------------------------------------*/ /* Z can be vector if d = 0; done by specialized code */ /* */ /* reverse(tag, m, n, d, u[m], Z[n]) : fos */ ADOLC_DLL_EXPORT int reverse(short, int, int, int, double*, double*); /*--------------------------------------------------------------------------*/ /* u can be a scalar if m=1 and d=0; done by specialized code */ /* */ /* reverse(tag, m, n, d, u, Z[n]) : fos */ ADOLC_DLL_EXPORT int reverse(short, int, int, int, double, double*); /*--------------------------------------------------------------------------*/ /* General vector call */ /* */ /* reverse(tag, m, n, d, q, U[q][m], Z[q][n][d+1], nz[q][n]) : hov */ ADOLC_DLL_EXPORT int reverse( short, int, int, int, int, double**, double***, short** =0); /*--------------------------------------------------------------------------*/ /* U can be a vector if m=1 */ /* */ /* reverse(tag, m, n, d, q, U[q], Z[q][n][d+1], nz[q][n]) : hov */ ADOLC_DLL_EXPORT int reverse( short, int, int, int, int, double*, double***, short** = 0); /*--------------------------------------------------------------------------*/ /* */ /* If d=0 then Z may be a matrix, no nz; done by specialized code */ /* */ /* reverse(tag, m, n, d, q, U[q][m], Z[q][n]) : fov */ ADOLC_DLL_EXPORT int reverse(short, int, int, int, int, double**, double**); /*--------------------------------------------------------------------------*/ /* */ /* d=0 may be omitted, Z is a matrix, no nz; done by specialized code */ /* */ /* reverse(tag, m, n, q, U[q][m], Z[q][n]) : fov */ ADOLC_DLL_EXPORT int reverse(short, int, int, int, double**, double**); /*--------------------------------------------------------------------------*/ /* */ /* If m=1 and d=0 then U can be vector and Z a matrix but no nz. */ /* Done by specialized code */ /* */ /* reverse(tag, m, n, d, q, U[q], Z[q][n]) : fov */ ADOLC_DLL_EXPORT int reverse(short, int, int, int, int, double*, double**); /*--------------------------------------------------------------------------*/ /* */ /* If q and U are omitted they default to m and I so that as above */ /* */ /* reverse(tag, m, n, d, Z[q][n][d+1], nz[q][n]) : hov */ ADOLC_DLL_EXPORT int reverse(short, int, int, int, double***, short** =0); #endif /****************************************************************************/ /****************************************************************************/ /* Now the C THINGS */ BEGIN_C_DECLS /****************************************************************************/ /* FORWARD MODE */ /*--------------------------------------------------------------------------*/ /* ZOS */ /* zos_forward(tag, m, n, keep, x[n], y[m]) */ /* (defined in uni5_for.mc) */ ADOLC_DLL_EXPORT int zos_forward(short,int,int,int,const double*,double*); /* zos_forward_nk(tag, m, n, x[n], y[m]) */ /* (no keep, defined in uni5_for.c, but not supported in ADOL-C 1.8) */ ADOLC_DLL_EXPORT int zos_forward_nk(short,int,int,double*,double*); /* zos_forward_partx(tag, m, n, ndim[n], x[n][d], y[m]) */ /* (based on zos_forward) */ ADOLC_DLL_EXPORT int zos_forward_partx(short,int,int,int*,double**,double*); /*--------------------------------------------------------------------------*/ /* FOS */ /* fos_forward(tag, m, n, keep, x[n], X[n], y[m], Y[m]) */ /* (defined in uni5_for.mc) */ ADOLC_DLL_EXPORT int fos_forward( short,int,int,int,const double*,double*,double*,double*); /* fos_forward_nk(tag,m,n,x[n],X[n],y[m],Y[m]) */ /* (no keep, defined in uni5_for.c, but not supported in ADOL-C 1.8) */ ADOLC_DLL_EXPORT int fos_forward_nk( short,int,int,double*,double*,double*,double*); /* fos_forward_partx(tag, m, n, ndim[n], x[n][][2], y[m][2]) */ /* (based on fos_forward) */ ADOLC_DLL_EXPORT int fos_forward_partx( short,int,int,int*,double***,double**); /*--------------------------------------------------------------------------*/ /* HOS */ /* hos_forward(tag, m, n, d, keep, x[n], X[n][d], y[m], Y[m][d]) */ /* (defined in uni5_for.mc) */ ADOLC_DLL_EXPORT int hos_forward( short,int,int,int,int,double*,double**,double*,double**); /* hos_forward_nk(tag, m, n, d, x[n], X[n][d], y[m], Y[m][d]) */ /* (no keep, defined in uni5_for.c, but not supported in ADOL-C 1.8) */ ADOLC_DLL_EXPORT int hos_forward_nk( short,int,int,int,double*,double**,double*,double**); /* hos_forward_partx(tag, m, n, ndim[n], d, X[n][d+1], Y[m][d+1]) */ /* (defined in forward_partx.c) */ ADOLC_DLL_EXPORT int hos_forward_partx( short,int,int,int*,int,double***,double**); /* now pack the arrays into vectors for Fortran calling */ ADOLC_DLL_EXPORT fint hos_forward_( fint*,fint*,fint*,fint*,fint*,fdouble*,fdouble*,fdouble*,fdouble*); /*--------------------------------------------------------------------------*/ /* FOV */ /* fov_forward(tag, m, n, p, x[n], X[n][p], y[m], Y[m][p]) */ /* (defined in uni5_for.mc) */ ADOLC_DLL_EXPORT int fov_forward( short, int,int,int,const double*,double**,double*,double**); ADOLC_DLL_EXPORT int fov_offset_forward( short, int,int,int,int,double*,double**,double*,double**); /* now pack the arrays into vectors for Fortran calling */ ADOLC_DLL_EXPORT fint fov_forward_( fint*,fint*,fint*,fint*,fdouble*,fdouble*,fdouble*,fdouble*); /* fov_forward_partx(tag, m, n, ndim[n], p, */ /* x[n][], X[n][][p],y[m], Y[m][p]) */ ADOLC_DLL_EXPORT int fov_forward_partx( short, int, int, int*, int, double**, double***, double*, double**); /*--------------------------------------------------------------------------*/ /* HOV */ /* hov_forward(tag, m, n, d, p, x[n], X[n][p][d], y[m], Y[m][p][d]) */ /* (defined in uni5_for.mc) */ ADOLC_DLL_EXPORT int hov_forward( short,int,int,int,int,double*,double***,double*,double***); /* now pack the arrays into vectors for Fortran calling */ ADOLC_DLL_EXPORT fint hov_forward_( fint*,fint*,fint*,fint*,fint*,fdouble*,fdouble*,fdouble*,fdouble*); /* hov_forward_partx(tag, m, n, ndim[n], d, p, */ /* x[n][], X[n][][p][d], y[m], Y[m][p][d]) */ ADOLC_DLL_EXPORT int hov_forward_partx( short, int, int, int*, int, int, double**, double****, double*, double***); /*--------------------------------------------------------------------------*/ /* HOV_WK */ /* hov_wk_forward(tag, m, n, d, p, x[n], X[n][p][d], y[m], Y[m][p][d]) */ /* (defined in uni5_for.mc) */ ADOLC_DLL_EXPORT int hov_wk_forward( short,int,int,int,int,int,double*,double***,double*,double***); /* now pack the arrays into vectors for Fortran calling */ ADOLC_DLL_EXPORT fint hov_wk_forward_( fint*,fint*,fint*,fint*,fint*,fint*,fdouble*,fdouble*,fdouble*,fdouble*); /****************************************************************************/ /* BIT PATTERN UTILITIES */ /*--------------------------------------------------------------------------*/ /* INT_FOR, SAFE */ /* int_forward_safe(tag, m, n, p, X[n][p], Y[m][p]) */ ADOLC_DLL_EXPORT int int_forward_safe (short, int, int, int, unsigned long int**, unsigned long int**); /*--------------------------------------------------------------------------*/ /* INT_FOR, TIGHT */ /* int_forward_tight(tag, m, n, p, x[n], X[n][p], y[m], Y[m][p]) */ ADOLC_DLL_EXPORT int int_forward_tight (short, int, int, int, const double*, unsigned long int**, double*, unsigned long int**); /****************************************************************************/ /* INDEX DOMAIN UTILITIES */ /*--------------------------------------------------------------------------*/ /* INDOPRO, SAFE */ /* indopro_forward_safe(tag, m, n, p, x[n], *Y[m]) */ ADOLC_DLL_EXPORT int indopro_forward_safe (short, int, int, const double*, unsigned int**); /*--------------------------------------------------------------------------*/ /* INDOPRO, TIGHT */ /* indopro_forward_tight(tag, m, n, x[n], *Y[m]) */ ADOLC_DLL_EXPORT int indopro_forward_tight (short, int, int, const double*, unsigned int**); /****************************************************************************/ /* NONLINEAR INDEX DOMAIN UTILITIES */ /*--------------------------------------------------------------------------*/ /* INDOPRO, SAFE */ /* nonl_ind_forward_safe(tag, m, n, p, x[n], *Y[m]) */ ADOLC_DLL_EXPORT int nonl_ind_forward_safe (short, int, int, const double*, unsigned int**); /*--------------------------------------------------------------------------*/ /* INDOPRO, TIGHT */ /* nonl_ind_forward_tight(tag, m, n, x[n], *Y[m]) */ ADOLC_DLL_EXPORT int nonl_ind_forward_tight (short, int, int, const double*, unsigned int**); /*--------------------------------------------------------------------------*/ /* INDOPRO, SAFE */ /* nonl_ind_old_forward_safe(tag, m, n, p, x[n], *Y[m]) */ ADOLC_DLL_EXPORT int nonl_ind_old_forward_safe (short, int, int, const double*, unsigned int**); /*--------------------------------------------------------------------------*/ /* INDOPRO, TIGHT */ /* nonl_ind_old_forward_tight(tag, m, n, x[n], *Y[m]) */ ADOLC_DLL_EXPORT int nonl_ind_old_forward_tight (short, int, int, const double*, unsigned int**); /****************************************************************************/ /* REVERSE MODE */ /*--------------------------------------------------------------------------*/ /* FOS */ /* fos_reverse(tag, m, n, u[m], z[n]) */ /* (defined in fo_rev.mc) */ ADOLC_DLL_EXPORT int fos_reverse(short,int,int,double*,double*); /* now pack the arrays into vectors for Fortran calling */ ADOLC_DLL_EXPORT fint fos_reverse_(fint*,fint*,fint*,fdouble*,fdouble*); /*--------------------------------------------------------------------------*/ /* HOS */ /* hos_reverse(tag, m, n, d, u[m], Z[n][d+1]) */ /* (defined in ho_rev.mc) */ ADOLC_DLL_EXPORT int hos_reverse(short,int,int,int,double*,double**); /* now pack the arrays into vectors for Fortran calling */ ADOLC_DLL_EXPORT fint hos_reverse_(fint*,fint*,fint*,fint*,fdouble*,fdouble*); /*--------------------------------------------------------------------------*/ /* HOS_TI */ /* hos_ti_reverse(tag, m, n, d, U[m][d+1], Z[n][d+1]) */ /* (defined in ho_rev.mc) */ ADOLC_DLL_EXPORT int hos_ti_reverse(short,int,int,int,double**,double**); /* now pack the arrays into vectors for Fortran calling */ ADOLC_DLL_EXPORT fint hos_ti_reverse_( fint*,fint*,fint*,fint*,fdouble*,fdouble*); /*--------------------------------------------------------------------------*/ /* HOS_OV */ /* hos_ov_reverse(tag, m, n, d, u[m], Z[n][d+1]) */ /* (defined in ho_rev.mc) */ ADOLC_DLL_EXPORT int hos_ov_reverse(short,int,int,int,int,double**,double***); /* now pack the arrays into vectors for Fortran calling */ ADOLC_DLL_EXPORT fint hos_ov_reverse_( fint*,fint*,fint*,fint*,fint*,fdouble*,fdouble***); /*--------------------------------------------------------------------------*/ /* FOV */ /* fov_reverse(tag, m, n, p, U[p][m], Z[p][n]) */ /* (defined in fo_rev.mc) */ ADOLC_DLL_EXPORT int fov_reverse(short,int,int,int,double**,double**); /* now pack the arrays into vectors for Fortran calling */ ADOLC_DLL_EXPORT fint fov_reverse_(fint*,fint*,fint*,fint*,fdouble*,fdouble*); /*--------------------------------------------------------------------------*/ /* HOV */ /* hov_reverse(tag, m, n, d, p, U[p][m], Z[p][n][d+1], nz[p][n]) */ /* (defined in ho_rev.mc) */ ADOLC_DLL_EXPORT int hov_reverse( short,int,int,int,int,double**,double***,short**); /* now pack the arrays into vectors for Fortran calling */ ADOLC_DLL_EXPORT fint hov_reverse_( fint*,fint*,fint*,fint*,fint*,fdouble*,fdouble*); /*--------------------------------------------------------------------------*/ /* HOV_TI */ /* hov_ti_reverse(tag, m, n, d, p, U[p][m][d+1], Z[p][n][d+1], nz[p][n]) */ /* (defined in ho_rev.mc) */ ADOLC_DLL_EXPORT int hov_ti_reverse( short,int,int,int,int,double***,double***,short**); /* now pack the arrays into vectors for Fortran calling */ ADOLC_DLL_EXPORT fint hov_ti_reverse_( fint*,fint*,fint*,fint*,fint*,fdouble*,fdouble*); /****************************************************************************/ /* BIT PATTERN UTILITIES */ /*--------------------------------------------------------------------------*/ /* INT_REV, TIGHT */ /* int_reverse_tight(tag, m, n, q, U[q][m], Z[q][n]) */ ADOLC_DLL_EXPORT int int_reverse_tight (short, int, int, int, unsigned long int**, unsigned long int**); /*--------------------------------------------------------------------------*/ /* INT_REV, SAFE */ /* int_reverse_safe(tag, m, n, q, U[q][m], Z[q][n]) */ ADOLC_DLL_EXPORT int int_reverse_safe (short, int, int, int, unsigned long int**, unsigned long int**); END_C_DECLS #endif ADOL-C-2.4.1/ADOL-C/include/adolc/tapedoc/0000755000076600007660000000000012120272603016111 5ustar coincoinADOL-C-2.4.1/ADOL-C/include/adolc/tapedoc/tapedoc.h0000644000076600007660000000245112032277512017711 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: tapedoc/tapedoc.h Revision: $Id: tapedoc.h 354 2012-10-01 11:32:26Z kulshres $ Contents: Contains declaration of tapedoc driver. Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_TAPEDOC_TAPEDOC_H) #define ADOLC_TAPEDOC_TAPEDOC_H 1 #include BEGIN_C_DECLS /****************************************************************************/ /* tape_doc */ /* tape_doc(tag, m, n, x[n], y[m]) */ ADOLC_DLL_EXPORT void tape_doc(short, int, int, double*, double*); /****************************************************************************/ /* THAT'S ALL */ END_C_DECLS #endif ADOL-C-2.4.1/ADOL-C/include/adolc/tapedoc/Makefile.am0000644000076600007660000000126112032277512020153 0ustar coincoin############################################################################## ## Makefile.am -- Process this file with automake to produce Makefile.in ## Revision: $Id: Makefile.am 354 2012-10-01 11:32:26Z kulshres $ ## ## Copyright (C) Andrea Walther, Andreas Kowarz, Kshitij Kulshreshtha ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## libtapedocincludedir = $(pkgincludedir)/tapedoc libtapedocinclude_HEADERS = tapedoc.h ADOL-C-2.4.1/ADOL-C/include/adolc/tapedoc/Makefile.in0000644000076600007660000003670412062606346020202 0ustar coincoin# Makefile.in generated by automake 1.12.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = ADOL-C/include/adolc/tapedoc DIST_COMMON = $(libtapedocinclude_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libtapedocincludedir)" HEADERS = $(libtapedocinclude_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH_FALSE = @ADVBRANCH_FALSE@ ADVBRANCH_TRUE = @ADVBRANCH_TRUE@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF_FALSE = @ATRIG_ERF_FALSE@ ATRIG_ERF_TRUE = @ATRIG_ERF_TRUE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COLPACK_CFLAGS = @COLPACK_CFLAGS@ COLPACK_LIBS = @COLPACK_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ libtapedocincludedir = $(pkgincludedir)/tapedoc libtapedocinclude_HEADERS = tapedoc.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/include/adolc/tapedoc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/include/adolc/tapedoc/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-libtapedocincludeHEADERS: $(libtapedocinclude_HEADERS) @$(NORMAL_INSTALL) @list='$(libtapedocinclude_HEADERS)'; test -n "$(libtapedocincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(libtapedocincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libtapedocincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libtapedocincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(libtapedocincludedir)" || exit $$?; \ done uninstall-libtapedocincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(libtapedocinclude_HEADERS)'; test -n "$(libtapedocincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(libtapedocincludedir)'; $(am__uninstall_files_from_dir) ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libtapedocincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-libtapedocincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-libtapedocincludeHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool cscopelist ctags distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-libtapedocincludeHEADERS install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-libtapedocincludeHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.4.1/ADOL-C/include/adolc/adolc_sparse.h0000644000076600007660000000130012032277512017302 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: adolc_sparse.h Revision: $Id: adolc_sparse.h 354 2012-10-01 11:32:26Z kulshres $ Contents: Provides C/C++ interfaces of ADOL-C sprase drivers. Copyright (c) Andrea Walther This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #include #include ADOL-C-2.4.1/ADOL-C/include/adolc/checkpointing.h0000644000076600007660000001024012032277512017473 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: checkpointing.h Revision: $Id: checkpointing.h 354 2012-10-01 11:32:26Z kulshres $ Contents: Provides all checkointing interfaces. Copyright (c) Andreas Kowarz This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_CHECKPOINTING_H) #define ADOLC_CHECKPOINTING_H 1 #include #include #if defined(__cplusplus) /****************************************************************************/ /* This is all C++ */ typedef int (*ADOLC_TimeStepFuncion) (int n, adouble *x); typedef int (*ADOLC_TimeStepFuncion_double) (int n, double *x); typedef void *(*ADOLC_saveFct) (); typedef void (*ADOLC_restoreFct) (void *); typedef struct CpInfos { ADOLC_TimeStepFuncion function; ADOLC_TimeStepFuncion_double function_double; ADOLC_saveFct saveNonAdoubles; ADOLC_restoreFct restoreNonAdoubles; int steps; int checkpoints; int tapeNumber; /* tape number to be used for checkpointing */ int retaping; /* != 0 forces retaping before every reverse step */ int n; /* number of variables in input and output (n=m) */ adouble *adp_x; /* input of the first step */ adouble *adp_y; /* output of the last step; will be set by ADOLC */ /* these are internal checkpointing variables => do not use */ int check; int capo; int fine; int info; int currentCP; double *dp_internal_for; double *dp_internal_rev; double **dpp_internal_rev; locint index; /* please do not change */ char modeForward; char modeReverse; } CpInfos; ADOLC_DLL_EXPORT CpInfos *reg_timestep_fct(ADOLC_TimeStepFuncion timeStepFunction); ADOLC_DLL_EXPORT int checkpointing (CpInfos *cpInfos); /* if tape with one program and use the tapes with another programm call this * function within the latter */ ADOLC_DLL_EXPORT void reinit_checkpointing(); class CP_Context { public: inline CP_Context(ADOLC_TimeStepFuncion tsf); inline ~CP_Context() {} inline void setDoubleFct(ADOLC_TimeStepFuncion_double tsf); inline void setSaveFct(ADOLC_saveFct sf); inline void setRestoreFct(ADOLC_restoreFct rf); inline void setNumberOfSteps(int number); inline void setNumberOfCheckpoints(int number); inline void setTapeNumber(int tapeNumber); inline void setDimensionXY(int n); inline void setInput(adouble *x); inline void setOutput(adouble *y); inline void setAlwaysRetaping(bool state); inline int checkpointing(); private: inline CP_Context() {} CpInfos *cpInfos; }; CP_Context::CP_Context(ADOLC_TimeStepFuncion tsf) { cpInfos = reg_timestep_fct(tsf); } void CP_Context::setDoubleFct(ADOLC_TimeStepFuncion_double tsf) { cpInfos->function_double = tsf; } void CP_Context::setSaveFct(ADOLC_saveFct sf) { cpInfos->saveNonAdoubles = sf; } void CP_Context::setRestoreFct(ADOLC_restoreFct rf) { cpInfos->restoreNonAdoubles = rf; } void CP_Context::setNumberOfSteps(int number) { cpInfos->steps = number; } void CP_Context::setNumberOfCheckpoints(int number) { cpInfos->checkpoints = number; } void CP_Context::setTapeNumber(int tapeNumber) { cpInfos->tapeNumber = tapeNumber; } void CP_Context::setDimensionXY(int n) { cpInfos->n = n; } void CP_Context::setInput(adouble *x) { cpInfos->adp_x = x; } void CP_Context::setOutput(adouble *y) { cpInfos->adp_y = y; } void CP_Context::setAlwaysRetaping(bool state) { if (state) cpInfos->retaping = 1; else cpInfos->retaping = 0; } int CP_Context::checkpointing() { return ::checkpointing(cpInfos); } #endif /* CPLUSPLUS */ /****************************************************************************/ #endif /* ADOLC_CHECKPOINTING_H */ ADOL-C-2.4.1/ADOL-C/include/adolc/Makefile.in0000644000076600007660000005254712062606346016566 0ustar coincoin# Makefile.in generated by automake 1.12.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @SPARSE_TRUE@am__append_1 = sparse subdir = ADOL-C/include/adolc DIST_COMMON = $(pkginclude_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/adolc_settings.h.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = adolc_settings.h CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(pkginclude_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = drivers tapedoc sparse DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH_FALSE = @ADVBRANCH_FALSE@ ADVBRANCH_TRUE = @ADVBRANCH_TRUE@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF_FALSE = @ATRIG_ERF_FALSE@ ATRIG_ERF_TRUE = @ATRIG_ERF_TRUE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COLPACK_CFLAGS = @COLPACK_CFLAGS@ COLPACK_LIBS = @COLPACK_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ pkginclude_HEADERS = adolc.h adalloc.h adouble.h adutils.h adutilsc.h \ common.h convolut.h dvlparms.h fortutils.h\ interfaces.h taping.h usrparms.h \ externfcts.h checkpointing.h fixpoint.h\ adolc_sparse.h adolc_openmp.h \ revolve.h advector.h adolc_settings.h SUBDIRS = drivers tapedoc $(am__append_1) EXTRA_DIST = adolc_settings.h.in all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/include/adolc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/include/adolc/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): adolc_settings.h: $(top_builddir)/config.status $(srcdir)/adolc_settings.h.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done cscopelist-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-pkgincludeHEADERS .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) \ cscopelist-recursive ctags-recursive install-am install-strip \ tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ cscopelist cscopelist-recursive ctags ctags-recursive \ distclean distclean-generic distclean-libtool distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgincludeHEADERS \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am uninstall-pkgincludeHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.4.1/ADOL-C/include/adolc/revolve.h0000644000076600007660000000271512032277512016340 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: revolve.h Revision: $Id: revolve.h 354 2012-10-01 11:32:26Z kulshres $ Contents: optimal binomial checkpointing adapted for ADOL-C Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #if !defined(ADOLC_REVOLVE_H) #define ADOLC_REVOLVE_H 1 #include BEGIN_C_DECLS typedef struct { int advances; int takeshots; int commands; int turn; int reps; int range; int ch[ADOLC_CHECKUP]; int oldsnaps; int oldfine; } revolve_nums; #ifndef _OPENMP extern revolve_nums revolve_numbers; #else #include extern revolve_nums *revolve_numbers; #endif enum revolve_action { revolve_advance, revolve_takeshot, revolve_restore, revolve_firsturn, revolve_youturn, revolve_terminate, revolve_error }; int maxrange(int ss, int tt); int adjustsize(int* steps, int* snaps, int* reps); enum revolve_action revolve(int* check,int* capo,int* fine,int snaps,int* info); END_C_DECLS #endif /* ADOLC_REVOLVE_H */ ADOL-C-2.4.1/ADOL-C/include/adolc/common.h0000644000076600007660000000731712101513400016133 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: common.h Revision: $Id: common.h 392 2013-01-28 15:19:28Z kulshres $ Contents: Common (global) ADOL-C header Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_COMMON_H) #define ADOLC_COMMON_H 1 #include /*--------------------------------------------------------------------------*/ /* standard includes */ #if !defined(__cplusplus) # include # include #else # include # include using namespace std; #endif /*--------------------------------------------------------------------------*/ /* type definitions */ typedef unsigned int uint; /*--------------------------------------------------------------------------*/ /* OpenMP includes */ #if defined(_OPENMP) #include #endif /*--------------------------------------------------------------------------*/ /* system dependend configuration */ #if defined(ADOLC_INTERNAL) # if HAVE_CONFIG_H # include "config.h" /* malloc/calloc/realloc replacments */ # undef ADOLC_NO_MALLOC # undef ADOLC_NO_REALLOC # if !defined(HAVE_MALLOC) # define ADOLC_NO_MALLOC 1 # else # if (HAVE_MALLOC == 0) # define ADOLC_NO_MALLOC 1 # endif /* HAVE_MALLOC == 0 */ # endif /* HAVE_MALLOC */ # if !defined(HAVE_REALLOC) # define ADOLC_NO_REALLOC 1 # else # if (HAVE_REALLOC == 0) # define ADOLC_NO_REALLOC 1 # endif /* HAVE_REALLOC == 0 */ # endif /* HAVE_REALLOC */ # if defined(ADOLC_NO_MALLOC) # include "malloc.h" # define malloc rpl_malloc # define calloc rpl_calloc # endif /* ADOLC_NO_MALLOC */ # if defined(ADOLC_NO_REALLOC) # include "malloc.h" # define realloc rpl_realloc # endif /* ADOLC_NO_REALLOC */ # ifndef HAVE_TRUNC # define trunc(x) ( (x<0) ? ceil(x) : floor(x) ) # endif # endif /* HAVE_CONFIG_H */ #endif /* ADOLC_INTERNAL */ /*--------------------------------------------------------------------------*/ /* developer and user parameters */ #include #include #include /*--------------------------------------------------------------------------*/ /* windows dll exports/imports */ #if defined(ADOLC_DLL) # define ADOLC_DLL_EXPORT __declspec(dllexport) #else # define ADOLC_DLL_EXPORT #endif /*--------------------------------------------------------------------------*/ /* further helpful macros */ #if defined(__cplusplus) # define BEGIN_C_DECLS extern "C" { # define END_C_DECLS } #else # define BEGIN_C_DECLS # define END_C_DECLS #endif #define MAXDEC(a,b) do { register revreal __r = (b); if ( __r > (a) ) (a) = __r; } while (0) #define MAXDECI(a,b) do { register int __r = (b); if ( __r > (a) ) (a) = __r; } while (0) #define MINDECR(a,b) do { register revreal __r = (b); if ( __r < (a) ) (a) = __r; } while (0) #define MINDEC(a,b) do { register int __r = (b); if ( __r < (a) ) (a) = __r; } while (0) #define MAX_ADOLC(a,b) ( (a)<(b)? (b):(a) ) #define MIN_ADOLC(a,b) ( (a)>(b)? (b):(a) ) /*--------------------------------------------------------------------------*/ #endif ADOL-C-2.4.1/ADOL-C/include/adolc/adutils.h0000644000076600007660000000146212032277512016321 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: adutils.h Revision: $Id: adutils.h 354 2012-10-01 11:32:26Z kulshres $ Contents: Provides all C/C++ interfaces of ADOL-C. NOTICE: This file is kept for compatibility reasons only. The new header adolc.h is included. Copyright (c) Andreas Kowarz This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_ADUTILS_H) #define ADOLC_ADUTILS_H 1 #include #endif ADOL-C-2.4.1/ADOL-C/include/adolc/adalloc.h0000644000076600007660000000567612051153463016265 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: adalloc.h Revision: $Id: adalloc.h 364 2012-11-15 11:51:15Z kulshres $ Contents: Allocation of arrays of doubles in several dimensions Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined (ADOLC_ADALLOC_H) #define ADOLC_ADALLOC_H 1 #include /****************************************************************************/ /* Now the C THINGS */ BEGIN_C_DECLS /*--------------------------------------------------------------------------*/ /* MEMORY MANAGEMENT UTILITIES */ ADOLC_DLL_EXPORT double *myalloc1(size_t); ADOLC_DLL_EXPORT double **myalloc2(size_t, size_t); ADOLC_DLL_EXPORT double ***myalloc3(size_t, size_t, size_t); ADOLC_DLL_EXPORT void myfree1(double *); ADOLC_DLL_EXPORT void myfree2(double **); ADOLC_DLL_EXPORT void myfree3(double ***); /*--------------------------------------------------------------------------*/ /* SPECIAL IDENTITY REPRESENTATION */ ADOLC_DLL_EXPORT double **myallocI2(int); ADOLC_DLL_EXPORT void myfreeI2(int, double**); ADOLC_DLL_EXPORT unsigned int * myalloc1_uint(int); ADOLC_DLL_EXPORT unsigned long int * myalloc1_ulong(int); ADOLC_DLL_EXPORT unsigned long int ** myalloc2_ulong(int, int); /****************************************************************************/ /* INTEGER VARIANT FOR BIT PATTERN PROPAGATION */ ADOLC_DLL_EXPORT void myfree1_uint(unsigned int*); ADOLC_DLL_EXPORT void myfree1_ulong(unsigned long int *); ADOLC_DLL_EXPORT void myfree2_ulong(unsigned long int **); END_C_DECLS /****************************************************************************/ /* Now the C++ THINGS */ #if defined(__cplusplus) /*--------------------------------------------------------------------------*/ /* MEMORY MANAGEMENT UTILITIES */ inline double * myalloc(int n) { return myalloc1(n); } inline double ** myalloc(int m, int n) { return myalloc2(m,n); } inline double *** myalloc(int m, int n, int p) { return myalloc3(m,n,p); } inline void myfree(double *A) { myfree1(A); } inline void myfree(double **A) { myfree2(A); } inline void myfree(double ***A) { myfree3(A); } #endif /****************************************************************************/ #endif ADOL-C-2.4.1/ADOL-C/include/adolc/externfcts.h0000644000076600007660000002103012053423074017031 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: externfcts.h Revision: $Id: externfcts.h 370 2012-11-22 13:18:52Z kulshres $ Contents: public functions and data types for extern (differentiated) functions. Copyright (c) Andreas Kowarz This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_EXTERNFCTS_H) #define ADOLC_EXTERNFCTS_H 1 #include #include BEGIN_C_DECLS typedef int (ADOLC_ext_fct) (int n, double *x, int m, double *y); typedef int (ADOLC_ext_fct_fos_forward) (int n, double *dp_x, double *dp_X, int m, double *dp_y, double *dp_Y); typedef int (ADOLC_ext_fct_fov_forward) (int n, double *dp_x, int p, double **dpp_X, int m, double *dp_y, double **dpp_Y); typedef int (ADOLC_ext_fct_hos_forward) (int n, double *dp_x, int d, double **dpp_X, int m, double *dp_y, double **dpp_Y); typedef int (ADOLC_ext_fct_hov_forward) (int n, double *dp_x, int d, int p, double ***dppp_X, int m, double *dp_y, double ***dppp_Y); typedef int (ADOLC_ext_fct_fos_reverse) (int m, double *dp_U, int n, double *dp_Z, double *dp_x, double *dp_y); typedef int (ADOLC_ext_fct_fov_reverse) (int m, int p, double **dpp_U, int n, double **dpp_Z, double *dp_x, double *dp_y); typedef int (ADOLC_ext_fct_hos_reverse) (int m, double *dp_U, int n, int d, double **dpp_Z); typedef int (ADOLC_ext_fct_hov_reverse) (int m, int p, double **dpp_U, int n, int d, double ***dppp_Z, short **spp_nz); /** * A variable of this type has to be instantiated by reg_ext_fct (see below) and a pointer to it is * returned. Within reg_ext_fct the memberse function and index are properly set. * is likely to be wrong in this case. Use pointers instead. */ typedef struct { /** * DO NOT touch - the function pointer is set through reg_ext_fct */ ADOLC_ext_fct *function; /** * DO NOT touch - the index is set through reg_ext_fct */ locint index; /** * below are function pointers used for call back from the corresponding ADOL-C trace interpreters; * these function pointers are initialized to 0 by reg_ext_fct; * the user needs to set eplicitly the function pointers for the trace interpreters called in the * application driver */ /** * this points to a method implementing a forward execution of the externally differentiated function dp_y=f(dp_x); * the pointer would typically be set to the same function pointer supplied in the call to reg_ext_fct, * i.e. zos_forward would be equal to function (above) * but there are cases when it makes sense for this to be different as illustrated * in examples/additional_examples/ext_diff_func/ext_diff_func.cpp */ ADOLC_ext_fct *zos_forward; /** * this points to a method implementing a forward execution of the externally differentiated function dp_y=f(dp_x) * and computing the projection dp_Y=Jacobian*dp_x * see also the explanation of the dp_X/Y members below. */ ADOLC_ext_fct_fos_forward *fos_forward; /** * this points to a method implementing a forward execution of the externally differentiated function dp_y=f(dp_x) * and computing the projection dpp_Y=Jacobian*dpp_x * see also the explanation of the dpp_X/Y members below. */ ADOLC_ext_fct_fov_forward *fov_forward; /** * higher order scalar forward for external functions is currently not implemented in uni5_for.c */ ADOLC_ext_fct_hos_forward *hos_forward; /** * higher order vector forward for external functions is currently not implemented in uni5_for.c */ ADOLC_ext_fct_hov_forward *hov_forward; /** * this points to a method computing the projection dp_Z=transpose(dp_U) * Jacobian * see also the explanation of the dp_U/Z members below. */ ADOLC_ext_fct_fos_reverse *fos_reverse; /** * this points to a method computing the projection dpp_Z=transpose(dpp_U) * Jacobian * see also the explanation of the dpp_U/Z members below. */ ADOLC_ext_fct_fov_reverse *fov_reverse; /** * higher order scalar reverse for external functions is currently not implemented in ho_rev.c */ ADOLC_ext_fct_hos_reverse *hos_reverse; /** * higher order vector reverse for external functions is currently not implemented in ho_rev.c */ ADOLC_ext_fct_hov_reverse *hov_reverse; /** * The names of the variables below correspond to the formal parameters names in the call back * functions above; * The user has to preallocate the variables and set the pointers for any of the call back functions * that will be called during trace interpretation. * The dimensions given below correspond to the formal arguments in the call back funtions signatures above. * If the dimensions n and m change between multiple calls to the same external function, then the variables * have to be preallocation with the maximum of the respective dimension values. * The dp_x and dp_y pointers have to be valid during both, the tracing phase and the trace interpretation; * all the other pointers are required to be valid only for the trace interpretation. */ /** * function and all _forward calls: function argument, dimension [n] */ double *dp_x; /** * fos_forward: tangent direction, dimension [n] */ double *dp_X; /** * fov_forward: seed matrix for p directions, dimensions [n][p] * hos_forward: argument Taylor polynomial coefficients up to order d. dimensions [n][d] */ double **dpp_X; /** * hov_forward: argument Taylor polynomial coefficients up to order d in p directions. dimensions [n][p][d] */ double ***dppp_X; /** * function and all _forward calls: function result, dimension [m] */ double *dp_y; /** * fos_forward: Jacobian projection, dimension [m] */ double *dp_Y; /** * fov_forward: Jacobian projection in p directions, dimension [m][p] * hos_forward: result Taylor polynomial coefficients up to order d. dimensions [m][d] */ double **dpp_Y; /** * hov_forward: result Taylor polynomial coefficients up to order d in p directions. dimensions [m][p][d] */ double ***dppp_Y; /** * fos_reverse and hos_reverse: weight vector, dimension [m] */ double *dp_U; /** * fov_reverse and hov_reverse: p weight vectors, dimensions [p][m] */ double **dpp_U; /** * fos_reverse: Jacobian projection, dimension [n] */ double *dp_Z; /** * fov_reverse: Jacobian projection for p weight vectors, dimensions [p][n] * hos_reverse: adjoint Taylor polynomial coefficients up to order d, dimensions [n][d+1] */ double **dpp_Z; /** * hov_reverse: adjoint Taylor polynomial coefficients up to order d for p weight vectors, dimension [p][n][d+1] */ double ***dppp_Z; /** * hov_reverse: non-zero pattern of dppp_Z, dimension [p][n], see also the hov_reverse ADOL-C driver */ short **spp_nz; /** * track maximal value of n when function is invoked */ int max_n; /** * track maximal value of m when function is invoked */ int max_m; /** * make the call such that Adol-C may be used inside * of the externally differentiated function; * defaults to non-0; * this implies certain storage duplication that can * be avoided if no nested use of Adol-C takes place */ char nestedAdolc; /** * if 0, then the 'function' does not change dp_x; * defaults to non-0 which implies dp_x values are saved in taylors */ char dp_x_changes; /** * if 0, then the value of dp_y prior to calling 'function' * is not required for reverse; * defaults to non-0 which implies dp_y values are saved in taylors */ char dp_y_priorRequired; } ext_diff_fct; END_C_DECLS #if defined(__cplusplus) /****************************************************************************/ /* This is all C++ */ ADOLC_DLL_EXPORT ext_diff_fct *reg_ext_fct(ADOLC_ext_fct ext_fct); ADOLC_DLL_EXPORT int call_ext_fct (ext_diff_fct *edfct, int n, double *xp, adouble *xa, int m, double *yp, adouble *ya); #endif /* __CPLUSPLUS */ /****************************************************************************/ #endif /* ADOLC_EXTERNFCTS_H */ ADOL-C-2.4.1/ADOL-C/include/adolc/taping.h0000644000076600007660000001052312032277512016134 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: taping.h Revision: $Id: taping.h 354 2012-10-01 11:32:26Z kulshres $ Contents: all C functions directly accessing at least one of the four tapes (operations, locations, constants, value stack) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_TAPING_H) #define ADOLC_TAPING_H 1 #include BEGIN_C_DECLS enum StatEntries { NUM_INDEPENDENTS, /* # of independent variables */ NUM_DEPENDENTS, /* # of dependent variables */ NUM_MAX_LIVES, /* max # of live variables */ TAY_STACK_SIZE, /* # of values in the taylor (value) stack */ OP_BUFFER_SIZE, /* # of operations per buffer == OBUFSIZE (usrparms.h) */ NUM_OPERATIONS, /* overall # of operations */ OP_FILE_ACCESS, /* operations file written or not */ NUM_LOCATIONS, /* overall # of locations */ LOC_FILE_ACCESS, /* locations file written or not */ NUM_VALUES, /* overall # of values */ VAL_FILE_ACCESS, /* values file written or not */ LOC_BUFFER_SIZE, /* # of locations per buffer == LBUFSIZE (usrparms.h) */ VAL_BUFFER_SIZE, /* # of values per buffer == CBUFSIZE (usrparms.h) */ TAY_BUFFER_SIZE, /* # of taylors per buffer <= TBUFSIZE (usrparms.h) */ NUM_EQ_PROD, /* # of eq_*_prod for sparsity pattern */ STAT_SIZE /* represents the size of the stats vector */ }; enum TapeRemovalType { ADOLC_REMOVE_FROM_CORE, ADOLC_REMOVE_COMPLETELY }; /* Returns statistics on the tape "tag". Use enumeration StatEntries for * accessing the individual elements of the vector "tape_stats"! */ ADOLC_DLL_EXPORT void tapestats(short tag, size_t *tape_stats); /* An all-in-one tape stats printing routine */ ADOLC_DLL_EXPORT void printTapeStats(FILE *stream, short tag); ADOLC_DLL_EXPORT int removeTape(short tapeID, short type); ADOLC_DLL_EXPORT void enableBranchSwitchWarnings(); ADOLC_DLL_EXPORT void disableBranchSwitchWarnings(); ADOLC_DLL_EXPORT void ensureContiguousLocations(size_t n); END_C_DECLS /** * Normally, theKeeper would take care of the initialization and finalization * of ADOL-C. However, some compilers do not include the keeper code when * linking. "initADOLC" should be called right after main(...), in this case. * "initADOLC" will not initialize memory, but is only necessary to reference * "theKeeper", such that this static instance is used at least once. :-( */ ADOLC_DLL_EXPORT void initADOLC(); #if defined(__cplusplus) /* Initialization for the taping process. Creates buffers for this tape, sets * files names, and calls appropriate setup routines. * This functions return value is different from zero if a tape with with ID * tnum is available only in core. The old tape gets overwritten by the new * one in this case. */ ADOLC_DLL_EXPORT int trace_on(short tnum, int keepTaylors = 0); /* special version including buffersize customization * obs - size of the operation buffer (number of elements) * lbs - size of the location buffer (number of elements) * vbs - size of the value buffer (number of elements) * tbs - size of the taylor buffer (number of elements) * trace_on is the last point in time we want to allow the change of buffer * sizes for a given tape */ ADOLC_DLL_EXPORT int trace_on(short tnum, int keepTaylors, uint obs, uint lbs, uint vbs, uint tbs); /* Stop Tracing. Cleans up, and turns off trace_flag. Flag not equal zero * enforces writing of the three main tape files (op+loc+val). */ ADOLC_DLL_EXPORT void trace_off(int flag = 0); ADOLC_DLL_EXPORT bool isTaping(); #endif #endif /* ADOLC_TAPING_H */ ADOL-C-2.4.1/ADOL-C/include/adolc/adouble.h0000644000076600007660000013064412062610231016264 0ustar coincoin/* --------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ Revision: $Id: adouble.h 378 2012-12-14 11:42:17Z kulshres $ Contents: adouble.h contains the basis for the class of adouble included here are all the possible functions defined on the adouble class. Notice that, as opposed to ealier versions, both the class adub and the class adouble are derived from a base class (badouble). See below for further explanation. Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel, Kshitij Kulshreshtha This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #if !defined(ADOLC_ADOUBLE_H) #define ADOLC_ADOUBLE_H 1 /****************************************************************************/ /* THIS FILE IS C++ */ #ifdef __cplusplus #include #include #include #include using std::cout; using std::cin; using std::cerr; using std::ostream; using std::istream; #include /* NOTICE: There are automatic includes at the end of this file! */ #undef TAPELESS #undef SAFE #if defined(ADOLC_TAPELESS) # define TAPELESS # undef SAFE #endif #if defined(SAFE_ADOLC_TAPELESS) # define TAPELESS # define SAFE #endif #if !defined(TAPELESS) /****************************************************************************/ /* FORWARD DECLARATIONS (TAPES) */ /*--------------------------------------------------------------------------*/ class adouble; class adub; class badouble; /*--------------------------------------------------------------------------*/ void ADOLC_DLL_EXPORT condassign( double &res, const double &cond, const double &arg1, const double &arg2 ); void ADOLC_DLL_EXPORT condassign( double &res, const double &cond, const double &arg ); /****************************************************************************/ /* CLASS BADOUBLE */ /** The class badouble contains the basic definitions for the arithmetic operations, comparisons, etc. This is a basic class from which the adub and adouble are derived. Notice that the constructors/destructors for the class badouble are of the trivial variety. This is the main difference among badoubles, adubs, and adoubles. */ class ADOLC_DLL_EXPORT badouble { protected: locint location; badouble( void ) {}; // must be public when using gcc >= 3.4 ( problems with value() ) // (see GCC 3.4 Release Series - Changes, New Features, and Fixes) // // badouble( const badouble& a ) {location = a.location;}; explicit badouble( locint lo ) { location = lo; }; public: /*--------------------------------------------------------------------------*/ badouble( const badouble& a ) { location = a.location; } ; /* ctor */ inline locint loc( void ) const; /* Helpful stuff */ /*------------------------------------------------------------------------*/ badouble& operator >>= ( double& ); /* Assignments */ badouble& operator <<= ( double ); void declareIndependent (); void declareDependent (); badouble& operator = ( double ); badouble& operator = ( const badouble& ); badouble& operator = ( const adub& ); double getValue() const; inline double value() const { return getValue(); } void setValue ( const double ); /* badouble& operator = ( const adouble& ); !!! olvo 991210: was the same as badouble-assignment */ /*--------------------------------------------------------------------------*/ friend ADOLC_DLL_EXPORT std::ostream& operator << ( std::ostream&, const badouble& ); /* IO friends */ friend ADOLC_DLL_EXPORT std::istream& operator >> ( std::istream&, const badouble& ); /*------------------------------------------------------------------------*/ badouble& operator += ( double ); /* Operation + Assignment */ badouble& operator += ( const badouble& ); badouble& operator -= ( double y ); badouble& operator -= ( const badouble& ); badouble& operator *= ( double ); badouble& operator *= ( const badouble& ); badouble& operator /= ( double ); badouble& operator /= ( const badouble& ); /* olvo 991122 n2l: new special op_codes */ badouble& operator += ( const adub& ); badouble& operator -= ( const adub& ); /*--------------------------------------------------------------------------*/ /* Comparison (friends) */ #if defined(ADOLC_ADVANCED_BRANCHING) friend ADOLC_DLL_EXPORT adub operator != ( const badouble&, const badouble& ); friend ADOLC_DLL_EXPORT adub operator == ( const badouble&, const badouble& ); friend ADOLC_DLL_EXPORT adub operator <= ( const badouble&, const badouble& ); friend ADOLC_DLL_EXPORT adub operator >= ( const badouble&, const badouble& ); friend ADOLC_DLL_EXPORT adub operator > ( const badouble&, const badouble& ); friend ADOLC_DLL_EXPORT adub operator < ( const badouble&, const badouble& ); #else inline friend int operator != ( const badouble&, const badouble& ); inline friend int operator == ( const badouble&, const badouble& ); inline friend int operator <= ( const badouble&, const badouble& ); inline friend int operator >= ( const badouble&, const badouble& ); inline friend int operator > ( const badouble&, const badouble& ); inline friend int operator < ( const badouble&, const badouble& ); #endif inline friend int operator != ( double, const badouble& ); friend ADOLC_DLL_EXPORT int operator != ( const badouble&, double ); inline friend int operator == ( double, const badouble& ); friend ADOLC_DLL_EXPORT int operator == ( const badouble&, double ); inline friend int operator <= ( double, const badouble& ); friend ADOLC_DLL_EXPORT int operator <= ( const badouble&, double ); inline friend int operator >= ( double, const badouble& ); friend ADOLC_DLL_EXPORT int operator >= ( const badouble&, double ); inline friend int operator > ( double, const badouble& ); friend ADOLC_DLL_EXPORT int operator > ( const badouble&, double ); inline friend int operator < ( double, const badouble& ); friend ADOLC_DLL_EXPORT int operator < ( const badouble&, double ); /*--------------------------------------------------------------------------*/ /* sign operators (friends) */ friend ADOLC_DLL_EXPORT adub operator + ( const badouble& x ); friend ADOLC_DLL_EXPORT adub operator - ( const badouble& x ); /*--------------------------------------------------------------------------*/ /* binary operators (friends) */ friend ADOLC_DLL_EXPORT adub operator + ( const badouble&, const badouble& ); friend ADOLC_DLL_EXPORT adub operator + ( double, const badouble& ); friend ADOLC_DLL_EXPORT adub operator + ( const badouble&, double ); friend ADOLC_DLL_EXPORT adub operator - ( const badouble&, const badouble& ); inline friend adub operator - ( const badouble&, double ); friend ADOLC_DLL_EXPORT adub operator - ( double, const badouble& ); friend ADOLC_DLL_EXPORT adub operator * ( const badouble&, const badouble& ); friend ADOLC_DLL_EXPORT adub operator * ( double, const badouble& ); inline friend adub operator * ( const badouble&, double ); inline friend adub operator / ( const badouble&, double ); friend ADOLC_DLL_EXPORT adub operator / ( const badouble&, const badouble& ); friend ADOLC_DLL_EXPORT adub operator / ( double, const badouble& ); /*--------------------------------------------------------------------------*/ /* unary operators (friends) */ friend ADOLC_DLL_EXPORT adub exp ( const badouble& ); friend ADOLC_DLL_EXPORT adub log ( const badouble& ); friend ADOLC_DLL_EXPORT adub sqrt ( const badouble& ); friend ADOLC_DLL_EXPORT adub sin ( const badouble& ); friend ADOLC_DLL_EXPORT adub cos ( const badouble& ); friend ADOLC_DLL_EXPORT adub tan ( const badouble& ); friend ADOLC_DLL_EXPORT adub asin ( const badouble& ); friend ADOLC_DLL_EXPORT adub acos ( const badouble& ); friend ADOLC_DLL_EXPORT adub atan ( const badouble& ); /*--------------------------------------------------------------------------*/ /* special operators (friends) */ friend ADOLC_DLL_EXPORT adouble atan2 ( const badouble&, const badouble& ); /* no internal use of condassign: */ friend ADOLC_DLL_EXPORT adub pow ( const badouble&, double ); /* uses condassign internally */ friend ADOLC_DLL_EXPORT adouble pow ( const badouble&, const badouble& ); friend ADOLC_DLL_EXPORT adouble pow ( double, const badouble& ); friend ADOLC_DLL_EXPORT adub log10 ( const badouble& ); /* User defined version of logarithm to test extend_quad macro */ friend ADOLC_DLL_EXPORT adouble myquad( const badouble& ); /*--------------------------------------------------------------------------*/ /* Additional ANSI C standard Math functions Added by DWJ on 8/6/90 */ friend ADOLC_DLL_EXPORT adub sinh ( const badouble& ); friend ADOLC_DLL_EXPORT adub cosh ( const badouble& ); friend ADOLC_DLL_EXPORT adub tanh ( const badouble& ); #if defined(ATRIG_ERF) friend ADOLC_DLL_EXPORT adub asinh ( const badouble& ); friend ADOLC_DLL_EXPORT adub acosh ( const badouble& ); friend ADOLC_DLL_EXPORT adub atanh ( const badouble& ); #endif friend ADOLC_DLL_EXPORT adub fabs ( const badouble& ); friend ADOLC_DLL_EXPORT adub ceil ( const badouble& ); friend ADOLC_DLL_EXPORT adub floor ( const badouble& ); friend ADOLC_DLL_EXPORT adub fmax ( const badouble&, const badouble& ); friend ADOLC_DLL_EXPORT adub fmax ( double, const badouble& ); friend ADOLC_DLL_EXPORT adub fmax ( const badouble&, double ); friend ADOLC_DLL_EXPORT adub fmin ( const badouble&, const badouble& ); friend ADOLC_DLL_EXPORT adub fmin ( double, const badouble& ); friend ADOLC_DLL_EXPORT adub fmin ( const badouble&, double ); friend ADOLC_DLL_EXPORT adub ldexp ( const badouble&, int ); friend ADOLC_DLL_EXPORT adub frexp ( const badouble&, int* ); friend ADOLC_DLL_EXPORT adub erf ( const badouble& ); /*--------------------------------------------------------------------------*/ /* Conditionals */ friend ADOLC_DLL_EXPORT void condassign( adouble &res, const badouble &cond, const badouble &arg1, const badouble &arg2 ); friend ADOLC_DLL_EXPORT void condassign( adouble &res, const badouble &cond, const badouble &arg ); }; /****************************************************************************/ /* CLASS ADUB */ /* The class Adub ---- Basically used as a temporary result. The address for an adub is usually generated within an operation. That address is "freed" when the adub goes out of scope (at destruction time). ---- operates just like a badouble, but it has a destructor defined for it. */ class ADOLC_DLL_EXPORT adub:public badouble { friend ADOLC_DLL_EXPORT class adouble; friend ADOLC_DLL_EXPORT class advector; friend ADOLC_DLL_EXPORT class adubref; #if GCC_VERSION >= 4003 adub( adub const &) {} #endif protected: adub( locint lo ):badouble(lo) {}; adub( void ):badouble(0) { fprintf(DIAG_OUT,"ADOL-C error: illegal default construction of adub" " variable\n"); exit(-2); }; explicit adub( double ):badouble(0) { fprintf(DIAG_OUT,"ADOL-C error: illegal construction of adub variable" " from double\n"); exit(-2); }; public: /*--------------------------------------------------------------------------*/ /* Comparison (friends) */ #if defined(ADOLC_ADVANCED_BRANCHING) friend ADOLC_DLL_EXPORT adub operator != ( const badouble&, const badouble& ); friend ADOLC_DLL_EXPORT adub operator == ( const badouble&, const badouble& ); friend ADOLC_DLL_EXPORT adub operator <= ( const badouble&, const badouble& ); friend ADOLC_DLL_EXPORT adub operator >= ( const badouble&, const badouble& ); friend ADOLC_DLL_EXPORT adub operator < ( const badouble&, const badouble& ); friend ADOLC_DLL_EXPORT adub operator > ( const badouble&, const badouble& ); #endif /*--------------------------------------------------------------------------*/ /* sign operators (friends) */ friend ADOLC_DLL_EXPORT adub operator + ( const badouble& x ); friend ADOLC_DLL_EXPORT adub operator - ( const badouble& x ); /*--------------------------------------------------------------------------*/ /* binary operators (friends) */ friend ADOLC_DLL_EXPORT adub operator + ( const badouble&, const badouble& ); friend ADOLC_DLL_EXPORT adub operator + ( double, const badouble& ); friend ADOLC_DLL_EXPORT adub operator + ( const badouble&, double ); friend ADOLC_DLL_EXPORT adub operator - ( const badouble&, const badouble& ); inline friend adub operator - ( const badouble&, double ); friend ADOLC_DLL_EXPORT adub operator - ( double, const badouble& ); friend ADOLC_DLL_EXPORT adub operator * ( const badouble&, const badouble& ); friend ADOLC_DLL_EXPORT adub operator * ( double, const badouble& ); inline friend adub operator * ( const badouble&, double ); inline friend adub operator / ( const badouble&, double ); friend ADOLC_DLL_EXPORT adub operator / ( const badouble&, const badouble& ); friend ADOLC_DLL_EXPORT adub operator / ( double, const badouble& ); /*--------------------------------------------------------------------------*/ /* unary operators (friends) */ friend ADOLC_DLL_EXPORT adub exp ( const badouble& ); friend ADOLC_DLL_EXPORT adub log ( const badouble& ); friend ADOLC_DLL_EXPORT adub sqrt ( const badouble& ); friend ADOLC_DLL_EXPORT adub sin ( const badouble& ); friend ADOLC_DLL_EXPORT adub cos ( const badouble& ); friend ADOLC_DLL_EXPORT adub tan ( const badouble& ); friend ADOLC_DLL_EXPORT adub asin ( const badouble& ); friend ADOLC_DLL_EXPORT adub acos ( const badouble& ); friend ADOLC_DLL_EXPORT adub atan ( const badouble& ); /*--------------------------------------------------------------------------*/ /* special operators (friends) */ /* no internal use of condassign: */ friend ADOLC_DLL_EXPORT adub pow ( const badouble&, double ); friend ADOLC_DLL_EXPORT adub log10 ( const badouble& ); /*--------------------------------------------------------------------------*/ /* Additional ANSI C standard Math functions Added by DWJ on 8/6/90 */ friend ADOLC_DLL_EXPORT adub sinh ( const badouble& ); friend ADOLC_DLL_EXPORT adub cosh ( const badouble& ); friend ADOLC_DLL_EXPORT adub tanh ( const badouble& ); #if defined(ATRIG_ERF) friend ADOLC_DLL_EXPORT adub asinh ( const badouble& ); friend ADOLC_DLL_EXPORT adub acosh ( const badouble& ); friend ADOLC_DLL_EXPORT adub atanh ( const badouble& ); #endif friend ADOLC_DLL_EXPORT adub fabs ( const badouble& ); friend ADOLC_DLL_EXPORT adub ceil ( const badouble& ); friend ADOLC_DLL_EXPORT adub floor ( const badouble& ); friend ADOLC_DLL_EXPORT adub fmax ( const badouble&, const badouble& ); friend ADOLC_DLL_EXPORT adub fmax ( double, const badouble& ); friend ADOLC_DLL_EXPORT adub fmax ( const badouble&, double ); friend ADOLC_DLL_EXPORT adub fmin ( const badouble&, const badouble& ); friend ADOLC_DLL_EXPORT adub fmin ( double, const badouble& ); friend ADOLC_DLL_EXPORT adub fmin ( const badouble&, double ); friend ADOLC_DLL_EXPORT adub ldexp ( const badouble&, int ); friend ADOLC_DLL_EXPORT adub frexp ( const badouble&, int* ); friend ADOLC_DLL_EXPORT adub erf ( const badouble& ); ~adub(); }; /****************************************************************************/ /* CLASS ADOUBLE */ /* The class adouble. ---Derived from badouble. Contains the standard constructors/destructors. ---At construction, it is given a new address, and at destruction, that address is freed. */ class ADOLC_DLL_EXPORT adouble:public badouble { friend ADOLC_DLL_EXPORT class advector; public: adouble( const adub& ); adouble( const adouble& ); adouble( void ); adouble( double ); /* adub prevents postfix operators to occur on the left side of an assignment which would not work */ adub operator++( int ); adub operator--( int ); badouble& operator++( void ); badouble& operator--( void ); /* inline double value(); */ ~adouble(); adouble& operator = ( double ); adouble& operator = ( const badouble& ); /* adouble& operator = ( const adouble& ); !!! olvo 991210 was the same as badouble-assignment */ adouble& operator = ( const adub& ); }; /****************************************************************************/ /* INLINE DEFINITIONS */ /*--------------------------------------------------------------------------*/ inline locint badouble::loc( void ) const { return location; } /*--------------------------------------------------------------------------*/ /* Comparison */ #if !defined(ADOLC_ADVANCED_BRANCHING) inline int operator != ( const badouble& u, const badouble& v ) { return (u-v != 0); } inline int operator == ( const badouble& u, const badouble& v ) { return (u-v == 0); } inline int operator <= ( const badouble& u, const badouble& v ) { return (u-v <= 0); } inline int operator >= ( const badouble& u, const badouble& v ) { return (u-v >= 0); } inline int operator > ( const badouble& u, const badouble& v ) { return (u-v > 0); } inline int operator < ( const badouble& u, const badouble& v ) { return (u-v < 0); } #endif inline int operator != ( double coval, const badouble& v) { if (coval) return (-coval+v != 0); else return (v != 0); } inline int operator == ( double coval, const badouble& v) { if (coval) return (-coval+v == 0); else return (v == 0); } inline int operator <= ( double coval, const badouble& v ) { if (coval) return (-coval+v >= 0); else return (v >= 0); } inline int operator >= ( double coval, const badouble& v ) { if (coval) return (-coval+v <= 0); else return (v <= 0); } inline int operator > ( double coval, const badouble& v ) { if (coval) return (-coval+v < 0); else return (v < 0); } inline int operator < ( double coval, const badouble& v ) { if (coval) return (-coval+v > 0); else return (v > 0); } /*--------------------------------------------------------------------------*/ /* Subtract a floating point from an adouble */ inline adub operator - ( const badouble& x , double coval ) { return (-coval) + x; } /*--------------------------------------------------------------------------*/ /* Multiply an adouble by a floating point */ inline adub operator * (const badouble& x, double coval) { return coval * x; } /*--------------------------------------------------------------------------*/ /* Divide an adouble by a floating point */ inline adub operator / (const badouble& x, double coval) { return (1.0/coval) * x; } /****************************************************************************/ /* tapeless implementation */ /****************************************************************************/ #else #include namespace adtl { #if defined(NUMBER_DIRECTIONS) extern int ADOLC_numDir; #define ADOLC_TAPELESS_UNIQUE_INTERNALS int adtl::ADOLC_numDir = NUMBER_DIRECTIONS; #if !defined(DYNAMIC_DIRECTIONS) # define ADVAL adval[NUMBER_DIRECTIONS] #else # define ADVAL *adval; #endif # define ADVAL_TYPE const double * # define FOR_I_EQ_0_LT_NUMDIR for (int _i=0; _i < ADOLC_numDir; ++_i) # define ADVAL_I adval[_i] # define ADV_I adv[_i] # define V_I v[_i] #else # define ADVAL adval # define ADVAL_TYPE double # define FOR_I_EQ_0_LT_NUMDIR # define ADVAL_I adval # define ADV_I adv # define V_I v #endif #if !defined(_ISOC99_SOURCE) && !defined(__USE_ISOC99) inline double fmin( const double &x, const double &y ) { if (xy) return x; else return y; } #endif inline double makeNaN() { return ADOLC_MATH_NSP::numeric_limits::quiet_NaN(); } inline double makeInf() { return ADOLC_MATH_NSP::numeric_limits::infinity(); } class adouble { public: // ctors inline adouble(); inline adouble(const double v); inline adouble(const double v, ADVAL_TYPE adv); inline adouble(const adouble& a); #if defined(DYNAMIC_DIRECTIONS) inline ~adouble(); #endif /******************* temporary results ******************************/ // sign inline adouble operator - () const; inline adouble operator + () const; // addition inline adouble operator + (const double v) const; inline adouble operator + (const adouble& a) const; inline friend adouble operator + (const double v, const adouble& a); // substraction inline adouble operator - (const double v) const; inline adouble operator - (const adouble& a) const; inline friend adouble operator - (const double v, const adouble& a); // multiplication inline adouble operator * (const double v) const; inline adouble operator * (const adouble& a) const; inline friend adouble operator * (const double v, const adouble& a); // division inline adouble operator / (const double v) const; inline adouble operator / (const adouble& a) const; inline friend adouble operator / (const double v, const adouble& a); // inc/dec inline adouble operator ++ (); inline adouble operator ++ (int); inline adouble operator -- (); inline adouble operator -- (int); // functions inline friend adouble tan(const adouble &a); inline friend adouble exp(const adouble &a); inline friend adouble log(const adouble &a); inline friend adouble sqrt(const adouble &a); inline friend adouble sin(const adouble &a); inline friend adouble cos(const adouble &a); inline friend adouble asin(const adouble &a); inline friend adouble acos(const adouble &a); inline friend adouble atan(const adouble &a); inline friend adouble atan2(const adouble &a, const adouble &b); inline friend adouble pow(const adouble &a, double v); inline friend adouble pow(const adouble &a, const adouble &b); inline friend adouble pow(double v, const adouble &a); inline friend adouble log10(const adouble &a); inline friend adouble sinh (const adouble &a); inline friend adouble cosh (const adouble &a); inline friend adouble tanh (const adouble &a); #if defined(ATRIG_ERF) inline friend adouble asinh (const adouble &a); inline friend adouble acosh (const adouble &a); inline friend adouble atanh (const adouble &a); #endif inline friend adouble fabs (const adouble &a); inline friend adouble ceil (const adouble &a); inline friend adouble floor (const adouble &a); inline friend adouble fmax (const adouble &a, const adouble &b); inline friend adouble fmax (double v, const adouble &a); inline friend adouble fmax (const adouble &a, double v); inline friend adouble fmin (const adouble &a, const adouble &b); inline friend adouble fmin (double v, const adouble &a); inline friend adouble fmin (const adouble &a, double v); inline friend adouble ldexp (const adouble &a, const adouble &b); inline friend adouble ldexp (const adouble &a, const double v); inline friend adouble ldexp (const double v, const adouble &a); inline friend double frexp (const adouble &a, int* v); #if defined(ATRIG_ERF) inline friend adouble erf (const adouble &a); #endif /******************* nontemporary results ***************************/ // assignment inline void operator = (const double v); inline void operator = (const adouble& a); // addition inline void operator += (const double v); inline void operator += (const adouble& a); // substraction inline void operator -= (const double v); inline void operator -= (const adouble& a); // multiplication inline void operator *= (const double v); inline void operator *= (const adouble& a); // division inline void operator /= (const double v); inline void operator /= (const adouble& a); // not inline int operator ! () const; // comparision inline int operator != (const adouble&) const; inline int operator != (const double) const; inline friend int operator != (const double, const adouble&); inline int operator == (const adouble&) const; inline int operator == (const double) const; inline friend int operator == (const double, const adouble&); inline int operator <= (const adouble&) const; inline int operator <= (const double) const; inline friend int operator <= (const double, const adouble&); inline int operator >= (const adouble&) const; inline int operator >= (const double) const; inline friend int operator >= (const double, const adouble&); inline int operator > (const adouble&) const; inline int operator > (const double) const; inline friend int operator > (const double, const adouble&); inline int operator < (const adouble&) const; inline int operator < (const double) const; inline friend int operator < (const double, const adouble&); /******************* getter / setter ********************************/ inline double getValue() const; inline void setValue(const double v); inline ADVAL_TYPE getADValue() const; inline void setADValue(ADVAL_TYPE v); #if defined(NUMBER_DIRECTIONS) inline double getADValue(const unsigned int p) const; inline void setADValue(const unsigned int p, const double v); #endif /******************* i/o operations *********************************/ inline friend ostream& operator << ( ostream&, const adouble& ); inline friend istream& operator >> ( istream&, adouble& ); private: // internal variables double val; double ADVAL; }; /******************************* ctors ************************************/ adouble::adouble() { #if defined(DYNAMIC_DIRECTIONS) adval = new double[ADOLC_numDir]; #endif } adouble::adouble(const double v) : val(v) { #if defined(DYNAMIC_DIRECTIONS) adval = new double[ADOLC_numDir]; #endif FOR_I_EQ_0_LT_NUMDIR ADVAL_I = 0.0; } adouble::adouble(const double v, ADVAL_TYPE adv) : val(v) { #if defined(DYNAMIC_DIRECTIONS) adval = new double[ADOLC_numDir]; #endif FOR_I_EQ_0_LT_NUMDIR ADVAL_I=ADV_I; } adouble::adouble(const adouble& a) : val(a.val) { #if defined(DYNAMIC_DIRECTIONS) adval = new double[ADOLC_numDir]; #endif FOR_I_EQ_0_LT_NUMDIR ADVAL_I=a.ADVAL_I; } /******************************* dtors ************************************/ #if defined(DYNAMIC_DIRECTIONS) adouble::~adouble() { delete[] adval; } #endif /************************* temporary results ******************************/ // sign adouble adouble::operator - () const { adouble tmp; tmp.val=-val; FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=-ADVAL_I; return tmp; } adouble adouble::operator + () const { return *this; } // addition adouble adouble::operator + (const double v) const { return adouble(val+v, adval); } adouble adouble::operator + (const adouble& a) const { adouble tmp; tmp.val=val+a.val; FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=ADVAL_I+a.ADVAL_I; return tmp; } adouble operator + (const double v, const adouble& a) { return adouble(v+a.val, a.adval); } // subtraction adouble adouble::operator - (const double v) const { return adouble(val-v, adval); } adouble adouble::operator - (const adouble& a) const { adouble tmp; tmp.val=val-a.val; FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=ADVAL_I-a.ADVAL_I; return tmp; } adouble operator - (const double v, const adouble& a) { adouble tmp; tmp.val=v-a.val; FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=-a.ADVAL_I; return tmp; } // multiplication adouble adouble::operator * (const double v) const { adouble tmp; tmp.val=val*v; FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=ADVAL_I*v; return tmp; } adouble adouble::operator * (const adouble& a) const { adouble tmp; tmp.val=val*a.val; FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=ADVAL_I*a.val+val*a.ADVAL_I; return tmp; } adouble operator * (const double v, const adouble& a) { adouble tmp; tmp.val=v*a.val; FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=v*a.ADVAL_I; return tmp; } // division adouble adouble::operator / (const double v) const { adouble tmp; tmp.val=val/v; FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=ADVAL_I/v; return tmp; } adouble adouble::operator / (const adouble& a) const { adouble tmp; tmp.val=val/a.val; FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=(ADVAL_I*a.val-val*a.ADVAL_I)/(a.val*a.val); return tmp; } adouble operator / (const double v, const adouble& a) { adouble tmp; tmp.val=v/a.val; FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=(-v*a.ADVAL_I)/(a.val*a.val); return tmp; } // inc/dec adouble adouble::operator ++ () { ++val; return *this; } adouble adouble::operator ++ (int) { adouble tmp; tmp.val=val++; FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=ADVAL_I; return tmp; } adouble adouble::operator -- () { --val; return *this; } adouble adouble::operator -- (int) { adouble tmp; tmp.val=val--; FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=ADVAL_I; return tmp; } // functions adouble tan(const adouble& a) { adouble tmp; double tmp2; tmp.val=ADOLC_MATH_NSP::tan(a.val); tmp2=ADOLC_MATH_NSP::cos(a.val); tmp2*=tmp2; FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I/tmp2; return tmp; } adouble exp(const adouble &a) { adouble tmp; tmp.val=ADOLC_MATH_NSP::exp(a.val); FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=tmp.val*a.ADVAL_I; return tmp; } adouble log(const adouble &a) { adouble tmp; tmp.val=ADOLC_MATH_NSP::log(a.val); FOR_I_EQ_0_LT_NUMDIR if (a.val>0) tmp.ADVAL_I=a.ADVAL_I/a.val; else if (a.val==0 && a.ADVAL_I != 0.0) { int sign = (a.ADVAL_I < 0) ? -1 : 1; tmp.ADVAL_I=sign*makeInf(); } else tmp.ADVAL_I=makeNaN(); return tmp; } adouble sqrt(const adouble &a) { adouble tmp; tmp.val=ADOLC_MATH_NSP::sqrt(a.val); FOR_I_EQ_0_LT_NUMDIR if (a.val>0) tmp.ADVAL_I=a.ADVAL_I/(tmp.val*2); else if (a.val==0.0 && a.ADVAL_I != 0.0) { int sign = (a.ADVAL_I < 0) ? -1 : 1; tmp.ADVAL_I=sign * makeInf(); } else tmp.ADVAL_I=makeNaN(); return tmp; } adouble sin(const adouble &a) { adouble tmp; double tmp2; tmp.val=ADOLC_MATH_NSP::sin(a.val); tmp2=ADOLC_MATH_NSP::cos(a.val); FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=tmp2*a.ADVAL_I; return tmp; } adouble cos(const adouble &a) { adouble tmp; double tmp2; tmp.val=ADOLC_MATH_NSP::cos(a.val); tmp2=-ADOLC_MATH_NSP::sin(a.val); FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=tmp2*a.ADVAL_I; return tmp; } adouble asin(const adouble &a) { adouble tmp; tmp.val=ADOLC_MATH_NSP::asin(a.val); double tmp2=ADOLC_MATH_NSP::sqrt(1-a.val*a.val); FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I/tmp2; return tmp; } adouble acos(const adouble &a) { adouble tmp; tmp.val=ADOLC_MATH_NSP::acos(a.val); double tmp2=-ADOLC_MATH_NSP::sqrt(1-a.val*a.val); FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I/tmp2; return tmp; } adouble atan(const adouble &a) { adouble tmp; tmp.val=ADOLC_MATH_NSP::atan(a.val); double tmp2=1+a.val*a.val; tmp2=1/tmp2; if (tmp2!=0) FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I*tmp2; else FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=0.0; return tmp; } adouble atan2(const adouble &a, const adouble &b) { adouble tmp; tmp.val=ADOLC_MATH_NSP::atan2(a.val, b.val); double tmp2=a.val*a.val; double tmp3=b.val*b.val; double tmp4=tmp3/(tmp2+tmp3); if (tmp4!=0) FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=(a.ADVAL_I*b.val-a.val*b.ADVAL_I)/tmp3*tmp4; else FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=0.0; return tmp; } adouble pow(const adouble &a, double v) { adouble tmp; tmp.val=ADOLC_MATH_NSP::pow(a.val, v); double tmp2=v*ADOLC_MATH_NSP::pow(a.val, v-1); FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=tmp2*a.ADVAL_I; return tmp; } adouble pow(const adouble &a, const adouble &b) { adouble tmp; tmp.val=ADOLC_MATH_NSP::pow(a.val, b.val); double tmp2=b.val*ADOLC_MATH_NSP::pow(a.val, b.val-1); double tmp3=ADOLC_MATH_NSP::log(a.val)*tmp.val; FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=tmp2*a.ADVAL_I+tmp3*b.ADVAL_I; return tmp; } adouble pow(double v, const adouble &a) { adouble tmp; tmp.val=ADOLC_MATH_NSP::pow(v, a.val); double tmp2=tmp.val*ADOLC_MATH_NSP::log(v); FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=tmp2*a.ADVAL_I; return tmp; } adouble log10(const adouble &a) { adouble tmp; tmp.val=ADOLC_MATH_NSP::log10(a.val); double tmp2=ADOLC_MATH_NSP::log((double)10)*a.val; FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I/tmp2; return tmp; } adouble sinh (const adouble &a) { adouble tmp; tmp.val=ADOLC_MATH_NSP::sinh(a.val); double tmp2=ADOLC_MATH_NSP::cosh(a.val); FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I*tmp2; return tmp; } adouble cosh (const adouble &a) { adouble tmp; tmp.val=ADOLC_MATH_NSP::cosh(a.val); double tmp2=ADOLC_MATH_NSP::sinh(a.val); FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I*tmp2; return tmp; } adouble tanh (const adouble &a) { adouble tmp; tmp.val=ADOLC_MATH_NSP::tanh(a.val); double tmp2=ADOLC_MATH_NSP::cosh(a.val); tmp2*=tmp2; FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I/tmp2; return tmp; } #if defined(ATRIG_ERF) adouble asinh (const adouble &a) { adouble tmp; tmp.val=ADOLC_MATH_NSP_ERF::asinh(a.val); double tmp2=ADOLC_MATH_NSP::sqrt(a.val*a.val+1); FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I/tmp2; return tmp; } adouble acosh (const adouble &a) { adouble tmp; tmp.val=ADOLC_MATH_NSP_ERF::acosh(a.val); double tmp2=ADOLC_MATH_NSP::sqrt(a.val*a.val-1); FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I/tmp2; return tmp; } adouble atanh (const adouble &a) { adouble tmp; tmp.val=ADOLC_MATH_NSP_ERF::atanh(a.val); double tmp2=1-a.val*a.val; FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I/tmp2; return tmp; } #endif adouble fabs (const adouble &a) { adouble tmp; tmp.val=ADOLC_MATH_NSP::fabs(a.val); int as=0; if (a.val>0) as=1; if (a.val<0) as=-1; if (as!=0) FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I*as; else FOR_I_EQ_0_LT_NUMDIR { as=0; if (a.ADVAL_I>0) as=1; if (a.ADVAL_I<0) as=-1; tmp.ADVAL_I=a.ADVAL_I*as; } return tmp; } adouble ceil (const adouble &a) { adouble tmp; tmp.val=ADOLC_MATH_NSP::ceil(a.val); FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=0.0; return tmp; } adouble floor (const adouble &a) { adouble tmp; tmp.val=ADOLC_MATH_NSP::floor(a.val); FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=0.0; return tmp; } adouble fmax (const adouble &a, const adouble &b) { adouble tmp; double tmp2=a.val-b.val; if (tmp2<0) { tmp.val=b.val; FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=b.ADVAL_I; } else { tmp.val=a.val; if (tmp2>0) { FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I; } else { FOR_I_EQ_0_LT_NUMDIR { if (a.ADVAL_I0) { FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=0.0; } else { FOR_I_EQ_0_LT_NUMDIR { if (a.ADVAL_I>0) tmp.ADVAL_I=a.ADVAL_I; else tmp.ADVAL_I=0.0; } } } return tmp; } adouble fmax (const adouble &a, double v) { adouble tmp; double tmp2=a.val-v; if (tmp2<0) { tmp.val=v; FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=0.0; } else { tmp.val=a.val; if (tmp2>0) { FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I; } else { FOR_I_EQ_0_LT_NUMDIR { if (a.ADVAL_I>0) tmp.ADVAL_I=a.ADVAL_I; else tmp.ADVAL_I=0.0; } } } return tmp; } adouble fmin (const adouble &a, const adouble &b) { adouble tmp; double tmp2=a.val-b.val; if (tmp2<0) { tmp.val=a.val; FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I; } else { tmp.val=b.val; if (tmp2>0) { FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=b.ADVAL_I; } else { FOR_I_EQ_0_LT_NUMDIR { if (a.ADVAL_I0) { FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I; } else { FOR_I_EQ_0_LT_NUMDIR { if (a.ADVAL_I<0) tmp.ADVAL_I=a.ADVAL_I; else tmp.ADVAL_I=0.0; } } } return tmp; } adouble fmin (const adouble &a, double v) { adouble tmp; double tmp2=a.val-v; if (tmp2<0) { tmp.val=a.val; FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I; } else { tmp.val=v; if (tmp2>0) { FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=0.0; } else { FOR_I_EQ_0_LT_NUMDIR { if (a.ADVAL_I<0) tmp.ADVAL_I=a.ADVAL_I; else tmp.ADVAL_I=0.0; } } } return tmp; } adouble ldexp (const adouble &a, const adouble &b) { return a*pow(2.,b); } adouble ldexp (const adouble &a, const double v) { return a*ADOLC_MATH_NSP::pow(2.,v); } adouble ldexp (const double v, const adouble &a) { return v*pow(2.,a); } double frexp (const adouble &a, int* v) { return ADOLC_MATH_NSP::frexp(a.val, v); } #if defined(ATRIG_ERF) adouble erf (const adouble &a) { adouble tmp; tmp.val=ADOLC_MATH_NSP_ERF::erf(a.val); double tmp2 = 2.0 / ADOLC_MATH_NSP_ERF::sqrt(ADOLC_MATH_NSP::acos(-1.0)) * ADOLC_MATH_NSP_ERF::exp(-a.val*a.val); FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=tmp2*a.ADVAL_I; return tmp; } #endif /******************* nontemporary results *********************************/ void adouble::operator = (const double v) { val=v; FOR_I_EQ_0_LT_NUMDIR ADVAL_I=0.0; } void adouble::operator = (const adouble& a) { val=a.val; FOR_I_EQ_0_LT_NUMDIR ADVAL_I=a.ADVAL_I; } void adouble::operator += (const double v) { val+=v; } void adouble::operator += (const adouble& a) { val=val+a.val; FOR_I_EQ_0_LT_NUMDIR ADVAL_I+=a.ADVAL_I; } void adouble::operator -= (const double v) { val-=v; } void adouble::operator -= (const adouble& a) { val=val-a.val; FOR_I_EQ_0_LT_NUMDIR ADVAL_I-=a.ADVAL_I; } void adouble::operator *= (const double v) { val=val*v; FOR_I_EQ_0_LT_NUMDIR ADVAL_I*=v; } void adouble::operator *= (const adouble& a) { FOR_I_EQ_0_LT_NUMDIR ADVAL_I=ADVAL_I*a.val+val*a.ADVAL_I; val*=a.val; } void adouble::operator /= (const double v) { val/=v; FOR_I_EQ_0_LT_NUMDIR ADVAL_I/=v; } void adouble::operator /= (const adouble& a) { FOR_I_EQ_0_LT_NUMDIR ADVAL_I=(ADVAL_I*a.val-val*a.ADVAL_I)/(a.val*a.val); val=val/a.val; } // not int adouble::operator ! () const { return val==0.0; } // comparision int adouble::operator != (const adouble &a) const { return val!=a.val; } int adouble::operator != (const double v) const { return val!=v; } int operator != (const double v, const adouble &a) { return v!=a.val; } int adouble::operator == (const adouble &a) const { return val==a.val; } int adouble::operator == (const double v) const { return val==v; } int operator == (const double v, const adouble &a) { return v==a.val; } int adouble::operator <= (const adouble &a) const { return val<=a.val; } int adouble::operator <= (const double v) const { return val<=v; } int operator <= (const double v, const adouble &a) { return v<=a.val; } int adouble::operator >= (const adouble &a) const { return val>=a.val; } int adouble::operator >= (const double v) const { return val>=v; } int operator >= (const double v, const adouble &a) { return v>=a.val; } int adouble::operator > (const adouble &a) const { return val>a.val; } int adouble::operator > (const double v) const { return val>v; } int operator > (const double v, const adouble &a) { return v>a.val; } int adouble::operator < (const adouble &a) const { return val=NUMBER_DIRECTIONS) { fprintf(DIAG_OUT, "Derivative array accessed out of bounds"\ " while \"getADValue(...)\"!!!\n"); exit(-1); } return adval[p]; } void adouble::setADValue(const unsigned int p, const double v) { if (p>=NUMBER_DIRECTIONS) { fprintf(DIAG_OUT, "Derivative array accessed out of bounds"\ " while \"setADValue(...)\"!!!\n"); exit(-1); } adval[p]=v; } # endif #if defined(NUMBER_DIRECTIONS) static void setNumDir(const unsigned int p) { #if !defined(DYNAMIC_DIRECTIONS) if (p>NUMBER_DIRECTIONS) ADOLC_numDir=NUMBER_DIRECTIONS; else ADOLC_numDir=p; #else ADOLC_numDir = p; #endif } #endif /******************* i/o operations ***************************************/ ostream& operator << ( ostream& out, const adouble& a) { out << "Value: " << a.val; #if !defined(NUMBER_DIRECTIONS) out << " ADValue: "; #else out << " ADValues (" << ADOLC_numDir << "): "; #endif FOR_I_EQ_0_LT_NUMDIR out << a.ADVAL_I << " "; out << "(a)"; return out; } istream& operator >> ( istream& in, adouble& a) { char c; do { in >> c; } while (c!=':' && !in.eof()); in >> a.val; #if !defined(NUMBER_DIRECTIONS) do in >> c; while (c!=':' && !in.eof()); #else unsigned int num; do in >> c; while (c!='(' && !in.eof()); in >> num; if (num>NUMBER_DIRECTIONS) { cout << "ADOL-C error: to many directions in input\n"; exit(-1); } do in >> c; while (c!=')' && !in.eof()); #endif FOR_I_EQ_0_LT_NUMDIR in >> a.ADVAL_I; do in >> c; while (c!=')' && !in.eof()); return in; } } /****************************************************************************/ #endif /* ADOLC_TAPELESS */ /****************************************************************************/ /* THAT'S ALL*/ #endif /* __cplusplus */ #endif /* ADOLC_ADOUBLE_H */ ADOL-C-2.4.1/ADOL-C/include/adolc/adolc_settings.h.in0000644000076600007660000000260412062606010020252 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: adolc_settings.h Revision: $Id$ Contents: ADOL-C Settings: These parameters might affect the performance of the ADOL-C system; and are set by the configure script during the build. Do not edit this file. Copyright (c) Kshitij Kulshreshtha This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_ADOLC_SETTINGS_H) #define ADOLC_ADOLC_SETTINGS_H 1 /*--------------------------------------------------------------------------*/ /* ADOL-C data types */ typedef @UINT_TYPE@ locint; /* ensure locint is unsigned */ typedef @REAL_TYPE@ revreal; /*--------------------------------------------------------------------------*/ /* Enable/disable asinh, acosh,atanh, erf */ @ATRIG_ERF_FALSE@#undef ATRIG_ERF @ATRIG_ERF_TRUE@#define ATRIG_ERF 1 /*--------------------------------------------------------------------------*/ /* Enable/disable advanced branching */ @ADVBRANCH_FALSE@#undef ADOLC_ADVANCED_BRANCHING @ADVBRANCH_TRUE@#define ADOLC_ADVANCED_BRANCHING 1 #endif ADOL-C-2.4.1/ADOL-C/include/adolc/sparse/0000755000076600007660000000000012120272603015767 5ustar coincoinADOL-C-2.4.1/ADOL-C/include/adolc/sparse/sparsedrivers.h0000644000076600007660000001103312032277512021040 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: sparse/sparsedrivers.h Revision: $Id: sparsedrivers.h 354 2012-10-01 11:32:26Z kulshres $ Contents: This file containts some "Easy To Use" interfaces of sparse package. Copyright (c) Andrea Walther This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined (ADOLC_SPARSE_SPARSE_H) #define ADOLC_SPARSE_SPARSE_H 1 #include BEGIN_C_DECLS /****************************************************************************/ /*--------------------------------------------------------------------------*/ /* jacobian pattern */ /* jac_pat(tag, m, n, argument, */ /* crs[] [ crs[][0] = non-zero independent blocks per row ], */ /* options[3]) */ /* */ ADOLC_DLL_EXPORT int jac_pat (short,int,int,const double*,unsigned int**,int*); /*--------------------------------------------------------------------------*/ /* seed matrix for sparse jacobian */ /* generate_seed_jac(m, n, crs, &seed, &p, option); */ ADOLC_DLL_EXPORT void generate_seed_jac (int, int, unsigned int**, double***, int*, int); /*--------------------------------------------------------------------------*/ /* sparse jacobian */ /* int sparse_jac(tag, m, n, repeat, x, &nnz, &row_ind, &col_ind, &values, */ /* options[3]); */ ADOLC_DLL_EXPORT int sparse_jac (short, int , int, int, const double*, int *, unsigned int **, unsigned int **, double **,int*); /*--------------------------------------------------------------------------*/ /* hessian pattern */ /* hess_pat(tag, n, x[n], crs[n][*], option) */ /* */ /* crs[i][ crs[i][0] = non-zero entries per row ] */ /* */ ADOLC_DLL_EXPORT int hess_pat(short,int,const double*,unsigned int**, int); /*--------------------------------------------------------------------------*/ /* seed matrix for sparse hessian */ /* generate_seed_hess(n, crs, &seed, &p, option); */ ADOLC_DLL_EXPORT void generate_seed_hess (int, unsigned int**, double***, int*, int); /*--------------------------------------------------------------------------*/ /* sparse hessian */ /* int sparse_hess(tag, n, repeat, x, &nnz, &row_ind, &col_ind, &values, */ /* options[2]); */ ADOLC_DLL_EXPORT int sparse_hess (short, int , int, const double*, int *, unsigned int **, unsigned int **, double **,int*); ADOLC_DLL_EXPORT void set_HP( short tag, /* tape identification */ int indep, /* number of independent variables */ unsigned int ** HP); ADOLC_DLL_EXPORT void get_HP( short tag, /* tape identification */ int indep, /* number of independent variables */ unsigned int *** HP); /*--------------------------------------------------------------------------*/ /* JACOBIAN BLOCK PATTERN */ /* Max. number of unsigned ints to store the seed / jacobian matrix strips. Reduce this value to x if your system happens to run out of memory. x < 10 makes no sense. x = 50 or 100 is better x stays for ( x * sizeof(unsigned long int) * 8 ) (block) variables at once */ #define PQ_STRIPMINE_MAX 30 ADOLC_DLL_EXPORT int bit_vector_propagation (short, int, int, const double*, unsigned int**, int*); /****************************************************************************/ END_C_DECLS #endif ADOL-C-2.4.1/ADOL-C/include/adolc/sparse/Makefile.am0000644000076600007660000000130512032277512020030 0ustar coincoin############################################################################## ## Makefile.am -- Process this file with automake to produce Makefile.in ## Revision: $Id: Makefile.am 354 2012-10-01 11:32:26Z kulshres $ ## ## Copyright (C) Andrea Walther, Andreas Kowarz, Kshitij Kulshreshtha ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## libsparseincludedir = $(pkgincludedir)/sparse libsparseinclude_HEADERS = sparsedrivers.h sparse_fo_rev.h ADOL-C-2.4.1/ADOL-C/include/adolc/sparse/Makefile.in0000644000076600007660000003670112062606346020055 0ustar coincoin# Makefile.in generated by automake 1.12.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = ADOL-C/include/adolc/sparse DIST_COMMON = $(libsparseinclude_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libsparseincludedir)" HEADERS = $(libsparseinclude_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH_FALSE = @ADVBRANCH_FALSE@ ADVBRANCH_TRUE = @ADVBRANCH_TRUE@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF_FALSE = @ATRIG_ERF_FALSE@ ATRIG_ERF_TRUE = @ATRIG_ERF_TRUE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COLPACK_CFLAGS = @COLPACK_CFLAGS@ COLPACK_LIBS = @COLPACK_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ libsparseincludedir = $(pkgincludedir)/sparse libsparseinclude_HEADERS = sparsedrivers.h sparse_fo_rev.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/include/adolc/sparse/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/include/adolc/sparse/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-libsparseincludeHEADERS: $(libsparseinclude_HEADERS) @$(NORMAL_INSTALL) @list='$(libsparseinclude_HEADERS)'; test -n "$(libsparseincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(libsparseincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libsparseincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libsparseincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(libsparseincludedir)" || exit $$?; \ done uninstall-libsparseincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(libsparseinclude_HEADERS)'; test -n "$(libsparseincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(libsparseincludedir)'; $(am__uninstall_files_from_dir) ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libsparseincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-libsparseincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-libsparseincludeHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool cscopelist ctags distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-libsparseincludeHEADERS install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-libsparseincludeHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.4.1/ADOL-C/include/adolc/sparse/sparse_fo_rev.h0000644000076600007660000001005712032277512021006 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: sparse/sparse_fo_rev.h Revision: $Id: sparse_fo_rev.h 354 2012-10-01 11:32:26Z kulshres $ Contents: This file containts some "Easy To Use" interfaces of sparse package. Copyright (c) Andrea Walther, Christo Mitev This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined (ADOLC_SPARSE_SPARSE_H) #define ADOLC_SPARSE_SPARSE_H 1 #include #if defined(__cplusplus) /****************************************************************************/ /* FORWARD MODE, overloaded calls */ /* */ /* nBV = number of Boolean Vectors to be packed */ /* (see Chapter Dependence Analysis, ADOL-C Documentation) */ /* bits_per_long = 8*sizeof(unsigned long int) */ /* p = nBV / bits_per_long + ( (nBV % bits_per_long) != 0 ) */ /* */ /* For the full Jacobian matrix set */ /* p = indep / bits_per_long + ((indep % bits_per_long) != 0) */ /* and pass a bit pattern version of the identity matrix as an argument */ /* */ /*--------------------------------------------------------------------------*/ /* Bit pattern propagation call, d = 1, tight version */ /* */ /* forward(tag, m, n, p, x[n], X[n][p], y[m], Y[m][p], mode) : intfov */ ADOLC_DLL_EXPORT int forward (short, int, int, int, double*, unsigned long int**, double*, unsigned long int**, char =0); /*--------------------------------------------------------------------------*/ /* Bit pattern propagation call, d = 1, safe version (no x[] and y[]) */ /* */ /* forward(tag, m, n, p, X[n][p], Y[m][p], mode) : intfov */ ADOLC_DLL_EXPORT int forward (short, int, int, int, unsigned long int**, unsigned long int**, char =0); /****************************************************************************/ /* REVERSE MODE, overloaded calls */ /* */ /* nBV = number of Boolean Vectors to be packed */ /* (see Chapter Dependence Analysis, ADOL-C Documentation) */ /* bits_per_long = 8*sizeof(unsigned long int) */ /* q = nBV / bits_per_long + ( (nBV % bits_per_long) != 0 ) */ /* */ /* For the full Jacobian matrix set */ /* q = depen / bits_per_long + ((depen % bits_per_long) != 0) */ /* and pass a bit pattern version of the identity matrix as an argument */ /* */ /*--------------------------------------------------------------------------*/ /* */ /* Bit pattern propagation call, d = 0, tight & safe version */ /* */ /* reverse(tag, m, n, q, U[q][m], Z[q][n], mode) : intfov */ ADOLC_DLL_EXPORT int reverse (short, int, int, int, unsigned long int**, unsigned long int**, char =0); #endif /****************************************************************************/ #endif ADOL-C-2.4.1/ADOL-C/include/Makefile.am0000644000076600007660000000114212032277512015450 0ustar coincoin############################################################################## ## Makefile.am -- Process this file with automake to produce Makefile.in ## Revision: $Id: Makefile.am 38 2009-06-17 15:48:09Z awalther $ ## ## Copyright (C) Andrea Walther, Andreas Kowarz, Kshitij Kulshreshtha ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## SUBDIRS = adolcADOL-C-2.4.1/ADOL-C/include/Makefile.in0000644000076600007660000004457312062606346015504 0ustar coincoin# Makefile.in generated by automake 1.12.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = ADOL-C/include DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH_FALSE = @ADVBRANCH_FALSE@ ADVBRANCH_TRUE = @ADVBRANCH_TRUE@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF_FALSE = @ATRIG_ERF_FALSE@ ATRIG_ERF_TRUE = @ATRIG_ERF_TRUE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COLPACK_CFLAGS = @COLPACK_CFLAGS@ COLPACK_LIBS = @COLPACK_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = adolc all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/include/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/include/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done cscopelist-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) \ cscopelist-recursive ctags-recursive install-am install-strip \ tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ cscopelist cscopelist-recursive ctags ctags-recursive \ distclean distclean-generic distclean-libtool distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-recursive uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.4.1/BUGS0000644000076600007660000000064311154001222011545 0ustar coincoinNot many: - incorrect results in rare cases if using malloc => default for ADOL-C memory allocation changed to calloc - operations like adouble=value/adouble, adouble=value*adouble, etc. that overwrite the adouble argument cause either a segmentation fault, an error in seeking/reading the taylor stack or wrong derivatives when applying the reverse mode (only one taylor gets written but two are read back) ADOL-C-2.4.1/NEWS0000644000076600007660000000000011154001222011544 0ustar coincoinADOL-C-2.4.1/adolc.spec.in0000644000076600007660000001121611515275277013453 0ustar coincoin# spec file for package adolc (Version @ADOLC_VERSION@.@ADOLC_SUBVERSION@.@ADOLC_PATCHLEVEL@) # norootforbuild %define packver @PACKAGE_VERSION@ Name: adolc Version: @ADOLC_VERSION@.@ADOLC_SUBVERSION@.@ADOLC_PATCHLEVEL@ Release: 0.1 License: GPLv2 or CPL Summary: Algorithmic Differentiation Library for C/C++ Url: http://projects.coin-or.org/ADOL-C Group: Development/Languages/C and C++ Source: %{name}-%{packver}.tar.bz2 Source1: ColPack.tar.gz BuildRequires: gcc-c++ libstdc++-devel BuildRoot: %{_tmppath}/%{name}-%{version}-build AutoReqProv: on %description The package ADOL-C (Automatic Differentiation by OverLoading in C++) facilitates the evaluation of first and higher derivatives of vector functions that are defined by computer programs written in C or C++. The resulting derivative evaluation routines may be called from C/C++, Fortran, or any other language that can be linked with C. The numerical values of derivative vectors are obtained free of truncation errors at a small multiple of the run time and randomly accessed memory of the given function evaluation program. %package -n libadolc1 Summary: Algorithmic Differentiation Library for C/C++ Group: Development/Languages/C and C++ %description -n libadolc1 The package ADOL-C (Automatic Differentiation by OverLoading in C++) facilitates the evaluation of first and higher derivatives of vector functions that are defined by computer programs written in C or C++. The resulting derivative evaluation routines may be called from C/C++, Fortran, or any other language that can be linked with C. The numerical values of derivative vectors are obtained free of truncation errors at a small multiple of the run time and randomly accessed memory of the given function evaluation program. %package devel Summary: Algorithmic Differentiation Library for C/C++ -- development files Group: Development/Languages/C and C++ Requires: libadolc1 = %{version} %description devel The package ADOL-C (Automatic Differentiation by OverLoading in C++) facilitates the evaluation of first and higher derivatives of vector functions that are defined by computer programs written in C or C++. The resulting derivative evaluation routines may be called from C/C++, Fortran, or any other language that can be linked with C. The numerical values of derivative vectors are obtained free of truncation errors at a small multiple of the run time and randomly accessed memory of the given function evaluation program. This package provides the development environment for adolc %package doc Summary: Algorithmic Differentiation Library for C/C++ -- documentation Group: Development/Languages/C and C++ BuildArch: noarch %description doc The package ADOL-C (Automatic Differentiation by OverLoading in C++) facilitates the evaluation of first and higher derivatives of vector functions that are defined by computer programs written in C or C++. The resulting derivative evaluation routines may be called from C/C++, Fortran, or any other language that can be linked with C. The numerical values of derivative vectors are obtained free of truncation errors at a small multiple of the run time and randomly accessed memory of the given function evaluation program. This package provides the user“s manual for adolc %prep %setup -q -n %{name}-%{packver} -b 1 pushd ThirdParty mv %{_builddir}/ColPack/* ColPack/ rm -rf %{_builddir}/ColPack popd %build pushd ThirdParty/ColPack make %{_smp_mflags} popd autoreconf -v --install --force %configure --prefix=/usr make %{_smp_mflags} %install %makeinstall install -d %{buildroot}%{_datadir}/doc/packages/%{name} install -m 644 README AUTHORS BUGS LICENSE INSTALL TODO %{buildroot}%{_datadir}/doc/packages/%{name} install -m 644 ADOL-C/doc/adolc-manual.pdf %{buildroot}%{_datadir}/doc/packages/%{name} install -m 644 ADOL-C/doc/short_ref.pdf %{buildroot}%{_datadir}/doc/packages/%{name} find %{buildroot} -type f -name '*.la' -delete -print %clean rm -rf %{buildroot} rm -rf %{_builddir}/%{name}-%{packver} %post -n libadolc1 -p /sbin/ldconfig %postun -n libadolc1 -p /sbin/ldconfig %files -n libadolc1 %defattr(-,root,root) %{_libdir}/libadolc.so.* %files devel %defattr(-,root,root) %dir %{_includedir}/adolc %dir %{_includedir}/adolc/drivers %dir %{_includedir}/adolc/sparse %dir %{_includedir}/adolc/tapedoc %{_includedir}/adolc/*.h %{_includedir}/adolc/drivers/*.h %{_includedir}/adolc/sparse/*.h %{_includedir}/adolc/tapedoc/*.h %{_libdir}/libadolc.so %{_libdir}/libadolc.a %files doc %defattr(-,root,root) %dir %{_datadir}/doc/packages/%{name} %{_datadir}/doc/packages/%{name}/* %changelog ADOL-C-2.4.1/LICENSE0000644000076600007660000006572411732370423012120 0ustar coincoinTHIS PROGRAM IS PROVIDED UNDER THE TERMS OF ONE OF THE TWO LICENSES, I.E., EITHER THE ECLIPSE PUBLIC LICENSE VERSION 1.0 OR THE GNU GENERAL PUBLIC LICENSE AS GIVEN BELOW. ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES THE RECIPIENT'S ACCEPTANCE OF ONE OF THE TWO AGREEMENTS EPL-1.0 OR GPL-2.0+. *********************************************************************** A copy of the Eclipse Public License version 1.0 is provided along with this program. Eclipse Public License -v 1.0 THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. 1. DEFINITIONS "Contribution" means: a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and b) in the case of each subsequent Contributor: i) changes to the Program, and ii) additions to the Program; where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program. "Contributor" means any person or entity that distributes the Program. "Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program. "Program" means the Contributions distributed in accordance with this Agreement. "Recipient" means anyone who receives the Program under this Agreement, including all Contributors. 2. GRANT OF RIGHTS a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form. b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder. c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program. d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement. 3. REQUIREMENTS A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that: a) it complies with the terms and conditions of this Agreement; and b) its license agreement: i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose; ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits; iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange. When the Program is made available in source code form: a) it must be made available under this Agreement; and b) a copy of this Agreement must be included with each copy of the Program. Contributors may not remove or alter any copyright notices contained within the Program. Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution. 4. COMMERCIAL DISTRIBUTION Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense. For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages. 5. NO WARRANTY EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations. 6. DISCLAIMER OF LIABILITY EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), 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 OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 7. GENERAL If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed. All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive. Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved. This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation. *********************************************************************** 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 2 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. A copy of the GNU General Public License version 2 is provided along with this program. GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. *********************************************************************** ADOL-C-2.4.1/Makefile.am0000644000076600007660000000420611735326023013133 0ustar coincoin############################################################################## ## Makefile.am -- Process this file with automake to produce Makefile.in ## Revision: $Id: Makefile.am 314 2012-03-30 12:50:27Z kulshres $ ## ## Copyright (C) Andrea Walther, Andreas Kowarz ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## AUTOMAKE_OPTIONS = foreign EXTRA_DIST = TODO BUGS LICENSE update_versions.sh \ ADOL-C/doc/version.tex.in ADOL-C/doc/version.tex \ ADOL-C/doc/adolc-manual.pdf ADOL-C/doc/adolc-manual.ps \ ADOL-C/doc/adolc-manual.tex ADOL-C/doc/short_ref.pdf \ ADOL-C/doc/short_ref.ps ADOL-C/doc/short_ref.tex \ ADOL-C/doc/multiplexed.pdf ADOL-C/doc/multiplexed.eps \ ADOL-C/doc/tapeadv.pdf ADOL-C/doc/tapeadv.eps \ ADOL-C/doc/tapebasic.pdf ADOL-C/doc/tapebasic.eps \ ADOL-C/doc/tap_point.pdf ADOL-C/doc/tap_point.eps \ MSVisualStudio/v10/adolc.sln MSVisualStudio/v10/adolc.vcxproj \ MSVisualStudio/v10/ColPack_Readme_VC++.txt \ MSVisualStudio/v10/ColPack.vcxproj \ MSVisualStudio/v10/sparse/config.h.in MSVisualStudio/v10/nosparse/config.h.in \ MSVisualStudio/v10/x64/sparse/config.h.in MSVisualStudio/v10/x64/nosparse/config.h.in \ MSVisualStudio/v10/sparse/config.h MSVisualStudio/v10/nosparse/config.h \ MSVisualStudio/v10/x64/sparse/config.h MSVisualStudio/v10/x64/nosparse/config.h \ MSVisualStudio/v10/Readme_VC++.txt \ MSVisualStudio/v10/installer.sh \ adolc.spec.in adolc.spec \ update_versions.sh SUBDIRS = ADOL-C test: all cd ADOL-C; $(MAKE) test ADOL-C-2.4.1/configure.ac0000644000076600007660000005035712120123050013355 0ustar coincoin############################################################################## # configure.ac -- Process this file with autoconf to produce configure # Revision: $Id: configure.ac 415 2013-03-13 16:15:36Z kulshres $ # # Copyright (C) Andrea Walther, Andreas Kowarz # # contains patches from the COIN OR libtool # ############################################################################## define([ADOLC_VER], [2]) define([ADOLC_SUB], [4]) define([ADOLC_LVL], [1]) AC_PREREQ(2.67) AC_INIT(adolc, ADOLC_VER.ADOLC_SUB.ADOLC_LVL, [adol-c@list.coin-or.org]) config_flags="$*" AC_REVISION($Revision: 415 $) AC_CONFIG_SRCDIR([ADOL-C/src/adouble.cpp]) AC_CONFIG_AUX_DIR(autoconf) AC_CONFIG_HEADERS([ADOL-C/src/config.h]) AC_PREFIX_DEFAULT(${HOME}/adolc_base) AM_INIT_AUTOMAKE([1.11 dist-bzip2 foreign]) AM_SILENT_RULES([yes]) if test "x$CFLAGS" == x ; then ac_shell_cflags="not_set" else ac_shell_cflags="$CFLAGS" fi if test "x$CXXFLAGS" == x ; then ac_shell_cxxflags="not_set" else ac_shell_cxxflags="$CXXFLAGS" fi libdir_set_on_cmd="no" for i in $config_flags ; do case $i in -libdir | --libdir | --libdi | --libd | -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir_set_on_cmd="yes" break ;; esac done # checks for programs AC_PROG_CXX AC_PROG_CC AC_PROG_CPP AC_PROG_INSTALL AC_PROG_LN_S AC_PROG_MAKE_SET AC_LIBTOOL_WIN32_DLL AC_PROG_LIBTOOL AC_CHECK_SIZEOF([void *]) if test "x$ac_cv_sizeof_void_p" = "x8" ; then _lib=lib64 else _lib=lib fi if test "x$libdir_set_on_cmd" = "xno" ; then libdir='${exec_prefix}/${_lib}' AC_SUBST(_lib) AC_SUBST(libdir) fi # checks for header files AC_HEADER_STDC AC_HEADER_TIME AC_HEADER_STDBOOL AC_CHECK_HEADERS([stddef.h stdlib.h stdio.h string.h unistd.h sys/timeb.h]) # checks for types AC_C_CONST AC_C_INLINE AC_TYPE_SIZE_T AC_STRUCT_TM # Checks for library functions AC_FUNC_MALLOC AC_FUNC_REALLOC # Checks for libraries and fuctions AC_SEARCH_LIBS([pow], [m]) AC_CHECK_FUNCS([floor fmax fmin ftime pow sqrt strchr strtol trunc]) # substitutions AC_SUBST(ac_aux_dir) # ADOL-C configuration AC_DEFINE(ADOLC_VERSION,ADOLC_VER,[ADOL-C Version]) AC_DEFINE(ADOLC_SUBVERSION,ADOLC_SUB,[ADOL-C Subversion]) AC_DEFINE(ADOLC_PATCHLEVEL,ADOLC_LVL,[ADOL-C Patchlevel]) ADOLC_VERSION=ADOLC_VER ADOLC_SUBVERSION=ADOLC_SUB ADOLC_PATCHLEVEL=ADOLC_LVL AC_SUBST(ADOLC_VERSION) AC_SUBST(ADOLC_SUBVERSION) AC_SUBST(ADOLC_PATCHLEVEL) AC_MSG_CHECKING(whether to use calloc or malloc for memory allocation) AC_ARG_ENABLE(use-calloc,[AS_HELP_STRING([--disable-use-calloc], [disable use of calloc and use malloc instead for memory allocation [default=calloc is used]])], [use_calloc=$enableval],[use_calloc=yes]) if test x$use_calloc = xyes ; then AC_MSG_RESULT(calloc) AC_DEFINE(ADOLC_USE_CALLOC,1,[Use calloc instead of malloc for memory allocation]) else AC_MSG_RESULT(malloc) fi AC_MSG_CHECKING(whether to enable atrig/erf functions) AC_ARG_ENABLE(atrig-erf,[AS_HELP_STRING([--enable-atrig-erf], [enable atrig and erf functions in ADOL-C [default=no]])], [use_atrig_erf=$enableval],[use_atrig_erf=no]) AC_MSG_RESULT($use_atrig_erf) if test x$use_atrig_erf = xyes ; then ATRIG_ERF_FALSE="// " ATRIG_ERF_TRUE="" else ATRIG_ERF_FALSE="" ATRIG_ERF_TRUE="// " fi AC_SUBST(ATRIG_ERF_FALSE) AC_SUBST(ATRIG_ERF_TRUE) AC_MSG_CHECKING(whether to use 32-bit or 64-bit locations) AC_ARG_ENABLE(ulong,[AS_HELP_STRING([--enable-ulong], [enable 64-bit locations (only available on 64-bit systems) [default=32-bit]])], [use_ulong=$enableval],[use_ulong=no]) if test x$use_ulong = xyes -a 0$ac_cv_sizeof_void_p -ge 8 ; then UINT_TYPE=uint64_t AC_MSG_RESULT(64-bit) else UINT_TYPE=uint32_t AC_MSG_RESULT(32-bit) fi AC_SUBST(UINT_TYPE) AC_MSG_CHECKING(whether to use single or double precision) AC_ARG_ENABLE(double,[AS_HELP_STRING([--disable-double], [disable double precision arithmetic [untested, default=double is enabled]])], [use_double=$enableval],[use_double=yes]) if test x$use_double = xno ; then REAL_TYPE=float echo echo -n "using ${REAL_TYPE} is not well tested, please report bugs if you find any..." else REAL_TYPE=double fi AC_MSG_RESULT($REAL_TYPE) AC_SUBST(REAL_TYPE) AC_MSG_CHECKING(whether to enable advanced branching operations) AC_ARG_ENABLE(advanced-branching, [AS_HELP_STRING([--enable-advanced-branching], [enable advanced branching operations to reduce retaping [default=no]. The boolean valued comparison operators with two adouble arguments will not return boolean results but the active results may be used to automatically switch branches in conjunction with condassign or advector (see manual).])], [use_advbranch=$enableval],[use_advbranch=no]) AC_MSG_RESULT($use_advbranch) if test x$use_advbranch = xyes ; then ADVBRANCH_TRUE="" ADVBRANCH_FALSE="// " else ADVBRANCH_TRUE="// " ADVBRANCH_FALSE="" fi AC_SUBST(ADVBRANCH_TRUE) AC_SUBST(ADVBRANCH_FALSE) AC_MSG_CHECKING(whether to use ADOL-C debug mode) AC_ARG_ENABLE(debug, [ AS_HELP_STRING([--enable-debug],[enable ADOL-C debug mode [default=no]])], [ adolc_debug=$enableval AC_MSG_RESULT($adolc_debug) ], [ adolc_debug=no AC_MSG_RESULT(no) ]) AC_MSG_CHECKING(whether to use ADOL-C hard debug mode) AC_ARG_ENABLE(harddebug, [ AS_HELP_STRING([--enable-harddebug],[enable ADOL-C hard debug mode [default=no]])], [ adolc_harddebug=$enableval AC_MSG_RESULT($adolc_harddebug) ], [ adolc_harddebug=no AC_MSG_RESULT(no) ]) if test x$adolc_harddebug == xyes ; then adolc_debug=yes AC_DEFINE(ADOLC_HARDDEBUG,1,[ADOL-C hard debug mode]) fi if test x$adolc_debug == xyes ; then AC_DEFINE(ADOLC_DEBUG,1,[ADOL-C debug mode]) fi AC_MSG_CHECKING(whether the default adouble constructor should initialize the value to 0) AC_ARG_ENABLE(stdczero, [ AS_HELP_STRING([--disable-stdczero],[adouble default constructor does not initialze the value to zero (improves performance but yields incorrect results for implicit array initializations, see manual) [default=enabled]])], [ adolc_stdczero=no AC_MSG_RESULT(no) ], [ adolc_stdczero=yes AC_MSG_RESULT(yes) ]) if test x$adolc_stdczero == xyes; then AC_DEFINE(ADOLC_ADOUBLE_STDCZERO,1,[ADOL-C adouble zeroing mode]) fi AC_MSG_CHECKING(whether errno is thread save) AC_ARG_ENABLE(tserrno, [ AS_HELP_STRING([--enable-tserrno],[use errno as thread number cache [default=no]])], [ adolc_tserrno=$enableval AC_MSG_RESULT($adolc_tserrno) ], [ adolc_tserrno=no AC_MSG_RESULT(no) ]) if test x$adolc_tserrno == xyes ; then AC_DEFINE(ADOLC_THREADSAVE_ERRNO,1,[ADOL-C thread save errno mode]) fi AC_MSG_CHECKING(which flag to use to enable OpenMP) AC_ARG_WITH(openmp-flag, [AS_HELP_STRING([--with-openmp-flag=FLAG], [use FLAG to enable OpenMP at compile time [default=none]])], [ac_adolc_openmpflag=$withval AC_MSG_RESULT($ac_adolc_openmpflag)], [ac_adolc_openmpflag="" AC_MSG_RESULT(none)]) # ADOL-C Sparse facility AC_MSG_CHECKING(whether to build sparse drivers) AC_ARG_ENABLE(sparse, [ AS_HELP_STRING([--enable-sparse],[build sparse drivers [default=disabled]])], [sparse=$enableval AC_MSG_RESULT($sparse)], [sparse="no" AC_MSG_RESULT(no)]) AC_ARG_WITH(colpack, [ AS_HELP_STRING([--with-colpack=DIR],[path to the colpack library and headers [default=system libraries]])], [ colpack=$withval COLPACK_CFLAGS="$ac_adolc_openmpflag -I$colpack/include" COLPACK_LIBDIR="$colpack/${_lib}" COLPACK_LIBS="$ac_adolc_openmpflag -L$COLPACK_LIBDIR -lColPack" ], [ COLPACK_CFLAGS="$ac_adolc_openmpflag" COLPACK_LIBDIR="" COLPACK_LIBS="-lColPack" ]) AC_LANG_PUSH([C++]) save_CPPFLAGS="$CPPFLAGS" save_LIBS="$LIBS" CPPFLAGS="$CPPFLAGS $COLPACK_CFLAGS" LIBS="$COLPACK_LIBS $LIBS" AC_CHECK_HEADER([ColPack/ColPackHeaders.h],[have_colpackheaders=yes],[have_colpackheaders=no]) if test x$have_colpackheaders = xyes ; then AC_MSG_CHECKING(for libColPack in $COLPACK_LIBDIR) AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ], [ColPack::GraphColoring g])], [have_colpack=yes], [have_colpack=no]) AC_MSG_RESULT($have_colpack) else have_colpack=no fi CPPFLAGS="$save_CPPFLAGS" LIBS="$save_LIBS" AC_LANG_POP([C++]) AM_CONDITIONAL(HAVE_LIBCOLPACK,[test x$have_colpack = xyes]) if test x$have_colpack = xyes; then sparse=yes echo "will build sparse drivers as linking with -lColPack succeeded" fi AM_CONDITIONAL(SPARSE,[test x${sparse} = xyes]) if test x$sparse = xyes ; then AC_DEFINE(SPARSE,[1],[Define 1 if sparse derivative propagation is to be enabled]) fi if test x$sparse = xyes && test x$have_colpack = xyes; then AC_DEFINE(HAVE_LIBCOLPACK,[1],[Define 1 if ColPack is available]) else COLPACK_CFLAGS="" COLPACK_LIBS="" fi AC_SUBST(COLPACK_CFLAGS) AC_SUBST(COLPACK_LIBS) # ADOL-C Examples AC_MSG_CHECKING(whether to build documented examples) AC_ARG_ENABLE(docexa, [ AS_HELP_STRING([--enable-docexa],[build documented examples [default=disabled]])], [docexa=$enableval AC_MSG_RESULT(yes)], [docexa="no" AC_MSG_RESULT(no)]) AM_CONDITIONAL(DOCEXA,[test x${docexa} = xyes]) AC_MSG_CHECKING(whether to build additional examples) AC_ARG_ENABLE(addexa, [AS_HELP_STRING([--enable-addexa], [build additional examples [default=disabled]])], [addexa=$enableval AC_MSG_RESULT(yes)], [addexa="no" AC_MSG_RESULT(no)]) AM_CONDITIONAL(ADDEXA,[test x${addexa} = xyes]) AC_MSG_CHECKING(whether to build parallel example) AC_ARG_ENABLE(parexa, [AS_HELP_STRING([--enable-parexa], [build parallel example [default=disabled], if enabled -with-openmp-flag=FLAG required])], [parexa=$enableval AC_MSG_RESULT(yes)], [parexa="no" AC_MSG_RESULT(no)]) AM_CONDITIONAL(PAREXA,[test x${parexa} = xyes]) # ADOL-C Compilation flags AC_MSG_CHECKING(which CFLAGS to use) AC_ARG_WITH(cflags, [AS_HELP_STRING([--with-cflags=FLAGS], [use CFLAGS=FLAGS (default: -O2)])], [ac_adolc_cflags="$withval" if test x${adolc_debug} == xyes || test x${adolc_harddebug} == xyes ; then ac_adolc_cflags="$ac_adolc_cflags -g -O0" fi ac_adolc_cflags="$ac_adolc_cflags $ac_adolc_openmpflag" AC_SUBST(ac_adolc_cflags) AC_MSG_RESULT($ac_adolc_cflags)], [if test "$ac_shell_cflags" = "not_set"; then ac_adolc_cflags="-O2" if test x${adolc_debug} == xyes || test x${adolc_harddebug} == xyes ; then ac_adolc_cflags="-g -O3 -Wall -ansi" fi else ac_adolc_cflags="$CFLAGS" fi ac_adolc_cflags="$ac_adolc_cflags $ac_adolc_openmpflag" AC_SUBST(ac_adolc_cflags) AC_MSG_RESULT($ac_adolc_cflags)]) AC_MSG_CHECKING(which CXXFLAGS to use) AC_ARG_WITH(cxxflags, [AS_HELP_STRING([--with-cxxflags=FLAGS], [use CXXFLAGS=FLAGS (default: -O2)])], [ac_adolc_cxxflags="$withval" if test x${adolc_debug} == xyes || test x${adolc_harddebug} == xyes ; then ac_adolc_cxxflags="$ac_adolc_cxxflags -g -O0" fi ac_adolc_cxxflags="$ac_adolc_cxxflags $ac_adolc_openmpflag" AC_SUBST(ac_adolc_cxxflags) AC_MSG_RESULT($ac_adolc_cxxflags)], [if test "$ac_shell_cxxflags" = "not_set"; then ac_adolc_cxxflags="-O2" if test x${adolc_debug} == xyes || test x${adolc_harddebug} == xyes ; then ac_adolc_cxxflags="-g -O0 -Wall" fi else ac_adolc_cxxflags="$CXXFLAGS" fi ac_adolc_cxxflags="$ac_adolc_cxxflags $ac_adolc_openmpflag" AC_SUBST(ac_adolc_cxxflags) AC_MSG_RESULT($ac_adolc_cxxflags)]) ########################################################################### # COIN_PATCH_LIBTOOL_CYGWIN # ########################################################################### # Patches to libtool for cygwin. Lots for cl, a few for GCC. # For cl: # - cygpath is not correctly quoted in fix_srcfile_path # - paths generated for .lib files is not run through cygpath -w # # REQUIRED FOR COMPILATION WITH CYGWIN !!! # AC_DEFUN([AC_COIN_PATCH_LIBTOOL_CYGWIN], [ case "$CXX" in cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) AC_MSG_NOTICE(Applying patches to libtool for cl compiler) sed -e 's|fix_srcfile_path=\"`cygpath -w \"\$srcfile\"`\"|fix_srcfile_path=\"\\\`'"$CYGPATH_W"' \\\"\\$srcfile\\\"\\\`\"|' \ -e 's|fix_srcfile_path=\"\"|fix_srcfile_path=\"\\\`'"$CYGPATH_W"' \\\"\\$srcfile\\\"\\\`\"|' \ -e 's%compile_deplibs=\"\$dir/\$old_library \$compile_deplibs\"%compile_deplibs="'\`"$CYGPATH_W"' \$dir/\$old_library | sed -e '"'"'sY\\\\\\\\Y/Yg'"'"\`' \$compile_deplibs\"'% \ -e 's%compile_deplibs=\"\$dir/\$linklib \$compile_deplibs\"%compile_deplibs="'\`"$CYGPATH_W"' \$dir/\$linklib | sed -e '"'"'sY\\\\\\\\Y/Yg'"'"\`' \$compile_deplibs\"'% \ -e 's%lib /OUT:%lib -OUT:%' \ -e "s%cygpath -w%$CYGPATH_W%" \ -e 's%$AR x \\$f_ex_an_ar_oldlib%bla=\\`lib -nologo -list \\$f_ex_an_ar_oldlib | xargs echo '"$mydos2unix"'\\`; echo \\$bla; for i in \\$bla; do lib -nologo -extract:\\$i \\$f_ex_an_ar_oldlib; done%' \ -e 's/$AR t/lib -nologo -list/' \ -e 's%f_ex_an_ar_oldlib="\($?*1*\)"%f_ex_an_ar_oldlib='\`"$CYGPATH_W"' \1`%' \ -e 's%^archive_cmds=.*%archive_cmds="\\$CC -o \\$lib \\$libobjs \\$compiler_flags \\\\\\`echo \\\\\\"\\$deplibs\\\\\\" | \\$SED -e '"\'"'s/ -lc\\$//'"\'"'\\\\\\` -link -dll~linknames="%' \ -e 's%old_archive_cmds="lib -OUT:\\$oldlib\\$oldobjs\\$old_deplibs"%old_archive_cmds="if test -r \\$oldlib; then bla=\\"\\$oldlib\\"; else bla=; fi; lib -OUT:\\$oldlib \\\\\\$bla\\$oldobjs\\$old_deplibs"%' \ libtool > conftest.bla mv conftest.bla libtool chmod 755 libtool ;; *) AC_MSG_NOTICE(Applying patches to libtool for GNU compiler) sed -e 's|fix_srcfile_path=\"`cygpath -w \"\$srcfile\"`\"|fix_srcfile_path=\"\\\`'"$CYGPATH_W"' \\\"\\$srcfile\\\"\\\`\"|' \ -e 's|"lib /OUT:\\$oldlib\\$oldobjs\\$old_deplibs"|"\\$AR \\$AR_FLAGS \\$oldlib\\$oldobjs\\$old_deplibs~\\$RANLIB \\$oldlib"|' \ -e 's|libext="lib"|libext="a"|' \ libtool > conftest.bla mv conftest.bla libtool chmod 755 libtool ;; esac ]) # COIN_PATCH_LIBTOOL_CYGWIN # output AC_CONFIG_FILES(Makefile ADOL-C/Makefile ADOL-C/include/Makefile ADOL-C/include/adolc/Makefile ADOL-C/include/adolc/adolc_settings.h ADOL-C/include/adolc/drivers/Makefile ADOL-C/include/adolc/sparse/Makefile ADOL-C/include/adolc/tapedoc/Makefile ADOL-C/src/Makefile ADOL-C/src/drivers/Makefile ADOL-C/src/sparse/Makefile ADOL-C/src/tapedoc/Makefile ADOL-C/doc/version.tex ADOL-C/examples/Makefile ADOL-C/examples/additional_examples/Makefile ADOL-C/examples/additional_examples/clock/Makefile ADOL-C/examples/additional_examples/checkpointing/Makefile ADOL-C/examples/additional_examples/ext_diff_func/Makefile ADOL-C/examples/additional_examples/fixpoint_exam/Makefile ADOL-C/examples/additional_examples/hessmat/Makefile ADOL-C/examples/additional_examples/lufact/Makefile ADOL-C/examples/additional_examples/openmp_exam/Makefile ADOL-C/examples/additional_examples/scal/Makefile ADOL-C/examples/additional_examples/speelpenning/Makefile ADOL-C/examples/additional_examples/taylor/Makefile ADOL-C/examples/additional_examples/detexam/Makefile ADOL-C/examples/additional_examples/helm/Makefile ADOL-C/examples/additional_examples/lighthouse/Makefile ADOL-C/examples/additional_examples/ode/Makefile ADOL-C/examples/additional_examples/sparse/Makefile ADOL-C/examples/additional_examples/tapesave/Makefile ADOL-C/examples/additional_examples/pow/Makefile ADOL-C/examples/additional_examples/timing/Makefile ADOL-C/test/Makefile MSVisualStudio/v10/sparse/config.h MSVisualStudio/v10/nosparse/config.h MSVisualStudio/v10/x64/sparse/config.h MSVisualStudio/v10/x64/nosparse/config.h adolc.spec ) AC_OUTPUT #call libtool for cygwin AC_COIN_PATCH_LIBTOOL_CYGWIN warn=false # echo configuration echo \ " ----------------------------------------------------------------------------- Configuration: C compiler: ${CC} C++ compiler: ${CXX} Linker: ${LD} Source code location: `pwd` Install path: ${prefix} CFLAGS: ${ac_adolc_cflags} CXXFLAGS: ${ac_adolc_cxxflags} Use ADOL-C debug mode: ${adolc_debug} Use ADOL-C hard debug mode: ${adolc_harddebug} Zero value in adouble default ctor: ${adolc_stdczero}" if [[ "x${ac_adolc_openmpflag}" != "x" ]] ; then echo \ " Access thread number via errno: ${adolc_tserrno}" fi echo \ " Use ADOL-C safe extern mode: ${adolc_safe_extern} Build sparse drivers: ${sparse} Build with ColPack: ${have_colpack}" if test x$sparse = xyes && test x$have_colpack = xno; then echo -e \ " \033@<:@1;31mCompressed sparse structures will not be available Only sparsity patterns can be computed\033@<:@0m" warn=true fi echo echo \ " Build documented examples: ${docexa} Build additional examples: ${addexa} See ADOL-C/src/config.h for further configuration information. -----------------------------------------------------------------------------" # check for make install problems resulting from missing write permission pdir=${prefix} writable=true while test "x${pdir}" != "x/" ; do if test -e ${pdir} && test ! -w ${pdir}; then writable=false break elif test ! -e ${pdir} ; then pdir=`dirname ${pdir}` else break fi done if test "x${pdir}" == "x/" ; then writable=false fi if ! ${writable} ; then echo -e \ " \033@<:@1;31mPrefix ${prefix} not writable please run ./configure --prefix=DIR with a writable directory path otherwise administrator privilages will be required to run \`make install'\033@<:@0m" warn=true fi case ${prefix} in ${HOME}|${HOME}/*) if $warn ; then for (( i=5; i>0; i-- )); do echo -ne "\rPlease read the above messages carefully, continuing in ${i} seconds" sleep 1 done echo -e "\rPlease read the above messages carefully " fi echo \ " ***************************************************************************** To successfully compile and run programs using the ADOL-C shared library do the following things: compiling: * add \"-I${prefix}/include\" to your compiler call linking: * add \"-L${prefix}/${_lib} -ladolc\" to your linker call * extend your linker call by \"-Wl,--rpath -Wl,${prefix}/${_lib}\" (if you wish to skip the point \"executing\") executing (do one of the following things): * add ${prefix}/${_lib} to your LD_LIBRARY_PATH variable * ask your system administrator for adding ${prefix}/${_lib} to the global file containing library search paths (/etc/ld.so.conf) (or use the static library by replacing \"-L${prefix}/${_lib} -ladolc\" with \"${prefix}/${_lib}/libadolc.a\" when linking) See README for instructions on how to change to a nonlocal installation! ***************************************************************************** " ;; esac ADOL-C-2.4.1/MSVisualStudio/0000755000076600007660000000000012120272603013761 5ustar coincoinADOL-C-2.4.1/MSVisualStudio/v10/0000755000076600007660000000000012120272603014367 5ustar coincoinADOL-C-2.4.1/MSVisualStudio/v10/installer.sh0000755000076600007660000000337312101744427016740 0ustar coincoin#!/bin/bash -x INCFILES=(adolc.h adolc_settings.h adalloc.h adouble.h adutils.h \ adutilsc.h advector.h \ common.h convolut.h dvlparms.h fortutils.h \ interfaces.h taping.h usrparms.h \ externfcts.h checkpointing.h fixpoint.h \ adolc_sparse.h adolc_openmp.h \ revolve.h) INCFILES_SPARSE=(sparsedrivers.h sparse_fo_rev.h) INCFILES_DRIVERS=(drivers.h odedrivers.h taylor.h) INCFILES_TAPEDOC=(tapedoc.h) if [[ $# < 1 ]]; then echo "usage: installer.sh config [arch]" echo "where config is sparse|nosparse" echo "and arch is optionally Win32 or x64" echo "if omitted arch defaults to Win32" exit 0 fi if [[ $# > 1 ]]; then case $2 in win32|Win32) conf=$1 arch=. cf=$1_win32 suffix=x86 ;; x64) conf=x64/$1 arch=x64 cf=$1_x64 suffix=x64 ;; esac else conf=$1 arch=. cf=$1_win32 suffix=x86 fi mkdir -p tmp mkdir -p tmp/include/adolc mkdir -p tmp/lib mkdir -p tmp/bin mkdir -p tmp/doc mkdir -p tmp/include/adolc/sparse mkdir -p tmp/include/adolc/drivers mkdir -p tmp/include/adolc/tapedoc for i in ${INCFILES[*]} ; do cp ../../ADOL-C/include/adolc/$i tmp/include/adolc done for i in ${INCFILES_SPARSE[*]} ; do cp ../../ADOL-C/include/adolc/sparse/$i tmp/include/adolc/sparse done for i in ${INCFILES_DRIVERS[*]} ; do cp ../../ADOL-C/include/adolc/drivers/$i tmp/include/adolc/drivers done for i in ${INCFILES_TAPEDOC[*]} ; do cp ../../ADOL-C/include/adolc/tapedoc/$i tmp/include/adolc/tapedoc done cp $conf/adolc.dll tmp/bin cp $conf/adolc.lib tmp/lib cp ../../ADOL-C/doc/* tmp/doc cp $arch/vcredist_$suffix.exe tmp/ echo "@echo off" > tmp/setup.bat echo "vcredist_${suffix}.exe" >> tmp/setup.bat cd tmp zip -r ../adolc_$cf.zip ./ cd .. rm -rf tmp ADOL-C-2.4.1/MSVisualStudio/v10/adolc.vcxproj0000644000076600007660000003577212120122237017101 0ustar coincoin nosparse Win32 nosparse x64 sparse Win32 sparse x64 Win32Proj DynamicLibrary false DynamicLibrary false DynamicLibrary false DynamicLibrary false true true true true WIN32;NDEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;ADOLC_DLL;ADOLC_INTERNAL=1;HAVE_CONFIG_H;%(PreprocessorDefinitions) $(IntDir);$(ProjectDir)\ColPack\$(IntDir)\include;$(ProjectDir)..\..\ADOL-C\include;$(ProjectDir)..\..\ADOL-C\src;%(AdditionalIncludeDirectories) MultiThreadedDLL Level3 ProgramDatabase MachineX86 true Windows true true $(IntDir);%(AdditionalLibraryDirectories) ColPack.lib;%(AdditionalDependencies) if exist $(ProjectDir)..\..\ADOL-C\src\config.h del /q $(ProjectDir)..\..\ADOL-C\src\config.h WIN64;NDEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;ADOLC_DLL;ADOLC_INTERNAL=1;HAVE_CONFIG_H;%(PreprocessorDefinitions) $(IntDir);$(ProjectDir)\ColPack\$(IntDir)\include;$(ProjectDir)..\..\ADOL-C\include;$(ProjectDir)..\..\ADOL-C\src;%(AdditionalIncludeDirectories) MultiThreadedDLL Level3 ProgramDatabase true Windows true true $(IntDir);%(AdditionalLibraryDirectories) ColPack.lib;%(AdditionalDependencies) if exist $(ProjectDir)..\..\ADOL-C\src\config.h del /q $(ProjectDir)..\..\ADOL-C\src\config.h WIN32;NDEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;ADOLC_DLL;ADOLC_INTERNAL=1;HAVE_CONFIG_H;%(PreprocessorDefinitions) $(IntDir);$(ProjectDir)..\..\ADOL-C\include;$(ProjectDir)..\..\ADOL-C\src;%(AdditionalIncludeDirectories) MultiThreadedDLL Level3 ProgramDatabase MachineX86 true Windows true true if exist $(ProjectDir)..\..\ADOL-C\src\config.h del /q $(ProjectDir)..\..\ADOL-C\src\config.h WIN64;NDEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;ADOLC_DLL;ADOLC_INTERNAL=1;HAVE_CONFIG_H;%(PreprocessorDefinitions) $(IntDir);$(ProjectDir)..\..\ADOL-C\include;$(ProjectDir)..\..\ADOL-C\src;%(AdditionalIncludeDirectories) MultiThreadedDLL Level3 ProgramDatabase true Windows true true if exist $(ProjectDir)..\..\ADOL-C\src\config.h del /q $(ProjectDir)..\..\ADOL-C\src\config.h ADOL-C-2.4.1/MSVisualStudio/v10/x64/0000755000076600007660000000000012120272603015010 5ustar coincoinADOL-C-2.4.1/MSVisualStudio/v10/x64/nosparse/0000755000076600007660000000000012120272603016642 5ustar coincoinADOL-C-2.4.1/MSVisualStudio/v10/x64/nosparse/config.h0000644000076600007660000001101712120123050020247 0ustar coincoin/* ADOL-C/src/config.h. Generated from config.h.in by configure. */ /* ADOL-C/src/config.h.in. Generated from configure.ac by autoheader. */ /* ADOL-C adouble zeroing mode */ #define ADOLC_ADOUBLE_STDCZERO 1 /* ADOL-C debug mode */ /* #undef ADOLC_DEBUG */ /* ADOL-C hard debug mode */ /* #undef ADOLC_HARDDEBUG */ /* ADOL-C Patchlevel */ #define ADOLC_PATCHLEVEL 1 /* ADOL-C Subversion */ #define ADOLC_SUBVERSION 4 /* ADOL-C thread save errno mode */ /* #undef ADOLC_THREADSAVE_ERRNO */ /* Use calloc instead of malloc for memory allocation */ #define ADOLC_USE_CALLOC 1 /* ADOL-C Version */ #define ADOLC_VERSION 2 /* Define to 1 if you have the header file. */ #define HAVE_DLFCN_H 1 /* Define to 1 if you have the `floor' function. */ #define HAVE_FLOOR 1 /* Define to 1 if you have the `fmax' function. */ #define HAVE_FMAX 1 /* Define to 1 if you have the `fmin' function. */ #define HAVE_FMIN 1 /* Define to 1 if you have the `ftime' function. */ #define HAVE_FTIME 1 /* Define to 1 if you have the header file. */ #define HAVE_INTTYPES_H 1 /* Define 1 if ColPack is available */ /* #undef HAVE_LIBCOLPACK */ /* Define to 1 if your system has a GNU libc compatible `malloc' function, and to 0 otherwise. */ #define HAVE_MALLOC 0 /* Define to 1 if you have the header file. */ #define HAVE_MEMORY_H 1 /* Define to 1 if you have the `pow' function. */ #define HAVE_POW 1 /* Define to 1 if your system has a GNU libc compatible `realloc' function, and to 0 otherwise. */ #define HAVE_REALLOC 0 /* Define to 1 if you have the `sqrt' function. */ #define HAVE_SQRT 1 /* Define to 1 if stdbool.h conforms to C99. */ #define HAVE_STDBOOL_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDDEF_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDINT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDIO_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDLIB_H 1 /* Define to 1 if you have the `strchr' function. */ #define HAVE_STRCHR 1 /* Define to 1 if you have the header file. */ #define HAVE_STRINGS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRING_H 1 /* Define to 1 if you have the `strtol' function. */ #define HAVE_STRTOL 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_STAT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TIMEB_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have the `trunc' function. */ /* #undef HAVE_TRUNC */ /* Define to 1 if you have the header file. */ /* #undef HAVE_UNISTD_H */ /* Define to 1 if the system has the type `_Bool'. */ #define HAVE__BOOL 1 /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #define LT_OBJDIR ".libs/" /* Name of package */ #define PACKAGE "adolc" /* Define to the address where bug reports for this package should be sent. */ #define PACKAGE_BUGREPORT "adol-c@list.coin-or.org" /* Define to the full name of this package. */ #define PACKAGE_NAME "adolc" /* Define to the full name and version of this package. */ #define PACKAGE_STRING "adolc 2.4.1" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "adolc" /* Define to the home page for this package. */ #define PACKAGE_URL "" /* Define to the version of this package. */ #define PACKAGE_VERSION "2.4.1" /* The size of `void *', as computed by sizeof. */ #define SIZEOF_VOID_P 8 /* Define 1 if sparse derivative propagation is to be enabled */ /* #undef SPARSE */ /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Define to 1 if you can safely include both and . */ #define TIME_WITH_SYS_TIME 1 /* Define to 1 if your declares `struct tm'. */ /* #undef TM_IN_SYS_TIME */ /* Version number of package */ #define VERSION "2.4.1" /* Define to empty if `const' does not conform to ANSI C. */ /* #undef const */ /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus /* #undef inline */ #endif /* Define to rpl_malloc if the replacement function should be used. */ #define malloc rpl_malloc /* Define to rpl_realloc if the replacement function should be used. */ #define realloc rpl_realloc /* Define to `unsigned int' if does not define. */ /* #undef size_t */ ADOL-C-2.4.1/MSVisualStudio/v10/x64/nosparse/config.h.in0000644000076600007660000001116612120122237020667 0ustar coincoin/* ADOL-C/src/config.h. Generated from config.h.in by configure. */ /* ADOL-C/src/config.h.in. Generated from configure.ac by autoheader. */ /* ADOL-C adouble zeroing mode */ #define ADOLC_ADOUBLE_STDCZERO 1 /* ADOL-C debug mode */ /* #undef ADOLC_DEBUG */ /* ADOL-C hard debug mode */ /* #undef ADOLC_HARDDEBUG */ /* ADOL-C Patchlevel */ #define ADOLC_PATCHLEVEL @ADOLC_PATCHLEVEL@ /* ADOL-C Subversion */ #define ADOLC_SUBVERSION @ADOLC_SUBVERSION@ /* ADOL-C thread save errno mode */ /* #undef ADOLC_THREADSAVE_ERRNO */ /* Use calloc instead of malloc for memory allocation */ #define ADOLC_USE_CALLOC 1 /* ADOL-C Version */ #define ADOLC_VERSION @ADOLC_VERSION@ /* Define to 1 if you have the header file. */ #define HAVE_DLFCN_H 1 /* Define to 1 if you have the `floor' function. */ #define HAVE_FLOOR 1 /* Define to 1 if you have the `fmax' function. */ #define HAVE_FMAX 1 /* Define to 1 if you have the `fmin' function. */ #define HAVE_FMIN 1 /* Define to 1 if you have the `ftime' function. */ #define HAVE_FTIME 1 /* Define to 1 if you have the header file. */ #define HAVE_INTTYPES_H 1 /* Define 1 if ColPack is available */ /* #undef HAVE_LIBCOLPACK */ /* Define to 1 if your system has a GNU libc compatible `malloc' function, and to 0 otherwise. */ #define HAVE_MALLOC 0 /* Define to 1 if you have the header file. */ #define HAVE_MEMORY_H 1 /* Define to 1 if you have the `pow' function. */ #define HAVE_POW 1 /* Define to 1 if your system has a GNU libc compatible `realloc' function, and to 0 otherwise. */ #define HAVE_REALLOC 0 /* Define to 1 if you have the `sqrt' function. */ #define HAVE_SQRT 1 /* Define to 1 if stdbool.h conforms to C99. */ #define HAVE_STDBOOL_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDDEF_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDINT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDIO_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDLIB_H 1 /* Define to 1 if you have the `strchr' function. */ #define HAVE_STRCHR 1 /* Define to 1 if you have the header file. */ #define HAVE_STRINGS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRING_H 1 /* Define to 1 if you have the `strtol' function. */ #define HAVE_STRTOL 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_STAT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TIMEB_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have the `trunc' function. */ /* #undef HAVE_TRUNC */ /* Define to 1 if you have the header file. */ /* #undef HAVE_UNISTD_H */ /* Define to 1 if the system has the type `_Bool'. */ #define HAVE__BOOL 1 /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #define LT_OBJDIR ".libs/" /* Name of package */ #define PACKAGE "@PACKAGE@" /* Define to the address where bug reports for this package should be sent. */ #define PACKAGE_BUGREPORT "@PACKAGE_BUGREPORT@" /* Define to the full name of this package. */ #define PACKAGE_NAME "@PACKAGE_NAME@" /* Define to the full name and version of this package. */ #define PACKAGE_STRING "@PACKAGE_STRING@" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "@PACKAGE_TARNAME@" /* Define to the home page for this package. */ #define PACKAGE_URL "@PACKAGE_URL@" /* Define to the version of this package. */ #define PACKAGE_VERSION "@PACKAGE_VERSION@" /* The size of `void *', as computed by sizeof. */ #define SIZEOF_VOID_P 8 /* Define 1 if sparse derivative propagation is to be enabled */ /* #undef SPARSE */ /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Define to 1 if you can safely include both and . */ #define TIME_WITH_SYS_TIME 1 /* Define to 1 if your declares `struct tm'. */ /* #undef TM_IN_SYS_TIME */ /* Version number of package */ #define VERSION "@VERSION@" /* Define to empty if `const' does not conform to ANSI C. */ /* #undef const */ /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus /* #undef inline */ #endif /* Define to rpl_malloc if the replacement function should be used. */ #define malloc rpl_malloc /* Define to rpl_realloc if the replacement function should be used. */ #define realloc rpl_realloc /* Define to `unsigned int' if does not define. */ /* #undef size_t */ ADOL-C-2.4.1/MSVisualStudio/v10/x64/sparse/0000755000076600007660000000000012120272603016305 5ustar coincoinADOL-C-2.4.1/MSVisualStudio/v10/x64/sparse/config.h0000644000076600007660000001101112120123050017704 0ustar coincoin/* ADOL-C/src/config.h. Generated from config.h.in by configure. */ /* ADOL-C/src/config.h.in. Generated from configure.ac by autoheader. */ /* ADOL-C adouble zeroing mode */ #define ADOLC_ADOUBLE_STDCZERO 1 /* ADOL-C debug mode */ /* #undef ADOLC_DEBUG */ /* ADOL-C hard debug mode */ /* #undef ADOLC_HARDDEBUG */ /* ADOL-C Patchlevel */ #define ADOLC_PATCHLEVEL 1 /* ADOL-C Subversion */ #define ADOLC_SUBVERSION 4 /* ADOL-C thread save errno mode */ /* #undef ADOLC_THREADSAVE_ERRNO */ /* Use calloc instead of malloc for memory allocation */ #define ADOLC_USE_CALLOC 1 /* ADOL-C Version */ #define ADOLC_VERSION 2 /* Define to 1 if you have the header file. */ #define HAVE_DLFCN_H 1 /* Define to 1 if you have the `floor' function. */ #define HAVE_FLOOR 1 /* Define to 1 if you have the `fmax' function. */ #define HAVE_FMAX 1 /* Define to 1 if you have the `fmin' function. */ #define HAVE_FMIN 1 /* Define to 1 if you have the `ftime' function. */ #define HAVE_FTIME 1 /* Define to 1 if you have the header file. */ #define HAVE_INTTYPES_H 1 /* Define 1 if ColPack is available */ #define HAVE_LIBCOLPACK 1 /* Define to 1 if your system has a GNU libc compatible `malloc' function, and to 0 otherwise. */ #define HAVE_MALLOC 0 /* Define to 1 if you have the header file. */ #define HAVE_MEMORY_H 1 /* Define to 1 if you have the `pow' function. */ #define HAVE_POW 1 /* Define to 1 if your system has a GNU libc compatible `realloc' function, and to 0 otherwise. */ #define HAVE_REALLOC 0 /* Define to 1 if you have the `sqrt' function. */ #define HAVE_SQRT 1 /* Define to 1 if stdbool.h conforms to C99. */ #define HAVE_STDBOOL_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDDEF_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDINT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDIO_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDLIB_H 1 /* Define to 1 if you have the `strchr' function. */ #define HAVE_STRCHR 1 /* Define to 1 if you have the header file. */ #define HAVE_STRINGS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRING_H 1 /* Define to 1 if you have the `strtol' function. */ #define HAVE_STRTOL 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_STAT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TIMEB_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have the `trunc' function. */ /* #undef HAVE_TRUNC */ /* Define to 1 if you have the header file. */ /* #undef HAVE_UNISTD_H */ /* Define to 1 if the system has the type `_Bool'. */ #define HAVE__BOOL 1 /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #define LT_OBJDIR ".libs/" /* Name of package */ #define PACKAGE "adolc" /* Define to the address where bug reports for this package should be sent. */ #define PACKAGE_BUGREPORT "adol-c@list.coin-or.org" /* Define to the full name of this package. */ #define PACKAGE_NAME "adolc" /* Define to the full name and version of this package. */ #define PACKAGE_STRING "adolc 2.4.1" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "adolc" /* Define to the home page for this package. */ #define PACKAGE_URL "" /* Define to the version of this package. */ #define PACKAGE_VERSION "2.4.1" /* The size of `void *', as computed by sizeof. */ #define SIZEOF_VOID_P 8 /* Define 1 if sparse derivative propagation is to be enabled */ #define SPARSE 1 /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Define to 1 if you can safely include both and . */ #define TIME_WITH_SYS_TIME 1 /* Define to 1 if your declares `struct tm'. */ /* #undef TM_IN_SYS_TIME */ /* Version number of package */ #define VERSION "2.4.1" /* Define to empty if `const' does not conform to ANSI C. */ /* #undef const */ /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus /* #undef inline */ #endif /* Define to rpl_malloc if the replacement function should be used. */ #define malloc rpl_malloc /* Define to rpl_realloc if the replacement function should be used. */ #define realloc rpl_realloc /* Define to `unsigned int' if does not define. */ /* #undef size_t */ ADOL-C-2.4.1/MSVisualStudio/v10/x64/sparse/config.h.in0000644000076600007660000001116012120122237020324 0ustar coincoin/* ADOL-C/src/config.h. Generated from config.h.in by configure. */ /* ADOL-C/src/config.h.in. Generated from configure.ac by autoheader. */ /* ADOL-C adouble zeroing mode */ #define ADOLC_ADOUBLE_STDCZERO 1 /* ADOL-C debug mode */ /* #undef ADOLC_DEBUG */ /* ADOL-C hard debug mode */ /* #undef ADOLC_HARDDEBUG */ /* ADOL-C Patchlevel */ #define ADOLC_PATCHLEVEL @ADOLC_PATCHLEVEL@ /* ADOL-C Subversion */ #define ADOLC_SUBVERSION @ADOLC_SUBVERSION@ /* ADOL-C thread save errno mode */ /* #undef ADOLC_THREADSAVE_ERRNO */ /* Use calloc instead of malloc for memory allocation */ #define ADOLC_USE_CALLOC 1 /* ADOL-C Version */ #define ADOLC_VERSION @ADOLC_VERSION@ /* Define to 1 if you have the header file. */ #define HAVE_DLFCN_H 1 /* Define to 1 if you have the `floor' function. */ #define HAVE_FLOOR 1 /* Define to 1 if you have the `fmax' function. */ #define HAVE_FMAX 1 /* Define to 1 if you have the `fmin' function. */ #define HAVE_FMIN 1 /* Define to 1 if you have the `ftime' function. */ #define HAVE_FTIME 1 /* Define to 1 if you have the header file. */ #define HAVE_INTTYPES_H 1 /* Define 1 if ColPack is available */ #define HAVE_LIBCOLPACK 1 /* Define to 1 if your system has a GNU libc compatible `malloc' function, and to 0 otherwise. */ #define HAVE_MALLOC 0 /* Define to 1 if you have the header file. */ #define HAVE_MEMORY_H 1 /* Define to 1 if you have the `pow' function. */ #define HAVE_POW 1 /* Define to 1 if your system has a GNU libc compatible `realloc' function, and to 0 otherwise. */ #define HAVE_REALLOC 0 /* Define to 1 if you have the `sqrt' function. */ #define HAVE_SQRT 1 /* Define to 1 if stdbool.h conforms to C99. */ #define HAVE_STDBOOL_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDDEF_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDINT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDIO_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDLIB_H 1 /* Define to 1 if you have the `strchr' function. */ #define HAVE_STRCHR 1 /* Define to 1 if you have the header file. */ #define HAVE_STRINGS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRING_H 1 /* Define to 1 if you have the `strtol' function. */ #define HAVE_STRTOL 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_STAT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TIMEB_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have the `trunc' function. */ /* #undef HAVE_TRUNC */ /* Define to 1 if you have the header file. */ /* #undef HAVE_UNISTD_H */ /* Define to 1 if the system has the type `_Bool'. */ #define HAVE__BOOL 1 /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #define LT_OBJDIR ".libs/" /* Name of package */ #define PACKAGE "@PACKAGE@" /* Define to the address where bug reports for this package should be sent. */ #define PACKAGE_BUGREPORT "@PACKAGE_BUGREPORT@" /* Define to the full name of this package. */ #define PACKAGE_NAME "@PACKAGE_NAME@" /* Define to the full name and version of this package. */ #define PACKAGE_STRING "@PACKAGE_STRING@" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "@PACKAGE_TARNAME@" /* Define to the home page for this package. */ #define PACKAGE_URL "@PACKAGE_URL@" /* Define to the version of this package. */ #define PACKAGE_VERSION "@PACKAGE_VERSION@" /* The size of `void *', as computed by sizeof. */ #define SIZEOF_VOID_P 8 /* Define 1 if sparse derivative propagation is to be enabled */ #define SPARSE 1 /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Define to 1 if you can safely include both and . */ #define TIME_WITH_SYS_TIME 1 /* Define to 1 if your declares `struct tm'. */ /* #undef TM_IN_SYS_TIME */ /* Version number of package */ #define VERSION "@VERSION@" /* Define to empty if `const' does not conform to ANSI C. */ /* #undef const */ /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus /* #undef inline */ #endif /* Define to rpl_malloc if the replacement function should be used. */ #define malloc rpl_malloc /* Define to rpl_realloc if the replacement function should be used. */ #define realloc rpl_realloc /* Define to `unsigned int' if does not define. */ /* #undef size_t */ ADOL-C-2.4.1/MSVisualStudio/v10/ColPack.vcxproj0000644000076600007660000002423011732412364017331 0ustar coincoin sparse Win32 sparse x64 Win32Proj StaticLibrary false StaticLibrary false StaticLibrary StaticLibrary true Build true Build WIN32;NDEBUG;_WINDOWS;_USRDLL;COLPACK_EXPORTS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase Recovery;GraphColoring;Main;Utilities;BipartiteGraphPartialColoring;BipartiteGraphBicoloring;%(AdditionalIncludeDirectories) MachineX86 true Windows true true mkdir "$(IntDir)\include" & mkdir "$(IntDir)\include\ColPack" & copy "Main\*.h" "$(IntDir)\include\ColPack" & copy "Utilities\*.h" "$(IntDir)\include\ColPack" & copy "GraphColoring\*.h" "$(IntDir)\include\ColPack" & copy "BipartiteGraphBicoloring\*.h" "$(IntDir)\include\ColPack" & copy "BipartiteGraphPartialColoring\*.h" "$(IntDir)\include\ColPack" & copy "Recovery\*.h" "$(IntDir)\include\ColPack" $(IntDir)\include\ColPack\ColPackHeaders.h;%(Outputs) WIN64;NDEBUG;_WINDOWS;_USRDLL;COLPACK_EXPORTS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase Recovery;GraphColoring;Main;Utilities;BipartiteGraphPartialColoring;BipartiteGraphBicoloring;%(AdditionalIncludeDirectories) true Windows true true mkdir "$(IntDir)\include" & mkdir "$(IntDir)\include\ColPack" & copy "Main\*.h" "$(IntDir)\include\ColPack" & copy "Utilities\*.h" "$(IntDir)\include\ColPack" & copy "GraphColoring\*.h" "$(IntDir)\include\ColPack" & copy "BipartiteGraphBicoloring\*.h" "$(IntDir)\include\ColPack" & copy "BipartiteGraphPartialColoring\*.h" "$(IntDir)\include\ColPack" & copy "Recovery\*.h" "$(IntDir)\include\ColPack" $(IntDir)\include\ColPack\ColPackHeaders.h;%(Outputs) Recovery;GraphColoring;Main;Utilities;BipartiteGraphPartialColoing;BipartiteGraphBicoloring;%(AdditionalIncludeDirectories) Recovery;GraphColoring;Main;Utilities;BipartiteGraphPartialColoing;BipartiteGraphBicoloring;%(AdditionalIncludeDirectories) ADOL-C-2.4.1/MSVisualStudio/v10/nosparse/0000755000076600007660000000000012120272603016221 5ustar coincoinADOL-C-2.4.1/MSVisualStudio/v10/nosparse/config.h0000644000076600007660000001101712120123050017626 0ustar coincoin/* ADOL-C/src/config.h. Generated from config.h.in by configure. */ /* ADOL-C/src/config.h.in. Generated from configure.ac by autoheader. */ /* ADOL-C adouble zeroing mode */ #define ADOLC_ADOUBLE_STDCZERO 1 /* ADOL-C debug mode */ /* #undef ADOLC_DEBUG */ /* ADOL-C hard debug mode */ /* #undef ADOLC_HARDDEBUG */ /* ADOL-C Patchlevel */ #define ADOLC_PATCHLEVEL 1 /* ADOL-C Subversion */ #define ADOLC_SUBVERSION 4 /* ADOL-C thread save errno mode */ /* #undef ADOLC_THREADSAVE_ERRNO */ /* Use calloc instead of malloc for memory allocation */ #define ADOLC_USE_CALLOC 1 /* ADOL-C Version */ #define ADOLC_VERSION 2 /* Define to 1 if you have the header file. */ #define HAVE_DLFCN_H 1 /* Define to 1 if you have the `floor' function. */ #define HAVE_FLOOR 1 /* Define to 1 if you have the `fmax' function. */ #define HAVE_FMAX 1 /* Define to 1 if you have the `fmin' function. */ #define HAVE_FMIN 1 /* Define to 1 if you have the `ftime' function. */ #define HAVE_FTIME 1 /* Define to 1 if you have the header file. */ #define HAVE_INTTYPES_H 1 /* Define 1 if ColPack is available */ /* #undef HAVE_LIBCOLPACK */ /* Define to 1 if your system has a GNU libc compatible `malloc' function, and to 0 otherwise. */ #define HAVE_MALLOC 0 /* Define to 1 if you have the header file. */ #define HAVE_MEMORY_H 1 /* Define to 1 if you have the `pow' function. */ #define HAVE_POW 1 /* Define to 1 if your system has a GNU libc compatible `realloc' function, and to 0 otherwise. */ #define HAVE_REALLOC 0 /* Define to 1 if you have the `sqrt' function. */ #define HAVE_SQRT 1 /* Define to 1 if stdbool.h conforms to C99. */ #define HAVE_STDBOOL_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDDEF_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDINT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDIO_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDLIB_H 1 /* Define to 1 if you have the `strchr' function. */ #define HAVE_STRCHR 1 /* Define to 1 if you have the header file. */ #define HAVE_STRINGS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRING_H 1 /* Define to 1 if you have the `strtol' function. */ #define HAVE_STRTOL 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_STAT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TIMEB_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have the `trunc' function. */ /* #undef HAVE_TRUNC */ /* Define to 1 if you have the header file. */ /* #undef HAVE_UNISTD_H */ /* Define to 1 if the system has the type `_Bool'. */ #define HAVE__BOOL 1 /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #define LT_OBJDIR ".libs/" /* Name of package */ #define PACKAGE "adolc" /* Define to the address where bug reports for this package should be sent. */ #define PACKAGE_BUGREPORT "adol-c@list.coin-or.org" /* Define to the full name of this package. */ #define PACKAGE_NAME "adolc" /* Define to the full name and version of this package. */ #define PACKAGE_STRING "adolc 2.4.1" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "adolc" /* Define to the home page for this package. */ #define PACKAGE_URL "" /* Define to the version of this package. */ #define PACKAGE_VERSION "2.4.1" /* The size of `void *', as computed by sizeof. */ #define SIZEOF_VOID_P 4 /* Define 1 if sparse derivative propagation is to be enabled */ /* #undef SPARSE */ /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Define to 1 if you can safely include both and . */ #define TIME_WITH_SYS_TIME 1 /* Define to 1 if your declares `struct tm'. */ /* #undef TM_IN_SYS_TIME */ /* Version number of package */ #define VERSION "2.4.1" /* Define to empty if `const' does not conform to ANSI C. */ /* #undef const */ /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus /* #undef inline */ #endif /* Define to rpl_malloc if the replacement function should be used. */ #define malloc rpl_malloc /* Define to rpl_realloc if the replacement function should be used. */ #define realloc rpl_realloc /* Define to `unsigned int' if does not define. */ /* #undef size_t */ ADOL-C-2.4.1/MSVisualStudio/v10/nosparse/config.h.in0000644000076600007660000001116612120122237020246 0ustar coincoin/* ADOL-C/src/config.h. Generated from config.h.in by configure. */ /* ADOL-C/src/config.h.in. Generated from configure.ac by autoheader. */ /* ADOL-C adouble zeroing mode */ #define ADOLC_ADOUBLE_STDCZERO 1 /* ADOL-C debug mode */ /* #undef ADOLC_DEBUG */ /* ADOL-C hard debug mode */ /* #undef ADOLC_HARDDEBUG */ /* ADOL-C Patchlevel */ #define ADOLC_PATCHLEVEL @ADOLC_PATCHLEVEL@ /* ADOL-C Subversion */ #define ADOLC_SUBVERSION @ADOLC_SUBVERSION@ /* ADOL-C thread save errno mode */ /* #undef ADOLC_THREADSAVE_ERRNO */ /* Use calloc instead of malloc for memory allocation */ #define ADOLC_USE_CALLOC 1 /* ADOL-C Version */ #define ADOLC_VERSION @ADOLC_VERSION@ /* Define to 1 if you have the header file. */ #define HAVE_DLFCN_H 1 /* Define to 1 if you have the `floor' function. */ #define HAVE_FLOOR 1 /* Define to 1 if you have the `fmax' function. */ #define HAVE_FMAX 1 /* Define to 1 if you have the `fmin' function. */ #define HAVE_FMIN 1 /* Define to 1 if you have the `ftime' function. */ #define HAVE_FTIME 1 /* Define to 1 if you have the header file. */ #define HAVE_INTTYPES_H 1 /* Define 1 if ColPack is available */ /* #undef HAVE_LIBCOLPACK */ /* Define to 1 if your system has a GNU libc compatible `malloc' function, and to 0 otherwise. */ #define HAVE_MALLOC 0 /* Define to 1 if you have the header file. */ #define HAVE_MEMORY_H 1 /* Define to 1 if you have the `pow' function. */ #define HAVE_POW 1 /* Define to 1 if your system has a GNU libc compatible `realloc' function, and to 0 otherwise. */ #define HAVE_REALLOC 0 /* Define to 1 if you have the `sqrt' function. */ #define HAVE_SQRT 1 /* Define to 1 if stdbool.h conforms to C99. */ #define HAVE_STDBOOL_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDDEF_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDINT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDIO_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDLIB_H 1 /* Define to 1 if you have the `strchr' function. */ #define HAVE_STRCHR 1 /* Define to 1 if you have the header file. */ #define HAVE_STRINGS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRING_H 1 /* Define to 1 if you have the `strtol' function. */ #define HAVE_STRTOL 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_STAT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TIMEB_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have the `trunc' function. */ /* #undef HAVE_TRUNC */ /* Define to 1 if you have the header file. */ /* #undef HAVE_UNISTD_H */ /* Define to 1 if the system has the type `_Bool'. */ #define HAVE__BOOL 1 /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #define LT_OBJDIR ".libs/" /* Name of package */ #define PACKAGE "@PACKAGE@" /* Define to the address where bug reports for this package should be sent. */ #define PACKAGE_BUGREPORT "@PACKAGE_BUGREPORT@" /* Define to the full name of this package. */ #define PACKAGE_NAME "@PACKAGE_NAME@" /* Define to the full name and version of this package. */ #define PACKAGE_STRING "@PACKAGE_STRING@" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "@PACKAGE_TARNAME@" /* Define to the home page for this package. */ #define PACKAGE_URL "@PACKAGE_URL@" /* Define to the version of this package. */ #define PACKAGE_VERSION "@PACKAGE_VERSION@" /* The size of `void *', as computed by sizeof. */ #define SIZEOF_VOID_P 4 /* Define 1 if sparse derivative propagation is to be enabled */ /* #undef SPARSE */ /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Define to 1 if you can safely include both and . */ #define TIME_WITH_SYS_TIME 1 /* Define to 1 if your declares `struct tm'. */ /* #undef TM_IN_SYS_TIME */ /* Version number of package */ #define VERSION "@VERSION@" /* Define to empty if `const' does not conform to ANSI C. */ /* #undef const */ /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus /* #undef inline */ #endif /* Define to rpl_malloc if the replacement function should be used. */ #define malloc rpl_malloc /* Define to rpl_realloc if the replacement function should be used. */ #define realloc rpl_realloc /* Define to `unsigned int' if does not define. */ /* #undef size_t */ ADOL-C-2.4.1/MSVisualStudio/v10/Readme_VC++.txt0000644000076600007660000000220211732400733017044 0ustar coincoinThe solution and project files were generated on Visual Studio 2010 Ultimate. Compatibility with older versions is not guarenteed. Before adolc may be built using Visual studio the following step must be taken: - Create a symbolic link ADOL-C\adolc pointing to ADOL-C\src Under Windows Vista/Windows 7/Windows 2008 Server use the mklink command cd ADOL-C mklink /j src adolc Under Windows XP/Windows 2003 Server use the junction command from Windows sysinternals suite: http://technet.microsoft.com/en-us/sysinternals/bb842062.aspx cd ADOL-C junction src adolc The solution file adolc.sln can build both the sparse as well as the nosparse versions of adolc.dll. In visual studio open this solution file and select the solution 'adolc' in the Solution Explorer, from the toolbar select the build configuration sparse or nosparse, then from the Build menu select Build Solution (shortcut key F7). In order to build the nosparse version nothing further is needed. For the sparse version the source code of ColPack must be extracted into this directory. Read the ColPack Readme_VC++.txt file for further instructions. ADOL-C-2.4.1/MSVisualStudio/v10/adolc.sln0000644000076600007660000000420111732412364016174 0ustar coincoin Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "adolc", "adolc.vcxproj", "{43459339-26DA-B162-0783-4ED235513520}" ProjectSection(ProjectDependencies) = postProject {C960E4D8-CE08-FDD2-02FD-6394A67739EA} = {C960E4D8-CE08-FDD2-02FD-6394A67739EA} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ColPack", "ColPack\ColPack.vcxproj", "{C960E4D8-CE08-FDD2-02FD-6394A67739EA}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution nosparse|Win32 = nosparse|Win32 nosparse|x64 = nosparse|x64 sparse|Win32 = sparse|Win32 sparse|x64 = sparse|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {43459339-26DA-B162-0783-4ED235513520}.nosparse|Win32.ActiveCfg = nosparse|Win32 {43459339-26DA-B162-0783-4ED235513520}.nosparse|Win32.Build.0 = nosparse|Win32 {43459339-26DA-B162-0783-4ED235513520}.nosparse|x64.ActiveCfg = nosparse|x64 {43459339-26DA-B162-0783-4ED235513520}.nosparse|x64.Build.0 = nosparse|x64 {43459339-26DA-B162-0783-4ED235513520}.sparse|Win32.ActiveCfg = sparse|Win32 {43459339-26DA-B162-0783-4ED235513520}.sparse|Win32.Build.0 = sparse|Win32 {43459339-26DA-B162-0783-4ED235513520}.sparse|x64.ActiveCfg = sparse|x64 {43459339-26DA-B162-0783-4ED235513520}.sparse|x64.Build.0 = sparse|x64 {C960E4D8-CE08-FDD2-02FD-6394A67739EA}.nosparse|Win32.ActiveCfg = sparse|Win32 {C960E4D8-CE08-FDD2-02FD-6394A67739EA}.nosparse|Win32.Build.0 = sparse|Win32 {C960E4D8-CE08-FDD2-02FD-6394A67739EA}.nosparse|x64.ActiveCfg = sparse|x64 {C960E4D8-CE08-FDD2-02FD-6394A67739EA}.nosparse|x64.Build.0 = sparse|x64 {C960E4D8-CE08-FDD2-02FD-6394A67739EA}.sparse|Win32.ActiveCfg = sparse|Win32 {C960E4D8-CE08-FDD2-02FD-6394A67739EA}.sparse|Win32.Build.0 = sparse|Win32 {C960E4D8-CE08-FDD2-02FD-6394A67739EA}.sparse|x64.ActiveCfg = sparse|x64 {C960E4D8-CE08-FDD2-02FD-6394A67739EA}.sparse|x64.Build.0 = sparse|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal ADOL-C-2.4.1/MSVisualStudio/v10/ColPack_Readme_VC++.txt0000644000076600007660000000141511732412364020450 0ustar coincoinThe complete steps are as follows 1. Unpack the ColPack sources tar -xzf ColPack-$VERSION.tar.gz or use your favourite extraction utility under windows. Rename the subdirectory to be simply ColPack. Then move the file ColPack.vcxproj into this subdirectory 2. In Visual Studio open the solution file adolc.sln select the solution 'adolc' in the Solution Explorer, rightclick and select Add -> Existing project and then choose the ColPack.vcxproj project from the ColPack subdirectory. Right click on adolc and select Project Dependencies and tick the check mark on ColPack. Then select from the toolbar select the build onfiguration sparse and from Build menu select Build Solution (shortcut F7). This will build ColPack and link it with the sparse version of adolc.dll ADOL-C-2.4.1/MSVisualStudio/v10/sparse/0000755000076600007660000000000012120272603015664 5ustar coincoinADOL-C-2.4.1/MSVisualStudio/v10/sparse/config.h0000644000076600007660000001101112120123050017263 0ustar coincoin/* ADOL-C/src/config.h. Generated from config.h.in by configure. */ /* ADOL-C/src/config.h.in. Generated from configure.ac by autoheader. */ /* ADOL-C adouble zeroing mode */ #define ADOLC_ADOUBLE_STDCZERO 1 /* ADOL-C debug mode */ /* #undef ADOLC_DEBUG */ /* ADOL-C hard debug mode */ /* #undef ADOLC_HARDDEBUG */ /* ADOL-C Patchlevel */ #define ADOLC_PATCHLEVEL 1 /* ADOL-C Subversion */ #define ADOLC_SUBVERSION 4 /* ADOL-C thread save errno mode */ /* #undef ADOLC_THREADSAVE_ERRNO */ /* Use calloc instead of malloc for memory allocation */ #define ADOLC_USE_CALLOC 1 /* ADOL-C Version */ #define ADOLC_VERSION 2 /* Define to 1 if you have the header file. */ #define HAVE_DLFCN_H 1 /* Define to 1 if you have the `floor' function. */ #define HAVE_FLOOR 1 /* Define to 1 if you have the `fmax' function. */ #define HAVE_FMAX 1 /* Define to 1 if you have the `fmin' function. */ #define HAVE_FMIN 1 /* Define to 1 if you have the `ftime' function. */ #define HAVE_FTIME 1 /* Define to 1 if you have the header file. */ #define HAVE_INTTYPES_H 1 /* Define 1 if ColPack is available */ #define HAVE_LIBCOLPACK 1 /* Define to 1 if your system has a GNU libc compatible `malloc' function, and to 0 otherwise. */ #define HAVE_MALLOC 0 /* Define to 1 if you have the header file. */ #define HAVE_MEMORY_H 1 /* Define to 1 if you have the `pow' function. */ #define HAVE_POW 1 /* Define to 1 if your system has a GNU libc compatible `realloc' function, and to 0 otherwise. */ #define HAVE_REALLOC 0 /* Define to 1 if you have the `sqrt' function. */ #define HAVE_SQRT 1 /* Define to 1 if stdbool.h conforms to C99. */ #define HAVE_STDBOOL_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDDEF_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDINT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDIO_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDLIB_H 1 /* Define to 1 if you have the `strchr' function. */ #define HAVE_STRCHR 1 /* Define to 1 if you have the header file. */ #define HAVE_STRINGS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRING_H 1 /* Define to 1 if you have the `strtol' function. */ #define HAVE_STRTOL 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_STAT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TIMEB_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have the `trunc' function. */ /* #undef HAVE_TRUNC */ /* Define to 1 if you have the header file. */ /* #undef HAVE_UNISTD_H */ /* Define to 1 if the system has the type `_Bool'. */ #define HAVE__BOOL 1 /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #define LT_OBJDIR ".libs/" /* Name of package */ #define PACKAGE "adolc" /* Define to the address where bug reports for this package should be sent. */ #define PACKAGE_BUGREPORT "adol-c@list.coin-or.org" /* Define to the full name of this package. */ #define PACKAGE_NAME "adolc" /* Define to the full name and version of this package. */ #define PACKAGE_STRING "adolc 2.4.1" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "adolc" /* Define to the home page for this package. */ #define PACKAGE_URL "" /* Define to the version of this package. */ #define PACKAGE_VERSION "2.4.1" /* The size of `void *', as computed by sizeof. */ #define SIZEOF_VOID_P 4 /* Define 1 if sparse derivative propagation is to be enabled */ #define SPARSE 1 /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Define to 1 if you can safely include both and . */ #define TIME_WITH_SYS_TIME 1 /* Define to 1 if your declares `struct tm'. */ /* #undef TM_IN_SYS_TIME */ /* Version number of package */ #define VERSION "2.4.1" /* Define to empty if `const' does not conform to ANSI C. */ /* #undef const */ /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus /* #undef inline */ #endif /* Define to rpl_malloc if the replacement function should be used. */ #define malloc rpl_malloc /* Define to rpl_realloc if the replacement function should be used. */ #define realloc rpl_realloc /* Define to `unsigned int' if does not define. */ /* #undef size_t */ ADOL-C-2.4.1/MSVisualStudio/v10/sparse/config.h.in0000644000076600007660000001115312120122237017705 0ustar coincoin/* ADOL-C/src/config.h. Generated from config.h.in by configure. */ /* ADOL-C/src/config.h.in. Generated from configure.ac by autoheader. */ /* ADOL-C adouble zeroing mode */ #define ADOLC_ADOUBLE_STDCZERO 1 /* ADOL-C debug mode */ /* #undef ADOLC_DEBUG */ /* ADOL-C hard debug mode */ /* #undef ADOLC_HARDDEBUG */ /* ADOL-C Patchlevel */ #define ADOLC_PATCHLEVEL @ADOLC_PATCHLEVEL@ /* ADOL-C Subversion */ #define ADOLC_SUBVERSION @ADOLC_SUBVERSION@ /* ADOL-C thread save errno mode */ /* #undef ADOLC_THREADSAVE_ERRNO */ /* Use calloc instead of malloc for memory allocation */ #define ADOLC_USE_CALLOC 1 /* ADOL-C Version */ #define ADOLC_VERSION @ADOLC_VERSION@ /* Define to 1 if you have the header file. */ #define HAVE_DLFCN_H 1 /* Define to 1 if you have the `floor' function. */ #define HAVE_FLOOR 1 /* Define to 1 if you have the `fmax' function. */ #define HAVE_FMAX 1 /* Define to 1 if you have the `fmin' function. */ #define HAVE_FMIN 1 /* Define to 1 if you have the `ftime' function. */ #define HAVE_FTIME 1 /* Define to 1 if you have the header file. */ #define HAVE_INTTYPES_H 1 /* Define 1 if ColPack is available */ #define HAVE_LIBCOLPACK 1 /* Define to 1 if your system has a GNU libc compatible `malloc' function, and to 0 otherwise. */ #define HAVE_MALLOC 0 /* Define to 1 if you have the header file. */ #define HAVE_MEMORY_H 1 /* Define to 1 if you have the `pow' function. */ #define HAVE_POW 1 /* Define to 1 if your system has a GNU libc compatible `realloc' function, and to 0 otherwise. */ #define HAVE_REALLOC 0 /* Define to 1 if you have the `sqrt' function. */ #define HAVE_SQRT 1 /* Define to 1 if stdbool.h conforms to C99. */ #define HAVE_STDBOOL_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDDEF_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDINT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDIO_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDLIB_H 1 /* Define to 1 if you have the `strchr' function. */ #define HAVE_STRCHR 1 /* Define to 1 if you have the header file. */ #define HAVE_STRINGS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRING_H 1 /* Define to 1 if you have the `strtol' function. */ #define HAVE_STRTOL 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_STAT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TIMEB_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have the `trunc' function. */ /* #undef HAVE_TRUNC */ /* Define to 1 if you have the header file. */ /* #undef HAVE_UNISTD_H */ /* Define to 1 if the system has the type `_Bool'. */ #define HAVE__BOOL 1 /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #define LT_OBJDIR ".libs/" /* Name of package */ #define PACKAGE "@PACKAGE@" /* Define to the address where bug reports for this package should be sent. */ #define PACKAGE_BUGREPORT "@PACKAGE_BUGREPORT@" /* Define to the full name of this package. */ #define PACKAGE_NAME "@PACKAGE@" /* Define to the full name and version of this package. */ #define PACKAGE_STRING "@PACKAGE_STRING@" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "@PACKAGE_TARNAME@" /* Define to the home page for this package. */ #define PACKAGE_URL "@PACKAGE_URL@" /* Define to the version of this package. */ #define PACKAGE_VERSION "@PACKAGE_VERSION@" /* The size of `void *', as computed by sizeof. */ #define SIZEOF_VOID_P 4 /* Define 1 if sparse derivative propagation is to be enabled */ #define SPARSE 1 /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Define to 1 if you can safely include both and . */ #define TIME_WITH_SYS_TIME 1 /* Define to 1 if your declares `struct tm'. */ /* #undef TM_IN_SYS_TIME */ /* Version number of package */ #define VERSION "@VERSION@" /* Define to empty if `const' does not conform to ANSI C. */ /* #undef const */ /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus /* #undef inline */ #endif /* Define to rpl_malloc if the replacement function should be used. */ #define malloc rpl_malloc /* Define to rpl_realloc if the replacement function should be used. */ #define realloc rpl_realloc /* Define to `unsigned int' if does not define. */ /* #undef size_t */ ADOL-C-2.4.1/Makefile.in0000644000076600007660000006703412062606346013157 0ustar coincoin# Makefile.in generated by automake 1.12.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = . DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/adolc.spec.in \ $(top_srcdir)/ADOL-C/doc/version.tex.in \ $(top_srcdir)/MSVisualStudio/v10/nosparse/config.h.in \ $(top_srcdir)/MSVisualStudio/v10/sparse/config.h.in \ $(top_srcdir)/MSVisualStudio/v10/x64/nosparse/config.h.in \ $(top_srcdir)/MSVisualStudio/v10/x64/sparse/config.h.in \ $(top_srcdir)/autoconf/config.guess \ $(top_srcdir)/autoconf/config.sub \ $(top_srcdir)/autoconf/install-sh \ $(top_srcdir)/autoconf/ltmain.sh \ $(top_srcdir)/autoconf/missing $(top_srcdir)/configure AUTHORS \ ChangeLog INSTALL NEWS TODO autoconf/config.guess \ autoconf/config.sub autoconf/depcomp autoconf/install-sh \ autoconf/ltmain.sh autoconf/missing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = ADOL-C/doc/version.tex \ MSVisualStudio/v10/sparse/config.h \ MSVisualStudio/v10/nosparse/config.h \ MSVisualStudio/v10/x64/sparse/config.h \ MSVisualStudio/v10/x64/nosparse/config.h adolc.spec CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ cscope distdir dist dist-all distcheck ETAGS = etags CTAGS = ctags CSCOPE = cscope DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2 GZIP_ENV = --best DIST_TARGETS = dist-bzip2 dist-gzip distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH_FALSE = @ADVBRANCH_FALSE@ ADVBRANCH_TRUE = @ADVBRANCH_TRUE@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF_FALSE = @ATRIG_ERF_FALSE@ ATRIG_ERF_TRUE = @ATRIG_ERF_TRUE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COLPACK_CFLAGS = @COLPACK_CFLAGS@ COLPACK_LIBS = @COLPACK_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = foreign EXTRA_DIST = TODO BUGS LICENSE update_versions.sh \ ADOL-C/doc/version.tex.in ADOL-C/doc/version.tex \ ADOL-C/doc/adolc-manual.pdf ADOL-C/doc/adolc-manual.ps \ ADOL-C/doc/adolc-manual.tex ADOL-C/doc/short_ref.pdf \ ADOL-C/doc/short_ref.ps ADOL-C/doc/short_ref.tex \ ADOL-C/doc/multiplexed.pdf ADOL-C/doc/multiplexed.eps \ ADOL-C/doc/tapeadv.pdf ADOL-C/doc/tapeadv.eps \ ADOL-C/doc/tapebasic.pdf ADOL-C/doc/tapebasic.eps \ ADOL-C/doc/tap_point.pdf ADOL-C/doc/tap_point.eps \ MSVisualStudio/v10/adolc.sln MSVisualStudio/v10/adolc.vcxproj \ MSVisualStudio/v10/ColPack_Readme_VC++.txt \ MSVisualStudio/v10/ColPack.vcxproj \ MSVisualStudio/v10/sparse/config.h.in MSVisualStudio/v10/nosparse/config.h.in \ MSVisualStudio/v10/x64/sparse/config.h.in MSVisualStudio/v10/x64/nosparse/config.h.in \ MSVisualStudio/v10/sparse/config.h MSVisualStudio/v10/nosparse/config.h \ MSVisualStudio/v10/x64/sparse/config.h MSVisualStudio/v10/x64/nosparse/config.h \ MSVisualStudio/v10/Readme_VC++.txt \ MSVisualStudio/v10/installer.sh \ adolc.spec.in adolc.spec \ update_versions.sh SUBDIRS = ADOL-C all: all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): ADOL-C/doc/version.tex: $(top_builddir)/config.status $(top_srcdir)/ADOL-C/doc/version.tex.in cd $(top_builddir) && $(SHELL) ./config.status $@ MSVisualStudio/v10/sparse/config.h: $(top_builddir)/config.status $(top_srcdir)/MSVisualStudio/v10/sparse/config.h.in cd $(top_builddir) && $(SHELL) ./config.status $@ MSVisualStudio/v10/nosparse/config.h: $(top_builddir)/config.status $(top_srcdir)/MSVisualStudio/v10/nosparse/config.h.in cd $(top_builddir) && $(SHELL) ./config.status $@ MSVisualStudio/v10/x64/sparse/config.h: $(top_builddir)/config.status $(top_srcdir)/MSVisualStudio/v10/x64/sparse/config.h.in cd $(top_builddir) && $(SHELL) ./config.status $@ MSVisualStudio/v10/x64/nosparse/config.h: $(top_builddir)/config.status $(top_srcdir)/MSVisualStudio/v10/x64/nosparse/config.h.in cd $(top_builddir) && $(SHELL) ./config.status $@ adolc.spec: $(top_builddir)/config.status $(srcdir)/adolc.spec.in cd $(top_builddir) && $(SHELL) ./config.status $@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool config.lt # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done cscopelist-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist-recursive cscopelist cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod u+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-libtool \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) \ cscopelist-recursive ctags-recursive install-am install-strip \ tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am am--refresh check check-am clean clean-cscope \ clean-generic clean-libtool cscope cscopelist \ cscopelist-recursive ctags ctags-recursive dist dist-all \ dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ dist-xz \ dist-zip distcheck distclean distclean-generic \ distclean-libtool distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-recursive uninstall uninstall-am test: all cd ADOL-C; $(MAKE) test # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.4.1/aclocal.m40000644000076600007660000124224212032326473012744 0ustar coincoin# generated automatically by aclocal 1.12.1 -*- Autoconf -*- # Copyright (C) 1996-2012 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool 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 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ]) # serial 57 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_CC_BASENAME(CC) # ------------------- # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. m4_defun([_LT_CC_BASENAME], [for cc_temp in $1""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from `configure', and `config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # `config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain="$ac_aux_dir/ltmain.sh" ])# _LT_PROG_LTMAIN # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the `libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to `config.status' so that its # declaration there will have the same value as in `configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags="_LT_TAGS"dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the `libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into `config.status', and then the shell code to quote escape them in # for loops in `config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # `#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test $lt_write_fail = 0 && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ \`$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to ." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2011 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test $[#] != 0 do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try \`$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try \`$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: test "$silent" = yes && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # _LT_COPYING _LT_LIBTOOL_TAGS # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) _LT_PROG_REPLACE_SHELLFNS mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Go], [_LT_LANG(GO)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG m4_ifndef([AC_PROG_GO], [ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_GO. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # m4_defun([AC_PROG_GO], [AC_LANG_PUSH(Go)dnl AC_ARG_VAR([GOC], [Go compiler command])dnl AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl AC_CHECK_TOOL(GOC, gccgo) if test -z "$GOC"; then if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) fi fi if test -z "$GOC"; then AC_CHECK_PROG(GOC, gccgo, gccgo, false) fi ])#m4_defun ])#m4_ifndef # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([AC_PROG_GO], [LT_LANG(GO)], [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS="$save_LDFLAGS" ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[[012]]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES([TAG]) # --------------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test "$lt_cv_ld_force_load" = "yes"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" m4_if([$1], [CXX], [ if test "$lt_cv_apple_cc_single_mod" != "yes"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX([TAGNAME]) # ---------------------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script which will find a shell with a builtin # printf (which we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case "$ECHO" in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [ --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified).], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([${with_sysroot}]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and in which our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" ])# _LT_ENABLE_LOCK # _LT_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} : ${AR_FLAGS=cru} _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) _LT_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test x"[$]$2" = xyes; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" ]) if test x"[$]$2" = xyes; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n $lt_cv_sys_max_cmd_len ; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "$cross_compiling" = yes; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen="shl_load"], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen="dlopen"], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) ]) ]) ]) ]) ]) ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links="nottested" if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test "$hard_links" = no; then AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", [Define to the sub-directory in which libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then # We can hardcode non-existent directories. if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[[4-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[23]].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[[89]] | openbsd2.[[89]].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([], [sys_lib_dlsearch_path_spec], [2], [Run-time system search path for libraries]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program which can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$1; then lt_cv_path_MAGIC_CMD="$ac_dir/$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac]) MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program which can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test "$withval" = no || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method = "file_magic"]) _LT_DECL([], [file_magic_glob], [1], [How to find potential files when deplibs_check_method = "file_magic"]) _LT_DECL([], [want_nocaseglob], [1], [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi]) if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi AC_SUBST([DUMPBIN]) if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # _LT_CHECK_SHAREDLIB_FROM_LINKLIB # -------------------------------- # how to determine the name of the shared library # associated with a specific link library. # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) m4_require([_LT_DECL_DLLTOOL]) AC_CACHE_CHECK([how to associate runtime and link libraries], lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac ]) sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO _LT_DECL([], [sharedlib_from_linklib_cmd], [1], [Command to associate shared and link libraries]) ])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB # _LT_PATH_MANIFEST_TOOL # ---------------------- # locate the manifest tool m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], [lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM="-lm") ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test "$GCC" = yes; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else # define LT@&t@_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT@&t@_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then nm_file_list_spec='@' fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) _LT_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL 8.0, 9.0 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test "$GCC" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; *Sun\ F* | *Sun*Fortran*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Intel*\ [[CF]]*Compiler*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *Portland\ Group*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS="$save_LDFLAGS"]) if test "$lt_cv_irix_exported_symbol" = yes; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' else case $host_os in openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ;; esac fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting ${shlibpath_var} if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC="$CC" AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report which library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC="$lt_save_CC" ])# _LT_LANG_C_CONFIG # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared # libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ func_to_tool_file "$lt_outputfile"~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; gnu*) ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd2*) # C++ shared libraries are fairly broken _LT_TAGVAR(ld_shlibs, $1)=no ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(GCC, $1)="$GXX" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF package foo func foo() { } _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)="${prev}${p}" else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)="$p" else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)="$p" else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) if test -z "$F77" || test "X$F77" = "Xno"; then _lt_disable_F77=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_F77" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$G77" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC="$lt_save_CC" CFLAGS="$lt_save_CFLAGS" fi # test "$_lt_disable_F77" != yes AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) if test -z "$FC" || test "X$FC" = "Xno"; then _lt_disable_FC=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_FC" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test "$_lt_disable_FC" != yes AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_GO_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE # Source file extension for Go test sources. ac_ext=go # Object file extension for compiled Go test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="package main; func main() { }" # Code to be used in simple link tests lt_simple_link_test_code='package main; func main() { }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GO_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_GO # ---------- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [AC_MSG_CHECKING([whether the shell understands some XSI constructs]) # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes AC_MSG_RESULT([$xsi_shell]) _LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) AC_MSG_CHECKING([whether the shell understands "+="]) lt_shell_append=no ( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes AC_MSG_RESULT([$lt_shell_append]) _LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) # ------------------------------------------------------ # In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and # '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. m4_defun([_LT_PROG_FUNCTION_REPLACE], [dnl { sed -e '/^$1 ()$/,/^} # $1 /c\ $1 ()\ {\ m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) } # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: ]) # _LT_PROG_REPLACE_SHELLFNS # ------------------------- # Replace existing portable implementations of several shell functions with # equivalent extended shell implementations where those features are available.. m4_defun([_LT_PROG_REPLACE_SHELLFNS], [if test x"$xsi_shell" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary parameter first. func_stripname_result=${3} func_stripname_result=${func_stripname_result#"${1}"} func_stripname_result=${func_stripname_result%"${2}"}]) _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl func_split_long_opt_name=${1%%=*} func_split_long_opt_arg=${1#*=}]) _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) fi if test x"$lt_shell_append" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl func_quote_for_eval "${2}" dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) fi ]) # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine which file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS # Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, # Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 7 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option `$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl `shared' nor `disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) ]) ])# _LT_SET_OPTIONS # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the `shared' and # `disable-shared' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the `static' and # `disable-static' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the `fast-install' # and `disable-fast-install' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the `pic-only' and `no-pic' # LT_INIT options. # MODE is either `yes' or `no'. If omitted, it defaults to `both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac], [pic_mode=default]) test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) # ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59 which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) # ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # @configure_input@ # serial 3337 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4.2]) m4_define([LT_PACKAGE_REVISION], [1.3337]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.2' macro_revision='1.3337' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) # lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 5 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) # Copyright (C) 2002-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 8 # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.12' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.12.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.12.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 10 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 17 # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 6 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each '.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 19 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.62])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated. For more info, see: http://www.gnu.org/software/automake/manual/automake.html#Modernize-AM_INIT_AUTOMAKE-invocation]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl dnl Support for Objective C++ was only introduced in Autoconf 2.65, dnl but we still cater to Autoconf 2.62. m4_ifdef([AC_PROG_OBJCXX], [AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])])dnl ]) _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl dnl The 'parallel-tests' driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 8 # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 7 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 6 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 9 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 3 # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 3 # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 3 # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of '-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR ADOL-C-2.4.1/TODO0000644000076600007660000000103011154001222011541 0ustar coincoin - check variable initialization (to overcome ADOL-C - malloc bug) - performance tuning for tape handling and in many other ways - add code for parsing a local config file (if supplied) at startup to be able to change the internal buffer sizes at runtime - extend the extern differentiated function code to all major forward and reverse routines - many interesting mathematics stuff ;) - update the documentation (as always) - add a ldconfig run for global installations - set documented examples to be compiled per default ADOL-C-2.4.1/README0000644000076600007660000000630411422133156011754 0ustar coincoin ADOL-C This new version of ADOL-C features new library functions for - sparse Jacobians and sparse Hessians - external differentiated functions - optimal checkpointing - adapted differentiation of fixed point iterations - parallel differentiation of OpenMP-parallel loops and many bug fixes. Furthermore the source code was adapted to allow a compilation with WINDOWS compilers. See file "INSTALL" for generic installation instructions and special instructions for the installation on a WINDOWS platform. The complete documentation can be found in the subdirectory "doc". LOCAL INSTALLATION ================== 1. Run configure with possibly using one of these options: --prefix=PREFIX install library and header files in PREFIX (default: ${HOME}/adolc_base) --enable-sparse build sparse drivers [default=no] --with-openmp-flag=FLAG use FLAG to enable OpenMP at compile time [default=none] --enable-docexa build documented examples [default=no] --enable-addexa build additional examples [default=no] --enable-parexa build parallel example [default=no], if yes -with-openmp-flag=FLAG required --with-cflags=FLAGS use CFLAGS=FLAGS (default: -O3 -Wall -ansi) --with-cxxflags=FLAGS use CXXFLAGS=FLAGS (default: -O3 -Wall) 2. Type make 3. Type make install By default, `make install' will install all the files in ${PREFIX}/lib and ${PREFIX}/include. You can specify another installation directory by using the --prefix-option in the configure call. This procedure provides all makefiles required in the approporate directories. Execute 'configure --help' for more details on other available option. Nonlocal installation ===================== As mentioned in INSTALL one can configure the adolc package to be installed in a different directory than "${HOME}/adolc_base" by using the "--prefix=PATH" configure option. This is typically used for global installations. Common PATHs are "/usr" and "/usr/local/", and others are known to be used. Fine control over the installation directories can be gained by supplying additional configure options. See "./configure --help" for details. Completing the installation by executing "make install" requires write permissions for all target directories. Make sure to have them or the result may be surprising otherwise. A global installation can be helpfull if many users need the library. By adding the library's path to "/etc/ld.so.conf" the usage of LD_LIBRARY_PATH and the "-L" link switch becomes unnecessary. In many cases, for instance for PATH=/usr/local, the use of the -I directive for compiling sources becomes unnecessary too. Examples ======== Examples must be configured to build by using the configure switches --enable-docexa or --enable-addexa. They will never be installed by make install but can be found in the appropriate example subdirectory. Windows Compilation with Visual Studio ====================================== Please refer to the file windows/Readme_VC++.txt for building the library and ADOL-C/examples/Readme_VC++.txt for the documented examples. Enjoy this new version! ADOL-C-2.4.1/configure0000755000076600007660000225315012120123050012774 0ustar coincoin#! /bin/sh # From configure.ac Revision. # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for adolc 2.4.1. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: adol-c@list.coin-or.org about your system, including $0: any error possibly output before this message. Then $0: install a modern shell, or manually run the script $0: under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" SHELL=${CONFIG_SHELL-/bin/sh} test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='adolc' PACKAGE_TARNAME='adolc' PACKAGE_VERSION='2.4.1' PACKAGE_STRING='adolc 2.4.1' PACKAGE_BUGREPORT='adol-c@list.coin-or.org' PACKAGE_URL='' ac_unique_file="ADOL-C/src/adouble.cpp" ac_default_prefix=${HOME}/adolc_base # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS ac_adolc_cxxflags ac_adolc_cflags PAREXA_FALSE PAREXA_TRUE ADDEXA_FALSE ADDEXA_TRUE DOCEXA_FALSE DOCEXA_TRUE COLPACK_LIBS COLPACK_CFLAGS SPARSE_FALSE SPARSE_TRUE HAVE_LIBCOLPACK_FALSE HAVE_LIBCOLPACK_TRUE ADVBRANCH_FALSE ADVBRANCH_TRUE REAL_TYPE UINT_TYPE ATRIG_ERF_TRUE ATRIG_ERF_FALSE ADOLC_PATCHLEVEL ADOLC_SUBVERSION ADOLC_VERSION ac_aux_dir LIBOBJS _lib CXXCPP OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL RANLIB ac_ct_AR AR NM ac_ct_DUMPBIN DUMPBIN LD FGREP EGREP GREP SED LIBTOOL OBJDUMP DLLTOOL AS host_os host_vendor host_cpu host build_os build_vendor build_cpu build LN_S CPP am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE ac_ct_CC CFLAGS CC am__fastdepCXX_FALSE am__fastdepCXX_TRUE CXXDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CXX CPPFLAGS LDFLAGS CXXFLAGS CXX AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_dependency_tracking enable_shared enable_static with_pic enable_fast_install with_gnu_ld with_sysroot enable_libtool_lock enable_use_calloc enable_atrig_erf enable_ulong enable_double enable_advanced_branching enable_debug enable_harddebug enable_stdczero enable_tserrno with_openmp_flag enable_sparse with_colpack enable_docexa enable_addexa enable_parexa with_cflags with_cxxflags ' ac_precious_vars='build_alias host_alias target_alias CXX CXXFLAGS LDFLAGS LIBS CPPFLAGS CCC CC CFLAGS CPP CXXCPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures adolc 2.4.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/adolc] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of adolc 2.4.1:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --disable-use-calloc disable use of calloc and use malloc instead for memory allocation [default=calloc is used] --enable-atrig-erf enable atrig and erf functions in ADOL-C [default=no] --enable-ulong enable 64-bit locations (only available on 64-bit systems) [default=32-bit] --disable-double disable double precision arithmetic [untested, default=double is enabled] --enable-advanced-branching enable advanced branching operations to reduce retaping [default=no]. The boolean valued comparison operators with two adouble arguments will not return boolean results but the active results may be used to automatically switch branches in conjunction with condassign or advector (see manual). --enable-debug enable ADOL-C debug mode [default=no] --enable-harddebug enable ADOL-C hard debug mode [default=no] --disable-stdczero adouble default constructor does not initialze the value to zero (improves performance but yields incorrect results for implicit array initializations, see manual) [default=enabled] --enable-tserrno use errno as thread number cache [default=no] --enable-sparse build sparse drivers [default=disabled] --enable-docexa build documented examples [default=disabled] --enable-addexa build additional examples [default=disabled] --enable-parexa build parallel example [default=disabled], if enabled -with-openmp-flag=FLAG required Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot=DIR Search for dependent libraries within DIR (or the compiler's sysroot if not specified). --with-openmp-flag=FLAG use FLAG to enable OpenMP at compile time [default=none] --with-colpack=DIR path to the colpack library and headers [default=system libraries] --with-cflags=FLAGS use CFLAGS=FLAGS (default: -O2) --with-cxxflags=FLAGS use CXXFLAGS=FLAGS (default: -O2) Some influential environment variables: CXX C++ compiler command CXXFLAGS C++ compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CC C compiler command CFLAGS C compiler flags CPP C preprocessor CXXCPP C++ preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF adolc configure 2.4.1 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_cxx_try_cpp LINENO # ------------------------ # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_cpp # ac_fn_cxx_try_link LINENO # ------------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_link # ac_fn_c_compute_int LINENO EXPR VAR INCLUDES # -------------------------------------------- # Tries to find the compile-time value of EXPR in a program that includes # INCLUDES, setting VAR accordingly. Returns whether the value could be # computed ac_fn_c_compute_int () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=0 ac_mid=0 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid; break else as_fn_arith $ac_mid + 1 && ac_lo=$as_val if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) < 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=-1 ac_mid=-1 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=$ac_mid; break else as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else ac_lo= ac_hi= fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid else as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in #(( ?*) eval "$3=\$ac_lo"; ac_retval=0 ;; '') ac_retval=1 ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 static long int longval () { return $2; } static unsigned long int ulongval () { return $2; } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) return 1; if (($2) < 0) { long int i = longval (); if (i != ($2)) return 1; fprintf (f, "%ld", i); } else { unsigned long int i = ulongval (); if (i != ($2)) return 1; fprintf (f, "%lu", i); } /* Do not output a trailing newline, as this causes \r\n confusion on some platforms. */ return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : echo >>conftest.val; read $3 &5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## -------------------------------------- ## ## Report this to adol-c@list.coin-or.org ## ## -------------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_cxx_check_header_mongrel LINENO HEADER VAR INCLUDES # --------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_cxx_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## -------------------------------------- ## ## Report this to adol-c@list.coin-or.org ## ## -------------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_cxx_check_header_mongrel cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by adolc $as_me 2.4.1, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu config_flags="$*" ac_aux_dir= for ac_dir in autoconf "$srcdir"/autoconf; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in autoconf \"$srcdir\"/autoconf" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. ac_config_headers="$ac_config_headers ADOL-C/src/config.h" am__api_version='1.12' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='adolc' VERSION='2.4.1' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} mkdir_p="$MKDIR_P" # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=0;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "x$CFLAGS" == x ; then ac_shell_cflags="not_set" else ac_shell_cflags="$CFLAGS" fi if test "x$CXXFLAGS" == x ; then ac_shell_cxxflags="not_set" else ac_shell_cxxflags="$CXXFLAGS" fi libdir_set_on_cmd="no" for i in $config_flags ; do case $i in -libdir | --libdir | --libdi | --libd | -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir_set_on_cmd="yes" break ;; esac done # checks for programs ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C++ compiler works" >&5 $as_echo_n "checking whether the C++ compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C++ compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler default output file name" >&5 $as_echo_n "checking for C++ compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C++ compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } if ${ac_cv_cxx_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if ${ac_cv_prog_cxx_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes else CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : else ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CXX" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CXX_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 $as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. set dummy ${ac_tool_prefix}as; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AS+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AS"; then ac_cv_prog_AS="$AS" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AS="${ac_tool_prefix}as" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AS=$ac_cv_prog_AS if test -n "$AS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 $as_echo "$AS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_AS"; then ac_ct_AS=$AS # Extract the first word of "as", so it can be a program name with args. set dummy as; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AS+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AS"; then ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AS="as" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AS=$ac_cv_prog_ac_ct_AS if test -n "$ac_ct_AS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5 $as_echo "$ac_ct_AS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_AS" = x; then AS="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AS=$ac_ct_AS fi else AS="$ac_cv_prog_AS" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi ;; esac test -z "$AS" && AS=as test -z "$DLLTOOL" && DLLTOOL=dlltool test -z "$OBJDUMP" && OBJDUMP=objdump case `pwd` in *\ * | *\ *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.4.2' macro_revision='1.3337' ltmain="$ac_aux_dir/ltmain.sh" # Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 $as_echo_n "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "" } case "$ECHO" in printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 $as_echo "printf" >&6; } ;; print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 $as_echo "print -r" >&6; } ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 $as_echo "cat" >&6; } ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if ${ac_cv_path_FGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 $as_echo "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if ${lt_cv_path_NM+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else if test -n "$ac_tool_prefix"; then for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 $as_echo "$DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 $as_echo "$ac_ct_DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 $as_echo_n "checking the name lister ($NM) interface... " >&6; } if ${lt_cv_nm_interface+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 $as_echo "$lt_cv_nm_interface" >&6; } # find the maximum length of command line arguments { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 $as_echo_n "checking the maximum length of command line arguments... " >&6; } if ${lt_cv_sys_max_cmd_len+:} false; then : $as_echo_n "(cached) " >&6 else i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 $as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 $as_echo "$xsi_shell" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 $as_echo_n "checking whether the shell understands \"+=\"... " >&6; } lt_shell_append=no ( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 $as_echo "$lt_shell_append" >&6; } if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 $as_echo_n "checking how to convert $build file names to $host format... " >&6; } if ${lt_cv_to_host_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 $as_echo "$lt_cv_to_host_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 $as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } if ${lt_cv_to_tool_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 $as_echo "$lt_cv_to_tool_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } if ${lt_cv_ld_reload_flag+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 $as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test "$GCC" != yes; then reload_cmds=false fi ;; darwin*) if test "$GCC" = yes; then reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } if ${lt_cv_deplibs_check_method+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 $as_echo "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi test -z "$DLLTOOL" && DLLTOOL=dlltool { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 $as_echo_n "checking how to associate runtime and link libraries... " >&6; } if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 $as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO if test -n "$ac_tool_prefix"; then for ac_prog in ar do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} : ${AR_FLAGS=cru} { $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 $as_echo_n "checking for archiver @FILE support... " >&6; } if ${lt_cv_ar_at_file+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 $as_echo "$lt_cv_ar_at_file" >&6; } if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } if ${lt_cv_sys_global_symbol_pipe+:} false; then : $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then nm_file_list_spec='@' fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 $as_echo_n "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. if test "${with_sysroot+set}" = set; then : withval=$with_sysroot; else with_sysroot=no fi lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 $as_echo "${with_sysroot}" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 $as_echo "${lt_sysroot:-no}" >&6; } # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 $as_echo_n "checking whether the C compiler needs -belf... " >&6; } if ${lt_cv_cc_needs_belf+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_cc_needs_belf=yes else lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 $as_echo "$lt_cv_cc_needs_belf" >&6; } if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 $as_echo "$MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 $as_echo "$ac_ct_MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then MANIFEST_TOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL fi else MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 $as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if ${lt_cv_path_mainfest_tool+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 $as_echo "$lt_cv_path_mainfest_tool" >&6; } if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 $as_echo "$DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 $as_echo "$ac_ct_DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 $as_echo "$NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 $as_echo "$ac_ct_NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 $as_echo "$LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 $as_echo "$ac_ct_LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 $as_echo "$OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 $as_echo "$ac_ct_OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 $as_echo "$OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 $as_echo "$ac_ct_OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 $as_echo_n "checking for -single_module linker flag... " >&6; } if ${lt_cv_apple_cc_single_mod+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&5 # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } if ${lt_cv_ld_exported_symbols_list+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_ld_exported_symbols_list=yes else lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 $as_echo_n "checking for -force_load linker flag... " >&6; } if ${lt_cv_ld_force_load+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 echo "$AR cru libconftest.a conftest.o" >&5 $AR cru libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&5 elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&5 fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 $as_echo "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[91]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[012]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in dlfcn.h do : ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF fi done func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf # Set options enable_dlopen=no # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac else enable_shared=yes fi # Check whether --enable-static was given. if test "${enable_static+set}" = set; then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac else enable_static=yes fi # Check whether --with-pic was given. if test "${with_pic+set}" = set; then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac else pic_mode=default fi test -z "$pic_mode" && pic_mode=default # Check whether --enable-fast-install was given. if test "${enable_fast_install+set}" = set; then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac else enable_fast_install=yes fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 $as_echo_n "checking for objdir... " >&6; } if ${lt_cv_objdir+:} false; then : $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 $as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir cat >>confdefs.h <<_ACEOF #define LT_OBJDIR "$lt_cv_objdir/" _ACEOF case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 $as_echo_n "checking for file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC="$CC" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; *) lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' if test -n "$lt_prog_compiler_pic"; then lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; *Portland\ Group*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 $as_echo "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if ${lt_cv_prog_compiler_pic_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; } if test x"$lt_cv_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 $as_echo "$lt_cv_prog_compiler_static_works" >&6; } if test x"$lt_cv_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' export_dynamic_flag_spec='${wl}--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; haiku*) archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs=yes ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' ${wl}-bernotok' allow_undefined_flag=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes file_list_spec='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' enable_shared_with_static_runtimes=yes exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' postlink_cmds='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi link_all_deplibs=yes allow_undefined_flag="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 $as_echo_n "checking if $CC understands -b... " >&6; } if ${lt_cv_prog_compiler__b+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler__b=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler__b=yes fi else lt_cv_prog_compiler__b=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 $as_echo "$lt_cv_prog_compiler__b" >&6; } if test x"$lt_cv_prog_compiler__b" = xyes; then archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 $as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if ${lt_cv_irix_exported_symbol+:} false; then : $as_echo_n "(cached) " >&6 else save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_irix_exported_symbol=yes else lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 $as_echo "$lt_cv_irix_exported_symbol" >&6; } if test "$lt_cv_irix_exported_symbol" = yes; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='${wl}-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='${wl}-z,text' allow_undefined_flag='${wl}-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='${wl}-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 $as_echo "$ld_shlibs" >&6; } test "$ld_shlibs" = no && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 $as_echo "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([A-Za-z]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test "X$hardcode_automatic" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 $as_echo "$hardcode_action" >&6; } if test "$hardcode_action" = relink || test "$inherit_rpath" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = xyes; then : lt_cv_dlopen="shl_load" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if ${ac_cv_lib_dld_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes; then : lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes; then : lt_cv_dlopen="dlopen" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } if ${ac_cv_lib_svld_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes else ac_cv_lib_svld_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } if ${ac_cv_lib_dld_dld_link+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dld_link (); int main () { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes else ac_cv_lib_dld_dld_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = xyes; then : lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 $as_echo_n "checking whether a program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 $as_echo "$lt_cv_dlopen_self" >&6; } if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self_static+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 $as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 $as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; esac fi # Report which library types will actually be built { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 $as_echo_n "checking how to run the C++ preprocessor... " >&6; } if test -z "$CXXCPP"; then if ${ac_cv_prog_CXXCPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 $as_echo "$CXXCPP" >&6; } ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else _lt_caught_CXX_error=yes fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu archive_cmds_need_lc_CXX=no allow_undefined_flag_CXX= always_export_symbols_CXX=no archive_expsym_cmds_CXX= compiler_needs_object_CXX=no export_dynamic_flag_spec_CXX= hardcode_direct_CXX=no hardcode_direct_absolute_CXX=no hardcode_libdir_flag_spec_CXX= hardcode_libdir_separator_CXX= hardcode_minus_L_CXX=no hardcode_shlibpath_var_CXX=unsupported hardcode_automatic_CXX=no inherit_rpath_CXX=no module_cmds_CXX= module_expsym_cmds_CXX= link_all_deplibs_CXX=unknown old_archive_cmds_CXX=$old_archive_cmds reload_flag_CXX=$reload_flag reload_cmds_CXX=$reload_cmds no_undefined_flag_CXX= whole_archive_flag_spec_CXX= enable_shared_with_static_runtimes_CXX=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o objext_CXX=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC compiler_CXX=$CC for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' else lt_prog_compiler_no_builtin_flag_CXX= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_CXX= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } ld_shlibs_CXX=yes case $host_os in aix3*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_CXX='' hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes file_list_spec_CXX='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct_CXX=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_CXX=yes hardcode_libdir_flag_spec_CXX='-L$libdir' hardcode_libdir_separator_CXX= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec_CXX='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. always_export_symbols_CXX=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_CXX='-berok' # Determine the default libpath from the value encoded in an empty # executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__CXX+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath__CXX fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_CXX="-z nodefs" archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__CXX+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath__CXX fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_CXX=' ${wl}-bernotok' allow_undefined_flag_CXX=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_CXX='$convenience' fi archive_cmds_need_lc_CXX=yes # This is similar to how AIX traditionally builds its shared # libraries. archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_CXX=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_CXX=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec_CXX=' ' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=yes file_list_spec_CXX='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true' enable_shared_with_static_runtimes_CXX=yes # Don't use ranlib old_postinstall_cmds_CXX='chmod 644 $oldlib' postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ func_to_tool_file "$lt_outputfile"~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_CXX='-L$libdir' export_dynamic_flag_spec_CXX='${wl}--export-all-symbols' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=no enable_shared_with_static_runtimes_CXX=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs_CXX=no fi ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc_CXX=no hardcode_direct_CXX=no hardcode_automatic_CXX=yes hardcode_shlibpath_var_CXX=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec_CXX='' fi link_all_deplibs_CXX=yes allow_undefined_flag_CXX="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" if test "$lt_cv_apple_cc_single_mod" != "yes"; then archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi else ld_shlibs_CXX=no fi ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF ld_shlibs_CXX=no ;; freebsd-elf*) archive_cmds_need_lc_CXX=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions ld_shlibs_CXX=yes ;; gnu*) ;; haiku*) archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs_CXX=yes ;; hpux9*) hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: export_dynamic_flag_spec_CXX='${wl}-E' hardcode_direct_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: case $host_cpu in hppa*64*|ia64*) ;; *) export_dynamic_flag_spec_CXX='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no ;; *) hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; interix[3-9]*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' fi fi link_all_deplibs_CXX=yes ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: inherit_rpath_CXX=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac archive_cmds_need_lc_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [1-5].* | *pgcpp\ [1-5].*) prelink_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' old_archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' archive_expsym_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_CXX='-rpath $libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' hardcode_libdir_flag_spec_CXX='-R$libdir' whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object_CXX=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; m88k*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) ld_shlibs_CXX=yes ;; openbsd2*) # C++ shared libraries are fairly broken ld_shlibs_CXX=no ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no hardcode_direct_absolute_CXX=yes archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' export_dynamic_flag_spec_CXX='${wl}-E' whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else ld_shlibs_CXX=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' hardcode_libdir_separator_CXX=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx*) case $host in osf3*) allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' ;; *) allow_undefined_flag_CXX=' -expect_unresolved \*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' hardcode_libdir_flag_spec_CXX='-rpath $libdir' ;; esac hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) archive_cmds_CXX='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ archive_cmds_need_lc_CXX=yes no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_shlibpath_var_CXX=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' ;; esac link_all_deplibs_CXX=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then no_undefined_flag_CXX=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag_CXX='${wl}-z,text' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag_CXX='${wl}-z,text' allow_undefined_flag_CXX='${wl}-z,nodefs' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir' hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes export_dynamic_flag_spec_CXX='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~ '"$old_archive_cmds_CXX" reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~ '"$reload_cmds_CXX" ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } test "$ld_shlibs_CXX" = no && can_build_shared=no GCC_CXX="$GXX" LD_CXX="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... # Dependencies to place before and after the object being linked: predep_objects_CXX= postdep_objects_CXX= predeps_CXX= postdeps_CXX= compiler_lib_search_path_CXX= cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$compiler_lib_search_path_CXX"; then compiler_lib_search_path_CXX="${prev}${p}" else compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$postdeps_CXX"; then postdeps_CXX="${prev}${p}" else postdeps_CXX="${postdeps_CXX} ${prev}${p}" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$predep_objects_CXX"; then predep_objects_CXX="$p" else predep_objects_CXX="$predep_objects_CXX $p" fi else if test -z "$postdep_objects_CXX"; then postdep_objects_CXX="$p" else postdep_objects_CXX="$postdep_objects_CXX $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling CXX test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken case $host_os in interix[3-9]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. predep_objects_CXX= postdep_objects_CXX= postdeps_CXX= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then postdeps_CXX='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then postdeps_CXX='-library=Cstd -library=Crun' fi ;; esac ;; esac case " $postdeps_CXX " in *" -lc "*) archive_cmds_need_lc_CXX=no ;; esac compiler_lib_search_dirs_CXX= if test -n "${compiler_lib_search_path_CXX}"; then compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi lt_prog_compiler_wl_CXX= lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX= # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic_CXX='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_CXX='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all lt_prog_compiler_pic_CXX= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static_CXX= ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_CXX=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac else case $host_os in aix[4-9]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' else lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; dgux*) case $cc_basename in ec++*) lt_prog_compiler_pic_CXX='-KPIC' ;; ghcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then lt_prog_compiler_pic_CXX='+Z' fi ;; aCC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_CXX='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler lt_prog_compiler_wl_CXX='--backend -Wl,' lt_prog_compiler_pic_CXX='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fPIC' lt_prog_compiler_static_CXX='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fpic' lt_prog_compiler_static_CXX='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; xlc* | xlC* | bgxl[cC]* | mpixl[cC]*) # IBM XL 8.0, 9.0 on PPC and BlueGene lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-qpic' lt_prog_compiler_static_CXX='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) lt_prog_compiler_pic_CXX='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) lt_prog_compiler_wl_CXX='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 lt_prog_compiler_pic_CXX='-pic' ;; cxx*) # Digital/Compaq C++ lt_prog_compiler_wl_CXX='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x lt_prog_compiler_pic_CXX='-pic' lt_prog_compiler_static_CXX='-Bstatic' ;; lcc*) # Lucid lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 lt_prog_compiler_pic_CXX='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) lt_prog_compiler_can_build_shared_CXX=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_CXX= ;; *) lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 $as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; } lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works_CXX=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works_CXX=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then case $lt_prog_compiler_pic_CXX in "" | " "*) ;; *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; esac else lt_prog_compiler_pic_CXX= lt_prog_compiler_can_build_shared_CXX=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works_CXX=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works_CXX=yes fi else lt_cv_prog_compiler_static_works_CXX=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then : else lt_prog_compiler_static_CXX= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' case $host_os in aix[4-9]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) export_symbols_cmds_CXX="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' ;; esac ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } test "$ld_shlibs_CXX" = no && can_build_shared=no with_gnu_ld_CXX=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_CXX" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_CXX=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_CXX in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_CXX pic_flag=$lt_prog_compiler_pic_CXX compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_CXX allow_undefined_flag_CXX= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc_CXX=no else lt_cv_archive_cmds_need_lc_CXX=yes fi allow_undefined_flag_CXX=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 $as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; } archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action_CXX= if test -n "$hardcode_libdir_flag_spec_CXX" || test -n "$runpath_var_CXX" || test "X$hardcode_automatic_CXX" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct_CXX" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no && test "$hardcode_minus_L_CXX" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_CXX=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_CXX=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_CXX=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 $as_echo "$hardcode_action_CXX" >&6; } if test "$hardcode_action_CXX" = relink || test "$inherit_rpath_CXX" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_config_commands="$ac_config_commands libtool" # Only expand once: # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5 $as_echo_n "checking size of void *... " >&6; } if ${ac_cv_sizeof_void_p+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default"; then : else if test "$ac_cv_type_void_p" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (void *) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_void_p=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5 $as_echo "$ac_cv_sizeof_void_p" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_VOID_P $ac_cv_sizeof_void_p _ACEOF if test "x$ac_cv_sizeof_void_p" = "x8" ; then _lib=lib64 else _lib=lib fi if test "x$libdir_set_on_cmd" = "xno" ; then libdir='${exec_prefix}/${_lib}' fi # checks for header files { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5 $as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; } if ${ac_cv_header_time+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { if ((struct tm *) 0) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_time=yes else ac_cv_header_time=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5 $as_echo "$ac_cv_header_time" >&6; } if test $ac_cv_header_time = yes; then $as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 $as_echo_n "checking for stdbool.h that conforms to C99... " >&6; } if ${ac_cv_header_stdbool_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifndef bool "error: bool is not defined" #endif #ifndef false "error: false is not defined" #endif #if false "error: false is not 0" #endif #ifndef true "error: true is not defined" #endif #if true != 1 "error: true is not 1" #endif #ifndef __bool_true_false_are_defined "error: __bool_true_false_are_defined is not defined" #endif struct s { _Bool s: 1; _Bool t; } s; char a[true == 1 ? 1 : -1]; char b[false == 0 ? 1 : -1]; char c[__bool_true_false_are_defined == 1 ? 1 : -1]; char d[(bool) 0.5 == true ? 1 : -1]; /* See body of main program for 'e'. */ char f[(_Bool) 0.0 == false ? 1 : -1]; char g[true]; char h[sizeof (_Bool)]; char i[sizeof s.t]; enum { j = false, k = true, l = false * true, m = true * 256 }; /* The following fails for HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ _Bool n[m]; char o[sizeof n == m * sizeof n[0] ? 1 : -1]; char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; /* Catch a bug in an HP-UX C compiler. See http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html */ _Bool q = true; _Bool *pq = &q; int main () { bool e = &s; *pq |= q; *pq |= ! q; /* Refer to every declared value, to avoid compiler optimizations. */ return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l + !m + !n + !o + !p + !q + !pq); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdbool_h=yes else ac_cv_header_stdbool_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 $as_echo "$ac_cv_header_stdbool_h" >&6; } ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" if test "x$ac_cv_type__Bool" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE__BOOL 1 _ACEOF fi if test $ac_cv_header_stdbool_h = yes; then $as_echo "#define HAVE_STDBOOL_H 1" >>confdefs.h fi for ac_header in stddef.h stdlib.h stdio.h string.h unistd.h sys/timeb.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done # checks for types { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 $as_echo_n "checking for an ANSI C-conforming const... " >&6; } if ${ac_cv_c_const+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __cplusplus /* Ultrix mips cc rejects this sort of thing. */ typedef int charset[2]; const charset cs = { 0, 0 }; /* SunOS 4.1.1 cc rejects this. */ char const *const *pcpcc; char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++pcpcc; ppc = (char**) pcpcc; pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this sort of thing. */ char tx; char *t = &tx; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; } bx; struct s *b = &bx; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; if (!foo) return 0; } return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_const=yes else ac_cv_c_const=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 $as_echo "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then $as_echo "#define const /**/" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 $as_echo_n "checking for inline... " >&6; } if ${ac_cv_c_inline+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; static $ac_kw foo_t static_foo () {return 0; } $ac_kw foo_t foo () {return 0; } #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_inline=$ac_kw fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_inline" != no && break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 $as_echo "$ac_cv_c_inline" >&6; } case $ac_cv_c_inline in inline | yes) ;; *) case $ac_cv_c_inline in no) ac_val=;; *) ac_val=$ac_cv_c_inline;; esac cat >>confdefs.h <<_ACEOF #ifndef __cplusplus #define inline $ac_val #endif _ACEOF ;; esac ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned int _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5 $as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; } if ${ac_cv_struct_tm+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { struct tm tm; int *p = &tm.tm_sec; return !p; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_struct_tm=time.h else ac_cv_struct_tm=sys/time.h fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5 $as_echo "$ac_cv_struct_tm" >&6; } if test $ac_cv_struct_tm = sys/time.h; then $as_echo "#define TM_IN_SYS_TIME 1" >>confdefs.h fi # Checks for library functions for ac_header in stdlib.h do : ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" if test "x$ac_cv_header_stdlib_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STDLIB_H 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 $as_echo_n "checking for GNU libc compatible malloc... " >&6; } if ${ac_cv_func_malloc_0_nonnull+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_malloc_0_nonnull=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined STDC_HEADERS || defined HAVE_STDLIB_H # include #else char *malloc (); #endif int main () { return ! malloc (0); ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_malloc_0_nonnull=yes else ac_cv_func_malloc_0_nonnull=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 $as_echo "$ac_cv_func_malloc_0_nonnull" >&6; } if test $ac_cv_func_malloc_0_nonnull = yes; then : $as_echo "#define HAVE_MALLOC 1" >>confdefs.h else $as_echo "#define HAVE_MALLOC 0" >>confdefs.h case " $LIBOBJS " in *" malloc.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS malloc.$ac_objext" ;; esac $as_echo "#define malloc rpl_malloc" >>confdefs.h fi for ac_header in stdlib.h do : ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" if test "x$ac_cv_header_stdlib_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STDLIB_H 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible realloc" >&5 $as_echo_n "checking for GNU libc compatible realloc... " >&6; } if ${ac_cv_func_realloc_0_nonnull+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_realloc_0_nonnull=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined STDC_HEADERS || defined HAVE_STDLIB_H # include #else char *realloc (); #endif int main () { return ! realloc (0, 0); ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_realloc_0_nonnull=yes else ac_cv_func_realloc_0_nonnull=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_realloc_0_nonnull" >&5 $as_echo "$ac_cv_func_realloc_0_nonnull" >&6; } if test $ac_cv_func_realloc_0_nonnull = yes; then : $as_echo "#define HAVE_REALLOC 1" >>confdefs.h else $as_echo "#define HAVE_REALLOC 0" >>confdefs.h case " $LIBOBJS " in *" realloc.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS realloc.$ac_objext" ;; esac $as_echo "#define realloc rpl_realloc" >>confdefs.h fi # Checks for libraries and fuctions { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing pow" >&5 $as_echo_n "checking for library containing pow... " >&6; } if ${ac_cv_search_pow+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pow (); int main () { return pow (); ; return 0; } _ACEOF for ac_lib in '' m; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_pow=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_pow+:} false; then : break fi done if ${ac_cv_search_pow+:} false; then : else ac_cv_search_pow=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_pow" >&5 $as_echo "$ac_cv_search_pow" >&6; } ac_res=$ac_cv_search_pow if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi for ac_func in floor fmax fmin ftime pow sqrt strchr strtol trunc do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done # substitutions # ADOL-C configuration $as_echo "#define ADOLC_VERSION 2" >>confdefs.h $as_echo "#define ADOLC_SUBVERSION 4" >>confdefs.h $as_echo "#define ADOLC_PATCHLEVEL 1" >>confdefs.h ADOLC_VERSION=2 ADOLC_SUBVERSION=4 ADOLC_PATCHLEVEL=1 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use calloc or malloc for memory allocation" >&5 $as_echo_n "checking whether to use calloc or malloc for memory allocation... " >&6; } # Check whether --enable-use-calloc was given. if test "${enable_use_calloc+set}" = set; then : enableval=$enable_use_calloc; use_calloc=$enableval else use_calloc=yes fi if test x$use_calloc = xyes ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: calloc" >&5 $as_echo "calloc" >&6; } $as_echo "#define ADOLC_USE_CALLOC 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: result: malloc" >&5 $as_echo "malloc" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable atrig/erf functions" >&5 $as_echo_n "checking whether to enable atrig/erf functions... " >&6; } # Check whether --enable-atrig-erf was given. if test "${enable_atrig_erf+set}" = set; then : enableval=$enable_atrig_erf; use_atrig_erf=$enableval else use_atrig_erf=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_atrig_erf" >&5 $as_echo "$use_atrig_erf" >&6; } if test x$use_atrig_erf = xyes ; then ATRIG_ERF_FALSE="// " ATRIG_ERF_TRUE="" else ATRIG_ERF_FALSE="" ATRIG_ERF_TRUE="// " fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use 32-bit or 64-bit locations" >&5 $as_echo_n "checking whether to use 32-bit or 64-bit locations... " >&6; } # Check whether --enable-ulong was given. if test "${enable_ulong+set}" = set; then : enableval=$enable_ulong; use_ulong=$enableval else use_ulong=no fi if test x$use_ulong = xyes -a 0$ac_cv_sizeof_void_p -ge 8 ; then UINT_TYPE=uint64_t { $as_echo "$as_me:${as_lineno-$LINENO}: result: 64-bit" >&5 $as_echo "64-bit" >&6; } else UINT_TYPE=uint32_t { $as_echo "$as_me:${as_lineno-$LINENO}: result: 32-bit" >&5 $as_echo "32-bit" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use single or double precision" >&5 $as_echo_n "checking whether to use single or double precision... " >&6; } # Check whether --enable-double was given. if test "${enable_double+set}" = set; then : enableval=$enable_double; use_double=$enableval else use_double=yes fi if test x$use_double = xno ; then REAL_TYPE=float echo echo -n "using ${REAL_TYPE} is not well tested, please report bugs if you find any..." else REAL_TYPE=double fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $REAL_TYPE" >&5 $as_echo "$REAL_TYPE" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable advanced branching operations" >&5 $as_echo_n "checking whether to enable advanced branching operations... " >&6; } # Check whether --enable-advanced-branching was given. if test "${enable_advanced_branching+set}" = set; then : enableval=$enable_advanced_branching; use_advbranch=$enableval else use_advbranch=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_advbranch" >&5 $as_echo "$use_advbranch" >&6; } if test x$use_advbranch = xyes ; then ADVBRANCH_TRUE="" ADVBRANCH_FALSE="// " else ADVBRANCH_TRUE="// " ADVBRANCH_FALSE="" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use ADOL-C debug mode" >&5 $as_echo_n "checking whether to use ADOL-C debug mode... " >&6; } # Check whether --enable-debug was given. if test "${enable_debug+set}" = set; then : enableval=$enable_debug; adolc_debug=$enableval { $as_echo "$as_me:${as_lineno-$LINENO}: result: $adolc_debug" >&5 $as_echo "$adolc_debug" >&6; } else adolc_debug=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use ADOL-C hard debug mode" >&5 $as_echo_n "checking whether to use ADOL-C hard debug mode... " >&6; } # Check whether --enable-harddebug was given. if test "${enable_harddebug+set}" = set; then : enableval=$enable_harddebug; adolc_harddebug=$enableval { $as_echo "$as_me:${as_lineno-$LINENO}: result: $adolc_harddebug" >&5 $as_echo "$adolc_harddebug" >&6; } else adolc_harddebug=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test x$adolc_harddebug == xyes ; then adolc_debug=yes $as_echo "#define ADOLC_HARDDEBUG 1" >>confdefs.h fi if test x$adolc_debug == xyes ; then $as_echo "#define ADOLC_DEBUG 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the default adouble constructor should initialize the value to 0" >&5 $as_echo_n "checking whether the default adouble constructor should initialize the value to 0... " >&6; } # Check whether --enable-stdczero was given. if test "${enable_stdczero+set}" = set; then : enableval=$enable_stdczero; adolc_stdczero=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } else adolc_stdczero=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi if test x$adolc_stdczero == xyes; then $as_echo "#define ADOLC_ADOUBLE_STDCZERO 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether errno is thread save" >&5 $as_echo_n "checking whether errno is thread save... " >&6; } # Check whether --enable-tserrno was given. if test "${enable_tserrno+set}" = set; then : enableval=$enable_tserrno; adolc_tserrno=$enableval { $as_echo "$as_me:${as_lineno-$LINENO}: result: $adolc_tserrno" >&5 $as_echo "$adolc_tserrno" >&6; } else adolc_tserrno=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test x$adolc_tserrno == xyes ; then $as_echo "#define ADOLC_THREADSAVE_ERRNO 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking which flag to use to enable OpenMP" >&5 $as_echo_n "checking which flag to use to enable OpenMP... " >&6; } # Check whether --with-openmp-flag was given. if test "${with_openmp_flag+set}" = set; then : withval=$with_openmp_flag; ac_adolc_openmpflag=$withval { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_adolc_openmpflag" >&5 $as_echo "$ac_adolc_openmpflag" >&6; } else ac_adolc_openmpflag="" { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } fi # ADOL-C Sparse facility { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build sparse drivers" >&5 $as_echo_n "checking whether to build sparse drivers... " >&6; } # Check whether --enable-sparse was given. if test "${enable_sparse+set}" = set; then : enableval=$enable_sparse; sparse=$enableval { $as_echo "$as_me:${as_lineno-$LINENO}: result: $sparse" >&5 $as_echo "$sparse" >&6; } else sparse="no" { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Check whether --with-colpack was given. if test "${with_colpack+set}" = set; then : withval=$with_colpack; colpack=$withval COLPACK_CFLAGS="$ac_adolc_openmpflag -I$colpack/include" COLPACK_LIBDIR="$colpack/${_lib}" COLPACK_LIBS="$ac_adolc_openmpflag -L$COLPACK_LIBDIR -lColPack" else COLPACK_CFLAGS="$ac_adolc_openmpflag" COLPACK_LIBDIR="" COLPACK_LIBS="-lColPack" fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu save_CPPFLAGS="$CPPFLAGS" save_LIBS="$LIBS" CPPFLAGS="$CPPFLAGS $COLPACK_CFLAGS" LIBS="$COLPACK_LIBS $LIBS" ac_fn_cxx_check_header_mongrel "$LINENO" "ColPack/ColPackHeaders.h" "ac_cv_header_ColPack_ColPackHeaders_h" "$ac_includes_default" if test "x$ac_cv_header_ColPack_ColPackHeaders_h" = xyes; then : have_colpackheaders=yes else have_colpackheaders=no fi if test x$have_colpackheaders = xyes ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libColPack in $COLPACK_LIBDIR" >&5 $as_echo_n "checking for libColPack in $COLPACK_LIBDIR... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { ColPack::GraphColoring g ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : have_colpack=yes else have_colpack=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_colpack" >&5 $as_echo "$have_colpack" >&6; } else have_colpack=no fi CPPFLAGS="$save_CPPFLAGS" LIBS="$save_LIBS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test x$have_colpack = xyes; then HAVE_LIBCOLPACK_TRUE= HAVE_LIBCOLPACK_FALSE='#' else HAVE_LIBCOLPACK_TRUE='#' HAVE_LIBCOLPACK_FALSE= fi if test x$have_colpack = xyes; then sparse=yes echo "will build sparse drivers as linking with -lColPack succeeded" fi if test x${sparse} = xyes; then SPARSE_TRUE= SPARSE_FALSE='#' else SPARSE_TRUE='#' SPARSE_FALSE= fi if test x$sparse = xyes ; then $as_echo "#define SPARSE 1" >>confdefs.h fi if test x$sparse = xyes && test x$have_colpack = xyes; then $as_echo "#define HAVE_LIBCOLPACK 1" >>confdefs.h else COLPACK_CFLAGS="" COLPACK_LIBS="" fi # ADOL-C Examples { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build documented examples" >&5 $as_echo_n "checking whether to build documented examples... " >&6; } # Check whether --enable-docexa was given. if test "${enable_docexa+set}" = set; then : enableval=$enable_docexa; docexa=$enableval { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else docexa="no" { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test x${docexa} = xyes; then DOCEXA_TRUE= DOCEXA_FALSE='#' else DOCEXA_TRUE='#' DOCEXA_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build additional examples" >&5 $as_echo_n "checking whether to build additional examples... " >&6; } # Check whether --enable-addexa was given. if test "${enable_addexa+set}" = set; then : enableval=$enable_addexa; addexa=$enableval { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else addexa="no" { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test x${addexa} = xyes; then ADDEXA_TRUE= ADDEXA_FALSE='#' else ADDEXA_TRUE='#' ADDEXA_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build parallel example" >&5 $as_echo_n "checking whether to build parallel example... " >&6; } # Check whether --enable-parexa was given. if test "${enable_parexa+set}" = set; then : enableval=$enable_parexa; parexa=$enableval { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else parexa="no" { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test x${parexa} = xyes; then PAREXA_TRUE= PAREXA_FALSE='#' else PAREXA_TRUE='#' PAREXA_FALSE= fi # ADOL-C Compilation flags { $as_echo "$as_me:${as_lineno-$LINENO}: checking which CFLAGS to use" >&5 $as_echo_n "checking which CFLAGS to use... " >&6; } # Check whether --with-cflags was given. if test "${with_cflags+set}" = set; then : withval=$with_cflags; ac_adolc_cflags="$withval" if test x${adolc_debug} == xyes || test x${adolc_harddebug} == xyes ; then ac_adolc_cflags="$ac_adolc_cflags -g -O0" fi ac_adolc_cflags="$ac_adolc_cflags $ac_adolc_openmpflag" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_adolc_cflags" >&5 $as_echo "$ac_adolc_cflags" >&6; } else if test "$ac_shell_cflags" = "not_set"; then ac_adolc_cflags="-O2" if test x${adolc_debug} == xyes || test x${adolc_harddebug} == xyes ; then ac_adolc_cflags="-g -O3 -Wall -ansi" fi else ac_adolc_cflags="$CFLAGS" fi ac_adolc_cflags="$ac_adolc_cflags $ac_adolc_openmpflag" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_adolc_cflags" >&5 $as_echo "$ac_adolc_cflags" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking which CXXFLAGS to use" >&5 $as_echo_n "checking which CXXFLAGS to use... " >&6; } # Check whether --with-cxxflags was given. if test "${with_cxxflags+set}" = set; then : withval=$with_cxxflags; ac_adolc_cxxflags="$withval" if test x${adolc_debug} == xyes || test x${adolc_harddebug} == xyes ; then ac_adolc_cxxflags="$ac_adolc_cxxflags -g -O0" fi ac_adolc_cxxflags="$ac_adolc_cxxflags $ac_adolc_openmpflag" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_adolc_cxxflags" >&5 $as_echo "$ac_adolc_cxxflags" >&6; } else if test "$ac_shell_cxxflags" = "not_set"; then ac_adolc_cxxflags="-O2" if test x${adolc_debug} == xyes || test x${adolc_harddebug} == xyes ; then ac_adolc_cxxflags="-g -O0 -Wall" fi else ac_adolc_cxxflags="$CXXFLAGS" fi ac_adolc_cxxflags="$ac_adolc_cxxflags $ac_adolc_openmpflag" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_adolc_cxxflags" >&5 $as_echo "$ac_adolc_cxxflags" >&6; } fi ########################################################################### # COIN_PATCH_LIBTOOL_CYGWIN # ########################################################################### # Patches to libtool for cygwin. Lots for cl, a few for GCC. # For cl: # - cygpath is not correctly quoted in fix_srcfile_path # - paths generated for .lib files is not run through cygpath -w # # REQUIRED FOR COMPILATION WITH CYGWIN !!! # # COIN_PATCH_LIBTOOL_CYGWIN # output ac_config_files="$ac_config_files Makefile ADOL-C/Makefile ADOL-C/include/Makefile ADOL-C/include/adolc/Makefile ADOL-C/include/adolc/adolc_settings.h ADOL-C/include/adolc/drivers/Makefile ADOL-C/include/adolc/sparse/Makefile ADOL-C/include/adolc/tapedoc/Makefile ADOL-C/src/Makefile ADOL-C/src/drivers/Makefile ADOL-C/src/sparse/Makefile ADOL-C/src/tapedoc/Makefile ADOL-C/doc/version.tex ADOL-C/examples/Makefile ADOL-C/examples/additional_examples/Makefile ADOL-C/examples/additional_examples/clock/Makefile ADOL-C/examples/additional_examples/checkpointing/Makefile ADOL-C/examples/additional_examples/ext_diff_func/Makefile ADOL-C/examples/additional_examples/fixpoint_exam/Makefile ADOL-C/examples/additional_examples/hessmat/Makefile ADOL-C/examples/additional_examples/lufact/Makefile ADOL-C/examples/additional_examples/openmp_exam/Makefile ADOL-C/examples/additional_examples/scal/Makefile ADOL-C/examples/additional_examples/speelpenning/Makefile ADOL-C/examples/additional_examples/taylor/Makefile ADOL-C/examples/additional_examples/detexam/Makefile ADOL-C/examples/additional_examples/helm/Makefile ADOL-C/examples/additional_examples/lighthouse/Makefile ADOL-C/examples/additional_examples/ode/Makefile ADOL-C/examples/additional_examples/sparse/Makefile ADOL-C/examples/additional_examples/tapesave/Makefile ADOL-C/examples/additional_examples/pow/Makefile ADOL-C/examples/additional_examples/timing/Makefile ADOL-C/test/Makefile MSVisualStudio/v10/sparse/config.h MSVisualStudio/v10/nosparse/config.h MSVisualStudio/v10/x64/sparse/config.h MSVisualStudio/v10/x64/nosparse/config.h adolc.spec" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_LIBCOLPACK_TRUE}" && test -z "${HAVE_LIBCOLPACK_FALSE}"; then as_fn_error $? "conditional \"HAVE_LIBCOLPACK\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${SPARSE_TRUE}" && test -z "${SPARSE_FALSE}"; then as_fn_error $? "conditional \"SPARSE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${DOCEXA_TRUE}" && test -z "${DOCEXA_FALSE}"; then as_fn_error $? "conditional \"DOCEXA\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ADDEXA_TRUE}" && test -z "${ADDEXA_FALSE}"; then as_fn_error $? "conditional \"ADDEXA\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${PAREXA_TRUE}" && test -z "${PAREXA_FALSE}"; then as_fn_error $? "conditional \"PAREXA\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by adolc $as_me 2.4.1, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ adolc config.status 2.4.1 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' AS='`$ECHO "$AS" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`' predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`' postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`' predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`' postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`' LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`' reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`' reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`' GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`' archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`' module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`' allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`' hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`' hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`' hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`' inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`' link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`' always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`' export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`' exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`' include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`' prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`' postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`' file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`' hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`' predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`' postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`' predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`' postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } # Quote evaled strings. for var in AS \ DLLTOOL \ OBJDUMP \ SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ sharedlib_from_linklib_cmd \ AR \ AR_FLAGS \ archiver_list_spec \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ nm_file_list_spec \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_pic \ lt_prog_compiler_wl \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ MANIFEST_TOOL \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_separator \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ install_override_mode \ finish_eval \ old_striplib \ striplib \ compiler_lib_search_dirs \ predep_objects \ postdep_objects \ predeps \ postdeps \ compiler_lib_search_path \ LD_CXX \ reload_flag_CXX \ compiler_CXX \ lt_prog_compiler_no_builtin_flag_CXX \ lt_prog_compiler_pic_CXX \ lt_prog_compiler_wl_CXX \ lt_prog_compiler_static_CXX \ lt_cv_prog_compiler_c_o_CXX \ export_dynamic_flag_spec_CXX \ whole_archive_flag_spec_CXX \ compiler_needs_object_CXX \ with_gnu_ld_CXX \ allow_undefined_flag_CXX \ no_undefined_flag_CXX \ hardcode_libdir_flag_spec_CXX \ hardcode_libdir_separator_CXX \ exclude_expsyms_CXX \ include_expsyms_CXX \ file_list_spec_CXX \ compiler_lib_search_dirs_CXX \ predep_objects_CXX \ postdep_objects_CXX \ predeps_CXX \ postdeps_CXX \ compiler_lib_search_path_CXX; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ sys_lib_dlsearch_path_spec \ reload_cmds_CXX \ old_archive_cmds_CXX \ old_archive_from_new_cmds_CXX \ old_archive_from_expsyms_cmds_CXX \ archive_cmds_CXX \ archive_expsym_cmds_CXX \ module_cmds_CXX \ module_expsym_cmds_CXX \ export_symbols_cmds_CXX \ prelink_cmds_CXX \ postlink_cmds_CXX; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done ac_aux_dir='$ac_aux_dir' xsi_shell='$xsi_shell' lt_shell_append='$lt_shell_append' # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "ADOL-C/src/config.h") CONFIG_HEADERS="$CONFIG_HEADERS ADOL-C/src/config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "ADOL-C/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/Makefile" ;; "ADOL-C/include/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/include/Makefile" ;; "ADOL-C/include/adolc/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/include/adolc/Makefile" ;; "ADOL-C/include/adolc/adolc_settings.h") CONFIG_FILES="$CONFIG_FILES ADOL-C/include/adolc/adolc_settings.h" ;; "ADOL-C/include/adolc/drivers/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/include/adolc/drivers/Makefile" ;; "ADOL-C/include/adolc/sparse/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/include/adolc/sparse/Makefile" ;; "ADOL-C/include/adolc/tapedoc/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/include/adolc/tapedoc/Makefile" ;; "ADOL-C/src/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/src/Makefile" ;; "ADOL-C/src/drivers/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/src/drivers/Makefile" ;; "ADOL-C/src/sparse/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/src/sparse/Makefile" ;; "ADOL-C/src/tapedoc/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/src/tapedoc/Makefile" ;; "ADOL-C/doc/version.tex") CONFIG_FILES="$CONFIG_FILES ADOL-C/doc/version.tex" ;; "ADOL-C/examples/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/examples/Makefile" ;; "ADOL-C/examples/additional_examples/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/examples/additional_examples/Makefile" ;; "ADOL-C/examples/additional_examples/clock/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/examples/additional_examples/clock/Makefile" ;; "ADOL-C/examples/additional_examples/checkpointing/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/examples/additional_examples/checkpointing/Makefile" ;; "ADOL-C/examples/additional_examples/ext_diff_func/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/examples/additional_examples/ext_diff_func/Makefile" ;; "ADOL-C/examples/additional_examples/fixpoint_exam/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/examples/additional_examples/fixpoint_exam/Makefile" ;; "ADOL-C/examples/additional_examples/hessmat/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/examples/additional_examples/hessmat/Makefile" ;; "ADOL-C/examples/additional_examples/lufact/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/examples/additional_examples/lufact/Makefile" ;; "ADOL-C/examples/additional_examples/openmp_exam/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/examples/additional_examples/openmp_exam/Makefile" ;; "ADOL-C/examples/additional_examples/scal/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/examples/additional_examples/scal/Makefile" ;; "ADOL-C/examples/additional_examples/speelpenning/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/examples/additional_examples/speelpenning/Makefile" ;; "ADOL-C/examples/additional_examples/taylor/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/examples/additional_examples/taylor/Makefile" ;; "ADOL-C/examples/additional_examples/detexam/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/examples/additional_examples/detexam/Makefile" ;; "ADOL-C/examples/additional_examples/helm/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/examples/additional_examples/helm/Makefile" ;; "ADOL-C/examples/additional_examples/lighthouse/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/examples/additional_examples/lighthouse/Makefile" ;; "ADOL-C/examples/additional_examples/ode/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/examples/additional_examples/ode/Makefile" ;; "ADOL-C/examples/additional_examples/sparse/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/examples/additional_examples/sparse/Makefile" ;; "ADOL-C/examples/additional_examples/tapesave/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/examples/additional_examples/tapesave/Makefile" ;; "ADOL-C/examples/additional_examples/pow/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/examples/additional_examples/pow/Makefile" ;; "ADOL-C/examples/additional_examples/timing/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/examples/additional_examples/timing/Makefile" ;; "ADOL-C/test/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/test/Makefile" ;; "MSVisualStudio/v10/sparse/config.h") CONFIG_FILES="$CONFIG_FILES MSVisualStudio/v10/sparse/config.h" ;; "MSVisualStudio/v10/nosparse/config.h") CONFIG_FILES="$CONFIG_FILES MSVisualStudio/v10/nosparse/config.h" ;; "MSVisualStudio/v10/x64/sparse/config.h") CONFIG_FILES="$CONFIG_FILES MSVisualStudio/v10/x64/sparse/config.h" ;; "MSVisualStudio/v10/x64/nosparse/config.h") CONFIG_FILES="$CONFIG_FILES MSVisualStudio/v10/x64/nosparse/config.h" ;; "adolc.spec") CONFIG_FILES="$CONFIG_FILES adolc.spec" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "libtool":C) # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool 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 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # The names of the tagged configurations supported by this script. available_tags="CXX " # ### BEGIN LIBTOOL CONFIG # Assembler program. AS=$lt_AS # DLL creation program. DLLTOOL=$lt_DLLTOOL # Object dumper program. OBJDUMP=$lt_OBJDUMP # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The PATH separator for the build system. PATH_SEPARATOR=$lt_PATH_SEPARATOR # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive. AR_FLAGS=$lt_AR_FLAGS # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and in which our libraries should be installed. lt_sysroot=$lt_sysroot # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects postdep_objects=$lt_postdep_objects predeps=$lt_predeps postdeps=$lt_postdeps # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain="$ac_aux_dir/ltmain.sh" # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) if test x"$xsi_shell" = xyes; then sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ func_dirname ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ } # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_basename ()$/,/^} # func_basename /c\ func_basename ()\ {\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ func_dirname_and_basename ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ func_stripname ()\ {\ \ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ \ # positional parameters, so assign one to ordinary parameter first.\ \ func_stripname_result=${3}\ \ func_stripname_result=${func_stripname_result#"${1}"}\ \ func_stripname_result=${func_stripname_result%"${2}"}\ } # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ func_split_long_opt ()\ {\ \ func_split_long_opt_name=${1%%=*}\ \ func_split_long_opt_arg=${1#*=}\ } # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ func_split_short_opt ()\ {\ \ func_split_short_opt_arg=${1#??}\ \ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ } # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ func_lo2o ()\ {\ \ case ${1} in\ \ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ \ *) func_lo2o_result=${1} ;;\ \ esac\ } # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_xform ()$/,/^} # func_xform /c\ func_xform ()\ {\ func_xform_result=${1%.*}.lo\ } # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_arith ()$/,/^} # func_arith /c\ func_arith ()\ {\ func_arith_result=$(( $* ))\ } # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_len ()$/,/^} # func_len /c\ func_len ()\ {\ func_len_result=${#1}\ } # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$lt_shell_append" = xyes; then sed -e '/^func_append ()$/,/^} # func_append /c\ func_append ()\ {\ eval "${1}+=\\${2}"\ } # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ func_append_quoted ()\ {\ \ func_quote_for_eval "${2}"\ \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ } # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 $as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} fi mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" cat <<_LT_EOF >> "$ofile" # ### BEGIN LIBTOOL TAG CONFIG: CXX # The linker used to build libraries. LD=$lt_LD_CXX # How to create reloadable object files. reload_flag=$lt_reload_flag_CXX reload_cmds=$lt_reload_cmds_CXX # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds_CXX # A language specific compiler. CC=$lt_compiler_CXX # Is the compiler the GNU compiler? with_gcc=$GCC_CXX # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_CXX # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_CXX # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_CXX # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_CXX # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object_CXX # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds_CXX archive_expsym_cmds=$lt_archive_expsym_cmds_CXX # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds_CXX module_expsym_cmds=$lt_module_expsym_cmds_CXX # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld_CXX # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_CXX # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_CXX # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct_CXX # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute_CXX # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L_CXX # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic_CXX # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath_CXX # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_CXX # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols_CXX # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_CXX # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_CXX # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_CXX # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds_CXX # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds_CXX # Specify filename containing input files. file_list_spec=$lt_file_list_spec_CXX # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_CXX # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects_CXX postdep_objects=$lt_postdep_objects_CXX predeps=$lt_predeps_CXX postdeps=$lt_postdeps_CXX # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_CXX # ### END LIBTOOL TAG CONFIG: CXX _LT_EOF ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi #call libtool for cygwin case "$CXX" in cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) { $as_echo "$as_me:${as_lineno-$LINENO}: Applying patches to libtool for cl compiler" >&5 $as_echo "$as_me: Applying patches to libtool for cl compiler" >&6;} sed -e 's|fix_srcfile_path=\"`cygpath -w \"\$srcfile\"`\"|fix_srcfile_path=\"\\\`'"$CYGPATH_W"' \\\"\\$srcfile\\\"\\\`\"|' \ -e 's|fix_srcfile_path=\"\"|fix_srcfile_path=\"\\\`'"$CYGPATH_W"' \\\"\\$srcfile\\\"\\\`\"|' \ -e 's%compile_deplibs=\"\$dir/\$old_library \$compile_deplibs\"%compile_deplibs="'\`"$CYGPATH_W"' \$dir/\$old_library | sed -e '"'"'sY\\\\\\\\Y/Yg'"'"\`' \$compile_deplibs\"'% \ -e 's%compile_deplibs=\"\$dir/\$linklib \$compile_deplibs\"%compile_deplibs="'\`"$CYGPATH_W"' \$dir/\$linklib | sed -e '"'"'sY\\\\\\\\Y/Yg'"'"\`' \$compile_deplibs\"'% \ -e 's%lib /OUT:%lib -OUT:%' \ -e "s%cygpath -w%$CYGPATH_W%" \ -e 's%$AR x \\$f_ex_an_ar_oldlib%bla=\\`lib -nologo -list \\$f_ex_an_ar_oldlib | xargs echo '"$mydos2unix"'\\`; echo \\$bla; for i in \\$bla; do lib -nologo -extract:\\$i \\$f_ex_an_ar_oldlib; done%' \ -e 's/$AR t/lib -nologo -list/' \ -e 's%f_ex_an_ar_oldlib="\($?*1*\)"%f_ex_an_ar_oldlib='\`"$CYGPATH_W"' \1`%' \ -e 's%^archive_cmds=.*%archive_cmds="\\$CC -o \\$lib \\$libobjs \\$compiler_flags \\\\\\`echo \\\\\\"\\$deplibs\\\\\\" | \\$SED -e '"\'"'s/ -lc\\$//'"\'"'\\\\\\` -link -dll~linknames="%' \ -e 's%old_archive_cmds="lib -OUT:\\$oldlib\\$oldobjs\\$old_deplibs"%old_archive_cmds="if test -r \\$oldlib; then bla=\\"\\$oldlib\\"; else bla=; fi; lib -OUT:\\$oldlib \\\\\\$bla\\$oldobjs\\$old_deplibs"%' \ libtool > conftest.bla mv conftest.bla libtool chmod 755 libtool ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: Applying patches to libtool for GNU compiler" >&5 $as_echo "$as_me: Applying patches to libtool for GNU compiler" >&6;} sed -e 's|fix_srcfile_path=\"`cygpath -w \"\$srcfile\"`\"|fix_srcfile_path=\"\\\`'"$CYGPATH_W"' \\\"\\$srcfile\\\"\\\`\"|' \ -e 's|"lib /OUT:\\$oldlib\\$oldobjs\\$old_deplibs"|"\\$AR \\$AR_FLAGS \\$oldlib\\$oldobjs\\$old_deplibs~\\$RANLIB \\$oldlib"|' \ -e 's|libext="lib"|libext="a"|' \ libtool > conftest.bla mv conftest.bla libtool chmod 755 libtool ;; esac warn=false # echo configuration echo \ " ----------------------------------------------------------------------------- Configuration: C compiler: ${CC} C++ compiler: ${CXX} Linker: ${LD} Source code location: `pwd` Install path: ${prefix} CFLAGS: ${ac_adolc_cflags} CXXFLAGS: ${ac_adolc_cxxflags} Use ADOL-C debug mode: ${adolc_debug} Use ADOL-C hard debug mode: ${adolc_harddebug} Zero value in adouble default ctor: ${adolc_stdczero}" if [ "x${ac_adolc_openmpflag}" != "x" ] ; then echo \ " Access thread number via errno: ${adolc_tserrno}" fi echo \ " Use ADOL-C safe extern mode: ${adolc_safe_extern} Build sparse drivers: ${sparse} Build with ColPack: ${have_colpack}" if test x$sparse = xyes && test x$have_colpack = xno; then echo -e \ " \033[1;31mCompressed sparse structures will not be available Only sparsity patterns can be computed\033[0m" warn=true fi echo echo \ " Build documented examples: ${docexa} Build additional examples: ${addexa} See ADOL-C/src/config.h for further configuration information. -----------------------------------------------------------------------------" # check for make install problems resulting from missing write permission pdir=${prefix} writable=true while test "x${pdir}" != "x/" ; do if test -e ${pdir} && test ! -w ${pdir}; then writable=false break elif test ! -e ${pdir} ; then pdir=`dirname ${pdir}` else break fi done if test "x${pdir}" == "x/" ; then writable=false fi if ! ${writable} ; then echo -e \ " \033[1;31mPrefix ${prefix} not writable please run ./configure --prefix=DIR with a writable directory path otherwise administrator privilages will be required to run \`make install'\033[0m" warn=true fi case ${prefix} in ${HOME}|${HOME}/*) if $warn ; then for (( i=5; i>0; i-- )); do echo -ne "\rPlease read the above messages carefully, continuing in ${i} seconds" sleep 1 done echo -e "\rPlease read the above messages carefully " fi echo \ " ***************************************************************************** To successfully compile and run programs using the ADOL-C shared library do the following things: compiling: * add \"-I${prefix}/include\" to your compiler call linking: * add \"-L${prefix}/${_lib} -ladolc\" to your linker call * extend your linker call by \"-Wl,--rpath -Wl,${prefix}/${_lib}\" (if you wish to skip the point \"executing\") executing (do one of the following things): * add ${prefix}/${_lib} to your LD_LIBRARY_PATH variable * ask your system administrator for adding ${prefix}/${_lib} to the global file containing library search paths (/etc/ld.so.conf) (or use the static library by replacing \"-L${prefix}/${_lib} -ladolc\" with \"${prefix}/${_lib}/libadolc.a\" when linking) See README for instructions on how to change to a nonlocal installation! ***************************************************************************** " ;; esac ADOL-C-2.4.1/update_versions.sh0000755000076600007660000000035512062616431014650 0ustar coincoin#!/bin/bash autoreconf -fi ./configure pushd ADOL-C/doc pdflatex adolc-manual.tex pdflatex adolc-manual.tex pdflatex adolc-manual.tex latex adolc-manual.tex latex adolc-manual.tex latex adolc-manual.tex dvips adolc-manual.dvi popd